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

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

View File

@@ -0,0 +1,131 @@
<?php
namespace App\Http\Controllers\Cadastro\SujeitoAtencao;
use App\Http\Controllers\Controller;
use App\Http\Requests\Cadastro\SujeitoAtencao\AlergiaRequest;
use App\Models\Cadastro\SujeitoAtencao\Alergia;
use App\Models\Cadastro\SujeitoAtencao\AlergiaTipo;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
class AlergiaController extends Controller
{
protected $modulo = 'cadastro';
protected $funcionalidade = 'alergia';
public function index()
{
$this->auth(__FUNCTION__);
$alergias = $this->get(Alergia::class)->orderBy('agente_substancia_especifica')->get();
return response()->json($alergias, Response::HTTP_OK);
}
public function create()
{
$this->auth(__FUNCTION__);
return response()->json(
[
'form' => $this->getFormData(),
],
Response::HTTP_OK
);
}
public function store(AlergiaRequest $request)
{
$this->auth(__FUNCTION__);
$alergia = Alergia::create($this->prepareData($request->all()));
return response()->json($alergia->fresh(), Response::HTTP_CREATED);
}
public function show($id)
{
$this->auth(__FUNCTION__);
return response()->json($this->get(Alergia::class, $id), Response::HTTP_OK);
}
public function edit($id)
{
$this->auth(__FUNCTION__);
$alergia = Alergia::findOrFail($id);
return response()->json(
[
'form' => $this->getFormData(),
'model' => [
'tipo_id' => $alergia->tipo_id,
'agente_substancia_especifica' => $alergia->agente_substancia_especifica,
],
],
Response::HTTP_OK
);
}
private function getFormData()
{
return [
'tipos' => AlergiaTipo::orderBy('descricao')->get(),
];
}
public function update(AlergiaRequest $request, $id)
{
$this->auth(__FUNCTION__);
$alergia = tap(Alergia::findOrFail($id))->update($this->prepareData($request->all()));
return response()->json($alergia->fresh(), Response::HTTP_OK);
}
public function prepareData($params)
{
return [
'tipo_id' => $params['tipo_id'],
'agente_substancia_especifica' => mb_strtoupper($params['agente_substancia_especifica']),
];
}
public function destroy($id)
{
$this->auth(__FUNCTION__);
Alergia::findOrFail($id)->delete();
return response()->json(null, Response::HTTP_NO_CONTENT);
}
public function datatable()
{
$status = DB::table('cadastro_alergia')
->join('cadastro_alergia_tipo', 'cadastro_alergia_tipo.id', 'cadastro_alergia.tipo_id')
->select(
'cadastro_alergia.id',
'cadastro_alergia.agente_substancia_especifica',
'cadastro_alergia.tipo_id',
'cadastro_alergia_tipo.descricao AS tipo_descricao',
)
->whereNull('cadastro_alergia.deleted_at');
return datatables()->of($status)->skipTotalRecords()->make(true);
}
public function autocomplete()
{
$alergias = Alergia::with('tipo');
if (is_numeric(request()->tipo_id)) {
$alergias->where('tipo_id', request()->tipo_id);
}
return datatables()->of($alergias)->make(true);
}
}

View File

@@ -0,0 +1,84 @@
<?php
namespace App\Http\Controllers\Cadastro\SujeitoAtencao;
use App\Http\Controllers\Controller;
use App\Models\Cadastro\SujeitoAtencao\Cidadao;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Services\Cadastro\SujeitoAtencao\CidadaoService;
use App\Utils\DataUtil;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class CidadaoController extends Controller
{
protected $modulo = 'cadastro';
protected $funcionalidade = 'cidadao';
public function index()
{
$cidadaos = collect();
$pacientes = collect();
$usuarios = collect();
if (DataUtil::isStringTrue(request()->query('with_cidadaos'))) {
$cidadaos = Cidadao::where($this->getWhereFromQueryString(['cpf', 'dnv', 'nome', 'data_nascimento', 'nome_mae']))
->when(DataUtil::isStringTrue(request()->query('with_pacientes')), fn ($q) => $q->whereDoesntHave('paciente'))
->when(DataUtil::isStringTrue(request()->query('with_usuarios')), fn ($q) => $q->whereDoesntHave('usuario'))
->get();
}
if (DataUtil::isStringTrue(request()->query('with_pacientes'))) {
$pacientes = Paciente::whereHas('cidadao', function ($query) {
$query->where($this->getWhereFromQueryString(['cpf', 'dnv', 'nome', 'data_nascimento', 'nome_mae']));
})->get();
}
if (DataUtil::isStringTrue(request()->query('with_usuarios'))) {
$usuarios = Usuario::whereHas('cidadao', function ($query) {
$query->where($this->getWhereFromQueryString(['cpf', 'dnv', 'nome', 'data_nascimento', 'nome_mae']));
})->get();
}
$found = $cidadaos->isNotEmpty() || $pacientes->isNotEmpty() || $usuarios->isNotEmpty();
return response()->json(compact('found', 'cidadaos', 'pacientes', 'usuarios'), Response::HTTP_OK);
}
public function create()
{
return response()->json(
[
'form' => CidadaoService::create()['form'],
],
Response::HTTP_OK
);
}
public function show(int $id)
{
return response()->json($this->get(Cidadao::class, $id), Response::HTTP_OK);
}
public function edit($id)
{
return response()->json(
[
'form' => CidadaoService::edit($id)['form'],
'model' => CidadaoService::edit($id)['model'],
],
Response::HTTP_OK
);
}
public function update(Request $request)
{
return response()->json(CidadaoService::update($request), Response::HTTP_OK);
}
}

View File

@@ -0,0 +1,94 @@
<?php
namespace App\Http\Controllers\Cadastro\SujeitoAtencao;
use App\Http\Controllers\Controller;
use App\Http\Requests\Cadastro\SujeitoAtencao\ConvenioMedicoRequest;
use App\Models\Cadastro\SujeitoAtencao\ConvenioMedico;
use Illuminate\Http\Response;
class ConvenioMedicoController extends Controller
{
protected $modulo = 'cadastro';
protected $funcionalidade = 'convenio-medico';
public function datatable()
{
$conveniosMedico = ConvenioMedico::with([]);
return datatables()->of($conveniosMedico)->skipTotalRecords()->toJson();
}
public function index()
{
$this->auth(__FUNCTION__);
$conveniosMedico = $this->get(ConvenioMedico::class)->orderBy('nome')->get();
return response()->json($conveniosMedico, Response::HTTP_OK);
}
public function store(ConvenioMedicoRequest $request)
{
$this->auth(__FUNCTION__);
$convenioMedico = ConvenioMedico::create($this->getParams($request));
return response()->json($convenioMedico, Response::HTTP_CREATED);
}
public function show($id)
{
$this->auth(__FUNCTION__);
return response()->json($this->get(ConvenioMedico::class, $id), Response::HTTP_OK);
}
public function edit($id)
{
$this->auth(__FUNCTION__);
$convenioMedico = ConvenioMedico::findOrFail($id);
return response()->json(
[
'model' => [
'nome' => $convenioMedico->nome,
],
],
Response::HTTP_OK
);
}
public function update(ConvenioMedicoRequest $request, $id)
{
$this->auth(__FUNCTION__);
$convenioMedico = tap(ConvenioMedico::findOrFail($id))->update($this->getParams($request));
return response()->json($convenioMedico->fresh(), Response::HTTP_OK);
}
private function getParams($request)
{
return [
'nome' => mb_strtoupper($request->nome)
];
}
public function destroy($id)
{
$this->auth(__FUNCTION__);
ConvenioMedico::findOrFail($id)->delete();
return response()->json(null, Response::HTTP_NO_CONTENT);
}
public function autocomplete()
{
$conveniosMedico = ConvenioMedico::with([]);
return datatables()->of($conveniosMedico)->toJson();
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,568 @@
<?php
namespace App\Http\Controllers\Cadastro\SujeitoAtencao;
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
use App\Http\Controllers\Controller;
use App\Http\Requests\Cadastro\SujeitoAtencao\UsuarioRequest;
use App\Mail\UsuarioLogin;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Cadastro\Parametrizacao\ParametrizacaoPermissaoOcupacao;
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
use App\Models\Cadastro\SujeitoAtencao\Sexo;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Models\Cadastro\SujeitoAtencao\UsuarioAssinatura;
use App\Models\Cadastro\SujeitoAtencao\UsuarioHistoricoAcesso;
use App\Models\Cadastro\SujeitoAtencao\UsuarioRegistroTipo;
use App\Models\Cns\TermoInvalido;
use App\Models\Intranet\Estado;
use App\Services\Cadastro\SujeitoAtencao\CidadaoService;
use App\Services\Cadastro\SujeitoAtencao\UsuarioService;
use App\Services\Integracao\IntegracaoCidadaoService;
use App\Utils\DataUtil;
use App\Utils\Email;
use App\Utils\Senha;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
class UsuarioController extends Controller
{
protected $modulo = 'cadastro';
protected $funcionalidade = 'usuario';
public static function datatable()
{
$showNaoRegularizados = DataUtil::isStringBoolean(request()->get('showNaoRegularizados'))
&& DataUtil::getBooleanValueFromStringBoolean(request()->get('showNaoRegularizados'));
$usuarios = DB::table('cadastro_usuario')
->select(
'cadastro_usuario.id',
'cadastro_cidadao.nome',
'cadastro_cidadao.cpf',
'cadastro_cidadao.cns',
'cadastro_usuario.bloqueado',
DB::raw('
DATE_FORMAT(cadastro_cidadao.data_nascimento, "%d/%m/%Y") as data_nascimento
'),
'cadastro_usuario.email',
DB::raw("
(
SELECT TRUE
FROM cadastro_obito
WHERE cadastro_obito.cidadao_id = cadastro_cidadao.id
AND cadastro_obito.deleted_at IS NULL
LIMIT 1
) AS obito
")
)
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id')
->whereNull('cadastro_usuario.deleted_at')
->when($showNaoRegularizados, function ($query) {
$query->whereNull('cadastro_cidadao.cns');
})
->when(!$showNaoRegularizados, function ($query) {
$query->whereNotNull('cadastro_cidadao.cns');
});
return datatables()
->of($usuarios)
->filterColumn('cadastro_cidadao.cpf', function ($query, $keyword) {
$query
->whereRaw("cadastro_cidadao.cpf like ?", ["%{$keyword}%"])
->orWhereRaw(
"CONCAT(
SUBSTR(cadastro_cidadao.cpf,1,3),
'.',
SUBSTR(cadastro_cidadao.cpf,4,3),
'.',
SUBSTR(cadastro_cidadao.cpf,7,3),
'-',
SUBSTR(cadastro_cidadao.cpf,10,2)
) like ?",
["%{$keyword}%"]
);
})
->skipTotalRecords()
->toJson();
}
public function index()
{
$this->auth(__FUNCTION__);
$usuarios = $this->get(Usuario::class)->get();
return response()->json($usuarios, Response::HTTP_OK);
}
public function create()
{
$this->auth(__FUNCTION__);
return response()->json(
[
'form' => $this->getFormData(),
],
Response::HTTP_OK
);
}
public function store(UsuarioRequest $request)
{
$this->auth(__FUNCTION__);
$usuario = $this->save($request->all());
return response()->json($usuario->fresh(), Response::HTTP_CREATED);
}
public function assinatura(Request $request)
{
return response()->json(UsuarioService::assinatura($request), Response::HTTP_CREATED);
}
public function destroyAssinatura($id)
{
return response()->json(UsuarioService::destroyAssinatura($id), Response::HTTP_NO_CONTENT);
}
public function loadAssinatura($id)
{
return response()->json(
[
'form' => [],
'model' => [
'assinatura' => UsuarioAssinatura::where('usuario_id', $id)
->get()
->map(fn ($unidade) => [
'id' => $unidade->id ?? null,
'arquivo' => $unidade->arquivo ?? null,
])
->values(),
],
],
Response::HTTP_OK
);
}
public function downloadAssinatura($id)
{
$response = UsuarioService::downloadAssinatura($id);
$headers = [
'Content-Type' => 'application/png',
];
return response()->download($response['arquivo'], $response['nome'], $headers);
}
public function show($id)
{
$this->auth(__FUNCTION__);
$usuario = $this->get(Usuario::class, $id);
if (request()->query('with') && $this->hasRelationOnWith('lotacoes.infraestrutura.unidade')) {
$usuario->lotacoes->each(fn ($l) => $l->infraestrutura->makeVisible('unidade'));
}
return response()->json($usuario, Response::HTTP_OK);
}
private function hasRelationOnWith($relation)
{
$with = request()->query('with');
return (is_array($with) && in_array($relation, $with))
|| (is_string($with) && $with === $relation);
}
public function edit($id)
{
$this->auth(__FUNCTION__);
$usuario = Usuario::findOrFail($id);
return response()->json(
[
'form' => array_merge(
['cidadao' => CidadaoService::edit($usuario->cidadao_id)['form']],
$this->getFormData()
),
'model' => [
'documentos' => [
'conselho_profissional' => [
'registro_tipo_id' => $usuario->registro_tipo_id,
'registro_tipo_outro' => $usuario->registro_tipo_outro,
'registro_numero' => $usuario->registro_numero,
'registro_estado_id' => $usuario->registro_estado_id,
],
],
'lotacoes' => $usuario->lotacoes->map(fn ($lotacao) => [
'id' => $lotacao->id,
'unidade_id' => $lotacao->infraestrutura->unidade_id,
'unidade_nome' => $lotacao->infraestrutura->unidade->nome_fantasia,
'infraestrutura_id' => $lotacao->infraestrutura_id,
'infraestrutura_nome' => $lotacao->infraestrutura->nome,
'ocupacao' => $lotacao->ocupacao,
'realiza_atendimento' => $lotacao->realiza_atendimento,
'disabled' => !$lotacao->is_allowed_to_delete,
'principal' => $lotacao->principal,
'ativo' => $lotacao->ativo,
'centros_custo' => $lotacao->centrosCusto->map(fn ($centroCusto) => [
'id' => $centroCusto->id,
'nome' => $centroCusto->setor->nome,
]),
]),
'email' => $usuario->email,
'usuario' => $usuario->usuario,
'cidadao' => array_merge([
'id' => $usuario->cidadao_id,
], CidadaoService::edit($usuario->cidadao_id)['model']),
],
],
Response::HTTP_OK
);
}
private function getFormData()
{
return [
'termos_invalidos' => TermoInvalido::all()->map(fn ($termo) => $termo->descricao),
'data_atual' => Carbon::now()->format('d/m/Y'),
'is_permissao_endereco' => true,
'documentos' => [
'conselho_profissional' => [
'tipos_registro' => UsuarioRegistroTipo::orderBy('descricao')->get()->map(fn ($tipo) => [
'id' => $tipo->id,
'descricao' => $tipo->sigla ? "{$tipo->sigla} - {$tipo->descricao}" : $tipo->descricao
]),
'estados' => Estado::orderBy('nome')->get()->map(fn ($estado) => [
'id' => $estado->id,
'uf' => $estado->uf
]),
],
],
'lotacao' => [
'unidades' => Unidade::orderBy('nome_fantasia')->get()->map(fn ($unidade) => [
'id' => $unidade->id,
'nome_fantasia' => $unidade->nome_fantasia,
'infraestruturas' => $unidade->infraestruturas->sortBy('nome')->map(fn ($infraestrutura) => [
'id' => $infraestrutura->id,
'nome' => $infraestrutura->nome,
])->values()
]),
],
'sexos' => Sexo::orderBy('descricao')->get()->map(fn ($sexo) => [
'id' => $sexo->id,
'descricao' => $sexo->descricao
]),
];
}
public function update(UsuarioRequest $request, $id)
{
$this->auth(__FUNCTION__);
$usuario = $this->save($request->all(), (Usuario::findOrFail($id))->id);
return response()->json($usuario->fresh(), Response::HTTP_OK);
}
private function save($params, $id = null)
{
$usuario = null;
DB::transaction(function () use (&$usuario, $params, $id) {
$cidadao = CidadaoService::save($params['cidadao']);
$data = $this->getPreparedData($params, $id);
$data['cidadao_id'] = $cidadao->id;
$usuario = Usuario::updateOrCreate(
['id' => $id],
$data
);
$this->deleteLotacoesNotPresent($usuario, $data['lotacoes']);
$this->saveLotacoes($usuario, $data['lotacoes']);
if ($usuario !== null && $id === null && !empty($data['email'])) {
$object = new \stdClass();
$object->user = $usuario->usuario;
$object->password = $data['senha'];
$object->cliente = request()->header('customer');
Email::enviar($data['email'], new UsuarioLogin($object));
}
if (!$params['cidadao']['cadastro_simplificado']) {
IntegracaoCidadaoService::integrar($cidadao->id, 'usuario');
IntegracaoCidadaoService::integrar($cidadao->id, 'paciente');
}
});
return $usuario;
}
private function getPreparedData($params, $id = null)
{
$partName = Str::substr(preg_replace('/\s+/', '', $params['cidadao']['nome']), -3);
$partTimestamp = Str::substr(Carbon::now()->timestamp, -6);
$usuario = $params['cidadao']['cadastro_simplificado']
? "{$partName}{$partTimestamp}"
: $params['usuario'];
$data = [
'registro_tipo_id' => $params['documentos']['conselho_profissional']['registro_tipo_id'] ?? null,
'registro_tipo_outro' => $params['documentos']['conselho_profissional']['registro_tipo_outro'] ?? null,
'registro_numero' => $params['documentos']['conselho_profissional']['registro_numero'] ?? null,
'registro_estado_id' => $params['documentos']['conselho_profissional']['registro_estado_id'] ?? null,
'email' => $params['email'] ?? null,
'usuario' => $usuario,
'lotacoes' => $params['lotacoes'] ?? [],
];
if ($id === null) {
$data['senha'] = Senha::gerar();
$data['troca_senha'] = true;
}
if ($data['registro_tipo_id'] !== TipoRegistroUsuario::OUTRO) {
$data['registro_tipo_outro'] = null;
}
if (is_string($data['registro_tipo_outro'])) {
$data['registro_tipo_outro'] = mb_strtoupper($data['registro_tipo_outro']);
}
if (is_string($data['registro_numero'])) {
$data['registro_numero'] = mb_strtoupper($data['registro_numero']);
}
return $data;
}
private function deleteLotacoesNotPresent($usuario, $lotacoes)
{
$ids = collect($lotacoes)->pluck('id')->filter(fn ($id) => !is_null($id))->toArray();
Lotacao::destroy($usuario->lotacoes()->whereNotIn('id', $ids)->pluck('id'));
}
private function saveLotacoes($usuario, $lotacoes)
{
foreach ($lotacoes as $lotacaoData) {
$lotacao = $usuario->lotacoes()->updateOrCreate(
['id' => $lotacaoData['id'] ?? null],
$lotacaoData
);
$lotacao->centrosCusto()->sync($lotacaoData['centros_custo'] ?? []);
}
}
public function destroy($id)
{
$this->auth(__FUNCTION__);
Usuario::findOrFail($id)->delete();
return response()->json(null, Response::HTTP_NO_CONTENT);
}
public function gerarSenha($id)
{
$this->auth(__FUNCTION__);
$usuario = Usuario::findOrFail($id);
if ($usuario) {
$senha = Senha::gerar();
$params = [
'senha' => $senha,
'troca_senha' => true,
];
$usuario->update($params);
$object = new \stdClass();
$object->user = $usuario->usuario;
$object->password = $senha;
$object->cliente = request()->header('customer');
Email::enviar($usuario->email, new UsuarioLogin($object));
}
return response()->json($usuario->fresh(), Response::HTTP_OK);
}
public function bloquear($id)
{
$this->auth(__FUNCTION__);
$usuario = Usuario::findOrFail($id);
$usuario->update(['bloqueado' => true]);
return response()->json($usuario->fresh(), Response::HTTP_OK);
}
public function desbloquear($id)
{
$this->auth(__FUNCTION__);
$usuario = Usuario::findOrFail($id);
$usuario->update(['bloqueado' => false]);
UsuarioHistoricoAcesso::where('usuario_id', $usuario->id)->update(['ativo' => false]);
return response()->json($usuario->fresh(), Response::HTTP_OK);
}
public function autocomplete()
{
return datatables()->of(UsuarioService::autocomplete())->toJson();
}
public function lotacoes($id, Request $request)
{
if(!$id) {
return null;
}
$data = Lotacao::where('usuario_id', $id)
->get()
->map(fn ($lotacao) => [
'id' => $lotacao->id,
'unidade' => $lotacao->infraestrutura->nome,
'codigo' => $lotacao->ocupacao->codigo,
'ocupacao' => $lotacao->ocupacao->nome,
]);
return response()->json($data, Response::HTTP_OK);
}
public static function getEquipes(){
return DB::table('atencao_basica_parametrizacao_equipe_usuario')
->select([
'atencao_basica_parametrizacao_equipe.id AS id',
DB::raw("
CONCAT(
CASE
WHEN atencao_basica_parametrizacao_area.numero_ine IS NOT NULL THEN CONCAT('INE: ', atencao_basica_parametrizacao_area.numero_ine)
ELSE ''
END,
CASE
WHEN atencao_basica_parametrizacao_area.descricao IS NOT NULL AND atencao_basica_parametrizacao_area.numero_ine IS NOT NULL THEN ' - Área: '
WHEN atencao_basica_parametrizacao_area.descricao IS NOT NULL THEN 'Área: '
ELSE ''
END,
COALESCE(atencao_basica_parametrizacao_area.descricao, ''),
CASE
WHEN atencao_basica_parametrizacao_microarea.descricao IS NOT NULL AND (atencao_basica_parametrizacao_area.numero_ine IS NOT NULL OR atencao_basica_parametrizacao_area.descricao IS NOT NULL) THEN ' - Microárea: '
WHEN atencao_basica_parametrizacao_microarea.descricao IS NOT NULL THEN 'Microárea: '
ELSE ''
END,
COALESCE(atencao_basica_parametrizacao_microarea.descricao, '')
) AS descricao
"),
'atencao_basica_parametrizacao_microarea.id as microarea_id'
])
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->leftJoin('atencao_basica_parametrizacao_area', 'atencao_basica_parametrizacao_area.id', 'atencao_basica_parametrizacao_equipe.area_id')
->leftJoin('atencao_basica_parametrizacao_microarea', 'atencao_basica_parametrizacao_microarea.id', 'atencao_basica_parametrizacao_equipe.microarea_id')
->where('atencao_basica_parametrizacao_equipe_usuario.ativo', true)
->when(request()->usuario_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe_usuario.usuario_id', $id))
->when(request()->infraestrutura_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe.infraestrutura_id', $id))
->get();
}
public static function getUnidades(){
return DB::table('atencao_basica_parametrizacao_equipe_usuario')
->select([
'cadastro_unidade.id AS id',
DB::raw("CONCAT(TRIM(cadastro_unidade.cnes), ' - ', cadastro_unidade.nome_fantasia ) AS nome_fantasia"),
])
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->where('atencao_basica_parametrizacao_equipe_usuario.ativo', true)
->when(request()->usuario_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe_usuario.usuario_id', $id))
->distinct()
->orderBy('cadastro_unidade.cnes')
->get();
}
public static function getInfraestruturas(){
return DB::table('atencao_basica_parametrizacao_equipe_usuario')
->select([
'cadastro_infraestrutura.id AS id',
DB::raw('COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia) AS nome'),
])
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'atencao_basica_parametrizacao_equipe.infraestrutura_id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->where('atencao_basica_parametrizacao_equipe_usuario.ativo', true)
->when(request()->usuario_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe_usuario.usuario_id', $id))
->when(request()->unidade_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe.unidade_id', $id))
->distinct()
->orderBy('nome')
->get();
}
public static function getOcupacoes()
{
$usuario = Usuario::findOrFail(request()->usuario_id);
$ocupacaoSelecionada = request()->ocupacao_id;
return $usuario->lotacoes
->filter(function ($lotacao) use ($ocupacaoSelecionada) {
return $lotacao->infraestrutura->id == request()->infraestrutura_id
&& (
$lotacao->ativo
|| $lotacao->ocupacao_id == $ocupacaoSelecionada
);
})
->pluck('ocupacao');
}
public function getCentrosCusto()
{
return DB::table('cadastro_centro_custo')
->select([
'cadastro_centro_custo.id',
'cadastro_setor.nome',
])
->join('cadastro_setor', 'cadastro_setor.id', '=', 'cadastro_centro_custo.setor_id')
->where('infraestrutura_id', request()->infraestrutura_id)
->whereNull('cadastro_centro_custo.deleted_at')
->orderBy('cadastro_setor.nome')
->get();
}
}

View File

@@ -0,0 +1,41 @@
<?php
namespace App\Http\Controllers\Cadastro\SujeitoAtencao;
use App\Http\Controllers\Controller;
use App\Http\Requests\Cadastro\SujeitoAtencao\UsuarioPerfilRequest;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use Hash;
use Illuminate\Http\Response;
class UsuarioPerfilController extends Controller
{
public function show($id)
{
return response()->json($this->get(Usuario::class, $id), Response::HTTP_OK);
}
public function edit($id)
{
return response()->json(['model' => Usuario::findOrFail($id)], Response::HTTP_OK);
}
public function update(UsuarioPerfilRequest $request, $id)
{
$usuario = Usuario::findOrFail($id);
if ($request->senha && Hash::check($request->senha, $usuario->senha) === false) {
return response()->json(['error' => 'A senha digita esta incorreta.'], Response::HTTP_UNAUTHORIZED);
}
unset($request['senha']);
if($request->nova_senha) {
$request['senha'] = $request->nova_senha;
}
$usuario->update($request->all());
return response()->json($usuario->fresh(), Response::HTTP_OK);
}
}