This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user