This commit is contained in:
179
api/app/Services/Cadastro/SujeitoAtencao/UsuarioService.php
Normal file
179
api/app/Services/Cadastro/SujeitoAtencao/UsuarioService.php
Normal file
@@ -0,0 +1,179 @@
|
||||
<?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()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user