This commit is contained in:
473
api/app/Services/Cadastro/RelatorioMaterialService.php
Normal file
473
api/app/Services/Cadastro/RelatorioMaterialService.php
Normal file
@@ -0,0 +1,473 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro;
|
||||
|
||||
use App\Services\Cadastro\Material\MaterialService;
|
||||
use App\Services\Service;
|
||||
use App\Utils\DataUtil;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class RelatorioMaterialService extends Service
|
||||
{
|
||||
public static function index()
|
||||
{
|
||||
$params = self::getParams();
|
||||
|
||||
$itens = DB::table('cadastro_material')
|
||||
->select([
|
||||
'cadastro_material.id',
|
||||
'cadastro_material.codigo_material',
|
||||
DB::raw(MaterialService::getDescricaoCompletaRaw(
|
||||
'cadastro_material',
|
||||
'cadastro_apresentacao',
|
||||
'cadastro_unidade_medida'
|
||||
) . ' AS material_descricao'),
|
||||
'cadastro_grupo.nome AS grupo_nome',
|
||||
'cadastro_subgrupo.nome AS subgrupo_nome',
|
||||
'cadastro_receita_tipo.nome AS receita_tipo_nome',
|
||||
'cadastro_livro_registro.nome AS livro_nome',
|
||||
'cadastro_livro_registro_tipo.nome AS livro_tipo_nome',
|
||||
'cadastro_forma_farmaceutica.nome AS forma_farmaceutica_nome',
|
||||
DB::raw("
|
||||
CONCAT_WS(
|
||||
', ',
|
||||
CASE WHEN is_alto_custo THEN 'Alto custo' END,
|
||||
CASE WHEN is_programa_remedio_em_casa THEN 'Programa remédio em casa' END,
|
||||
CASE WHEN is_acao_judicial THEN 'Ação judicial' END,
|
||||
CASE WHEN is_remume THEN 'REMUME' END
|
||||
) AS programa_acao
|
||||
"),
|
||||
DB::raw("CASE WHEN is_ativo = 1 THEN 'Ativo' ELSE 'Inativo' END AS status"),
|
||||
DB::raw("CASE WHEN possui_lote = 1 THEN 'Sim' ELSE 'Não' END AS possui_lote"),
|
||||
'cadastro_material_bnafar.codigo AS material_bnafar_codigo',
|
||||
DB::raw("
|
||||
(
|
||||
SELECT GROUP_CONCAT(integracao_bnafar_medicamento.codigo SEPARATOR ', ')
|
||||
FROM integracao_bnafar_medicamento
|
||||
INNER JOIN cadastro_material_integracao_bnafar_medicamento ON cadastro_material_integracao_bnafar_medicamento.medicamento_id = integracao_bnafar_medicamento.id
|
||||
WHERE cadastro_material_integracao_bnafar_medicamento.material_id = cadastro_material.id
|
||||
) AS material_obm_codigo
|
||||
"),
|
||||
])
|
||||
->join('cadastro_apresentacao', 'cadastro_apresentacao.id', 'cadastro_material.apresentacao_id')
|
||||
->join('cadastro_unidade_medida', 'cadastro_unidade_medida.id', 'cadastro_material.apresentacao_unidade_medida_id')
|
||||
->leftJoin('cadastro_grupo', 'cadastro_grupo.id', 'cadastro_material.grupo_id')
|
||||
->leftJoin('cadastro_subgrupo', 'cadastro_subgrupo.id', 'cadastro_material.subgrupo_id')
|
||||
->leftJoin('cadastro_receita_tipo', 'cadastro_receita_tipo.id', 'cadastro_material.receita_tipo_id')
|
||||
->leftJoin('cadastro_livro_registro', 'cadastro_livro_registro.id', 'cadastro_material.livro_registro_id')
|
||||
->leftJoin('cadastro_livro_registro_tipo', 'cadastro_livro_registro_tipo.id', 'cadastro_material.livro_registro_tipo_id')
|
||||
->leftJoin('cadastro_forma_farmaceutica', 'cadastro_forma_farmaceutica.id', 'cadastro_material.forma_farmaceutica_id')
|
||||
->leftJoin('cadastro_material_bnafar', 'cadastro_material_bnafar.id', 'cadastro_material.material_bnafar_id')
|
||||
->when($params->grupo_id, fn ($q) => $q->where('cadastro_material.grupo_id', $params->grupo_id))
|
||||
->when($params->subgrupo_id, fn ($q) => $q->where('cadastro_material.subgrupo_id', $params->subgrupo_id))
|
||||
->when($params->receita_tipo_id, fn ($q) => $q->where('cadastro_material.receita_tipo_id', $params->receita_tipo_id))
|
||||
->when($params->livro_id, fn ($q) => $q->where('cadastro_material.livro_registro_id', $params->livro_id))
|
||||
->when($params->livro_tipo_id, fn ($q) => $q->where('cadastro_material.livro_registro_tipo_id', $params->livro_tipo_id))
|
||||
->when($params->forma_farmaceutica_id, fn ($q) => $q->where('cadastro_material.forma_farmaceutica_id', $params->forma_farmaceutica_id))
|
||||
->when($params->programas_acoes, function ($q) use ($params) {
|
||||
foreach ($params->programas_acoes as $programaAcao) {
|
||||
$q->orWhere("cadastro_material.{$programaAcao}", true);
|
||||
}
|
||||
})
|
||||
->when($params->status, fn ($q) => $q->where('cadastro_material.is_ativo', $params->status))
|
||||
->when($params->material_id, fn ($q) => $q->where('cadastro_material.id', $params->material_id))
|
||||
->orderBy('cadastro_material.descricao');
|
||||
|
||||
self::setOrderBy($itens);
|
||||
|
||||
$itens = $itens->get();
|
||||
|
||||
return $itens;
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
$params = self::getParams();
|
||||
|
||||
return [
|
||||
'form' => [
|
||||
'grupos' => self::getGrupos(),
|
||||
'subgrupos' => self::getSubgrupos($params),
|
||||
'receita_tipos' => self::getReceitaTipos($params),
|
||||
'livros' => self::getLivros($params),
|
||||
'livro_tipos' => self::getLivroTipos($params),
|
||||
'formas_farmaceuticas' => self::getFormasFarmaceuticas($params),
|
||||
'programas_acoes' => self::getProgramasAcoes($params),
|
||||
'status' => self::getStatus($params),
|
||||
],
|
||||
'model' => [
|
||||
'grupo_id' => null,
|
||||
'subgrupo_id' => null,
|
||||
'receita_tipo_id' => null,
|
||||
'livro_id' => null,
|
||||
'livro_tipo_id' => null,
|
||||
'forma_farmaceutica_id' => null,
|
||||
'programas_acoes' => [],
|
||||
'status' => null,
|
||||
'material' => null,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public static function autocomplete()
|
||||
{
|
||||
$params = self::getParams();
|
||||
|
||||
return DB::table('cadastro_material')
|
||||
->select([
|
||||
'cadastro_material.id',
|
||||
'cadastro_material.codigo_material',
|
||||
'cadastro_material.descricao',
|
||||
DB::raw(MaterialService::getDescricaoCompletaRaw(
|
||||
'cadastro_material',
|
||||
'cadastro_apresentacao',
|
||||
'cadastro_unidade_medida'
|
||||
) . ' AS material_descricao'),
|
||||
])
|
||||
->join('cadastro_apresentacao', 'cadastro_apresentacao.id', 'cadastro_material.apresentacao_id')
|
||||
->join('cadastro_unidade_medida', 'cadastro_unidade_medida.id', 'cadastro_material.apresentacao_unidade_medida_id')
|
||||
->when($params->grupo_id, fn ($q) => $q->where('cadastro_material.grupo_id', $params->grupo_id))
|
||||
->when($params->subgrupo_id, fn ($q) => $q->where('cadastro_material.subgrupo_id', $params->subgrupo_id))
|
||||
->when($params->receita_tipo_id, fn ($q) => $q->where('cadastro_material.receita_tipo_id', $params->receita_tipo_id))
|
||||
->when($params->livro_id, fn ($q) => $q->where('cadastro_material.livro_registro_id', $params->livro_id))
|
||||
->when($params->livro_tipo_id, fn ($q) => $q->where('cadastro_material.livro_registro_tipo_id', $params->livro_tipo_id))
|
||||
->when($params->forma_farmaceutica_id, fn ($q) => $q->where('cadastro_material.forma_farmaceutica_id', $params->forma_farmaceutica_id))
|
||||
->when($params->programas_acoes, function ($query) use ($params) {
|
||||
foreach ($params->programas_acoes as $programaAcao) {
|
||||
$query->orWhere("cadastro_material.{$programaAcao}", true);
|
||||
}
|
||||
})
|
||||
->when($params->status, fn ($q) => $q->where('cadastro_material.is_ativo', $params->status))
|
||||
->orderBy('cadastro_material.descricao');
|
||||
}
|
||||
|
||||
public static function list()
|
||||
{
|
||||
$params = self::getParams();
|
||||
|
||||
switch (request()->listar) {
|
||||
case 'subgrupos': {
|
||||
return [
|
||||
'subgrupos' => self::getSubgrupos($params),
|
||||
'receita_tipos' => self::getReceitaTipos($params),
|
||||
'livros' => self::getLivros($params),
|
||||
'livro_tipos' => self::getLivroTipos($params),
|
||||
'formas_farmaceuticas' => self::getFormasFarmaceuticas($params),
|
||||
'programas_acoes' => self::getProgramasAcoes($params),
|
||||
'status' => self::getStatus($params),
|
||||
];
|
||||
}
|
||||
case 'receita-tipos': {
|
||||
return [
|
||||
'receita_tipos' => self::getReceitaTipos($params),
|
||||
'livros' => self::getLivros($params),
|
||||
'livro_tipos' => self::getLivroTipos($params),
|
||||
'formas_farmaceuticas' => self::getFormasFarmaceuticas($params),
|
||||
'programas_acoes' => self::getProgramasAcoes($params),
|
||||
'status' => self::getStatus($params),
|
||||
];
|
||||
}
|
||||
case 'livros': {
|
||||
return [
|
||||
'livros' => self::getLivros($params),
|
||||
'livro_tipos' => self::getLivroTipos($params),
|
||||
'formas_farmaceuticas' => self::getFormasFarmaceuticas($params),
|
||||
'programas_acoes' => self::getProgramasAcoes($params),
|
||||
'status' => self::getStatus($params),
|
||||
];
|
||||
}
|
||||
case 'livro-tipos': {
|
||||
return [
|
||||
'livro_tipos' => self::getLivroTipos($params),
|
||||
'formas_farmaceuticas' => self::getFormasFarmaceuticas($params),
|
||||
'programas_acoes' => self::getProgramasAcoes($params),
|
||||
'status' => self::getStatus($params),
|
||||
];
|
||||
}
|
||||
case 'formas-farmaceuticas': {
|
||||
return [
|
||||
'formas_farmaceuticas' => self::getFormasFarmaceuticas($params),
|
||||
'programas_acoes' => self::getProgramasAcoes($params),
|
||||
'status' => self::getStatus($params),
|
||||
];
|
||||
}
|
||||
case 'programas-acoes': {
|
||||
return [
|
||||
'programas_acoes' => self::getProgramasAcoes($params),
|
||||
'status' => self::getStatus($params),
|
||||
];
|
||||
}
|
||||
case 'status': {
|
||||
return [
|
||||
'status' => self::getStatus($params),
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static function getParams()
|
||||
{
|
||||
return (object) [
|
||||
'grupo_id' => request()->get('grupo_id'),
|
||||
'subgrupo_id' => request()->get('subgrupo_id'),
|
||||
'receita_tipo_id' => request()->get('receita_tipo_id'),
|
||||
'livro_id' => request()->get('livro_id'),
|
||||
'livro_tipo_id' => request()->get('livro_tipo_id'),
|
||||
'forma_farmaceutica_id' => request()->get('forma_farmaceutica_id'),
|
||||
'programas_acoes' => request()->get('programas_acoes'),
|
||||
'status' => request()->get('status'),
|
||||
'material_id' => request()->get('material_id'),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getGrupos()
|
||||
{
|
||||
return DB::table('cadastro_grupo')
|
||||
->select([
|
||||
'cadastro_grupo.id',
|
||||
'cadastro_grupo.grupo_tipo_id',
|
||||
'cadastro_grupo.nome',
|
||||
])
|
||||
->whereExists(fn ($q) => $q
|
||||
->select(DB::raw(1))
|
||||
->from('cadastro_material')
|
||||
->whereColumn('cadastro_material.grupo_id', 'cadastro_grupo.id')
|
||||
)
|
||||
->orderBy('cadastro_grupo.nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getSubgrupos($params)
|
||||
{
|
||||
return DB::table('cadastro_subgrupo')
|
||||
->select([
|
||||
'cadastro_subgrupo.id',
|
||||
'cadastro_subgrupo.nome',
|
||||
])
|
||||
->when($params->grupo_id, fn ($q) => $q->where('cadastro_subgrupo.grupo_id', $params->grupo_id))
|
||||
->whereExists(fn ($q) => $q
|
||||
->select(DB::raw(1))
|
||||
->from('cadastro_material')
|
||||
->whereColumn('cadastro_material.subgrupo_id', 'cadastro_subgrupo.id')
|
||||
)
|
||||
->orderBy('cadastro_subgrupo.nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getReceitaTipos($params)
|
||||
{
|
||||
return DB::table('cadastro_receita_tipo')
|
||||
->select([
|
||||
'cadastro_receita_tipo.id',
|
||||
'cadastro_receita_tipo.nome',
|
||||
])
|
||||
->whereExists(fn ($q) => $q
|
||||
->select(DB::raw(1))
|
||||
->from('cadastro_material')
|
||||
->when($params->grupo_id, fn ($q) => $q->where('cadastro_material.grupo_id', $params->grupo_id))
|
||||
->when($params->subgrupo_id, fn ($q) => $q->where('cadastro_material.subgrupo_id', $params->subgrupo_id))
|
||||
->whereColumn('cadastro_material.receita_tipo_id', 'cadastro_receita_tipo.id')
|
||||
)
|
||||
->orderBy('cadastro_receita_tipo.nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getLivros($params)
|
||||
{
|
||||
return DB::table('cadastro_livro_registro')
|
||||
->select([
|
||||
'cadastro_livro_registro.id',
|
||||
'cadastro_livro_registro.nome',
|
||||
])
|
||||
->whereExists(fn ($q) => $q
|
||||
->select(DB::raw(1))
|
||||
->from('cadastro_material')
|
||||
->when($params->grupo_id, fn ($q) => $q->where('cadastro_material.grupo_id', $params->grupo_id))
|
||||
->when($params->subgrupo_id, fn ($q) => $q->where('cadastro_material.subgrupo_id', $params->subgrupo_id))
|
||||
->when($params->receita_tipo_id, fn ($q) => $q->where('cadastro_material.receita_tipo_id', $params->receita_tipo_id))
|
||||
->whereColumn('cadastro_material.livro_registro_id', 'cadastro_livro_registro.id')
|
||||
)
|
||||
->orderBy('cadastro_livro_registro.nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getLivroTipos($params)
|
||||
{
|
||||
return DB::table('cadastro_livro_registro_tipo')
|
||||
->select([
|
||||
'cadastro_livro_registro_tipo.id',
|
||||
'cadastro_livro_registro_tipo.nome',
|
||||
])
|
||||
->whereExists(fn ($q) => $q
|
||||
->select(DB::raw(1))
|
||||
->from('cadastro_material')
|
||||
->when($params->grupo_id, fn ($q) => $q->where('cadastro_material.grupo_id', $params->grupo_id))
|
||||
->when($params->subgrupo_id, fn ($q) => $q->where('cadastro_material.subgrupo_id', $params->subgrupo_id))
|
||||
->when($params->receita_tipo_id, fn ($q) => $q->where('cadastro_material.receita_tipo_id', $params->receita_tipo_id))
|
||||
->when($params->livro_id, fn ($q) => $q->where('cadastro_material.livro_registro_id', $params->livro_id))
|
||||
->whereColumn('cadastro_material.livro_registro_tipo_id', 'cadastro_livro_registro_tipo.id')
|
||||
)
|
||||
->orderBy('cadastro_livro_registro_tipo.nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getFormasFarmaceuticas($params)
|
||||
{
|
||||
return DB::table('cadastro_forma_farmaceutica')
|
||||
->select([
|
||||
'cadastro_forma_farmaceutica.id',
|
||||
'cadastro_forma_farmaceutica.nome',
|
||||
])
|
||||
->whereExists(fn ($q) => $q
|
||||
->select(DB::raw(1))
|
||||
->from('cadastro_material')
|
||||
->when($params->grupo_id, fn ($q) => $q->where('cadastro_material.grupo_id', $params->grupo_id))
|
||||
->when($params->subgrupo_id, fn ($q) => $q->where('cadastro_material.subgrupo_id', $params->subgrupo_id))
|
||||
->when($params->receita_tipo_id, fn ($q) => $q->where('cadastro_material.receita_tipo_id', $params->receita_tipo_id))
|
||||
->when($params->livro_id, fn ($q) => $q->where('cadastro_material.livro_registro_id', $params->livro_id))
|
||||
->when($params->livro_tipo_id, fn ($q) => $q->where('cadastro_material.livro_registro_tipo_id', $params->livro_tipo_id))
|
||||
->whereColumn('cadastro_material.forma_farmaceutica_id', 'cadastro_forma_farmaceutica.id')
|
||||
)
|
||||
->orderBy('cadastro_forma_farmaceutica.nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getProgramasAcoes($params)
|
||||
{
|
||||
$programasAcoes = collect();
|
||||
|
||||
$isAltoCusto = DB::table('cadastro_material')
|
||||
->where('cadastro_material.is_alto_custo', true)
|
||||
->when($params->grupo_id, fn ($q) => $q->where('cadastro_material.grupo_id', $params->grupo_id))
|
||||
->when($params->subgrupo_id, fn ($q) => $q->where('cadastro_material.subgrupo_id', $params->subgrupo_id))
|
||||
->when($params->receita_tipo_id, fn ($q) => $q->where('cadastro_material.receita_tipo_id', $params->receita_tipo_id))
|
||||
->when($params->livro_id, fn ($q) => $q->where('cadastro_material.livro_registro_id', $params->livro_id))
|
||||
->when($params->livro_tipo_id, fn ($q) => $q->where('cadastro_material.livro_registro_tipo_id', $params->livro_tipo_id))
|
||||
->when($params->forma_farmaceutica_id, fn ($q) => $q->where('cadastro_material.forma_farmaceutica_id', $params->forma_farmaceutica_id))
|
||||
->exists();
|
||||
|
||||
if ($isAltoCusto) {
|
||||
$programasAcoes->push(['value' => 'is_alto_custo', 'text' => 'Alto custo']);
|
||||
}
|
||||
|
||||
$isProgramaRemedioEmCasa = DB::table('cadastro_material')
|
||||
->where('cadastro_material.is_programa_remedio_em_casa', true)
|
||||
->when($params->grupo_id, fn ($q) => $q->where('cadastro_material.grupo_id', $params->grupo_id))
|
||||
->when($params->subgrupo_id, fn ($q) => $q->where('cadastro_material.subgrupo_id', $params->subgrupo_id))
|
||||
->when($params->receita_tipo_id, fn ($q) => $q->where('cadastro_material.receita_tipo_id', $params->receita_tipo_id))
|
||||
->when($params->livro_id, fn ($q) => $q->where('cadastro_material.livro_registro_id', $params->livro_id))
|
||||
->when($params->livro_tipo_id, fn ($q) => $q->where('cadastro_material.livro_registro_tipo_id', $params->livro_tipo_id))
|
||||
->when($params->forma_farmaceutica_id, fn ($q) => $q->where('cadastro_material.forma_farmaceutica_id', $params->forma_farmaceutica_id))
|
||||
->exists();
|
||||
|
||||
if ($isProgramaRemedioEmCasa) {
|
||||
$programasAcoes->push(['value' => 'is_programa_remedio_em_casa', 'text' => 'Programa remédio em casa']);
|
||||
}
|
||||
|
||||
$isAcaoJudicial = DB::table('cadastro_material')
|
||||
->where('cadastro_material.is_acao_judicial', true)
|
||||
->when($params->grupo_id, fn ($q) => $q->where('cadastro_material.grupo_id', $params->grupo_id))
|
||||
->when($params->subgrupo_id, fn ($q) => $q->where('cadastro_material.subgrupo_id', $params->subgrupo_id))
|
||||
->when($params->receita_tipo_id, fn ($q) => $q->where('cadastro_material.receita_tipo_id', $params->receita_tipo_id))
|
||||
->when($params->livro_id, fn ($q) => $q->where('cadastro_material.livro_registro_id', $params->livro_id))
|
||||
->when($params->livro_tipo_id, fn ($q) => $q->where('cadastro_material.livro_registro_tipo_id', $params->livro_tipo_id))
|
||||
->when($params->forma_farmaceutica_id, fn ($q) => $q->where('cadastro_material.forma_farmaceutica_id', $params->forma_farmaceutica_id))
|
||||
->exists();
|
||||
|
||||
if ($isAcaoJudicial) {
|
||||
$programasAcoes->push(['value' => 'is_acao_judicial ', 'text' => 'Ação judicial']);
|
||||
}
|
||||
|
||||
$isRemume = DB::table('cadastro_material')
|
||||
->where('cadastro_material.is_remume', true)
|
||||
->when($params->grupo_id, fn ($q) => $q->where('cadastro_material.grupo_id', $params->grupo_id))
|
||||
->when($params->subgrupo_id, fn ($q) => $q->where('cadastro_material.subgrupo_id', $params->subgrupo_id))
|
||||
->when($params->receita_tipo_id, fn ($q) => $q->where('cadastro_material.receita_tipo_id', $params->receita_tipo_id))
|
||||
->when($params->livro_id, fn ($q) => $q->where('cadastro_material.livro_registro_id', $params->livro_id))
|
||||
->when($params->livro_tipo_id, fn ($q) => $q->where('cadastro_material.livro_registro_tipo_id', $params->livro_tipo_id))
|
||||
->when($params->forma_farmaceutica_id, fn ($q) => $q->where('cadastro_material.forma_farmaceutica_id', $params->forma_farmaceutica_id))
|
||||
->exists();
|
||||
|
||||
if ($isRemume) {
|
||||
$programasAcoes->push(['value' => 'is_remume', 'text' => 'REMUME']);
|
||||
}
|
||||
|
||||
return $programasAcoes;
|
||||
}
|
||||
|
||||
private static function getStatus($params)
|
||||
{
|
||||
$status = collect();
|
||||
|
||||
$ativo =DB::table('cadastro_material')
|
||||
->where('cadastro_material.is_ativo', true)
|
||||
->when($params->grupo_id, fn ($q) => $q->where('cadastro_material.grupo_id', $params->grupo_id))
|
||||
->when($params->subgrupo_id, fn ($q) => $q->where('cadastro_material.subgrupo_id', $params->subgrupo_id))
|
||||
->when($params->receita_tipo_id, fn ($q) => $q->where('cadastro_material.receita_tipo_id', $params->receita_tipo_id))
|
||||
->when($params->livro_id, fn ($q) => $q->where('cadastro_material.livro_registro_id', $params->livro_id))
|
||||
->when($params->livro_tipo_id, fn ($q) => $q->where('cadastro_material.livro_registro_tipo_id', $params->livro_tipo_id))
|
||||
->when($params->forma_farmaceutica_id, fn ($q) => $q->where('cadastro_material.forma_farmaceutica_id', $params->forma_farmaceutica_id))
|
||||
->when($params->programas_acoes, function ($q) use ($params) {
|
||||
foreach ($params->programas_acoes as $programaAcao) {
|
||||
$q->orWhere("cadastro_material.{$programaAcao}", true);
|
||||
}
|
||||
})
|
||||
->exists();
|
||||
|
||||
if ($ativo) {
|
||||
$status->push(['value' => true, 'text' => 'Ativo']);
|
||||
}
|
||||
|
||||
$inativo =DB::table('cadastro_material')
|
||||
->where('cadastro_material.is_ativo', false)
|
||||
->when($params->grupo_id, fn ($q) => $q->where('cadastro_material.grupo_id', $params->grupo_id))
|
||||
->when($params->subgrupo_id, fn ($q) => $q->where('cadastro_material.subgrupo_id', $params->subgrupo_id))
|
||||
->when($params->receita_tipo_id, fn ($q) => $q->where('cadastro_material.receita_tipo_id', $params->receita_tipo_id))
|
||||
->when($params->livro_id, fn ($q) => $q->where('cadastro_material.livro_registro_id', $params->livro_id))
|
||||
->when($params->livro_tipo_id, fn ($q) => $q->where('cadastro_material.livro_registro_tipo_id', $params->livro_tipo_id))
|
||||
->when($params->forma_farmaceutica_id, fn ($q) => $q->where('cadastro_material.forma_farmaceutica_id', $params->forma_farmaceutica_id))
|
||||
->when($params->programas_acoes, function ($q) use ($params) {
|
||||
foreach ($params->programas_acoes as $programaAcao) {
|
||||
$q->orWhere("cadastro_material.{$programaAcao}", true);
|
||||
}
|
||||
})
|
||||
->exists();
|
||||
|
||||
if ($inativo) {
|
||||
$status->push(['value' => false, 'text' => 'Inativo']);
|
||||
}
|
||||
|
||||
return $status;
|
||||
}
|
||||
|
||||
private static function setOrderBy($builder)
|
||||
{
|
||||
$columns = [
|
||||
'codigo_material' => 'codigo_material',
|
||||
'material_descricao' => 'material_descricao',
|
||||
'grupo_nome' => 'grupo_nome',
|
||||
'subgrupo_nome' => 'subgrupo_nome',
|
||||
'receita_tipo_nome' => 'receita_tipo_nome',
|
||||
'livro_nome' => 'livro_nome',
|
||||
'livro_tipo_nome' => 'livro_tipo_nome',
|
||||
'forma_farmaceutica_nome' => 'forma_farmaceutica_nome',
|
||||
'programa_acao' => 'programa_acao',
|
||||
'status' => 'status',
|
||||
'possui_lote' => 'possui_lote',
|
||||
'material_bnafar_codigo' => 'material_bnafar_codigo',
|
||||
'material_obm_codigo' => 'material_obm_codigo',
|
||||
];
|
||||
|
||||
if (is_null(request()->sort_by)) {
|
||||
$builder->orderByRaw(join(', ', $columns));
|
||||
return;
|
||||
}
|
||||
|
||||
$column = $columns[request()->sort_by];
|
||||
$direction = DataUtil::getBooleanValueFromStringBoolean(request()->sort_desc) ? 'DESC' : 'ASC';
|
||||
|
||||
unset($columns[request()->sort_by]);
|
||||
|
||||
$builder->orderByRaw("{$column} {$direction}, " . join(', ', $columns));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user