1251 lines
52 KiB
PHP
1251 lines
52 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Almoxarifado\Relatorios;
|
|
|
|
use App\Enums\Almoxarifado\MotivoBaixaTipo;
|
|
use App\Enums\Almoxarifado\SaidaTipo as SaidaTipoEnum;
|
|
use App\Enums\Cadastro\Estabelecimento\SetorTipo;
|
|
use App\Models\Almoxarifado\MotivoBaixa;
|
|
use App\Models\Almoxarifado\SaidaTipo;
|
|
use App\Models\Cadastro\Estabelecimento\CentroCusto;
|
|
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
|
|
use App\Models\Cadastro\Estabelecimento\Unidade;
|
|
use App\Models\Cadastro\Grupo\Grupo;
|
|
use App\Models\Cadastro\Material\Material;
|
|
use App\Models\Cadastro\Subgrupo\Subgrupo;
|
|
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
|
use App\Services\Cadastro\Material\MaterialService;
|
|
use App\Services\Service;
|
|
use App\Utils\DataUtil;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class SaidaService extends Service
|
|
{
|
|
public static function index()
|
|
{
|
|
$totalizadores = (object) [
|
|
'quantidade' => 0,
|
|
'tipos' => collect()
|
|
];
|
|
|
|
$periodo = [
|
|
'start' => Carbon::createFromFormat('d/m/Y', request()->periodo['start'])->setTime(0, 0, 0),
|
|
'end' => Carbon::createFromFormat('d/m/Y', request()->periodo['end'])->setTime(23, 59, 59)
|
|
];
|
|
|
|
$saidasBuilder = DB::table('almoxarifado_saida_item_entrada_item as saida_item_entrada_item')
|
|
->join(
|
|
'almoxarifado_entrada_item as entrada_item',
|
|
'entrada_item.id',
|
|
'saida_item_entrada_item.entrada_item_id'
|
|
)
|
|
->join(
|
|
'almoxarifado_saida_item as saida_item',
|
|
'saida_item.id',
|
|
'saida_item_entrada_item.saida_item_id'
|
|
)
|
|
->join(
|
|
'cadastro_lotacao as saida_item_lotacao',
|
|
'saida_item_lotacao.id',
|
|
'saida_item.created_lotacao_id'
|
|
)
|
|
->join(
|
|
'cadastro_usuario as saida_item_usuario',
|
|
'saida_item_usuario.id',
|
|
'saida_item_lotacao.usuario_id'
|
|
)
|
|
->join(
|
|
'cadastro_cidadao as saida_item_cidadao',
|
|
'saida_item_cidadao.id',
|
|
'saida_item_usuario.cidadao_id'
|
|
)
|
|
->join(
|
|
'almoxarifado_saida as saida',
|
|
'saida.id',
|
|
'saida_item.saida_id'
|
|
)
|
|
->join(
|
|
'cadastro_centro_custo as saida_centro_custo',
|
|
'saida_centro_custo.id',
|
|
'saida.centro_custo_id'
|
|
)
|
|
->join(
|
|
'cadastro_setor as saida_setor',
|
|
'saida_setor.id',
|
|
'saida_centro_custo.setor_id'
|
|
)
|
|
->join(
|
|
'cadastro_infraestrutura as saida_infraestrutura',
|
|
'saida_infraestrutura.id',
|
|
'saida_centro_custo.infraestrutura_id'
|
|
)
|
|
->join(
|
|
'cadastro_unidade as saida_unidade',
|
|
'saida_unidade.id',
|
|
'saida_infraestrutura.unidade_id'
|
|
)
|
|
->join(
|
|
'almoxarifado_saida_tipo as saida_tipo',
|
|
'saida_tipo.id',
|
|
'saida.tipo_id'
|
|
)
|
|
->join(
|
|
'cadastro_material as material',
|
|
'material.id',
|
|
'saida_item.material_id'
|
|
)
|
|
->join(
|
|
'cadastro_apresentacao as apresentacao',
|
|
'apresentacao.id',
|
|
'material.apresentacao_id'
|
|
)
|
|
->join(
|
|
'cadastro_grupo as grupo',
|
|
'grupo.id',
|
|
'material.grupo_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_subgrupo as subgrupo',
|
|
'subgrupo.id',
|
|
'material.subgrupo_id'
|
|
)
|
|
->leftJoin(
|
|
'almoxarifado_saida_baixa as saida_baixa',
|
|
'saida_baixa.saida_id',
|
|
'saida.id'
|
|
)
|
|
->leftJoin(
|
|
'almoxarifado_motivo_baixa as saida_baixa_motivo',
|
|
'saida_baixa_motivo.id',
|
|
'saida_baixa.motivo_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario as saida_baixa_usuario_requisitante',
|
|
'saida_baixa_usuario_requisitante.id',
|
|
'saida_baixa.usuario_solicitante_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as saida_baixa_cidadao_requisitante',
|
|
'saida_baixa_cidadao_requisitante.id',
|
|
'saida_baixa_usuario_requisitante.cidadao_id'
|
|
)
|
|
->leftJoin(
|
|
'almoxarifado_saida_requisicao as saida_requisicao',
|
|
'saida_requisicao.saida_id',
|
|
'saida.id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_centro_custo as saida_requisicao_centro_custo_requisitante',
|
|
'saida_requisicao_centro_custo_requisitante.id',
|
|
'saida_requisicao.centro_custo_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_setor as saida_requisicao_setor_requisitante',
|
|
'saida_requisicao_setor_requisitante.id',
|
|
'saida_requisicao_centro_custo_requisitante.setor_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_infraestrutura as saida_requisicao_infraestrutura_requisitante',
|
|
'saida_requisicao_infraestrutura_requisitante.id',
|
|
'saida_requisicao_centro_custo_requisitante.infraestrutura_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_unidade as saida_requisicao_unidade_requisitante',
|
|
'saida_requisicao_unidade_requisitante.id',
|
|
'saida_requisicao_infraestrutura_requisitante.unidade_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario as saida_requisicao_usuario_requisitante',
|
|
'saida_requisicao_usuario_requisitante.id',
|
|
'saida_requisicao.usuario_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as saida_requisicao_cidadao_requisitante',
|
|
'saida_requisicao_cidadao_requisitante.id',
|
|
'saida_requisicao_usuario_requisitante.cidadao_id'
|
|
)
|
|
->leftJoin(
|
|
'almoxarifado_saida_transferencia as saida_transferencia',
|
|
'saida_transferencia.saida_id',
|
|
'saida.id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_centro_custo as saida_transferencia_centro_custo_requisitante',
|
|
'saida_transferencia_centro_custo_requisitante.id',
|
|
'saida_transferencia.centro_custo_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_setor as saida_transferencia_setor_requisitante',
|
|
'saida_transferencia_setor_requisitante.id',
|
|
'saida_transferencia_centro_custo_requisitante.setor_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_infraestrutura as saida_transferencia_infraestrutura_requisitante',
|
|
'saida_transferencia_infraestrutura_requisitante.id',
|
|
'saida_transferencia_centro_custo_requisitante.infraestrutura_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_unidade as saida_transferencia_unidade_requisitante',
|
|
'saida_transferencia_unidade_requisitante.id',
|
|
'saida_transferencia_infraestrutura_requisitante.unidade_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario as saida_transferencia_usuario_requisitante',
|
|
'saida_transferencia_usuario_requisitante.id',
|
|
'saida_transferencia.usuario_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as saida_transferencia_cidadao_requisitante',
|
|
'saida_transferencia_cidadao_requisitante.id',
|
|
'saida_transferencia_usuario_requisitante.cidadao_id'
|
|
)
|
|
->leftJoin(
|
|
'almoxarifado_requisicao_resposta as requisicao_resposta',
|
|
'requisicao_resposta.saida_id',
|
|
'saida.id'
|
|
)
|
|
->leftJoin(
|
|
'almoxarifado_requisicao as requisicao',
|
|
'requisicao.id',
|
|
'requisicao_resposta.requisicao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_centro_custo as requisicao_centro_custo_requisitante',
|
|
'requisicao_centro_custo_requisitante.id',
|
|
'requisicao.created_centro_custo_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_setor as requisicao_setor_requisitante',
|
|
'requisicao_setor_requisitante.id',
|
|
'requisicao_centro_custo_requisitante.setor_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_infraestrutura as requisicao_infraestrutura_requisitante',
|
|
'requisicao_infraestrutura_requisitante.id',
|
|
'requisicao_centro_custo_requisitante.infraestrutura_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_unidade as requisicao_unidade_requisitante',
|
|
'requisicao_unidade_requisitante.id',
|
|
'requisicao_infraestrutura_requisitante.unidade_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_lotacao as requisicao_lotacao_requisitante',
|
|
'requisicao_lotacao_requisitante.id',
|
|
'requisicao.created_lotacao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario as requisicao_usuario_requisitante',
|
|
'requisicao_usuario_requisitante.id',
|
|
'requisicao_lotacao_requisitante.usuario_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as requisicao_cidadao_requisitante',
|
|
'requisicao_cidadao_requisitante.id',
|
|
'requisicao_usuario_requisitante.cidadao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_unidade_medida as apresentacao_unidade_medida',
|
|
'apresentacao_unidade_medida.id',
|
|
'material.apresentacao_unidade_medida_id'
|
|
)
|
|
->whereNull('saida_item.estornado_em')
|
|
->where('saida.finalizada', true)
|
|
->whereBetween('saida.created_at', $periodo)
|
|
->when(request()->tipo_id,
|
|
fn ($q, $id) => $q->where('saida.tipo_id', $id),
|
|
fn ($q) => $q->where('saida.tipo_id', '<>', SaidaTipoEnum::ESTORNO)
|
|
)
|
|
->when(request()->unidade_id, fn ($q, $id) => $q->where('saida_unidade.id', $id))
|
|
->when(request()->infraestrutura_id, fn ($q, $id) => $q->where('saida_infraestrutura.id', $id))
|
|
->when(request()->centro_custo_id, fn ($q, $id) => $q->where('saida_centro_custo.id', $id))
|
|
->when(request()->tipo_id, fn ($q, $id) => $q->where('saida_tipo.id', $id))
|
|
->when(request()->motivo_id, fn ($q, $id) => $q->where('saida_baixa_motivo.id', $id))
|
|
->when(request()->usuario_saida_id, fn ($q, $id) => $q->where('saida_item_usuario.id', $id))
|
|
->when(request()->unidade_requisitante_id, fn ($q, $id) => $q->where(fn ($q) => $q
|
|
->where('saida_requisicao_unidade_requisitante.id', $id)
|
|
->orWhere('saida_transferencia_unidade_requisitante.id', $id)
|
|
->orWhere('requisicao_unidade_requisitante.id', $id)
|
|
))
|
|
->when(request()->infraestrutura_requisitante_id, fn ($q, $id) => $q->where(fn ($q) => $q
|
|
->where('saida_requisicao_infraestrutura_requisitante.id', $id)
|
|
->orWhere('saida_transferencia_infraestrutura_requisitante.id', $id)
|
|
->orWhere('requisicao_infraestrutura_requisitante.id', $id)
|
|
))
|
|
->when(request()->centro_custo_requisitante_id, fn ($q, $id) => $q->where(fn ($q) => $q
|
|
->where('saida_requisicao_centro_custo_requisitante.id', $id)
|
|
->orWhere('saida_transferencia_centro_custo_requisitante.id', $id)
|
|
->orWhere('requisicao_centro_custo_requisitante.id', $id)
|
|
))
|
|
->when(request()->usuario_requisitante_id, fn ($q, $id) => $q->where(fn ($q) => $q
|
|
->where('saida_baixa_usuario_requisitante.id', $id)
|
|
->orWhere('saida_requisicao_usuario_requisitante.id', $id)
|
|
->orWhere('saida_transferencia_usuario_requisitante.id', $id)
|
|
->orWhere('requisicao_usuario_requisitante.id', $id)
|
|
))
|
|
->when(request()->grupo_id, fn ($q, $id) => $q->where('grupo.id', $id))
|
|
->when(request()->subgrupo_id, fn ($q, $id) => $q->where('subgrupo.id', $id))
|
|
->when(request()->material_id, fn ($q, $id) => $q->where('material.id', $id))
|
|
->select(DB::raw("
|
|
saida.created_at as data_hora_saida,
|
|
COALESCE(
|
|
CAST(requisicao.created_at AS DATE),
|
|
saida_requisicao.data
|
|
) as data_requisicao,
|
|
saida_tipo.id as tipo_id,
|
|
saida_tipo.nome as tipo,
|
|
material.codigo_material,
|
|
" . MaterialService::getDescricaoCompletaRaw(
|
|
'material',
|
|
'apresentacao',
|
|
'apresentacao_unidade_medida'
|
|
) . " as material,
|
|
entrada_item.lote,
|
|
entrada_item.validade_lote as validade,
|
|
grupo.nome as grupo,
|
|
subgrupo.nome as subgrupo,
|
|
saida_baixa_motivo.descricao as motivo,
|
|
saida_baixa.justificativa,
|
|
saida_unidade.nome_fantasia as unidade,
|
|
COALESCE(saida_infraestrutura.nome, saida_unidade.nome_fantasia) as infraestrutura,
|
|
saida_setor.nome as setor,
|
|
saida_item_cidadao.nome as usuario_saida,
|
|
COALESCE(
|
|
saida_requisicao_unidade_requisitante.nome_fantasia,
|
|
saida_transferencia_unidade_requisitante.nome_fantasia,
|
|
requisicao_unidade_requisitante.nome_fantasia
|
|
) as unidade_requisitante,
|
|
COALESCE (
|
|
COALESCE(
|
|
saida_requisicao_infraestrutura_requisitante.nome,
|
|
saida_requisicao_unidade_requisitante.nome_fantasia
|
|
),
|
|
COALESCE(
|
|
saida_transferencia_infraestrutura_requisitante.nome,
|
|
saida_transferencia_unidade_requisitante.nome_fantasia
|
|
),
|
|
COALESCE(
|
|
requisicao_infraestrutura_requisitante.nome,
|
|
requisicao_unidade_requisitante.nome_fantasia
|
|
)
|
|
) as infraestrutura_requisitante,
|
|
COALESCE (
|
|
saida_requisicao_setor_requisitante.nome,
|
|
saida_transferencia_setor_requisitante.nome,
|
|
requisicao_setor_requisitante.nome
|
|
) as setor_requisitante,
|
|
COALESCE (
|
|
saida_baixa_cidadao_requisitante.nome,
|
|
saida_requisicao_cidadao_requisitante.nome,
|
|
saida_transferencia_cidadao_requisitante.nome,
|
|
requisicao_cidadao_requisitante.nome
|
|
) as usuario_requisitante,
|
|
saida_item_entrada_item.quantidade_saida as quantidade
|
|
"));
|
|
|
|
self::setOrderBy($saidasBuilder);
|
|
|
|
$saidas = $saidasBuilder->get();
|
|
|
|
$saidas->each(function ($saida) use ($totalizadores) {
|
|
|
|
$totalizadores->quantidade += $saida->quantidade;
|
|
|
|
$totalizadorTipo = $totalizadores->tipos->where('id', $saida->tipo_id)->first();
|
|
|
|
if (is_null($totalizadorTipo)) {
|
|
|
|
$totalizadorTipo = (object) [
|
|
'id' => $saida->tipo_id,
|
|
'nome' => $saida->tipo,
|
|
'quantidade' => 0
|
|
];
|
|
|
|
$totalizadores->tipos->push($totalizadorTipo);
|
|
}
|
|
|
|
$totalizadorTipo->quantidade += $saida->quantidade;
|
|
|
|
unset($saida->tipo_id);
|
|
});
|
|
|
|
$totalizadores->tipos = $totalizadores->tipos->sortBy('nome')->values();
|
|
|
|
return compact('saidas', 'totalizadores');
|
|
}
|
|
|
|
private static function setOrderBy($builder)
|
|
{
|
|
if (is_null(request()->sortBy)) {
|
|
|
|
$builder->orderByRaw('saida_item_entrada_item.saida_item_id, saida_item_entrada_item.entrada_item_id');
|
|
|
|
return;
|
|
}
|
|
|
|
$columns = [
|
|
'data_hora_saida' => 'saida.created_at',
|
|
'data_requisicao' => 'COALESCE(
|
|
requisicao.created_at,
|
|
saida_requisicao.data
|
|
)',
|
|
'tipo' => 'saida_tipo.nome',
|
|
'codigo_material' => 'material.codigo_material',
|
|
'material' => MaterialService::getDescricaoCompletaRaw(
|
|
'material',
|
|
'apresentacao',
|
|
'apresentacao_unidade_medida'
|
|
),
|
|
'lote' => 'entrada_item.lote',
|
|
'validade' => 'entrada_item.validade_lote',
|
|
'grupo' => 'grupo.nome',
|
|
'subgrupo' => 'subgrupo.nome',
|
|
'motivo' => 'saida_baixa_motivo.descricao',
|
|
'justificativa' => 'saida_baixa.justificativa',
|
|
'unidade' => 'saida_unidade.nome_fantasia',
|
|
'infraestrutura' => 'COALESCE(
|
|
saida_infraestrutura.nome,
|
|
saida_unidade.nome_fantasia
|
|
)',
|
|
'setor' => 'saida_setor.nome',
|
|
'usuario_saida' => 'saida_item_cidadao.nome',
|
|
'unidade_requisitante' => 'COALESCE(
|
|
saida_requisicao_unidade_requisitante.nome_fantasia,
|
|
saida_transferencia_unidade_requisitante.nome_fantasia,
|
|
requisicao_unidade_requisitante.nome_fantasia
|
|
)',
|
|
'infraestrutura_requisitante' => 'COALESCE (
|
|
COALESCE(
|
|
saida_requisicao_infraestrutura_requisitante.nome,
|
|
saida_requisicao_unidade_requisitante.nome_fantasia
|
|
),
|
|
COALESCE(
|
|
saida_transferencia_infraestrutura_requisitante.nome,
|
|
saida_transferencia_unidade_requisitante.nome_fantasia
|
|
),
|
|
COALESCE(
|
|
requisicao_infraestrutura_requisitante.nome,
|
|
requisicao_unidade_requisitante.nome_fantasia
|
|
)
|
|
)',
|
|
'setor_requisitante' => 'COALESCE (
|
|
saida_requisicao_setor_requisitante.nome,
|
|
saida_transferencia_setor_requisitante.nome,
|
|
requisicao_setor_requisitante.nome
|
|
)',
|
|
'usuario_requisitante' => 'COALESCE (
|
|
saida_baixa_cidadao_requisitante.nome,
|
|
saida_requisicao_cidadao_requisitante.nome,
|
|
saida_transferencia_cidadao_requisitante.nome,
|
|
requisicao_cidadao_requisitante.nome
|
|
)',
|
|
'quantidade' => 'saida_item_entrada_item.quantidade_saida',
|
|
];
|
|
|
|
$column = $columns[request()->sortBy];
|
|
$direction = DataUtil::getBooleanValueFromStringBoolean(request()->sortDesc) ? 'DESC' : 'ASC';
|
|
|
|
$builder->orderByRaw(
|
|
"{$column} {$direction}, 'saida_item_entrada_item.saida_item_id, saida_item_entrada_item.entrada_item_id'"
|
|
);
|
|
}
|
|
|
|
public static function list()
|
|
{
|
|
$data = (object) [
|
|
'additionals' => [],
|
|
'form' => [],
|
|
'model' => [],
|
|
];
|
|
|
|
$params = self::getParams();
|
|
|
|
$sets = [
|
|
'periodo' => function () use ($data) {
|
|
|
|
$data->model['periodo'] = ['start' => null, 'end' => null];
|
|
},
|
|
'unidade' => function () use ($data, $params) {
|
|
|
|
$unidadesData = self::getUnidadesData($params);
|
|
|
|
$data->form['unidades'] = $unidadesData['form'];
|
|
$data->model['unidade_id'] = $unidadesData['model'];
|
|
},
|
|
'infraestrutura' => function () use ($data, $params) {
|
|
|
|
$infraestruturasData = self::getInfraestruturasData($params);
|
|
|
|
$data->form['infraestruturas'] = $infraestruturasData['form'];
|
|
$data->model['infraestrutura_id'] = $infraestruturasData['model'];
|
|
},
|
|
'centro_custo' => function () use ($data, $params) {
|
|
|
|
$centrosDeCustoData = self::getCentrosDeCustoData($params);
|
|
|
|
$data->form['centros_custo'] = $centrosDeCustoData['form'];
|
|
$data->model['centro_custo_id'] = $centrosDeCustoData['model'];
|
|
},
|
|
'tipo' => function () use ($data, $params) {
|
|
|
|
$tiposSaidaData = self::getTiposSaidaData($params);
|
|
|
|
$data->form['tipos'] = $tiposSaidaData['form'];
|
|
$data->model['tipo_id'] = $tiposSaidaData['model'];
|
|
},
|
|
'motivo' => function () use ($data, $params) {
|
|
|
|
$motivosBaixaData = self::getMotivosBaixaData($params);
|
|
|
|
$data->form['motivos'] = $motivosBaixaData['form'];
|
|
$data->model['motivo_id'] = $motivosBaixaData['model'];
|
|
},
|
|
'usuario_saida' => function () use ($data, $params) {
|
|
|
|
$usuariosQueRealizaramSaidaData = self::getUsuariosQueRealizaramSaidaData($params);
|
|
|
|
$data->form['usuarios_saida'] = $usuariosQueRealizaramSaidaData['form'];
|
|
$data->model['usuario_saida_id'] = $usuariosQueRealizaramSaidaData['model'];
|
|
},
|
|
'unidade_requisitante' => function () use ($data, $params) {
|
|
|
|
$unidadesRequisitantesData = self::getUnidadesRequisitantesData($params);
|
|
|
|
$data->form['unidades_requisitantes'] = $unidadesRequisitantesData['form'];
|
|
$data->model['unidade_requisitante_id'] = $unidadesRequisitantesData['model'];
|
|
},
|
|
'infraestrutura_requisitante' => function () use ($data, $params) {
|
|
|
|
$infraestruturasRequisitantesData = self::getInfraestruturasRequisitantesData($params);
|
|
|
|
$data->form['infraestruturas_requisitantes'] = $infraestruturasRequisitantesData['form'];
|
|
$data->model['infraestrutura_requisitante_id'] = $infraestruturasRequisitantesData['model'];
|
|
},
|
|
'centro_custo_requisitante' => function () use ($data, $params) {
|
|
|
|
$centrosDeCustoRequisitantesData = self::getCentrosDeCustoRequisitantesData($params);
|
|
|
|
$data->form['centros_custo_requisitantes'] = $centrosDeCustoRequisitantesData['form'];
|
|
$data->model['centro_custo_requisitante_id'] = $centrosDeCustoRequisitantesData['model'];
|
|
},
|
|
'usuario_requisitante' => function () use ($data, $params) {
|
|
|
|
$usuariosRequisitantesData = self::getUsuariosRequisitantesData($params);
|
|
|
|
$data->form['usuarios_requisitantes'] = $usuariosRequisitantesData['form'];
|
|
$data->model['usuario_requisitante_id'] = $usuariosRequisitantesData['model'];
|
|
},
|
|
'grupo' => function () use ($data, $params) {
|
|
|
|
$gruposData = self::getGruposData($params);
|
|
|
|
$data->form['grupos'] = $gruposData['form'];
|
|
$data->model['grupo_id'] = $gruposData['model'];
|
|
},
|
|
'subgrupo' => function () use ($data, $params) {
|
|
|
|
$subgruposData = self::getSubgruposData($params);
|
|
|
|
$data->form['subgrupos'] = $subgruposData['form'];
|
|
$data->model['subgrupo_id'] = $subgruposData['model'];
|
|
},
|
|
'material' => function () use ($data) {
|
|
|
|
$data->model['material'] = null;
|
|
}
|
|
];
|
|
|
|
$load = is_null(request()->load_from);
|
|
|
|
if ($load) {
|
|
|
|
$data->additionals = [
|
|
'data_atual' => Carbon::now()->format('d/m/Y'),
|
|
'is_almoxarifado' => self::getCurrentCentroCusto()->setor->tipo_id === SetorTipo::ALMOXARIFADO,
|
|
];
|
|
}
|
|
|
|
foreach ($sets as $field => $set) {
|
|
|
|
if ($load) {
|
|
|
|
$set();
|
|
}
|
|
else if ($field === request()->load_from) {
|
|
|
|
$load = true;
|
|
}
|
|
}
|
|
|
|
foreach ($data as $property => $itens) {
|
|
|
|
if (empty($itens)) {
|
|
|
|
unset($data->{$property});
|
|
}
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
private static function getParams()
|
|
{
|
|
$params = request()->only([
|
|
'periodo',
|
|
'unidade_id',
|
|
'infraestrutura_id',
|
|
'centro_custo_id',
|
|
'tipo_id',
|
|
'motivo_id',
|
|
'usuario_saida_id',
|
|
'unidade_requisitante_id',
|
|
'infraestrutura_requisitante_id',
|
|
'centro_custo_requisitante_id',
|
|
'usuario_requisitante_id',
|
|
'grupo_id',
|
|
'subgrupo_id',
|
|
]);
|
|
|
|
if (isset($params['periodo'])
|
|
&& !is_null($params['periodo']['start'])
|
|
&& !is_null($params['periodo']['end'])
|
|
) {
|
|
|
|
$start = Carbon::createFromFormat('d/m/Y', $params['periodo']['start'])->setTime(0, 0, 0);
|
|
$end = Carbon::createFromFormat('d/m/Y', $params['periodo']['end'])->setTime(23, 59, 59);
|
|
|
|
$params['periodo']['start'] = $start;
|
|
$params['periodo']['end'] = $end;
|
|
}
|
|
else {
|
|
|
|
$params['periodo'] = null;
|
|
}
|
|
|
|
return $params;
|
|
}
|
|
|
|
private static function getUnidadesData($params)
|
|
{
|
|
$unidades = collect();
|
|
$id = null;
|
|
|
|
$centroCustoLogado = self::getCurrentCentroCusto();
|
|
$isAlmoxarifado = $centroCustoLogado->setor->tipo_id === SetorTipo::ALMOXARIFADO;
|
|
|
|
if (!$isAlmoxarifado)
|
|
{
|
|
$unidades->push((object) [
|
|
'id' => $centroCustoLogado->infraestrutura->unidade->id,
|
|
'nome_fantasia' => $centroCustoLogado->infraestrutura->unidade->nome_fantasia,
|
|
]);
|
|
|
|
$id = $centroCustoLogado->infraestrutura->unidade->id;
|
|
}
|
|
else if (!is_null($params['periodo'])) {
|
|
|
|
$unidades = Unidade::whereHas('infraestruturas', fn ($q) => $q
|
|
->whereHas('centrosCusto', fn ($q) => self::setWhereForFilterCentroCustoSaida($q, $params)))
|
|
->orderBy('nome_fantasia')
|
|
->get(['id', 'nome_fantasia']);
|
|
}
|
|
|
|
return ['form' => $unidades, 'model' => $id];
|
|
}
|
|
|
|
private static function getInfraestruturasData($params)
|
|
{
|
|
$infraestruturas = collect();
|
|
$id = null;
|
|
|
|
$centroCustoLogado = self::getCurrentCentroCusto();
|
|
$isAlmoxarifado = $centroCustoLogado->setor->tipo_id === SetorTipo::ALMOXARIFADO;
|
|
|
|
if (!$isAlmoxarifado) {
|
|
|
|
$infraestruturas->push((object) [
|
|
'id' => $centroCustoLogado->infraestrutura->id,
|
|
'nome' => $centroCustoLogado->infraestrutura->nome,
|
|
]);
|
|
|
|
$id = $centroCustoLogado->infraestrutura->id;
|
|
}
|
|
else if (!is_null($params['periodo']) && !is_null($params['unidade_id'])) {
|
|
|
|
$infraestruturas = Infraestrutura::setEagerLoads([])
|
|
->where('unidade_id', $params['unidade_id'])
|
|
->whereHas('centrosCusto', fn ($q) => self::setWhereForFilterCentroCustoSaida($q, $params))
|
|
->get(['id', 'nome', 'principal', 'unidade_id'])
|
|
->map(fn ($i) => ['id' => $i->id, 'nome' => $i->nome])
|
|
->sortBy('nome')
|
|
->values();
|
|
}
|
|
|
|
return ['form' => $infraestruturas, 'model' => $id];
|
|
}
|
|
|
|
private static function getCentrosDeCustoData($params)
|
|
{
|
|
$centrosCusto = collect();
|
|
$id = null;
|
|
|
|
$centroCustoLogado = self::getCurrentCentroCusto();
|
|
$isAlmoxarifado = $centroCustoLogado->setor->tipo_id === SetorTipo::ALMOXARIFADO;
|
|
|
|
if (!$isAlmoxarifado) {
|
|
|
|
$centrosCusto->push((object) [
|
|
'id' => $centroCustoLogado->id,
|
|
'setor_nome' => $centroCustoLogado->setor->nome,
|
|
]);
|
|
|
|
$id = $centroCustoLogado->id;
|
|
}
|
|
else if (!is_null($params['periodo']) && !is_null($params['infraestrutura_id'])) {
|
|
|
|
$centrosCusto = CentroCusto::where('infraestrutura_id', $params['infraestrutura_id'])
|
|
->where(fn ($q) => self::setWhereForFilterCentroCustoSaida($q, $params))
|
|
->get(['id', 'setor_id'])
|
|
->map(fn ($cc) => [
|
|
'id' => $cc->id,
|
|
'setor_nome' => $cc->setor()->first(['nome'])->nome
|
|
])
|
|
->sortBy('setor_nome')
|
|
->values();
|
|
}
|
|
|
|
return ['form' => $centrosCusto, 'model' => $id];
|
|
}
|
|
|
|
private static function setWhereForFilterCentroCustoSaida($query, $params)
|
|
{
|
|
return $query->whereHas('almoxarifadoSaidas', fn ($q) => $q
|
|
->where('finalizada', true)
|
|
->where('tipo_id', '<>', SaidaTipoEnum::ESTORNO)
|
|
->whereBetween('created_at', $params['periodo'])
|
|
->whereHas('itens', fn ($q) => $q->whereNull('estornado_em'))
|
|
);
|
|
}
|
|
|
|
private static function getTiposSaidaData($params)
|
|
{
|
|
$tipos = collect();
|
|
$id = null;
|
|
|
|
if (!is_null($params['periodo'])) {
|
|
|
|
$tipos = SaidaTipo::where('id', '<>', SaidaTipoEnum::ESTORNO)
|
|
->whereHas('saidas', fn ($q) =>
|
|
self::setWhereForSelectedCentroCustoSaida($q, $params)
|
|
->where('finalizada', true)
|
|
->whereBetween('created_at', $params['periodo'])
|
|
->whereHas('itens', fn ($q) => $q->whereNull('estornado_em'))
|
|
)
|
|
->orderBy('nome')
|
|
->get(['id', 'nome']);
|
|
}
|
|
|
|
return ['form' => $tipos, 'model' => $id];
|
|
}
|
|
|
|
private static function getMotivosBaixaData($params)
|
|
{
|
|
$motivos = collect();
|
|
$id = null;
|
|
|
|
if (!is_null($params['periodo']) && $params['tipo_id'] == SaidaTipoEnum::BAIXA) {
|
|
|
|
$motivos = MotivoBaixa::whereHas('baixas', fn ($q) => $q
|
|
->whereHas('saida', fn ($q) =>
|
|
self::setWhereForSelectedCentroCustoSaida($q, $params)
|
|
->where('finalizada', true)
|
|
->whereBetween('created_at', $params['periodo'])
|
|
->whereHas('itens', fn ($q) => $q->whereNull('estornado_em'))
|
|
))
|
|
->orderBy('descricao')
|
|
->get(['id', 'tipo_id', 'descricao']);
|
|
}
|
|
|
|
return ['form' => $motivos, 'model' => $id];
|
|
}
|
|
|
|
private static function getUsuariosQueRealizaramSaidaData($params)
|
|
{
|
|
$usuarios = collect();
|
|
$id = null;
|
|
|
|
if (!is_null($params['periodo'])) {
|
|
|
|
$usuarios = Usuario::setEagerLoads([])
|
|
->whereHas('lotacoes', fn ($q) => $q
|
|
->whereHas('almoxarifadoSaidaItens', fn ($q) => $q
|
|
->whereNull('estornado_em')
|
|
->whereHas('saida', fn ($q) =>
|
|
self::setWhereForSelectedCentroCustoSaida($q, $params)
|
|
->where('finalizada', true)
|
|
->whereBetween('created_at', $params['periodo'])
|
|
->when($params['tipo_id'],
|
|
fn ($q, $tipoId) => $q->where('tipo_id', $tipoId),
|
|
fn ($q) => $q->where('tipo_id', '<>', SaidaTipoEnum::ESTORNO)
|
|
)
|
|
->when($params['motivo_id'], fn ($q, $motivoId) => $q
|
|
->whereHas('baixa', fn ($q) => $q->where('motivo_id', $motivoId))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
->get(['id', 'cidadao_id'])
|
|
->map(fn ($u) => [
|
|
'id' => $u->id,
|
|
'nome' => $u->cidadao()->setEagerLoads([])->first(['nome'])->nome
|
|
])
|
|
->sortBy('nome')
|
|
->values();
|
|
}
|
|
|
|
return ['form' => $usuarios, 'model' => $id];
|
|
}
|
|
|
|
private static function getUnidadesRequisitantesData($params)
|
|
{
|
|
$unidades = collect();
|
|
$id = null;
|
|
|
|
$tipos = collect([
|
|
SaidaTipoEnum::INVENTARIO,
|
|
SaidaTipoEnum::BAIXA,
|
|
SaidaTipoEnum::DISPENSACAO_FARMACIA
|
|
]);
|
|
|
|
if (!is_null($params['periodo']) && !$tipos->contains($params['tipo_id'])) {
|
|
|
|
$unidades = Unidade::whereHas('infraestruturas', fn ($q) => $q
|
|
->whereHas('centrosCusto', fn ($q) => self::setWhereForFilterCentroCustoRequisitante($q, $params)))
|
|
->orderBy('nome_fantasia')
|
|
->get(['id', 'nome_fantasia']);
|
|
}
|
|
|
|
return ['form' => $unidades, 'model' => $id];
|
|
}
|
|
|
|
private static function getInfraestruturasRequisitantesData($params)
|
|
{
|
|
$infraestruturas = collect();
|
|
$id = null;
|
|
|
|
if (!is_null($params['periodo']) && !is_null($params['unidade_requisitante_id'])) {
|
|
|
|
$infraestruturas = Infraestrutura::setEagerLoads([])
|
|
->where('unidade_id', $params['unidade_requisitante_id'])
|
|
->whereHas('centrosCusto', fn ($q) => self::setWhereForFilterCentroCustoRequisitante($q, $params))
|
|
->get(['id', 'nome', 'principal', 'unidade_id'])
|
|
->map(fn ($i) => ['id' => $i->id, 'nome' => $i->nome])
|
|
->sortBy('nome')
|
|
->values();
|
|
}
|
|
|
|
return ['form' => $infraestruturas, 'model' => $id];
|
|
}
|
|
|
|
private static function getCentrosDeCustoRequisitantesData($params)
|
|
{
|
|
$centrosCusto = collect();
|
|
$id = null;
|
|
|
|
if (!is_null($params['periodo']) && !is_null($params['infraestrutura_requisitante_id'])) {
|
|
|
|
$centrosCusto = CentroCusto::where('infraestrutura_id', $params['infraestrutura_requisitante_id'])
|
|
->where(fn ($q) => self::setWhereForFilterCentroCustoRequisitante($q, $params))
|
|
->get(['id', 'setor_id'])
|
|
->map(fn ($cc) => [
|
|
'id' => $cc->id,
|
|
'setor_nome' => $cc->setor()->first(['nome'])->nome
|
|
])
|
|
->sortBy('setor_nome')
|
|
->values();
|
|
}
|
|
|
|
return ['form' => $centrosCusto, 'model' => $id];
|
|
}
|
|
|
|
private static function setWhereForFilterCentroCustoRequisitante($query, $params)
|
|
{
|
|
$setWhereSaida = fn ($query) => $query
|
|
->whereHas('saida', fn ($q) =>
|
|
self::setWhereForSelectedCentroCustoSaida($q, $params)
|
|
->where('finalizada', true)
|
|
->whereBetween('created_at', $params['periodo'])
|
|
->whereHas('itens', fn ($q) => $q
|
|
->whereNull('estornado_em')
|
|
->when($params['usuario_saida_id'], fn ($q, $usuarioId) => $q
|
|
->whereHas('createdLotacao', fn ($q) => $q->where('usuario_id', $usuarioId))
|
|
)
|
|
)
|
|
);
|
|
|
|
$setWhereSaidaManual = fn ($query) => $query
|
|
->whereHas('almoxarifadoSaidaRequisicoes', fn ($q) => $setWhereSaida($q));
|
|
|
|
$setWhereTransferencia = fn ($query) => $query
|
|
->whereHas('almoxarifadoSaidaTransferencias', fn ($q) => $setWhereSaida($q));
|
|
|
|
$setWhereRequisicao = fn ($query) => $query
|
|
->whereHas('almoxarifadoRequisicoesRequisitante', fn ($q) => $q
|
|
->whereHas('respostas', fn ($q) => $setWhereSaida($q))
|
|
);
|
|
|
|
return $query->when($params['tipo_id'],
|
|
fn ($q, $tipoId) => $q
|
|
->when($tipoId == SaidaTipoEnum::MANUAL, fn ($q) => $setWhereSaidaManual($q))
|
|
->when($tipoId == SaidaTipoEnum::TRANSFERENCIA, fn ($q) => $setWhereTransferencia($q))
|
|
->when($tipoId == SaidaTipoEnum::REQUISICAO, fn ($q) => $setWhereRequisicao($q)),
|
|
fn ($q) => $q->where(fn ($q) => $q
|
|
->where(fn ($q) => $setWhereSaidaManual($q))
|
|
->orWhere(fn ($q) => $setWhereTransferencia($q))
|
|
->orWhere(fn ($q) => $setWhereRequisicao($q))
|
|
)
|
|
);
|
|
}
|
|
|
|
private static function getUsuariosRequisitantesData($params)
|
|
{
|
|
$usuarios = collect();
|
|
$id = null;
|
|
|
|
$tipos = collect([
|
|
SaidaTipoEnum::INVENTARIO,
|
|
SaidaTipoEnum::DISPENSACAO_FARMACIA
|
|
]);
|
|
|
|
if (!is_null($params['periodo'])
|
|
&& !$tipos->contains($params['tipo_id'])
|
|
&& ($params['tipo_id'] != SaidaTipoEnum::BAIXA || (
|
|
$params['tipo_id'] == SaidaTipoEnum::BAIXA && (
|
|
is_null($params['motivo_id'])
|
|
|| (MotivoBaixa::find($params['motivo_id'])->tipo_id === MotivoBaixaTipo::CONSUMO_INTERNO)
|
|
)
|
|
))
|
|
) {
|
|
|
|
$setWhereSaida = fn ($query) => $query->whereHas('saida', fn ($q) =>
|
|
self::setWhereForSelectedCentroCustoSaida($q, $params)
|
|
->where('finalizada', true)
|
|
->whereBetween('created_at', $params['periodo'])
|
|
->whereHas('itens', fn ($q) => $q
|
|
->whereNull('estornado_em')
|
|
->when($params['usuario_saida_id'], fn ($q, $usuarioId) => $q
|
|
->whereHas('createdLotacao', fn ($q) => $q->where('usuario_id', $usuarioId))
|
|
)
|
|
)
|
|
);
|
|
|
|
$setWhereSaidaManual = fn ($query) => $query
|
|
->whereHas('almoxarifadoSaidaRequisicoes', fn ($q) =>
|
|
self::setWhereForSelectedCentroCustoRequisitante($setWhereSaida($q), $params)
|
|
);
|
|
|
|
$setWhereTransferencia = fn ($query) => $query
|
|
->whereHas('almoxarifadoSaidaTransferencias', fn ($q) =>
|
|
self::setWhereForSelectedCentroCustoRequisitante($setWhereSaida($q), $params)
|
|
);
|
|
|
|
$setWhereRequisicao = fn ($query) => $query
|
|
->whereHas('lotacoes', fn ($q) => $q
|
|
->whereHas('almoxarifadoRequisicoesRequisitante', fn ($q) =>
|
|
self::setWhereForSelectedCentroCustoRequisitante($q, $params, true)
|
|
->whereHas('respostas', fn ($q) => $setWhereSaida($q))
|
|
)
|
|
);
|
|
|
|
$setWhereBaixa = fn ($query) => $query
|
|
->whereHas('almoxarifadoSaidaBaixas', fn ($q) =>
|
|
$setWhereSaida($q)
|
|
->when($params['motivo_id'], fn ($q, $motivoId) => $q->where('motivo_id', $motivoId))
|
|
);
|
|
|
|
$usuarios = Usuario::setEagerLoads([])
|
|
->when($params['tipo_id'],
|
|
fn ($q, $tipoId) => $q
|
|
->when($tipoId == SaidaTipoEnum::MANUAL, fn ($q) => $setWhereSaidaManual($q))
|
|
->when($tipoId == SaidaTipoEnum::TRANSFERENCIA, fn ($q) => $setWhereTransferencia($q))
|
|
->when($tipoId == SaidaTipoEnum::REQUISICAO, fn ($q) => $setWhereRequisicao($q))
|
|
->when($tipoId == SaidaTipoEnum::BAIXA, fn ($q) => $setWhereBaixa($q)),
|
|
fn ($q) => $q->where(fn ($q) => $q
|
|
->where(fn ($q) => $setWhereSaidaManual($q))
|
|
->orWhere(fn ($q) => $setWhereTransferencia($q))
|
|
->orWhere(fn ($q) => $setWhereRequisicao($q))
|
|
->when(is_null($params['unidade_requisitante_id']), fn ($q) => $q
|
|
->orWhere(fn ($q) => $setWhereBaixa($q))
|
|
)
|
|
)
|
|
)
|
|
->get(['id', 'cidadao_id'])
|
|
->map(fn ($u) => [
|
|
'id' => $u->id,
|
|
'nome' => $u->cidadao()->setEagerLoads([])->first(['nome'])->nome
|
|
])
|
|
->sortBy('nome')
|
|
->values();
|
|
}
|
|
|
|
return ['form' => $usuarios, 'model' => $id];
|
|
}
|
|
|
|
private static function getGruposData($params)
|
|
{
|
|
$grupos = collect();
|
|
$id = null;
|
|
|
|
if (!is_null($params['periodo'])) {
|
|
|
|
$grupos = Grupo::whereHas('materiais', fn ($q) => self::setWhereForFilterMaterial($q, $params))
|
|
->orderBy('nome')
|
|
->get(['id', 'nome']);
|
|
}
|
|
|
|
return ['form' => $grupos, 'model' => $id];
|
|
}
|
|
|
|
private static function getSubgruposData($params)
|
|
{
|
|
$subgrupos = collect();
|
|
$id = null;
|
|
|
|
if (!is_null($params['periodo']) && !is_null($params['grupo_id'])) {
|
|
|
|
$subgrupos = Subgrupo::where('grupo_id', $params['grupo_id'])
|
|
->whereHas('materiais', fn ($q) => self::setWhereForFilterMaterial($q, $params))
|
|
->orderBy('nome')
|
|
->get(['id', 'nome']);
|
|
}
|
|
|
|
return ['form' => $subgrupos, 'model' => $id];
|
|
}
|
|
|
|
public static function setWhereForFilterMaterial($query, $params)
|
|
{
|
|
$setWhereSaidaManual = fn ($query) => $query->whereHas('requisicao', fn ($q) =>
|
|
self::setWhereForSelectedCentroCustoRequisitante($q, $params)
|
|
->when($params['usuario_requisitante_id'], fn ($q, $usuarioId) => $q
|
|
->where('usuario_id', $usuarioId)
|
|
)
|
|
);
|
|
|
|
$setWhereTransferencia = fn ($query) => $query->whereHas('transferencia', fn ($q) =>
|
|
self::setWhereForSelectedCentroCustoRequisitante($q, $params)
|
|
->when($params['usuario_requisitante_id'], fn ($q, $usuarioId) => $q
|
|
->where('usuario_id', $usuarioId)
|
|
)
|
|
);
|
|
|
|
$setWhereRequisicao = fn ($query) => $query->whereHas('requisicaoResposta', fn ($q) => $q
|
|
->whereHas('requisicao', fn ($q) =>
|
|
self::setWhereForSelectedCentroCustoRequisitante($q, $params, true)
|
|
->when($params['usuario_requisitante_id'], fn ($q, $usuarioId) => $q
|
|
->whereHas('createdLotacao', fn ($q) => $q
|
|
->where('usuario_id', $usuarioId)
|
|
)
|
|
)
|
|
)
|
|
);
|
|
|
|
$setWhereBaixa = fn ($query) => $query->whereHas('baixa', fn ($q) => $q
|
|
->when($params['motivo_id'], fn ($q, $motivoId) => $q->where('motivo_id', $motivoId))
|
|
->when($params['usuario_requisitante_id'], fn ($q, $usuarioId) => $q
|
|
->where('usuario_solicitante_id', $usuarioId)
|
|
)
|
|
);
|
|
|
|
$query->whereHas('almoxarifadoSaidaItens', fn ($q) => $q
|
|
->whereNull('estornado_em')
|
|
->when($params['usuario_saida_id'], fn ($q, $usuarioId) => $q
|
|
->whereHas('createdLotacao', fn ($q) => $q->where('usuario_id', $usuarioId))
|
|
)
|
|
->whereHas('saida', fn ($q) =>
|
|
self::setWhereForSelectedCentroCustoSaida($q, $params)
|
|
->where('finalizada', true)
|
|
->whereBetween('created_at', $params['periodo'])
|
|
->when($params['tipo_id'],
|
|
fn ($q, $tipoId) => $q
|
|
->where('tipo_id', $tipoId)
|
|
->when($tipoId == SaidaTipoEnum::MANUAL, fn ($q) => $setWhereSaidaManual($q))
|
|
->when($tipoId == SaidaTipoEnum::TRANSFERENCIA, fn ($q) => $setWhereTransferencia($q))
|
|
->when($tipoId == SaidaTipoEnum::REQUISICAO, fn ($q) => $setWhereRequisicao($q))
|
|
->when($tipoId == SaidaTipoEnum::BAIXA, fn ($q) => $setWhereBaixa($q)),
|
|
fn ($q) => $q
|
|
->where('tipo_id', '<>', SaidaTipoEnum::ESTORNO)
|
|
->when($params['usuario_requisitante_id'],
|
|
fn ($q) => $q->where(fn ($q) => $q
|
|
->where(fn ($q) => $setWhereSaidaManual($q))
|
|
->orWhere(fn ($q) => $setWhereTransferencia($q))
|
|
->orWhere(fn ($q) => $setWhereRequisicao($q))
|
|
->orWhere(fn ($q) => $setWhereBaixa($q))
|
|
),
|
|
fn ($q) => $q->when($params['unidade_requisitante_id'],
|
|
fn ($q) => $q->where(fn ($q) => $q
|
|
->where(fn ($q) => $setWhereSaidaManual($q))
|
|
->orWhere(fn ($q) => $setWhereTransferencia($q))
|
|
->orWhere(fn ($q) => $setWhereRequisicao($q))
|
|
),
|
|
fn ($q) => $q
|
|
->where(fn ($q) => $q
|
|
->where('tipo_id', '<>', SaidaTipoEnum::MANUAL)
|
|
->orWhere(fn ($q) => $q
|
|
->where('tipo_id', SaidaTipoEnum::MANUAL)
|
|
->where(fn ($q) => $setWhereSaidaManual($q))
|
|
)
|
|
)
|
|
->where(fn ($q) => $q
|
|
->where('tipo_id', '<>', SaidaTipoEnum::TRANSFERENCIA)
|
|
->orWhere(fn ($q) => $q
|
|
->where('tipo_id', SaidaTipoEnum::TRANSFERENCIA)
|
|
->where(fn ($q) => $setWhereTransferencia($q))
|
|
)
|
|
)
|
|
->where(fn ($q) => $q
|
|
->where('tipo_id', '<>', SaidaTipoEnum::REQUISICAO)
|
|
->orWhere(fn ($q) => $q
|
|
->where('tipo_id', SaidaTipoEnum::REQUISICAO)
|
|
->where(fn ($q) => $setWhereRequisicao($q))
|
|
)
|
|
)
|
|
->where(fn ($q) => $q
|
|
->where('tipo_id', '<>', SaidaTipoEnum::BAIXA)
|
|
->orWhere(fn ($q) => $q
|
|
->where('tipo_id', SaidaTipoEnum::BAIXA)
|
|
->where(fn ($q) => $setWhereBaixa($q))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
);
|
|
}
|
|
|
|
private static function setWhereForSelectedCentroCustoSaida($query, $params)
|
|
{
|
|
return $query->when($params['centro_custo_id'],
|
|
fn ($q, $centroCustoId) => $q->where('centro_custo_id', $centroCustoId),
|
|
fn ($q) => $q->when(!is_null($params['infraestrutura_id']) || !is_null($params['unidade_id']),
|
|
fn ($q) => $q->whereHas('centroCusto', fn ($q) => $q
|
|
->when($params['infraestrutura_id'],
|
|
fn ($q, $infraestruturaId) => $q->where('infraestrutura_id', $infraestruturaId),
|
|
fn ($q) => $q->whereHas('infraestrutura', fn ($q) => $q
|
|
->where('unidade_id', $params['unidade_id']))
|
|
)
|
|
)
|
|
)
|
|
);
|
|
}
|
|
|
|
private static function setWhereForSelectedCentroCustoRequisitante($query, $params, $isRequisicao = false)
|
|
{
|
|
$centroCustoField = $isRequisicao ? 'created_centro_custo_id' : 'centro_custo_id';
|
|
$centroCustoRelation = $isRequisicao ? 'createdCentroCusto' : 'centroCusto';
|
|
|
|
return $query->when($params['centro_custo_requisitante_id'],
|
|
fn ($q, $centroCustoId) => $q->where($centroCustoField, $centroCustoId),
|
|
fn ($q) => $q->when(!is_null($params['infraestrutura_requisitante_id'])
|
|
|| !is_null($params['unidade_requisitante_id']),
|
|
fn ($q) => $q->whereHas($centroCustoRelation, fn ($q) => $q
|
|
->when($params['infraestrutura_requisitante_id'],
|
|
fn ($q, $infraestruturaId) => $q->where('infraestrutura_id', $infraestruturaId),
|
|
fn ($q) => $q->whereHas('infraestrutura', fn ($q) => $q
|
|
->where('unidade_id', $params['unidade_requisitante_id']))
|
|
)
|
|
)
|
|
)
|
|
);
|
|
}
|
|
|
|
public static function autocompleteMaterial()
|
|
{
|
|
$params = self::getParams();
|
|
|
|
$materiais = Material::when($params['grupo_id'], fn ($q, $grupoId) => $q->where('grupo_id', $grupoId))
|
|
->when($params['subgrupo_id'], fn ($q, $subgrupoId) => $q->where('subgrupo_id', $subgrupoId))
|
|
->where(fn ($q) => self::setWhereForFilterMaterial($q, $params))
|
|
->getQuery()
|
|
->join(
|
|
'cadastro_apresentacao',
|
|
'cadastro_apresentacao.id',
|
|
'cadastro_material.apresentacao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_unidade_medida as apresentacao_unidade_medida',
|
|
'apresentacao_unidade_medida.id',
|
|
'cadastro_material.apresentacao_unidade_medida_id'
|
|
)
|
|
->select(
|
|
'cadastro_material.id',
|
|
'cadastro_material.codigo_material',
|
|
DB::raw(MaterialService::getDescricaoCompletaRaw(
|
|
'cadastro_material',
|
|
'cadastro_apresentacao',
|
|
'apresentacao_unidade_medida'
|
|
) . " as descricao"),
|
|
'cadastro_material.possui_lote',
|
|
);
|
|
|
|
return $materiais;
|
|
}
|
|
|
|
public static function getPrintExportData()
|
|
{
|
|
$resultado = self::index();
|
|
$itens = $resultado['saidas'];
|
|
|
|
$itens->each(function ($item) {
|
|
|
|
$item->data_hora_saida = (new Carbon($item->data_hora_saida))->format('d/m/Y H:i');
|
|
|
|
if (!is_null($item->data_requisicao)) {
|
|
|
|
$item->data_requisicao = (new Carbon($item->data_requisicao))->format('d/m/Y');
|
|
}
|
|
|
|
if (!is_null($item->validade)) {
|
|
|
|
$item->validade = (new Carbon($item->validade))->format('d/m/Y');
|
|
}
|
|
});
|
|
|
|
$tipo = SaidaTipo::find(request()->tipo_id);
|
|
$motivo = MotivoBaixa::find(request()->motivo_id);
|
|
$unidade = Unidade::find(request()->unidade_id);
|
|
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
|
|
$centroCusto = CentroCusto::find(request()->centro_custo_id);
|
|
$usuarioSaida = Usuario::find(request()->usuario_saida_id);
|
|
$unidadeRequisitante = Unidade::find(request()->unidade_requisitante_id);
|
|
$infraestruturaRequisitante = Infraestrutura::find(request()->infraestrutura_requisitante_id);
|
|
$centroCustoRequisitante = CentroCusto::find(request()->centro_custo_requisitante_id);
|
|
$usuarioRequisitante = Usuario::find(request()->usuario_requisitante_id);
|
|
$grupo = Grupo::find(request()->grupo_id);
|
|
$subgrupo = Subgrupo::find(request()->subgrupo_id);
|
|
$material = Material::find(request()->material_id);
|
|
|
|
return [
|
|
'inicio' => request()->periodo['start'],
|
|
'fim' => request()->periodo['end'],
|
|
'tipo' => $tipo->nome ?? 'Todos',
|
|
'motivo' => $motivo->descricao ?? 'Todos',
|
|
'unidade' => $unidade->nome_fantasia ?? 'Todas',
|
|
'infraestrutura' => $infraestrutura->nome ?? 'Todos',
|
|
'setor' => $centroCusto->setor->nome ?? 'Todos',
|
|
'usuarioSaida' => $usuarioSaida->cidadao->nome ?? 'Todos',
|
|
'unidadeRequisitante' => $unidadeRequisitante->nome_fantasia ?? 'Todas',
|
|
'infraestruturaRequisitante' => $infraestruturaRequisitante->nome ?? 'Todos',
|
|
'setorRequisitante' => $centroCustoRequisitante->setor->nome ?? 'Todos',
|
|
'usuarioRequisitante' => $usuarioRequisitante->nome ?? 'Todos',
|
|
'grupo' => $grupo->nome ?? 'Todos',
|
|
'subgrupo' => $subgrupo->nome ?? 'Todos',
|
|
'material' => $material->descricao_completa ?? 'Todos',
|
|
'colunas' => collect(request()->selectedCols),
|
|
'itens' => $itens,
|
|
'totalizadores' => $resultado['totalizadores'],
|
|
];
|
|
}
|
|
}
|