This commit is contained in:
124
api/app/Services/Parametrizacao/Exame/ExameComposicaoService.php
Normal file
124
api/app/Services/Parametrizacao/Exame/ExameComposicaoService.php
Normal file
@@ -0,0 +1,124 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Parametrizacao\Exame;
|
||||
|
||||
use App\Models\Intranet\Cliente;
|
||||
use App\Models\Parametrizacao\Exame\Exame;
|
||||
use App\Models\Parametrizacao\Exame\ExameComposicao;
|
||||
use App\Models\Parametrizacao\Exame\ExameComposicaoLista;
|
||||
use App\Models\Parametrizacao\Exame\ExameComposicaoVariavel;
|
||||
use App\Models\Parametrizacao\Exame\ExameTextoPronto;
|
||||
use App\Services\Service;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class ExameComposicaoService extends Service
|
||||
{
|
||||
public static function index($id)
|
||||
{
|
||||
$currentLotacao = self::getCurrentLotacao();
|
||||
$cliente = Cliente::where('link', app('config')->get('database.default'))->firstOrFail();
|
||||
|
||||
$exame = Exame::findOrFail($id);
|
||||
|
||||
return [
|
||||
'form' => [
|
||||
'data_atual' => Carbon::now()->format('d/m/Y'),
|
||||
'unidade' => $currentLotacao->infraestrutura->unidade->nome_fantasia,
|
||||
'unidade_id' => $currentLotacao->infraestrutura->unidade->id,
|
||||
'infraestrutura_id' => $currentLotacao->infraestrutura->id,
|
||||
'infraestrutura' => $currentLotacao->infraestrutura->nome,
|
||||
'sistema' => [
|
||||
'ramo_atividade' => [
|
||||
'nome' => $cliente->sistema->ramoAtividade->nome ?? null,
|
||||
],
|
||||
'nome' => $cliente->sistema->nome ?? null,
|
||||
'versao' => $cliente->sistema->versao ?? null,
|
||||
],
|
||||
'exame' => [
|
||||
'tipo_id' => $exame->tipo_id ?? null,
|
||||
'grupo_tipo_id' => $exame->grupo_tipo_id ?? null,
|
||||
'procedimento' => $exame->procedimento ?? null,
|
||||
'sigla_exame' => $exame->sigla_exame ?? null,
|
||||
'nome' => $exame->nome ?? null,
|
||||
'ativo' => $exame->ativo ?? true,
|
||||
'observacao' => $exame->observacao ?? null,
|
||||
'laboratorio' => [
|
||||
'prazo_entrega' => $exame->prazo_entrega ?? null,
|
||||
'validade' => $exame->validade ?? null,
|
||||
'valor' => $valor ?? null,
|
||||
'quantidade_maxima' => $exame->quantidade_maxima ?? null,
|
||||
'outro_municipio' => $exame->outro_municipio ?? false,
|
||||
'provisorio' => $exame->provisorio ?? false,
|
||||
'sigilo' => $exame->sigilo ?? false,
|
||||
'senha_supervisor' => $exame->senha_supervisor ?? false,
|
||||
'ultimo_resultado' => $exame->ultimo_resultado ?? null,
|
||||
'mapa_agrupado' => $exame->mapa_agrupado ?? false,
|
||||
'posicao_mapa' => $exame->posicao_mapa ?? null
|
||||
],
|
||||
'imagem' => [
|
||||
'prazo_entrega' => $exame->prazo_entrega ?? null,
|
||||
'validade' => $exame->validade ?? null,
|
||||
'valor' => $valor ?? null,
|
||||
'quantidade_maxima' => $exame->quantidade_maxima ?? null,
|
||||
'outro_municipio' => $exame->outro_municipio ?? false,
|
||||
'provisorio' => $exame->provisorio ?? false,
|
||||
'senha_supervisor' => $exame->senha_supervisor ?? false,
|
||||
'ultimo_resultado' => $exame->ultimo_resultado ?? null,
|
||||
'resultado' => $exame->resultado ?? null
|
||||
],
|
||||
'composicao' => ExameComposicao::where('exame_id', $id)
|
||||
->get()
|
||||
->map(fn ($query) => [
|
||||
'id' => $query->id,
|
||||
'exame_id' => $query->exame_id,
|
||||
'descricao' => $query->descricao,
|
||||
'limite_inferior' => number_format($query->limite_inferior, 2, ',', '.'),
|
||||
'limite_superior' => number_format($query->limite_superior, 2, ',', '.'),
|
||||
'unidade_id' => $query->unidade_id,
|
||||
'unidade' => $query->unidade->descricao ?? null,
|
||||
'referencia' => $query->referencia,
|
||||
'tipo_idade_id' => $query->tipo_idade_id,
|
||||
'tipo_idade' =>$query->tipo_idade_id ? $query->tipoIdade->descricao : '-',
|
||||
'idade_inicial' => $query->idade_inicial,
|
||||
'idade_final' => $query->idade_final,
|
||||
'sexo_id' => $query->sexo_id,
|
||||
'sexo' => $query->sexo->descricao ?? 'AMBOS',
|
||||
'tipo_resultado_id' => $query->tipo_resultado_id,
|
||||
'tipo_resultado' => $query->tipoResultado->descricao,
|
||||
'casa_decimal_id' => $query->casa_decimal_id,
|
||||
'formula_id' => $query->formula_id,
|
||||
'visivel' => $query->visivel,
|
||||
'valor_absoluto' => $query->valor_absoluto,
|
||||
'referencia_especial' => $query->referencia_especial,
|
||||
'lista' => ExameComposicaoLista::where('composicao_id', $query->id)
|
||||
->get()
|
||||
->map(fn ($composicao) => [
|
||||
'id' => $composicao->id,
|
||||
'descricao' => $composicao->descricao,
|
||||
'ordem' => $composicao->ordem,
|
||||
'situacao_id' => $composicao->situacao_id,
|
||||
'situacao' => $composicao->situacao->descricao,
|
||||
'padrao' => $composicao->padrao,
|
||||
]),
|
||||
'variavel' => ExameComposicaoVariavel::where('composicao_id', $query->id)
|
||||
->get()
|
||||
->map(fn ($variavel) => [
|
||||
'id' => $variavel->id,
|
||||
'ordem' => $variavel->ordem,
|
||||
'fator_id' => $variavel->fator_id ?? null,
|
||||
'fator' => $variavel->fator->fator ?? null,
|
||||
]),
|
||||
]),
|
||||
'texto_pronto' => ExameTextoPronto::where('exame_id', $id)
|
||||
->get()
|
||||
->map(fn ($query) => [
|
||||
'id' => $query->id,
|
||||
'exame_id' => $query->exame_id,
|
||||
'codigo' => $query->codigo,
|
||||
'descricao' => $query->descricao,
|
||||
]),
|
||||
],
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
246
api/app/Services/Parametrizacao/ProcedimentoCirurgicoService.php
Normal file
246
api/app/Services/Parametrizacao/ProcedimentoCirurgicoService.php
Normal file
@@ -0,0 +1,246 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Parametrizacao;
|
||||
|
||||
use App\Enums\Cadastro\Grupo\GrupoTipo;
|
||||
use App\Models\Cadastro\Grupo\Grupo;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Models\Parametrizacao\ProcedimentoCirurgico;
|
||||
use App\Models\Regulacao\Tipo as RegulacaoTipo;
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class ProcedimentoCirurgicoService extends Service
|
||||
{
|
||||
public static function autocomplete()
|
||||
{
|
||||
$query = DB::table('parametrizacao_procedimento_cirurgico AS procedimento_cirurgico')
|
||||
->join('sigtap.procedimento AS procedimento', fn ($j) => $j
|
||||
->on('procedimento.codigo', 'procedimento_cirurgico.procedimento_codigo')
|
||||
->where('procedimento.competencia_id', DB::table('sigtap.competencia')->max('id'))
|
||||
)
|
||||
->where('status', true)
|
||||
->select(
|
||||
'procedimento_cirurgico.id',
|
||||
'procedimento_cirurgico.procedimento_codigo AS codigo',
|
||||
'procedimento_cirurgico.nome',
|
||||
'procedimento_cirurgico.exigir_peso_altura_circunferencia',
|
||||
'procedimento.complexidade',
|
||||
);
|
||||
|
||||
if (is_numeric(request()->get('paciente_id'))) {
|
||||
|
||||
$paciente = Paciente::findOrFail(request()->get('paciente_id'));
|
||||
|
||||
$query->where(function ($query) use ($paciente) {
|
||||
|
||||
$query->where(function ($query) use ($paciente) {
|
||||
|
||||
$query->where('procedimento.sexo', $paciente->cidadao->sexo->identificador)
|
||||
->orWhere('procedimento.sexo', 'I')
|
||||
->orWhere('procedimento.sexo', 'N');
|
||||
});
|
||||
|
||||
if (!$paciente->is_desconhecido) {
|
||||
|
||||
$query->where(function ($query) use ($paciente) {
|
||||
|
||||
$meses = $paciente->cidadao->idade['anos'] * 12;
|
||||
|
||||
$query
|
||||
->where(function ($query) use ($meses) {
|
||||
|
||||
$query->where('procedimento.idade_minima', '<=', $meses)
|
||||
->orWhere('procedimento.idade_minima', 9999);
|
||||
})
|
||||
->where(function ($query) use ($meses) {
|
||||
|
||||
$query->where('procedimento.idade_maxima', '>=', $meses)
|
||||
->orWhere('procedimento.idade_maxima', 9999);
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
public static function datatable()
|
||||
{
|
||||
|
||||
$procedimentos = DB::table('parametrizacao_procedimento_cirurgico')
|
||||
->select(
|
||||
'cadastro_grupo.nome as grupo',
|
||||
'parametrizacao_procedimento.apelido',
|
||||
'parametrizacao_procedimento_cirurgico.grupo_exame_id',
|
||||
'parametrizacao_procedimento_cirurgico.id',
|
||||
'parametrizacao_procedimento_cirurgico.nome',
|
||||
'parametrizacao_procedimento_cirurgico.observacao',
|
||||
'parametrizacao_procedimento_cirurgico.procedimento_codigo',
|
||||
'parametrizacao_procedimento_cirurgico.status',
|
||||
)
|
||||
->join('cadastro_grupo', 'parametrizacao_procedimento_cirurgico.grupo_exame_id', 'cadastro_grupo.id')
|
||||
->leftJoin(
|
||||
'parametrizacao_procedimento',
|
||||
'parametrizacao_procedimento.procedimento_codigo',
|
||||
'parametrizacao_procedimento_cirurgico.procedimento_codigo'
|
||||
);
|
||||
|
||||
return datatables()
|
||||
->of($procedimentos)
|
||||
->addColumn('status', function ($procedimento) {
|
||||
return $procedimento->status ? 'ATIVO' : 'INATIVO';
|
||||
})
|
||||
->skipTotalRecords()
|
||||
->make(true);
|
||||
|
||||
}
|
||||
|
||||
public static function index()
|
||||
{
|
||||
|
||||
return ProcedimentoCirurgico::orderBy('nome')->get();
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
|
||||
return self::getDefault();
|
||||
}
|
||||
|
||||
public static function store($request)
|
||||
{
|
||||
|
||||
self::validate();
|
||||
|
||||
$params = $request->all();
|
||||
|
||||
$params['valor_ppi'] = str_replace(',', '.', str_replace('.', '', $params['valor_ppi']));
|
||||
|
||||
$procedimentoCirurgico = ProcedimentoCirurgico::create($params)->fresh();
|
||||
|
||||
return $procedimentoCirurgico;
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
|
||||
$procedimentoCirurgico = ProcedimentoCirurgico::findOrFail($id);
|
||||
$procedimentoCirurgico
|
||||
->setAttribute('searchByApelido', false);
|
||||
|
||||
return [
|
||||
'model' => $procedimentoCirurgico,
|
||||
'form' => self::getFormData(),
|
||||
];
|
||||
}
|
||||
|
||||
public static function update($request, $id)
|
||||
{
|
||||
|
||||
self::validate();
|
||||
|
||||
$params = $request->all();
|
||||
|
||||
$params['valor_ppi'] = str_replace(',', '.', str_replace('.', '', $params['valor_ppi']));
|
||||
|
||||
$procedimento = tap(ProcedimentoCirurgico::findOrFail($id))->update($params)->fresh();
|
||||
|
||||
return $procedimento;
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
|
||||
return ProcedimentoCirurgico::findOrFail($id)->delete();
|
||||
}
|
||||
|
||||
private static function getDefault()
|
||||
{
|
||||
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => [
|
||||
'nome' => null,
|
||||
'procedimento' => null,
|
||||
'grupo_exame_id' => null,
|
||||
'observacao' => null,
|
||||
'status' => true,
|
||||
'is_regulado' => false,
|
||||
'regulacao_tipo_id' => null,
|
||||
'search_by_apelido' => false,
|
||||
'is_ppi' => false,
|
||||
'valor_ppi' => null,
|
||||
'exigir_peso_altura_circunferencia' => false,
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
private static function getFormData()
|
||||
{
|
||||
|
||||
return [
|
||||
'grupos' => Grupo::where('grupo_tipo_id', GrupoTipo::CIRURGIA)
|
||||
->orderBy('nome')
|
||||
->get()
|
||||
->map(fn ($query) => [
|
||||
'id' => $query->id,
|
||||
'nome' => $query->nome,
|
||||
'regulacao_tipo_id' => $query->regulacao_tipo_id,
|
||||
]),
|
||||
'regulacao_tipo' => RegulacaoTipo::orderBy('nome')
|
||||
->get()
|
||||
->map(fn ($query) => [
|
||||
'id' => $query->id,
|
||||
'nome' => $query->nome,
|
||||
]),
|
||||
];
|
||||
}
|
||||
|
||||
private static function validate()
|
||||
{
|
||||
$rules = [
|
||||
'nome' => [
|
||||
'required',
|
||||
'string',
|
||||
'max:100',
|
||||
Rule::unique(ProcedimentoCirurgico::class, 'nome')
|
||||
->ignore(request('id')),
|
||||
],
|
||||
'procedimento_codigo' => [
|
||||
'required',
|
||||
Rule::unique(ProcedimentoCirurgico::class, 'procedimento_codigo')
|
||||
->ignore(request('id')),
|
||||
],
|
||||
'grupo_exame_id' => [
|
||||
'required',
|
||||
],
|
||||
'observacao' => [
|
||||
'nullable',
|
||||
'string',
|
||||
'max:1000',
|
||||
],
|
||||
];
|
||||
|
||||
if (request('is_regulado')) {
|
||||
$rules['regulacao_tipo_id'] = [
|
||||
'required',
|
||||
Rule::exists('regulacao_tipo', 'id'),
|
||||
];
|
||||
}
|
||||
|
||||
request()->validate($rules, [
|
||||
'nome.required' => 'O campo nome é obrigatório.',
|
||||
'nome.unique' => 'O nome do procedimento cirúrgico já foi inserido anteriormente.',
|
||||
'nome.max' => 'O limite de caracteres foi atingido no campo nome.',
|
||||
'procedimento_codigo.required' => 'O campo procedimento é obrigatório.',
|
||||
'procedimento_codigo.unique' => 'O procedimento escolhido já foi inserido anteriormente.',
|
||||
'grupo_exame_id.required' => 'O campo grupo é obrigatório.',
|
||||
'observacao.max' => 'O limite de caracteres foi atingido no campo observação.',
|
||||
'regulacao_tipo_id.required' => 'O campo Tipo de regulação é obrigatório quando Regulado está ativado.',
|
||||
'regulacao_tipo_id.exists' => 'O Tipo de regulação selecionado é inválido.',
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Parametrizacao\ProntoAtendimento;
|
||||
|
||||
use App\Enums\Parametrizacao\ProntoAtendimento\TipoAtendimento;
|
||||
use App\Models\Cadastro\Estabelecimento\CentroCusto;
|
||||
use App\Models\ProntoAtendimento\Parametrizacao\AtendimentoMedicoTipo;
|
||||
|
||||
class AtendimentoMedicoService
|
||||
{
|
||||
public static function get($infraestruturaId)
|
||||
{
|
||||
$parametrizacao = AtendimentoMedicoTipo::where('infraestrutura_id', $infraestruturaId)->first();
|
||||
|
||||
if (is_null($parametrizacao)) {
|
||||
|
||||
$parametrizacao = AtendimentoMedicoTipo::create([
|
||||
'infraestrutura_id' => CentroCusto::findOrFail(auth()->payload()->get('centro_custo_id'))
|
||||
->infraestrutura_id,
|
||||
'tipo_id' => TipoAtendimento::ESTRUTURADO
|
||||
]);
|
||||
}
|
||||
|
||||
return $parametrizacao;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,214 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Parametrizacao;
|
||||
|
||||
use App\Services\Service;
|
||||
use App\Utils\DataUtil;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class RelatorioExameCadastradoService extends Service
|
||||
{
|
||||
public static function index()
|
||||
{
|
||||
$params = self::getParams();
|
||||
|
||||
$itens = DB::table('parametrizacao_exame')
|
||||
->select([
|
||||
'parametrizacao_exame.id',
|
||||
'parametrizacao_exame.nome AS nome_exame',
|
||||
'parametrizacao_exame_tipo.nome AS nome_tipo',
|
||||
'cadastro_grupo.nome as nome_grupo',
|
||||
'sigtap.procedimento.nome as nome_procedimento',
|
||||
'sigtap.procedimento.codigo AS codigo_sigtap',
|
||||
'parametrizacao_exame.valor_sigtap as valor_id',
|
||||
DB::raw("CASE
|
||||
WHEN parametrizacao_exame.valor_sigtap = 1 THEN 'Sim'
|
||||
ELSE 'Não'
|
||||
END AS valor_sigtap"),
|
||||
DB::raw("CASE
|
||||
WHEN parametrizacao_exame.valor_sigtap = 1
|
||||
THEN CONCAT('R$ ', REPLACE(FORMAT(sigtap.procedimento.valor_servico_ambilatorial, 2, 'de_DE'), '.', 'X'))
|
||||
ELSE CONCAT('R$ ', REPLACE(FORMAT(parametrizacao_exame.valor, 2, 'de_DE'), '.', 'X'))
|
||||
END AS valor_exame"),
|
||||
DB::raw("CONCAT(parametrizacao_exame.validade, ' dias') AS validade_exame"),
|
||||
])
|
||||
->leftJoin(
|
||||
'parametrizacao_exame_tipo',
|
||||
'parametrizacao_exame_tipo.id',
|
||||
'parametrizacao_exame.tipo_id'
|
||||
)
|
||||
->leftJoin(
|
||||
'cadastro_grupo',
|
||||
'cadastro_grupo.id',
|
||||
'parametrizacao_exame.grupo_tipo_id'
|
||||
)
|
||||
->leftJoin('sigtap.procedimento', function ($join) {
|
||||
|
||||
$join->on('sigtap.procedimento.codigo', 'parametrizacao_exame.codigo')
|
||||
->where('sigtap.procedimento.competencia_id', '=', function ($query) {
|
||||
|
||||
$query->select('sigtap.competencia.id')
|
||||
->from('sigtap.competencia')
|
||||
->orderByDesc('sigtap.competencia.valor')
|
||||
->limit(1);
|
||||
});
|
||||
})
|
||||
->when($params->tipo_id, fn($q) => $q->where('parametrizacao_exame_tipo.id', $params->tipo_id))
|
||||
->when($params->grupo_id, fn($q) => $q->where('cadastro_grupo.id', $params->grupo_id))
|
||||
->when($params->valor_id !== null, function ($q) use ($params) {
|
||||
return $q->where('parametrizacao_exame.valor_sigtap', $params->valor_id);
|
||||
});
|
||||
|
||||
self::setOrderBy($itens);
|
||||
|
||||
$itens = $itens->get();
|
||||
|
||||
return [
|
||||
'itens' => $itens,
|
||||
];
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'additionals' => [
|
||||
'data_atual' => Carbon::now()->format('d/m/Y'),
|
||||
],
|
||||
'form' => [
|
||||
'tipos' => self::getTipos(),
|
||||
'grupos' => [],
|
||||
'valores' => [],
|
||||
],
|
||||
'model' => [
|
||||
'tipo_id' => null,
|
||||
'grupo_id' => null,
|
||||
'valor_id' => null,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public static function list()
|
||||
{
|
||||
$params = self::getParams();
|
||||
|
||||
switch (request()->listar) {
|
||||
case 'tipos': {
|
||||
return [
|
||||
'tipos' => self::getTipos($params),
|
||||
'grupos' => self::getGrupos($params),
|
||||
'valores' => self::getValores($params),
|
||||
];
|
||||
}
|
||||
case 'grupos': {
|
||||
return [
|
||||
'grupos' => self::getGrupos($params),
|
||||
'valores' => self::getValores($params),
|
||||
];
|
||||
}
|
||||
case 'valores': {
|
||||
return [
|
||||
'valores' => self::getValores($params),
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static function getParams()
|
||||
{
|
||||
return (object) [
|
||||
'tipo_id' => request()->get('tipo_id'),
|
||||
'grupo_id' => request()->get('grupo_id'),
|
||||
'valor_id' => request()->get('valor_id'),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getTipos()
|
||||
{
|
||||
return DB::table('parametrizacao_exame_tipo')
|
||||
->select([
|
||||
DB::raw('MIN(parametrizacao_exame_tipo.id) as id'),
|
||||
'parametrizacao_exame_tipo.nome',
|
||||
])
|
||||
->groupBy('parametrizacao_exame_tipo.nome')
|
||||
->orderBy('parametrizacao_exame_tipo.nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getGrupos($params)
|
||||
{
|
||||
|
||||
return DB::table('cadastro_grupo')
|
||||
->select([
|
||||
'cadastro_grupo.id',
|
||||
'cadastro_grupo.nome',
|
||||
])
|
||||
->whereExists(function ($q) use ($params) {
|
||||
return $q->select(DB::raw(1))
|
||||
->from('parametrizacao_exame')
|
||||
->whereColumn('parametrizacao_exame.grupo_tipo_id', 'cadastro_grupo.id')
|
||||
->when($params->tipo_id, function ($q) use ($params) {
|
||||
$q->where('parametrizacao_exame.tipo_id', $params->tipo_id);
|
||||
});
|
||||
})
|
||||
->orderBy('cadastro_grupo.nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getValores($params)
|
||||
{
|
||||
|
||||
return DB::table('parametrizacao_exame')
|
||||
->select([
|
||||
'parametrizacao_exame.id',
|
||||
'parametrizacao_exame.valor_sigtap as valor_id',
|
||||
DB::raw("CASE
|
||||
WHEN parametrizacao_exame.valor_sigtap = 1 THEN 'Sim'
|
||||
ELSE 'Não'
|
||||
END AS valor_sigtap"),
|
||||
])
|
||||
->when(isset($params->valor_id), function ($q) use ($params) {
|
||||
$q->where('parametrizacao_exame.valor_sigtap', $params->valor_id);
|
||||
})
|
||||
->when(isset($params->tipo_id), function ($q) use ($params) {
|
||||
$q->where('parametrizacao_exame.tipo_id', $params->tipo_id);
|
||||
})
|
||||
|
||||
->groupBy('parametrizacao_exame.valor_sigtap')
|
||||
->orderBy('parametrizacao_exame.valor_sigtap')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function setOrderBy($builder)
|
||||
{
|
||||
$columns = [
|
||||
'nome_exame' => 'parametrizacao_exame.nome',
|
||||
'nome_tipo' => 'parametrizacao_exame_tipo.nome',
|
||||
'nome_grupo' => 'cadastro_grupo.nome',
|
||||
'codigo_sigtap' => 'sigtap.procedimento.codigo',
|
||||
'valor_sigtap' => "CASE WHEN parametrizacao_exame.valor_sigtap = 1 THEN 'Sim' ELSE 'Não'END",
|
||||
'nome_procedimento' => 'sigtap.procedimento.nome',
|
||||
'valor_exame' => 'parametrizacao_exame.valor',
|
||||
'validade_exame' => 'parametrizacao_exame.validade'
|
||||
];
|
||||
|
||||
if (is_null(request()->sort_by)) {
|
||||
$builder->orderByRaw(implode(', ', $columns));
|
||||
return;
|
||||
}
|
||||
|
||||
$column = $columns[request()->sort_by];
|
||||
$direction = DataUtil::getBooleanValueFromStringBoolean(request()->sort_desc) ? 'DESC' : 'ASC';
|
||||
|
||||
unset($columns[request()->sort_by]);
|
||||
|
||||
$orderByList = [];
|
||||
$orderByList[] = "{$column} {$direction}";
|
||||
|
||||
if (!empty($columns)) {
|
||||
$orderByList[] = implode(', ', $columns);
|
||||
}
|
||||
|
||||
$builder->orderByRaw(implode(', ', $orderByList));
|
||||
}
|
||||
}
|
||||
85
api/app/Services/Parametrizacao/TabelaObmService.php
Normal file
85
api/app/Services/Parametrizacao/TabelaObmService.php
Normal file
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Parametrizacao;
|
||||
|
||||
use App\Enums\Log\Operacao;
|
||||
use App\Models\Integracao\Bnafar\Medicamento;
|
||||
use App\Models\Log\CadastroMaterialIntegracaoBnafarMedicamento;
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class TabelaObmService extends Service
|
||||
{
|
||||
public static function show($id)
|
||||
{
|
||||
$materiais = DB::table('cadastro_material')
|
||||
->select([
|
||||
'cadastro_material.id',
|
||||
'cadastro_material.descricao',
|
||||
])
|
||||
->join('cadastro_material_integracao_bnafar_medicamento', 'cadastro_material_integracao_bnafar_medicamento.material_id', 'cadastro_material.id')
|
||||
->where('cadastro_material_integracao_bnafar_medicamento.medicamento_id', $id)
|
||||
->get();
|
||||
|
||||
$log = DB::table('cadastro_material')
|
||||
->select([
|
||||
DB::raw("DATE_FORMAT(log_cadastro_material_integracao_bnafar_medicamento.created_at, '%d/%m/%Y %h:%i') AS data_hora"),
|
||||
'log_operacao.nome AS operacao_nome',
|
||||
'cadastro_material.descricao AS material_descricao',
|
||||
'cadastro_cidadao.nome AS usuario_nome',
|
||||
])
|
||||
->join('log_cadastro_material_integracao_bnafar_medicamento', 'log_cadastro_material_integracao_bnafar_medicamento.material_id', 'cadastro_material.id')
|
||||
->join('log_operacao', 'log_operacao.id', 'log_cadastro_material_integracao_bnafar_medicamento.operacao_id')
|
||||
->join('cadastro_lotacao', 'cadastro_lotacao.id', 'log_cadastro_material_integracao_bnafar_medicamento.created_lotacao_id')
|
||||
->join('cadastro_usuario', 'cadastro_usuario.id', 'cadastro_lotacao.usuario_id')
|
||||
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id')
|
||||
->where('log_cadastro_material_integracao_bnafar_medicamento.medicamento_id', $id)
|
||||
->get();
|
||||
|
||||
return [
|
||||
'materiais' => $materiais,
|
||||
'log' => $log,
|
||||
];
|
||||
}
|
||||
|
||||
public static function store($request)
|
||||
{
|
||||
$medicamento = Medicamento::find($request->medicamento_id);
|
||||
|
||||
$sync = $medicamento->materiais()->sync($request->materiais);
|
||||
|
||||
foreach ($sync['attached'] as $value) {
|
||||
CadastroMaterialIntegracaoBnafarMedicamento::create([
|
||||
'operacao_id' => Operacao::INCLUSAO,
|
||||
'medicamento_id' => $medicamento->id,
|
||||
'material_id' => $value,
|
||||
]);
|
||||
}
|
||||
|
||||
foreach ($sync['detached'] as $value) {
|
||||
CadastroMaterialIntegracaoBnafarMedicamento::create([
|
||||
'operacao_id' => Operacao::EXCLUSAO,
|
||||
'medicamento_id' => $medicamento->id,
|
||||
'material_id' => $value,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
public static function datatable()
|
||||
{
|
||||
return DB::table('integracao_bnafar_medicamento')
|
||||
->select([
|
||||
'integracao_bnafar_medicamento.id AS medicamento_id',
|
||||
'integracao_bnafar_medicamento.codigo AS medicamento_codigo',
|
||||
'integracao_bnafar_medicamento.descricao AS medicamento_descricao',
|
||||
DB::raw("GROUP_CONCAT(DISTINCT cadastro_material.descricao SEPARATOR ', ') AS material_descricao"),
|
||||
])
|
||||
->leftJoin('cadastro_material_integracao_bnafar_medicamento', 'cadastro_material_integracao_bnafar_medicamento.medicamento_id', 'integracao_bnafar_medicamento.id')
|
||||
->leftJoin('cadastro_material', 'cadastro_material.id', 'cadastro_material_integracao_bnafar_medicamento.material_id')
|
||||
->groupBy([
|
||||
'integracao_bnafar_medicamento.id',
|
||||
'integracao_bnafar_medicamento.codigo',
|
||||
'integracao_bnafar_medicamento.descricao',
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user