Files
rkm-conectasus-ci-sandbox/api/app/Services/Cadastro/SujeitoAtencao/UsuarioService.php
Antonio Lopes dos Santos afec302c3e
All checks were successful
build-api-image / build (push) Successful in 51s
init commit
2026-08-04 16:52:02 -03:00

180 lines
8.2 KiB
PHP

<?php
namespace App\Services\Cadastro\SujeitoAtencao;
use App\Enums\AtencaoBasica\Parametrizacao\Permissao;
use App\Enums\Sigtap\Procedimento as ProcedimentoEnum;
use App\Models\Cadastro\SujeitoAtencao\UsuarioAssinatura;
use App\Services\Service;
use App\Utils\DataUtil;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
class UsuarioService extends Service
{
public static function autocomplete()
{
$usuarios = DB::table('cadastro_usuario')
->select([
'cadastro_usuario.id',
'cadastro_cidadao.nome AS cidadao_nome',
'cadastro_cidadao.cns AS cidadao_cns',
'cadastro_cidadao.cpf AS cidadao_cpf',
'cadastro_usuario.registro_tipo_id',
'cadastro_usuario.registro_numero',
])
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id')
->whereNull('cadastro_usuario.deleted_at')
->when(request()->query('infraestrutura_id'), function ($query) {
$query->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_lotacao')
->whereColumn('cadastro_lotacao.usuario_id', 'cadastro_usuario.id')
->where('infraestrutura_id', request()->query('infraestrutura_id'));
});
})
->when(request()->query('unidade_id'), function ($query) {
$query->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_lotacao')
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_lotacao.infraestrutura_id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id')
->whereColumn('cadastro_lotacao.usuario_id', 'cadastro_usuario.id')
->where('unidade_id', request()->query('unidade_id'));
});
})
->when(request()->query('registro_estado_id'), function ($query) {
$query->where('cadastro_usuario.registro_estado_id', request()->query('registro_estado_id'));
});
if (DataUtil::isStringBoolean(request()->query('aplicador'))) {
$usuarios->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('imunizacao_parametrizacao_ocupacao')
->join('cadastro_lotacao', 'cadastro_lotacao.ocupacao_id', 'imunizacao_parametrizacao_ocupacao.ocupacao_id')
->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.infraestrutura_id', 'cadastro_lotacao.infraestrutura_id')
->whereColumn('cadastro_lotacao.usuario_id', 'cadastro_usuario.id')
->where('imunizacao_sala_vacinacao.id', request()->get('sala_vacinacao_id'))
->when(is_array(request()->not_in), fn ($q) => $q->whereNotIn('cadastro_cidadao.cns', request()->not_in));;
});
}
if (DataUtil::isStringBoolean(request()->query('with_atencao_basica_equipe'))) {
$usuarios->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('atencao_basica_parametrizacao_equipe_usuario')
->whereColumn('atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id');
});
}
if (is_numeric(request()->query('with_atencao_basica_permissao'))) {
$usuarios->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('atencao_basica_parametrizacao_outros_permissao_ocupacao')
->join('cadastro_lotacao', 'cadastro_lotacao.usuario_id', 'cadastro_usuario.id')
->join('sigtap.ocupacao', 'sigtap.ocupacao.id', 'cadastro_lotacao.ocupacao_id')
->where('atencao_basica_parametrizacao_outros_permissao_ocupacao.permissao_id', request()->query('with_atencao_basica_permissao'))
->whereColumn('atencao_basica_parametrizacao_outros_permissao_ocupacao.ocupacao', 'sigtap.ocupacao.codigo');
});
}
if (is_numeric(request()->query('not_usuario_id'))) {
$usuarios->whereNotIn('cadastro_usuario.id', [request()->query('not_usuario_id')]);
}
else if (is_array(request()->query('not_usuario_id'))) {
$usuarios->whereNotIn('cadastro_usuario.id', request()->query('not_usuario_id'));
}
if (!DataUtil::isStringTrue(request()->query('with_not_regularized'))) {
$usuarios->whereNotNull('cadastro_cidadao.cns');
}
if (is_array(request()->query('especialidades'))) {
$usuarios->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_lotacao')
->join('cadastro_especialidade', 'cadastro_especialidade.ocupacao_id', 'cadastro_lotacao.ocupacao_id')
->whereColumn('cadastro_lotacao.usuario_id', 'cadastro_usuario.id')
->whereIn('cadastro_especialidade.id', request()->query('especialidades'));
});
}
if (DataUtil::isStringBoolean(request()->query('coleta'))) {
$usuarios->whereExists(function($query) {
$query->select(DB::raw(1))
->from('cadastro_lotacao')
->join('sigtap.procedimento_ocupacao', 'sigtap.procedimento_ocupacao.ocupacao_id', 'cadastro_lotacao.ocupacao_id')
->join('sigtap.procedimento', 'sigtap.procedimento.id', 'sigtap.procedimento_ocupacao.procedimento_id')
->whereColumn('cadastro_lotacao.usuario_id', 'cadastro_usuario.id')
->where('sigtap.procedimento.codigo', ProcedimentoEnum::COLETA_DE_MATERIAL_PARA_EXAME_LABORATORIAL)
->where('sigtap.procedimento_ocupacao.competencia_id', function ($query) {
$query->select('sigtap.competencia.id')
->from('sigtap.competencia')
->orderBy('id')
->limit(1);
})
->whereNull('deleted_at');
});
}
return $usuarios;
}
public static function assinatura($request)
{
$assinatura = UsuarioAssinatura::where('usuario_id', $request['id'])
->first() ?? new UsuarioAssinatura();
$assinatura->usuario_id = $request['id'];
$assinatura->arquivo = strtoupper($request['arquivo']);
$assinatura->save();
DB::transaction(function () use ($request) {
if($request->files->get('assinatura') != '') {
foreach ($request->files->get('assinatura') as $profissional) {
$arquivo = strtoupper($profissional->getClientOriginalName());
$pasta = storage_path('app' . DIRECTORY_SEPARATOR . 'exame-laboratorial' . DIRECTORY_SEPARATOR . 'assinaturas' . DIRECTORY_SEPARATOR . app('config')->get('database.default'));
$profissional->move($pasta, $arquivo);
}
}
});
return $assinatura;
}
public static function destroyAssinatura($id)
{
$assinatura = UsuarioAssinatura::findOrFail($id);
if(Storage::exists('exame-laboratorial' . DIRECTORY_SEPARATOR . 'assinaturas' . DIRECTORY_SEPARATOR . app('config')->get('database.default') . $assinatura->arquivo)) {
Storage::delete('exame-laboratorial' . DIRECTORY_SEPARATOR . 'assinaturas' . DIRECTORY_SEPARATOR . app('config')->get('database.default') . $assinatura->arquivo);
}
UsuarioAssinatura::findOrFail($id)->delete();
}
public static function downloadAssinatura($id)
{
$assinatura = UsuarioAssinatura::findOrFail($id);
return [
'nome' => $assinatura->arquivo,
'arquivo' => Storage::path('exame-laboratorial' . DIRECTORY_SEPARATOR . 'assinaturas' . DIRECTORY_SEPARATOR . app('config')->get('database.default') . DIRECTORY_SEPARATOR . $assinatura->arquivo),
];
}
public static function buscarMedicos()
{
}
}