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(); } }