This commit is contained in:
571
api/app/Services/Integracao/Bnafar/RelatorioEnvioService.php
Normal file
571
api/app/Services/Integracao/Bnafar/RelatorioEnvioService.php
Normal file
@@ -0,0 +1,571 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Integracao\Bnafar;
|
||||
|
||||
use App\Enums\Integracao\Bnafar\BnafarServicoTipo;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade;
|
||||
use App\Models\Integracao\Bnafar\ProcessamentoStatus;
|
||||
use App\Models\Integracao\Bnafar\ServicoTipo;
|
||||
use App\Services\Service;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class RelatorioEnvioService extends Service
|
||||
{
|
||||
public static function index()
|
||||
{
|
||||
$params = self::getParams();
|
||||
|
||||
$totalizadores = (object) [
|
||||
'quantidade_total_envios' => 0,
|
||||
'quantidade_total_inconsistencias' => 0,
|
||||
'quantidade_total' => 0,
|
||||
];
|
||||
|
||||
$protocolos = DB::table('integracao_bnafar_protocolo')
|
||||
->select([
|
||||
'integracao_bnafar_protocolo.id',
|
||||
DB::raw("DATE_FORMAT(integracao_bnafar_protocolo.data_protocolo, '%d/%m/%Y') AS data_protocolo"),
|
||||
'integracao_bnafar_servico_tipo.descricao AS servico_tipo_descricao',
|
||||
'integracao_bnafar_processamento_status.descricao AS processamento_status_descricao',
|
||||
'integracao_bnafar_protocolo.protocolo',
|
||||
DB::raw("
|
||||
CASE integracao_bnafar_protocolo.servico_tipo_id WHEN " . BnafarServicoTipo::ENTRADA . " THEN
|
||||
(
|
||||
SELECT COUNT(*)
|
||||
FROM integracao_bnafar_entrada
|
||||
WHERE integracao_bnafar_entrada.protocolo_id = integracao_bnafar_protocolo.id
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM integracao_bnafar_protocolo_resposta
|
||||
WHERE integracao_bnafar_protocolo_resposta.protocolo_id = integracao_bnafar_entrada.protocolo_id
|
||||
)
|
||||
)
|
||||
WHEN " . BnafarServicoTipo::SAIDA . " THEN
|
||||
(
|
||||
SELECT COUNT(*)
|
||||
FROM integracao_bnafar_saida
|
||||
WHERE integracao_bnafar_saida.protocolo_id = integracao_bnafar_protocolo.id
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM integracao_bnafar_protocolo_resposta
|
||||
WHERE integracao_bnafar_protocolo_resposta.protocolo_id = integracao_bnafar_saida.protocolo_id
|
||||
)
|
||||
)
|
||||
WHEN " . BnafarServicoTipo::DISPENSACAO . " THEN
|
||||
(
|
||||
SELECT COUNT(*)
|
||||
FROM integracao_bnafar_dispensacao
|
||||
WHERE integracao_bnafar_dispensacao.protocolo_id = integracao_bnafar_protocolo.id
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM integracao_bnafar_protocolo_resposta
|
||||
WHERE integracao_bnafar_protocolo_resposta.protocolo_id = integracao_bnafar_dispensacao.protocolo_id
|
||||
)
|
||||
)
|
||||
WHEN " . BnafarServicoTipo::POSICAO_ESTOQUE . " THEN
|
||||
(
|
||||
SELECT COUNT(*)
|
||||
FROM integracao_bnafar_posicao_estoque
|
||||
WHERE integracao_bnafar_posicao_estoque.protocolo_id = integracao_bnafar_protocolo.id
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM integracao_bnafar_protocolo_resposta
|
||||
WHERE integracao_bnafar_protocolo_resposta.protocolo_id = integracao_bnafar_posicao_estoque.protocolo_id
|
||||
)
|
||||
)
|
||||
END AS quantidade_envios
|
||||
"),
|
||||
DB::raw("
|
||||
(
|
||||
SELECT COUNT(*)
|
||||
FROM integracao_bnafar_protocolo_resposta
|
||||
WHERE integracao_bnafar_protocolo_resposta.protocolo_id = integracao_bnafar_protocolo.id
|
||||
) AS quantidade_inconsistencias
|
||||
"),
|
||||
])
|
||||
->join('integracao_bnafar_servico_tipo', 'integracao_bnafar_servico_tipo.id', 'integracao_bnafar_protocolo.servico_tipo_id')
|
||||
->join('integracao_bnafar_processamento_status', 'integracao_bnafar_processamento_status.id', 'integracao_bnafar_protocolo.processamento_status_id')
|
||||
->whereBetween('data_protocolo', $params->data)
|
||||
->where(fn ($q) => $q
|
||||
->whereExists(fn ($q) => $q->select(DB::raw(1))
|
||||
->from('integracao_bnafar_entrada_item')
|
||||
->join('integracao_bnafar_entrada', 'integracao_bnafar_entrada.id', 'integracao_bnafar_entrada_item.entrada_id')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'integracao_bnafar_entrada.centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->when($params->unidades, fn ($q) => $q->whereIn('cadastro_infraestrutura.unidade_id', $params->unidades))
|
||||
->when($params->lotes, fn ($q) => $q->whereIn('integracao_bnafar_entrada_item.lote', $params->lotes))
|
||||
->whereColumn('integracao_bnafar_entrada.protocolo_id', 'integracao_bnafar_protocolo.id')
|
||||
)
|
||||
->orWhereExists(fn ($q) => $q->select(DB::raw(1))
|
||||
->from('integracao_bnafar_saida_item')
|
||||
->join('integracao_bnafar_saida', 'integracao_bnafar_saida.id', 'integracao_bnafar_saida_item.saida_id')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'integracao_bnafar_saida.centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->when($params->unidades, fn ($q) => $q->whereIn('cadastro_infraestrutura.unidade_id', $params->unidades))
|
||||
->when($params->lotes, fn ($q) => $q->whereIn('integracao_bnafar_saida_item.lote', $params->lotes))
|
||||
->whereColumn('integracao_bnafar_saida.protocolo_id', 'integracao_bnafar_protocolo.id')
|
||||
)
|
||||
->orWhereExists(fn ($q) => $q->select(DB::raw(1))
|
||||
->from('integracao_bnafar_posicao_estoque_item')
|
||||
->join('integracao_bnafar_posicao_estoque', 'integracao_bnafar_posicao_estoque.id', 'integracao_bnafar_posicao_estoque_item.posicao_estoque_id')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'integracao_bnafar_posicao_estoque.centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->when($params->unidades, fn ($q) => $q->whereIn('cadastro_infraestrutura.unidade_id', $params->unidades))
|
||||
->when($params->lotes, fn ($q) => $q->whereIn('integracao_bnafar_posicao_estoque_item.lote', $params->lotes))
|
||||
->whereColumn('integracao_bnafar_posicao_estoque.protocolo_id', 'integracao_bnafar_protocolo.id')
|
||||
)
|
||||
->orWhereExists(fn ($q) => $q->select(DB::raw(1))
|
||||
->from('integracao_bnafar_dispensacao_item')
|
||||
->join('integracao_bnafar_dispensacao', 'integracao_bnafar_dispensacao.id', 'integracao_bnafar_dispensacao_item.dispensacao_id')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'integracao_bnafar_dispensacao.centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->when($params->unidades, fn ($q) => $q->whereIn('cadastro_infraestrutura.unidade_id', $params->unidades))
|
||||
->when($params->lotes, fn ($q) => $q->whereIn('integracao_bnafar_dispensacao_item.lote', $params->lotes))
|
||||
->whereColumn('integracao_bnafar_dispensacao.protocolo_id', 'integracao_bnafar_protocolo.id')
|
||||
)
|
||||
)
|
||||
->whereIn('integracao_bnafar_protocolo.servico_tipo_id', $params->servicos_tipos)
|
||||
->whereIn('integracao_bnafar_protocolo.processamento_status_id', $params->processamentos_status)
|
||||
->whereIn('integracao_bnafar_protocolo.id', $params->protocolos)
|
||||
->get()
|
||||
->map(function ($protocolo) {
|
||||
DB::table('integracao_bnafar_protocolo_resposta')
|
||||
->select(['resposta'])
|
||||
->where('protocolo_id', $protocolo->id)
|
||||
->get()
|
||||
->map(function($query) use (&$protocolo) {
|
||||
$resposta = json_decode($query->resposta, true);
|
||||
|
||||
if (isset($resposta['exceptions'])) {
|
||||
foreach ($resposta['exceptions'] as $value) {
|
||||
$protocolo->respostas[] = [
|
||||
'codigo' => $value['codigo'] ?? 'Não informado',
|
||||
'valor_rejeitado' => $value['valorRejeitado'] ?? 'Não informado',
|
||||
'descricao' => DB::table('integracao_bnafar_resposta')
|
||||
->select(['descricao'])
|
||||
->where('codigo', $value['codigo'] ?? null)
|
||||
->first()->descricao ?? ($value['caminho'] ?? 'Não informado'),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($resposta as $value) {
|
||||
if (isset($value['inconsistencias'])) {
|
||||
foreach ($value['inconsistencias'] as $inconsistencia) {
|
||||
$protocolo->respostas[] = [
|
||||
'codigo' => $inconsistencia['codigo'] ?? 'Não informado',
|
||||
'valor_rejeitado' => $inconsistencia['valorRejeitado'] ?? 'Não informado',
|
||||
'descricao' => DB::table('integracao_bnafar_resposta')
|
||||
->select(['descricao'])
|
||||
->where('codigo', $inconsistencia['codigo'])
|
||||
->first()->descricao ?? $inconsistencia['mensagem'],
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return $protocolo;
|
||||
});
|
||||
|
||||
$protocolos->each(fn ($p) => $totalizadores->quantidade_total_envios += $p->quantidade_envios);
|
||||
$protocolos->each(fn ($p) => $totalizadores->quantidade_total_inconsistencias += $p->quantidade_inconsistencias);
|
||||
$protocolos->each(fn ($p) => $totalizadores->quantidade_total += $p->quantidade_envios + $p->quantidade_inconsistencias);
|
||||
|
||||
return compact('protocolos', 'totalizadores');
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'additionals' => self::getAdditionals(),
|
||||
'form' => self::getForm(),
|
||||
'model' => self::getModel(),
|
||||
];
|
||||
}
|
||||
|
||||
public static function list()
|
||||
{
|
||||
$params = self::getParams();
|
||||
|
||||
switch (request()->listar) {
|
||||
case 'unidades': {
|
||||
return [
|
||||
'unidades' => self::getUnidades($params),
|
||||
'servicos_tipos' => self::getServicosTipos($params),
|
||||
'processamentos_status' => self::getProcessamentosStatus($params),
|
||||
'protocolos' => self::getProtocolos($params),
|
||||
'lotes' => self::getLotes($params),
|
||||
];
|
||||
}
|
||||
case 'servicos-tipos': {
|
||||
return [
|
||||
'servicos_tipos' => self::getServicosTipos($params),
|
||||
'processamentos_status' => self::getProcessamentosStatus($params),
|
||||
'protocolos' => self::getProtocolos($params),
|
||||
'lotes' => self::getLotes($params),
|
||||
];
|
||||
}
|
||||
case 'processamentos-status': {
|
||||
return [
|
||||
'processamentos_status' => self::getProcessamentosStatus($params),
|
||||
'protocolos' => self::getProtocolos($params),
|
||||
'lotes' => self::getLotes($params),
|
||||
];
|
||||
}
|
||||
case 'protocolos': {
|
||||
return [
|
||||
'protocolos' => self::getProtocolos($params),
|
||||
'lotes' => self::getLotes($params),
|
||||
];
|
||||
}
|
||||
case 'lotes': {
|
||||
return [
|
||||
'lotes' => self::getLotes($params),
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function getPrintExportData()
|
||||
{
|
||||
$dados = self::index();
|
||||
|
||||
$unidade = null;
|
||||
$servicoTipo = null;
|
||||
$processamentoStatus = null;
|
||||
$protocolo = null;
|
||||
$lote = null;
|
||||
|
||||
if (count(request()->get('unidades')) === 1) {
|
||||
$unidade = Unidade::find(request()->get('unidades')[0])->nome_fantasia ?? null;
|
||||
}
|
||||
else if (count(request()->get('unidades')) > 0) {
|
||||
$unidade = 'Mais de uma unidade selecionada';
|
||||
}
|
||||
|
||||
if (count(request()->get('servicos_tipos')) === 1) {
|
||||
$servicoTipo = ServicoTipo::find(request()->get('servicos_tipos')[0])->descricao ?? null;
|
||||
}
|
||||
else if (count(request()->get('servicos_tipos')) > 0) {
|
||||
$servicoTipo = 'Mais de um tipo de serviço selecionado';
|
||||
}
|
||||
|
||||
if (count(request()->get('processamentos_status')) === 1) {
|
||||
$processamentoStatus = ProcessamentoStatus::find(request()->get('processamentos_status')[0])->descricao ?? null;
|
||||
}
|
||||
else if (count(request()->get('processamentos_status')) > 0) {
|
||||
$processamentoStatus = 'Mais de um status de processamento selecionado';
|
||||
}
|
||||
|
||||
if (count(request()->get('protocolos')) === 1) {
|
||||
$protocolo = request()->get('protocolos')[0];
|
||||
}
|
||||
else if (count(request()->get('protocolos')) > 1) {
|
||||
$protocolo = 'Mais de um protocolo selecionado';
|
||||
}
|
||||
|
||||
if (count(request()->get('lotes')) === 1) {
|
||||
$lote = request()->get('lotes')[0];
|
||||
}
|
||||
else if (count(request()->get('lotes')) > 1) {
|
||||
$lote = 'Mais de um lote selecionado';
|
||||
}
|
||||
|
||||
return [
|
||||
'start_date' => Carbon::create(request()->get('start_date'))->format('d/m/Y'),
|
||||
'end_date' => Carbon::create(request()->get('end_date'))->format('d/m/Y'),
|
||||
'unidade' => $unidade,
|
||||
'servico_tipo' => $servicoTipo,
|
||||
'processamento_status' => $processamentoStatus,
|
||||
'protocolo' => $protocolo,
|
||||
'lote' => $lote,
|
||||
'columns' => collect(request()->get('selected_columns')),
|
||||
'itens' => $dados['protocolos'],
|
||||
'totalizadores' => $dados['totalizadores']
|
||||
];
|
||||
}
|
||||
|
||||
private static function getParams()
|
||||
{
|
||||
return (object) [
|
||||
'data' => [
|
||||
'start' => Carbon::createFromFormat('d/m/Y', request()->get('data')['start'])->setTime(0, 0, 0),
|
||||
'end' => Carbon::createFromFormat('d/m/Y', request()->get('data')['end'])->setTime(23, 59, 59),
|
||||
],
|
||||
'unidades' => request()->get('unidades') ?? [],
|
||||
'servicos_tipos' => request()->get('servicos_tipos') ?? [],
|
||||
'processamentos_status' => request()->get('processamentos_status') ?? [],
|
||||
'protocolos' => request()->get('protocolos') ?? [],
|
||||
'lotes' => request()->get('lotes') ?? [],
|
||||
];
|
||||
}
|
||||
|
||||
private static function getAdditionals()
|
||||
{
|
||||
return [
|
||||
'data_atual' => Carbon::now()->format('d/m/Y'),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getForm()
|
||||
{
|
||||
return [
|
||||
'unidades' => [],
|
||||
'servicos_tipos' => [],
|
||||
'processamentos_status' => [],
|
||||
'protocolos' => [],
|
||||
'lotes' => [],
|
||||
'codigos_erros' => [],
|
||||
];
|
||||
}
|
||||
|
||||
private static function getModel()
|
||||
{
|
||||
return [
|
||||
'data' => ['start' => null, 'end' => null],
|
||||
'servicos_tipos' => [],
|
||||
'processamentos_status' => [],
|
||||
'protocolos' => [],
|
||||
'lotes' => [],
|
||||
'codigos_erros' => [],
|
||||
];
|
||||
}
|
||||
|
||||
private static function getUnidades($params)
|
||||
{
|
||||
return DB::table('cadastro_unidade')
|
||||
->select([
|
||||
'id',
|
||||
'nome_fantasia',
|
||||
])
|
||||
->whereExists(fn ($q) => $q->select(DB::raw(1))
|
||||
->from('integracao_bnafar_entrada')
|
||||
->join('integracao_bnafar_protocolo', 'integracao_bnafar_protocolo.id', 'integracao_bnafar_entrada.protocolo_id')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'integracao_bnafar_entrada.centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->whereBetween('integracao_bnafar_protocolo.data_protocolo', $params->data)
|
||||
->whereColumn('cadastro_infraestrutura.unidade_id', 'cadastro_unidade.id')
|
||||
)
|
||||
->orWhereExists(fn ($q) => $q->select(DB::raw(1))
|
||||
->from('integracao_bnafar_saida')
|
||||
->join('integracao_bnafar_protocolo', 'integracao_bnafar_protocolo.id', 'integracao_bnafar_saida.protocolo_id')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'integracao_bnafar_saida.centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->whereBetween('integracao_bnafar_protocolo.data_protocolo', $params->data)
|
||||
->whereColumn('cadastro_infraestrutura.unidade_id', 'cadastro_unidade.id')
|
||||
)
|
||||
->orWhereExists(fn ($q) => $q->select(DB::raw(1))
|
||||
->from('integracao_bnafar_posicao_estoque')
|
||||
->join('integracao_bnafar_protocolo', 'integracao_bnafar_protocolo.id', 'integracao_bnafar_posicao_estoque.protocolo_id')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'integracao_bnafar_posicao_estoque.centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->whereBetween('integracao_bnafar_protocolo.data_protocolo', $params->data)
|
||||
->whereColumn('cadastro_infraestrutura.unidade_id', 'cadastro_unidade.id')
|
||||
)
|
||||
->orWhereExists(fn ($q) => $q->select(DB::raw(1))
|
||||
->from('integracao_bnafar_dispensacao')
|
||||
->join('integracao_bnafar_protocolo', 'integracao_bnafar_protocolo.id', 'integracao_bnafar_dispensacao.protocolo_id')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'integracao_bnafar_dispensacao.centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->whereBetween('integracao_bnafar_protocolo.data_protocolo', $params->data)
|
||||
->whereColumn('cadastro_infraestrutura.unidade_id', 'cadastro_unidade.id')
|
||||
)
|
||||
->orderBy('cadastro_unidade.nome_fantasia')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getServicosTipos($params)
|
||||
{
|
||||
return DB::table('integracao_bnafar_servico_tipo')
|
||||
->select([
|
||||
'id',
|
||||
'descricao',
|
||||
])
|
||||
->whereExists(fn ($q) => $q->select(DB::raw(1))
|
||||
->from('integracao_bnafar_protocolo')
|
||||
->whereBetween('integracao_bnafar_protocolo.data_protocolo', $params->data)
|
||||
->when($params->unidades, fn ($q) => $q->where(fn ($q) => $q
|
||||
->whereExists(fn ($q) => $q->select(DB::raw(1))
|
||||
->from('integracao_bnafar_entrada')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'integracao_bnafar_entrada.centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->whereIn('cadastro_infraestrutura.unidade_id', $params->unidades)
|
||||
->whereColumn('integracao_bnafar_entrada.protocolo_id', 'integracao_bnafar_protocolo.id')
|
||||
)
|
||||
->orWhereExists(fn ($q) => $q->select(DB::raw(1))
|
||||
->from('integracao_bnafar_saida')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'integracao_bnafar_saida.centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->whereIn('cadastro_infraestrutura.unidade_id', $params->unidades)
|
||||
->whereColumn('integracao_bnafar_saida.protocolo_id', 'integracao_bnafar_protocolo.id')
|
||||
)
|
||||
->orWhereExists(fn ($q) => $q->select(DB::raw(1))
|
||||
->from('integracao_bnafar_posicao_estoque')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'integracao_bnafar_posicao_estoque.centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->whereIn('cadastro_infraestrutura.unidade_id', $params->unidades)
|
||||
->whereColumn('integracao_bnafar_posicao_estoque.protocolo_id', 'integracao_bnafar_protocolo.id')
|
||||
)
|
||||
->orWhereExists(fn ($q) => $q->select(DB::raw(1))
|
||||
->from('integracao_bnafar_dispensacao')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'integracao_bnafar_dispensacao.centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->whereIn('cadastro_infraestrutura.unidade_id', $params->unidades)
|
||||
->whereColumn('integracao_bnafar_dispensacao.protocolo_id', 'integracao_bnafar_protocolo.id')
|
||||
)
|
||||
))
|
||||
->whereColumn('integracao_bnafar_protocolo.servico_tipo_id', 'integracao_bnafar_servico_tipo.id')
|
||||
)
|
||||
->orderBy('integracao_bnafar_servico_tipo.descricao')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getProcessamentosStatus($params)
|
||||
{
|
||||
return DB::table('integracao_bnafar_processamento_status')
|
||||
->select([
|
||||
'id',
|
||||
'descricao',
|
||||
])
|
||||
->whereExists(fn ($q) => $q->select(DB::raw(1))
|
||||
->from('integracao_bnafar_protocolo')
|
||||
->whereBetween('integracao_bnafar_protocolo.data_protocolo', $params->data)
|
||||
->when($params->unidades, fn ($q) => $q->where(fn ($q) => $q
|
||||
->whereExists(fn ($q) => $q->select(DB::raw(1))
|
||||
->from('integracao_bnafar_entrada')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'integracao_bnafar_entrada.centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->whereIn('cadastro_infraestrutura.unidade_id', $params->unidades)
|
||||
->whereColumn('integracao_bnafar_entrada.protocolo_id', 'integracao_bnafar_protocolo.id')
|
||||
)
|
||||
->orWhereExists(fn ($q) => $q->select(DB::raw(1))
|
||||
->from('integracao_bnafar_saida')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'integracao_bnafar_saida.centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->whereIn('cadastro_infraestrutura.unidade_id', $params->unidades)
|
||||
->whereColumn('integracao_bnafar_saida.protocolo_id', 'integracao_bnafar_protocolo.id')
|
||||
)
|
||||
->orWhereExists(fn ($q) => $q->select(DB::raw(1))
|
||||
->from('integracao_bnafar_posicao_estoque')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'integracao_bnafar_posicao_estoque.centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->whereIn('cadastro_infraestrutura.unidade_id', $params->unidades)
|
||||
->whereColumn('integracao_bnafar_posicao_estoque.protocolo_id', 'integracao_bnafar_protocolo.id')
|
||||
)
|
||||
->orWhereExists(fn ($q) => $q->select(DB::raw(1))
|
||||
->from('integracao_bnafar_dispensacao')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'integracao_bnafar_dispensacao.centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->whereIn('cadastro_infraestrutura.unidade_id', $params->unidades)
|
||||
->whereColumn('integracao_bnafar_dispensacao.protocolo_id', 'integracao_bnafar_protocolo.id')
|
||||
)
|
||||
))
|
||||
->when($params->servicos_tipos, fn ($q) => $q->whereIn('integracao_bnafar_protocolo.servico_tipo_id', $params->servicos_tipos))
|
||||
->whereColumn('integracao_bnafar_protocolo.processamento_status_id', 'integracao_bnafar_processamento_status.id')
|
||||
)
|
||||
->orderBy('integracao_bnafar_processamento_status.descricao')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getProtocolos($params)
|
||||
{
|
||||
return DB::table('integracao_bnafar_protocolo')
|
||||
->select([
|
||||
'id',
|
||||
'protocolo',
|
||||
])
|
||||
->whereBetween('data_protocolo', $params->data)
|
||||
->when($params->unidades, fn ($q) => $q->where(fn ($q) => $q
|
||||
->whereExists(fn ($q) => $q->select(DB::raw(1))
|
||||
->from('integracao_bnafar_entrada')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'integracao_bnafar_entrada.centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->whereIn('cadastro_infraestrutura.unidade_id', $params->unidades)
|
||||
->whereColumn('integracao_bnafar_entrada.protocolo_id', 'integracao_bnafar_protocolo.id')
|
||||
)
|
||||
->orWhereExists(fn ($q) => $q->select(DB::raw(1))
|
||||
->from('integracao_bnafar_saida')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'integracao_bnafar_saida.centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->whereIn('cadastro_infraestrutura.unidade_id', $params->unidades)
|
||||
->whereColumn('integracao_bnafar_saida.protocolo_id', 'integracao_bnafar_protocolo.id')
|
||||
)
|
||||
->orWhereExists(fn ($q) => $q->select(DB::raw(1))
|
||||
->from('integracao_bnafar_posicao_estoque')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'integracao_bnafar_posicao_estoque.centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->whereIn('cadastro_infraestrutura.unidade_id', $params->unidades)
|
||||
->whereColumn('integracao_bnafar_posicao_estoque.protocolo_id', 'integracao_bnafar_protocolo.id')
|
||||
)
|
||||
->orWhereExists(fn ($q) => $q->select(DB::raw(1))
|
||||
->from('integracao_bnafar_dispensacao')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'integracao_bnafar_dispensacao.centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->whereIn('cadastro_infraestrutura.unidade_id', $params->unidades)
|
||||
->whereColumn('integracao_bnafar_dispensacao.protocolo_id', 'integracao_bnafar_protocolo.id')
|
||||
)
|
||||
))
|
||||
->when($params->servicos_tipos, fn ($q) => $q->whereIn('servico_tipo_id', $params->servicos_tipos))
|
||||
->when($params->processamentos_status, fn ($q) => $q->whereIn('processamento_status_id', $params->processamentos_status))
|
||||
->orderBy('protocolo')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getLotes($params)
|
||||
{
|
||||
$entradas = DB::table('integracao_bnafar_entrada_item')
|
||||
->select(['lote'])
|
||||
->join('integracao_bnafar_entrada', 'integracao_bnafar_entrada.id', 'integracao_bnafar_entrada_item.entrada_id')
|
||||
->join('integracao_bnafar_protocolo', 'integracao_bnafar_protocolo.id', 'integracao_bnafar_entrada.protocolo_id')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'integracao_bnafar_entrada.centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->whereBetween('integracao_bnafar_protocolo.data_protocolo', $params->data)
|
||||
->when($params->unidades, fn ($q) => $q->whereIn('cadastro_infraestrutura.unidade_id', $params->unidades))
|
||||
->when($params->servicos_tipos, fn ($q) => $q->whereIn('integracao_bnafar_protocolo.servico_tipo_id', $params->servicos_tipos))
|
||||
->when($params->processamentos_status, fn ($q) => $q->whereIn('integracao_bnafar_protocolo.processamento_status_id', $params->processamentos_status))
|
||||
->when($params->protocolos, fn ($q) => $q->whereIn('integracao_bnafar_protocolo.protocolo', $params->protocolos));
|
||||
|
||||
$saidas = DB::table('integracao_bnafar_saida_item')
|
||||
->select(['lote'])
|
||||
->join('integracao_bnafar_saida', 'integracao_bnafar_saida.id', 'integracao_bnafar_saida_item.saida_id')
|
||||
->join('integracao_bnafar_protocolo', 'integracao_bnafar_protocolo.id', 'integracao_bnafar_saida.protocolo_id')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'integracao_bnafar_saida.centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->whereBetween('integracao_bnafar_protocolo.data_protocolo', $params->data)
|
||||
->when($params->unidades, fn ($q) => $q->whereIn('cadastro_infraestrutura.unidade_id', $params->unidades))
|
||||
->when($params->servicos_tipos, fn ($q) => $q->whereIn('integracao_bnafar_protocolo.servico_tipo_id', $params->servicos_tipos))
|
||||
->when($params->processamentos_status, fn ($q) => $q->whereIn('integracao_bnafar_protocolo.processamento_status_id', $params->processamentos_status))
|
||||
->when($params->protocolos, fn ($q) => $q->whereIn('integracao_bnafar_protocolo.protocolo', $params->protocolos));
|
||||
|
||||
$posicoesEstoque = DB::table('integracao_bnafar_posicao_estoque_item')
|
||||
->select(['lote'])
|
||||
->join('integracao_bnafar_posicao_estoque', 'integracao_bnafar_posicao_estoque.id', 'integracao_bnafar_posicao_estoque_item.posicao_estoque_id')
|
||||
->join('integracao_bnafar_protocolo', 'integracao_bnafar_protocolo.id', 'integracao_bnafar_posicao_estoque.protocolo_id')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'integracao_bnafar_posicao_estoque.centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->whereBetween('integracao_bnafar_protocolo.data_protocolo', $params->data)
|
||||
->when($params->unidades, fn ($q) => $q->whereIn('cadastro_infraestrutura.unidade_id', $params->unidades))
|
||||
->when($params->servicos_tipos, fn ($q) => $q->whereIn('integracao_bnafar_protocolo.servico_tipo_id', $params->servicos_tipos))
|
||||
->when($params->processamentos_status, fn ($q) => $q->whereIn('integracao_bnafar_protocolo.processamento_status_id', $params->processamentos_status))
|
||||
->when($params->protocolos, fn ($q) => $q->whereIn('integracao_bnafar_protocolo.protocolo', $params->protocolos));
|
||||
|
||||
$dispensacoes = DB::table('integracao_bnafar_dispensacao_item')
|
||||
->select(['lote'])
|
||||
->join('integracao_bnafar_dispensacao', 'integracao_bnafar_dispensacao.id', 'integracao_bnafar_dispensacao_item.dispensacao_id')
|
||||
->join('integracao_bnafar_protocolo', 'integracao_bnafar_protocolo.id', 'integracao_bnafar_dispensacao.protocolo_id')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'integracao_bnafar_dispensacao.centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->whereBetween('integracao_bnafar_protocolo.data_protocolo', $params->data)
|
||||
->when($params->unidades, fn ($q) => $q->whereIn('cadastro_infraestrutura.unidade_id', $params->unidades))
|
||||
->when($params->servicos_tipos, fn ($q) => $q->whereIn('integracao_bnafar_protocolo.servico_tipo_id', $params->servicos_tipos))
|
||||
->when($params->processamentos_status, fn ($q) => $q->whereIn('integracao_bnafar_protocolo.processamento_status_id', $params->processamentos_status))
|
||||
->when($params->protocolos, fn ($q) => $q->whereIn('integracao_bnafar_protocolo.protocolo', $params->protocolos));
|
||||
|
||||
return $entradas->union($saidas)->union($posicoesEstoque)->union($dispensacoes)
|
||||
->distinct()
|
||||
->orderBy('lote')
|
||||
->get();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user