This commit is contained in:
257
api/app/Services/Integracao/Bnafar/GerenciamentoEnvioService.php
Normal file
257
api/app/Services/Integracao/Bnafar/GerenciamentoEnvioService.php
Normal file
@@ -0,0 +1,257 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Integracao\Bnafar;
|
||||
|
||||
use App\Enums\Integracao\Bnafar\BnafarServicoTipo;
|
||||
use App\Services\Integracao\BnafarService;
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class GerenciamentoEnvioService extends Service
|
||||
{
|
||||
public static function index()
|
||||
{
|
||||
if (request()->get('acao') == 'inconsistencias') {
|
||||
$response = [];
|
||||
|
||||
DB::table('integracao_bnafar_protocolo_resposta')
|
||||
->select(['resposta'])
|
||||
->where('protocolo_id', request()->get('id'))
|
||||
->get()
|
||||
->map(function($query) use (&$response) {
|
||||
$resposta = json_decode($query->resposta, true);
|
||||
|
||||
if (isset($resposta['exceptions'])) {
|
||||
foreach ($resposta['exceptions'] as $value) {
|
||||
$response[] = [
|
||||
'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) {
|
||||
$response[] = [
|
||||
'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 ?? BnafarService::formatarMensagem($inconsistencia['mensagem'] ?? null),
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return collect($response)
|
||||
->unique(fn ($erro) => $erro['codigo'] . '|' . $erro['valor_rejeitado'] . '|' . $erro['descricao'])
|
||||
->values()
|
||||
->all();
|
||||
}
|
||||
}
|
||||
|
||||
public static function show($id)
|
||||
{
|
||||
$protocolo = DB::table('integracao_bnafar_protocolo')
|
||||
->select([
|
||||
'integracao_bnafar_protocolo.id',
|
||||
'integracao_bnafar_protocolo.servico_tipo_id',
|
||||
'integracao_bnafar_protocolo.protocolo',
|
||||
'integracao_bnafar_servico_tipo.descricao AS servico_tipo_descricao',
|
||||
])
|
||||
->leftJoin('integracao_bnafar_servico_tipo', 'integracao_bnafar_servico_tipo.id', 'integracao_bnafar_protocolo.servico_tipo_id')
|
||||
->where('integracao_bnafar_protocolo.id', $id)
|
||||
->first();
|
||||
|
||||
if ($protocolo->servico_tipo_id === BnafarServicoTipo::ENTRADA) {
|
||||
return DB::table('integracao_bnafar_entrada_item')
|
||||
->select([
|
||||
'integracao_bnafar_entrada.id',
|
||||
'cadastro_unidade.nome_fantasia AS unidade_nome_fantasia',
|
||||
'integracao_bnafar_entrada.codigo_registro',
|
||||
'integracao_bnafar_entrada.processado_sucesso',
|
||||
'integracao_bnafar_entrada_item.id AS entrada_item_id',
|
||||
'cadastro_material.descricao AS material_descricao',
|
||||
'cadastro_fabricante.nome AS fabricante_nome',
|
||||
'integracao_bnafar_entrada_item.lote',
|
||||
DB::raw("DATE_FORMAT(integracao_bnafar_entrada_item.data_validade, '%d/%m/%Y') AS data_validade"),
|
||||
'integracao_bnafar_entrada_item.quantidade',
|
||||
])
|
||||
->join('cadastro_material', 'cadastro_material.id', 'integracao_bnafar_entrada_item.material_id')
|
||||
->join('cadastro_fabricante', 'cadastro_fabricante.id', 'integracao_bnafar_entrada_item.fabricante_id')
|
||||
->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')
|
||||
->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id')
|
||||
->where('integracao_bnafar_entrada.protocolo_id', $protocolo->id)
|
||||
->get()
|
||||
->map(function($entrada) use ($protocolo) {
|
||||
return [
|
||||
'id' => $entrada->id,
|
||||
'servico_tipo_id' => $protocolo->servico_tipo_id,
|
||||
'unidade_nome_fantasia' => $entrada->unidade_nome_fantasia,
|
||||
'protocolo' => $protocolo->protocolo,
|
||||
'codigo_registro' => $entrada->codigo_registro,
|
||||
'entrada_item_id' => $entrada->entrada_item_id,
|
||||
'material_descricao' => $entrada->material_descricao,
|
||||
'fabricante_nome' => $entrada->fabricante_nome,
|
||||
'lote' => $entrada->lote,
|
||||
'data_validade' => $entrada->data_validade,
|
||||
'quantidade' => $entrada->quantidade,
|
||||
'status_processamento' => is_null($entrada->processado_sucesso) ? 'Ainda não processado' : ($entrada->processado_sucesso ? 'Processado com sucesso' : 'Erro ao processar'),
|
||||
'mensagem' => null,
|
||||
'servico_tipo_descricao' => $protocolo->servico_tipo_descricao,
|
||||
];
|
||||
});
|
||||
}
|
||||
else if ($protocolo->servico_tipo_id === BnafarServicoTipo::SAIDA) {
|
||||
return DB::table('integracao_bnafar_saida_item')
|
||||
->select([
|
||||
'integracao_bnafar_saida.id',
|
||||
'cadastro_unidade.nome_fantasia AS unidade_nome_fantasia',
|
||||
'integracao_bnafar_saida.codigo_registro',
|
||||
'integracao_bnafar_saida.processado_sucesso',
|
||||
'integracao_bnafar_saida_item.id AS saida_item_id',
|
||||
'cadastro_material.descricao AS material_descricao',
|
||||
'cadastro_fabricante.nome AS fabricante_nome',
|
||||
'integracao_bnafar_saida_item.lote',
|
||||
DB::raw("DATE_FORMAT(integracao_bnafar_saida_item.data_validade, '%d/%m/%Y') AS data_validade"),
|
||||
'integracao_bnafar_saida_item.quantidade',
|
||||
'integracao_bnafar_saida_item.mensagem',
|
||||
])
|
||||
->join('cadastro_material', 'cadastro_material.id', 'integracao_bnafar_saida_item.material_id')
|
||||
->join('cadastro_fabricante', 'cadastro_fabricante.id', 'integracao_bnafar_saida_item.fabricante_id')
|
||||
->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')
|
||||
->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id')
|
||||
->where('integracao_bnafar_saida.protocolo_id', $protocolo->id)
|
||||
->get()
|
||||
->map(function($saida) use ($protocolo) {
|
||||
return [
|
||||
'id' => $saida->id,
|
||||
'servico_tipo_id' => $protocolo->servico_tipo_id,
|
||||
'unidade_nome_fantasia' => $saida->unidade_nome_fantasia,
|
||||
'protocolo' => $protocolo->protocolo,
|
||||
'codigo_registro' => $saida->codigo_registro,
|
||||
'saida_item_id' => $saida->saida_item_id,
|
||||
'material_descricao' => $saida->material_descricao,
|
||||
'fabricante_nome' => $saida->fabricante_nome,
|
||||
'lote' => $saida->lote,
|
||||
'data_validade' => $saida->data_validade,
|
||||
'quantidade' => $saida->quantidade,
|
||||
'status_processamento' => is_null($saida->processado_sucesso) ? 'Ainda não processado' : ($saida->processado_sucesso ? 'Processado com sucesso' : 'Erro ao processar'),
|
||||
'mensagem' => BnafarService::formatarMensagem($saida->mensagem),
|
||||
'servico_tipo_descricao' => $protocolo->servico_tipo_descricao,
|
||||
];
|
||||
});
|
||||
}
|
||||
else if ($protocolo->servico_tipo_id === BnafarServicoTipo::DISPENSACAO) {
|
||||
return DB::table('integracao_bnafar_dispensacao_item')
|
||||
->select([
|
||||
'integracao_bnafar_dispensacao.id',
|
||||
'cadastro_unidade.nome_fantasia AS unidade_nome_fantasia',
|
||||
'integracao_bnafar_dispensacao.codigo_registro',
|
||||
'integracao_bnafar_dispensacao.processado_sucesso',
|
||||
'integracao_bnafar_dispensacao_item.id AS dispensacao_item_id',
|
||||
'cadastro_material.descricao AS material_descricao',
|
||||
'cadastro_fabricante.nome AS fabricante_nome',
|
||||
'integracao_bnafar_dispensacao_item.lote',
|
||||
DB::raw("DATE_FORMAT(integracao_bnafar_dispensacao_item.data_validade, '%d/%m/%Y') AS data_validade"),
|
||||
'integracao_bnafar_dispensacao_item.quantidade',
|
||||
])
|
||||
->join('cadastro_material', 'cadastro_material.id', 'integracao_bnafar_dispensacao_item.material_id')
|
||||
->join('cadastro_fabricante', 'cadastro_fabricante.id', 'integracao_bnafar_dispensacao_item.fabricante_id')
|
||||
->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')
|
||||
->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id')
|
||||
->where('integracao_bnafar_dispensacao.protocolo_id', $protocolo->id)
|
||||
->get()
|
||||
->map(function($dispensacao) use ($protocolo) {
|
||||
return [
|
||||
'id' => $dispensacao->id,
|
||||
'servico_tipo_id' => $protocolo->servico_tipo_id,
|
||||
'unidade_nome_fantasia' => $dispensacao->unidade_nome_fantasia,
|
||||
'protocolo' => $protocolo->protocolo,
|
||||
'codigo_registro' => $dispensacao->codigo_registro,
|
||||
'dispensacao_item_id' => $dispensacao->dispensacao_item_id,
|
||||
'material_descricao' => $dispensacao->material_descricao,
|
||||
'fabricante_nome' => $dispensacao->fabricante_nome,
|
||||
'lote' => $dispensacao->lote,
|
||||
'data_validade' => $dispensacao->data_validade,
|
||||
'quantidade' => $dispensacao->quantidade,
|
||||
'status_processamento' => is_null($dispensacao->processado_sucesso) ? 'Ainda não processado' : ($dispensacao->processado_sucesso ? 'Processado com sucesso' : 'Erro ao processar'),
|
||||
'mensagem' => null,
|
||||
'servico_tipo_descricao' => $protocolo->servico_tipo_descricao,
|
||||
];
|
||||
});
|
||||
}
|
||||
else if ($protocolo->servico_tipo_id === BnafarServicoTipo::POSICAO_ESTOQUE) {
|
||||
return DB::table('integracao_bnafar_posicao_estoque_item')
|
||||
->select([
|
||||
'integracao_bnafar_posicao_estoque.id',
|
||||
'cadastro_unidade.nome_fantasia AS unidade_nome_fantasia',
|
||||
'integracao_bnafar_posicao_estoque.codigo_registro',
|
||||
'integracao_bnafar_posicao_estoque.processado_sucesso',
|
||||
'integracao_bnafar_posicao_estoque_item.id AS posicao_estoque_item_id',
|
||||
'cadastro_material.descricao AS material_descricao',
|
||||
'cadastro_fabricante.nome AS fabricante_nome',
|
||||
'integracao_bnafar_posicao_estoque_item.lote',
|
||||
DB::raw("DATE_FORMAT(integracao_bnafar_posicao_estoque_item.data_validade, '%d/%m/%Y') AS data_validade"),
|
||||
'integracao_bnafar_posicao_estoque_item.quantidade',
|
||||
'integracao_bnafar_posicao_estoque_item.mensagem',
|
||||
])
|
||||
->join('cadastro_material', 'cadastro_material.id', 'integracao_bnafar_posicao_estoque_item.material_id')
|
||||
->join('cadastro_fabricante', 'cadastro_fabricante.id', 'integracao_bnafar_posicao_estoque_item.fabricante_id')
|
||||
->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')
|
||||
->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id')
|
||||
->where('integracao_bnafar_posicao_estoque.protocolo_id', $protocolo->id)
|
||||
->get()
|
||||
->map(function($posicaoEstoque) use ($protocolo) {
|
||||
return [
|
||||
'id' => $posicaoEstoque->id,
|
||||
'servico_tipo_id' => $protocolo->servico_tipo_id,
|
||||
'unidade_nome_fantasia' => $posicaoEstoque->unidade_nome_fantasia,
|
||||
'protocolo' => $protocolo->protocolo,
|
||||
'codigo_registro' => $posicaoEstoque->codigo_registro,
|
||||
'posicao_estoque_item_id' => $posicaoEstoque->posicao_estoque_item_id,
|
||||
'material_descricao' => $posicaoEstoque->material_descricao,
|
||||
'fabricante_nome' => $posicaoEstoque->fabricante_nome,
|
||||
'lote' => $posicaoEstoque->lote,
|
||||
'data_validade' => $posicaoEstoque->data_validade,
|
||||
'quantidade' => $posicaoEstoque->quantidade,
|
||||
'status_processamento' => is_null($posicaoEstoque->processado_sucesso) ? 'Ainda não processado' : ($posicaoEstoque->processado_sucesso ? 'Processado com sucesso' : 'Erro ao processar'),
|
||||
'mensagem' => BnafarService::formatarMensagem($posicaoEstoque->mensagem),
|
||||
'servico_tipo_descricao' => $protocolo->servico_tipo_descricao,
|
||||
];
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public static function datatable()
|
||||
{
|
||||
return DB::table('integracao_bnafar_protocolo')
|
||||
->select([
|
||||
'integracao_bnafar_protocolo.id',
|
||||
'integracao_bnafar_processamento_status.id AS processamento_status_id',
|
||||
'integracao_bnafar_processamento_status.descricao AS processamento_status_descricao',
|
||||
'integracao_bnafar_servico_tipo.descricao AS servico_tipo_descricao',
|
||||
'integracao_bnafar_operacao_tipo.descricao AS operacao_tipo_descricao',
|
||||
'integracao_bnafar_protocolo.protocolo',
|
||||
DB::raw("DATE_FORMAT(integracao_bnafar_protocolo.data_protocolo, '%d/%m/%Y') AS data_protocolo"),
|
||||
])
|
||||
->leftJoin('integracao_bnafar_processamento_status', 'integracao_bnafar_processamento_status.id', 'integracao_bnafar_protocolo.processamento_status_id')
|
||||
->leftJoin('integracao_bnafar_servico_tipo', 'integracao_bnafar_servico_tipo.id', 'integracao_bnafar_protocolo.servico_tipo_id')
|
||||
->leftJoin('integracao_bnafar_operacao_tipo', 'integracao_bnafar_operacao_tipo.id', 'integracao_bnafar_protocolo.operacao_tipo_id');
|
||||
}
|
||||
}
|
||||
20
api/app/Services/Integracao/Bnafar/MedicamentoService.php
Normal file
20
api/app/Services/Integracao/Bnafar/MedicamentoService.php
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Integracao\Bnafar;
|
||||
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class MedicamentoService extends Service
|
||||
{
|
||||
public static function autocomplete()
|
||||
{
|
||||
return DB::table('integracao_bnafar_medicamento')
|
||||
->select([
|
||||
'id',
|
||||
'codigo',
|
||||
'descricao',
|
||||
])
|
||||
->when(request()->ids, fn ($q, $ids) => $q->whereNotIn('id', $ids));
|
||||
}
|
||||
}
|
||||
68
api/app/Services/Integracao/Bnafar/ParametrizacaoService.php
Normal file
68
api/app/Services/Integracao/Bnafar/ParametrizacaoService.php
Normal file
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Integracao\Bnafar;
|
||||
|
||||
use App\Models\Integracao\Bnafar\Parametrizacao;
|
||||
use App\Services\Service;
|
||||
|
||||
class ParametrizacaoService extends Service
|
||||
{
|
||||
public static function create()
|
||||
{
|
||||
$parametrizacao = self::show();
|
||||
|
||||
return [
|
||||
'model' => [
|
||||
'usuario' => $parametrizacao->usuario ?? null,
|
||||
'senha' => $parametrizacao->senha ?? null,
|
||||
'ativo' => $parametrizacao->ativo ?? false,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public static function store($request)
|
||||
{
|
||||
self::validate($request);
|
||||
|
||||
$parametrizacao = self::show();
|
||||
|
||||
if (is_null($parametrizacao)) {
|
||||
Parametrizacao::create([
|
||||
'usuario' => $request->usuario,
|
||||
'senha' => $request->senha,
|
||||
'ativo' => $request->ativo,
|
||||
]);
|
||||
} else {
|
||||
$parametrizacao->update([
|
||||
'usuario' => $request->usuario,
|
||||
'senha' => $request->senha,
|
||||
'ativo' => $request->ativo,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
public static function show()
|
||||
{
|
||||
return Parametrizacao::first();
|
||||
}
|
||||
|
||||
private static function validate()
|
||||
{
|
||||
request()->validate([
|
||||
'usuario' => [
|
||||
'required',
|
||||
'string',
|
||||
'max:180',
|
||||
],
|
||||
'senha' => [
|
||||
'required',
|
||||
'string',
|
||||
'max:180',
|
||||
],
|
||||
'ativo' => [
|
||||
'required',
|
||||
'boolean',
|
||||
],
|
||||
]);
|
||||
}
|
||||
}
|
||||
344
api/app/Services/Integracao/Bnafar/PosicaoEstoqueService.php
Normal file
344
api/app/Services/Integracao/Bnafar/PosicaoEstoqueService.php
Normal file
@@ -0,0 +1,344 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Integracao\Bnafar;
|
||||
|
||||
use App\Enums\Cadastro\Fabricante\Tipo as FabricanteTipo;
|
||||
use App\Enums\Integracao\Bnafar\BnafarOperacaoTipo;
|
||||
use App\Enums\Integracao\Bnafar\BnafarProcessamentoStatus;
|
||||
use App\Enums\Integracao\Bnafar\BnafarServicoTipo;
|
||||
use App\Models\Integracao\Bnafar\PosicaoEstoque;
|
||||
use App\Models\Integracao\Bnafar\PosicaoEstoqueItem;
|
||||
use App\Models\Integracao\Bnafar\Protocolo;
|
||||
use App\Models\Integracao\Bnafar\ProtocoloResposta;
|
||||
use App\Services\Integracao\BnafarService;
|
||||
use App\Services\Service;
|
||||
use App\Services\Telegram\TelegramService;
|
||||
use Exception;
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class PosicaoEstoqueService extends Service
|
||||
{
|
||||
private const POSICOES_ESTOQUE_POR_PROTOCOLO = 1000;
|
||||
private const ITENS_POR_POSICAO_ESTOQUE = 60;
|
||||
|
||||
public static function store()
|
||||
{
|
||||
$posicaoEstoqueId = null;
|
||||
$posicoes = self::getAlmoxarifadoPosicoesEstoque();
|
||||
|
||||
if (sizeof($posicoes) > 0) {
|
||||
$protocoloId = Protocolo::create([
|
||||
'servico_tipo_id' => BnafarServicoTipo::POSICAO_ESTOQUE,
|
||||
'operacao_tipo_id' => BnafarOperacaoTipo::OPERACAO_INCLUSAO_REGISTRO,
|
||||
])->id;
|
||||
}
|
||||
|
||||
foreach ($posicoes as $posicao) {
|
||||
$posicaoEstoqueId = DB::table('integracao_bnafar_posicao_estoque')
|
||||
->where('id', $posicaoEstoqueId)
|
||||
->whereRaw('
|
||||
(
|
||||
SELECT COUNT(*)
|
||||
FROM integracao_bnafar_posicao_estoque_item
|
||||
WHERE integracao_bnafar_posicao_estoque_item.posicao_estoque_id = integracao_bnafar_posicao_estoque.id
|
||||
) < ' . self::ITENS_POR_POSICAO_ESTOQUE . '
|
||||
')
|
||||
->first()->id ?? null;
|
||||
|
||||
if (is_null($posicaoEstoqueId)) {
|
||||
$protocoloId = DB::table('integracao_bnafar_protocolo')
|
||||
->where('id', $protocoloId)
|
||||
->whereRaw('
|
||||
(
|
||||
SELECT COUNT(*)
|
||||
FROM integracao_bnafar_posicao_estoque
|
||||
WHERE integracao_bnafar_posicao_estoque.protocolo_id = integracao_bnafar_protocolo.id
|
||||
) < ' . self::POSICOES_ESTOQUE_POR_PROTOCOLO . '
|
||||
')
|
||||
->first()->id ?? null;
|
||||
|
||||
if (is_null($protocoloId)) {
|
||||
$protocoloId = Protocolo::create([
|
||||
'servico_tipo_id' => BnafarServicoTipo::POSICAO_ESTOQUE,
|
||||
'operacao_tipo_id' => BnafarOperacaoTipo::OPERACAO_INCLUSAO_REGISTRO,
|
||||
])->id;
|
||||
}
|
||||
|
||||
$posicaoEstoqueId = PosicaoEstoque::create([
|
||||
'protocolo_id' => $protocoloId,
|
||||
'centro_custo_id' => $posicao->centro_custo_id,
|
||||
'data_posicao_estoque' => $posicao->data_posicao_estoque,
|
||||
])->id;
|
||||
}
|
||||
|
||||
PosicaoEstoqueItem::create([
|
||||
'posicao_estoque_id' => $posicaoEstoqueId,
|
||||
'material_id' => $posicao->material_id,
|
||||
'fabricante_id' => $posicao->fabricante_id,
|
||||
'integracao_bnafar_medicamento_id' => $posicao->integracao_bnafar_medicamento_id,
|
||||
'lote' => $posicao->lote,
|
||||
'data_validade' => $posicao->data_validade,
|
||||
'quantidade' => $posicao->quantidade,
|
||||
'valor_unitario' => $posicao->valor_unitario,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
public static function post($cliente, $token, $ibge)
|
||||
{
|
||||
$protocolos = self::getPosicoesEstoque();
|
||||
|
||||
foreach ($protocolos as $protocolo) {
|
||||
try {
|
||||
$response = BnafarService::post(['action' => 'posicao-estoque-lote', 'token' => $token, 'ibge' => $ibge], $protocolo['posicoes']);
|
||||
|
||||
if ($response->status() === Response::HTTP_OK) {
|
||||
Protocolo::where('id', $protocolo['id'])->update([
|
||||
'processamento_status_id' => $response['situacao'],
|
||||
'protocolo' => $response['protocolo'],
|
||||
'data_protocolo' => $response['dataProtocolo'],
|
||||
]);
|
||||
} else {
|
||||
Protocolo::where('id', $protocolo['id'])->update(['processamento_status_id' => BnafarProcessamentoStatus::ERRO_INTERNO_SERVIDOR]);
|
||||
|
||||
ProtocoloResposta::create([
|
||||
'protocolo_id' => $protocolo['id'],
|
||||
'resposta' => json_encode($response->json()),
|
||||
]);
|
||||
}
|
||||
} catch (Exception $error) {
|
||||
Log::channel('integracao-bnafar')->error('Erro ao executar o comando', [
|
||||
'cliente' => $cliente,
|
||||
'origem' => 'PosicaoEstoqueService',
|
||||
'erro' => $error->getMessage(),
|
||||
]);
|
||||
|
||||
if (env('APP_ENV') === 'production') {
|
||||
TelegramService::send('<strong>Integração BNAFAR (' . $cliente . '):</strong> (Erro ao executar o comando: EnviarPosicaoEstoqueCommand).');
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function check($cliente, $token, $ibge)
|
||||
{
|
||||
Protocolo::whereNull('protocolo')->delete();
|
||||
|
||||
$protocolos = self::getProtocolos();
|
||||
|
||||
foreach ($protocolos as $protocolo) {
|
||||
try {
|
||||
$response = BnafarService::getDetalheProcessamento($token, $ibge, $protocolo->protocolo);
|
||||
|
||||
if (isset($response['protocolo'])) {
|
||||
Protocolo::where('id', $protocolo->id)->update(['processamento_status_id' => $response['protocolo']['situacao']]);
|
||||
}
|
||||
|
||||
$resposta = BnafarService::getInconsistencias($token, $ibge, $protocolo->protocolo);
|
||||
|
||||
if (!is_null($resposta)) {
|
||||
ProtocoloResposta::create([
|
||||
'protocolo_id' => $protocolo->id,
|
||||
'resposta' => $resposta,
|
||||
]);
|
||||
|
||||
self::salvarInconsistenciasItens($resposta);
|
||||
} else {
|
||||
ProtocoloResposta::where('protocolo_id', $protocolo->id)->delete();
|
||||
}
|
||||
|
||||
if (isset($response['itensProcessados'])) {
|
||||
foreach ($response['itensProcessados'] as $itemProcessado) {
|
||||
PosicaoEstoque::where('id', $itemProcessado['codigoOrigem'])->update([
|
||||
'codigo_registro' => isset($itemProcessado['codigoBnafar']) && $itemProcessado['codigoBnafar'] > 0 ? $itemProcessado['codigoBnafar'] : null,
|
||||
'processado_sucesso' => $itemProcessado['sucesso'],
|
||||
]);
|
||||
}
|
||||
}
|
||||
} catch (Exception $error) {
|
||||
Log::channel('integracao-bnafar')->error('Erro ao executar o comando', [
|
||||
'cliente' => $cliente,
|
||||
'origem' => 'PosicaoEstoqueService',
|
||||
'erro' => $error->getMessage(),
|
||||
]);
|
||||
|
||||
if (env('APP_ENV') === 'production') {
|
||||
TelegramService::send('<strong>Integração BNAFAR (' . $cliente . '):</strong> (Erro ao executar o comando: EnviarPosicaoEstoqueCommand).');
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static function salvarInconsistenciasItens($resposta)
|
||||
{
|
||||
collect(json_decode($resposta, true))
|
||||
->pluck('inconsistencias')
|
||||
->filter()
|
||||
->flatten(1)
|
||||
->groupBy('codigoOrigem')
|
||||
->each(function ($inconsistencias, $codigoOrigem) {
|
||||
$mensagem = $inconsistencias
|
||||
->pluck('mensagem')
|
||||
->map(fn ($mensagem) => BnafarService::formatarMensagem($mensagem))
|
||||
->filter()
|
||||
->unique()
|
||||
->implode(' ');
|
||||
|
||||
PosicaoEstoqueItem::where('id', $codigoOrigem)->update(['mensagem' => $mensagem]);
|
||||
});
|
||||
}
|
||||
|
||||
private static function getPosicoesEstoque()
|
||||
{
|
||||
return DB::table('integracao_bnafar_protocolo')
|
||||
->select('id')
|
||||
->where('servico_tipo_id', BnafarServicoTipo::POSICAO_ESTOQUE)
|
||||
->whereNull('integracao_bnafar_protocolo.processamento_status_id')
|
||||
->get()
|
||||
->map(function($protocolo) {
|
||||
$posicoes = DB::table('integracao_bnafar_posicao_estoque')
|
||||
->select([
|
||||
'cadastro_unidade.cnes AS cnes',
|
||||
'cadastro_setor.tipo_id AS setor_tipo_id',
|
||||
'integracao_bnafar_posicao_estoque.id AS codigo_origem',
|
||||
'integracao_bnafar_posicao_estoque.data_posicao_estoque',
|
||||
])
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'integracao_bnafar_posicao_estoque.centro_custo_id')
|
||||
->join('cadastro_setor', 'cadastro_setor.id', 'cadastro_centro_custo.setor_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id')
|
||||
->where('integracao_bnafar_posicao_estoque.protocolo_id', $protocolo->id)
|
||||
->where(function($query) {
|
||||
$query
|
||||
->whereNull('integracao_bnafar_posicao_estoque.processado_sucesso')
|
||||
->orWhere('integracao_bnafar_posicao_estoque.processado_sucesso', false);
|
||||
})
|
||||
->get()
|
||||
->map(function($posicao){
|
||||
$itens = DB::table('integracao_bnafar_posicao_estoque_item')
|
||||
->select([
|
||||
'integracao_bnafar_posicao_estoque_item.posicao_estoque_id',
|
||||
'integracao_bnafar_posicao_estoque_item.id AS codigo_origem',
|
||||
'cadastro_material_bnafar.codigo AS numero',
|
||||
'cadastro_material_bnafar.tipo AS tipo_produto',
|
||||
'integracao_bnafar_posicao_estoque_item.lote',
|
||||
DB::raw("DATE_FORMAT(integracao_bnafar_posicao_estoque_item.data_validade, '%Y-%m-%d') AS data_validade"),
|
||||
'cadastro_fabricante.tipo_id AS tipo_fabricante',
|
||||
'cadastro_fabricante.cnpj AS cnpj_fabricante',
|
||||
'cadastro_fabricante.nome AS nome_fabricante',
|
||||
'integracao_bnafar_medicamento.codigo AS integracao_bnafar_medicamento_codigo',
|
||||
'integracao_bnafar_posicao_estoque_item.quantidade',
|
||||
'integracao_bnafar_posicao_estoque_item.valor_unitario',
|
||||
])
|
||||
->join('cadastro_material', 'cadastro_material.id', 'integracao_bnafar_posicao_estoque_item.material_id')
|
||||
->join('cadastro_material_bnafar', 'cadastro_material_bnafar.id', 'cadastro_material.material_bnafar_id')
|
||||
->join('cadastro_fabricante', 'cadastro_fabricante.id', 'integracao_bnafar_posicao_estoque_item.fabricante_id')
|
||||
->leftJoin('integracao_bnafar_medicamento', 'integracao_bnafar_medicamento.id', 'integracao_bnafar_posicao_estoque_item.integracao_bnafar_medicamento_id')
|
||||
->where('integracao_bnafar_posicao_estoque_item.posicao_estoque_id', $posicao->codigo_origem)
|
||||
->get()
|
||||
->map(function($item) {
|
||||
return [
|
||||
'codigoOrigem' => $item->codigo_origem,
|
||||
'numero' => $item->numero,
|
||||
'terminologia' => $item->integracao_bnafar_medicamento_codigo ? 'OBM' : 'CATMAT',
|
||||
'codigoAmpp' => $item->integracao_bnafar_medicamento_codigo,
|
||||
'tipoProduto' => $item->tipo_produto,
|
||||
'lote' => $item->lote,
|
||||
'dataValidade' => $item->data_validade,
|
||||
'cnpjFabricante' => $item->tipo_fabricante === FabricanteTipo::NACIONAL ? $item->cnpj_fabricante : null,
|
||||
'nomeFabricanteInternacional' => $item->tipo_fabricante === FabricanteTipo::INTERNACIONAL ? $item->nome_fabricante : null,
|
||||
'quantidade' => $item->quantidade,
|
||||
'valorUnitario' => $item->valor_unitario,
|
||||
];
|
||||
})
|
||||
->toArray();
|
||||
|
||||
return [
|
||||
'estabelecimento' => [
|
||||
'cnes' => $posicao->cnes,
|
||||
'tipo' => BnafarService::getEstabelecimentoTipo($posicao->setor_tipo_id),
|
||||
],
|
||||
'caracterizacao' => [
|
||||
'codigoOrigem' => $posicao->codigo_origem,
|
||||
'dataPosicaoEstoque' => $posicao->data_posicao_estoque,
|
||||
],
|
||||
'itens' => $itens,
|
||||
];
|
||||
})
|
||||
->toArray();
|
||||
|
||||
return [
|
||||
'id' => $protocolo->id,
|
||||
'posicoes' => $posicoes,
|
||||
];
|
||||
})
|
||||
->toArray();
|
||||
}
|
||||
|
||||
private static function getProtocolos()
|
||||
{
|
||||
return DB::table('integracao_bnafar_protocolo')
|
||||
->select([
|
||||
'id',
|
||||
'protocolo',
|
||||
])
|
||||
->where('servico_tipo_id', BnafarServicoTipo::POSICAO_ESTOQUE)
|
||||
->where('processamento_status_id', '!=', BnafarProcessamentoStatus::PROCESSAMENTO_FINALIZADO_SEM_INCONSISTENCIA)
|
||||
->whereNotNull('processamento_status_id')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getAlmoxarifadoPosicoesEstoque()
|
||||
{
|
||||
return DB::table('almoxarifado_entrada_item')
|
||||
->select([
|
||||
'almoxarifado_entrada.centro_custo_id',
|
||||
'almoxarifado_entrada_item.material_id',
|
||||
'almoxarifado_entrada_item.fabricante_id',
|
||||
'almoxarifado_entrada_item.integracao_bnafar_medicamento_id',
|
||||
'almoxarifado_entrada_item.lote',
|
||||
'almoxarifado_entrada_item.validade_lote AS data_validade',
|
||||
DB::raw('CURRENT_DATE AS data_posicao_estoque'),
|
||||
DB::raw('MAX(almoxarifado_entrada_item.valor_unitario) AS valor_unitario'),
|
||||
DB::raw('
|
||||
SUM(almoxarifado_entrada_item.quantidade - COALESCE((
|
||||
SELECT SUM(almoxarifado_saida_item_entrada_item.quantidade_saida)
|
||||
FROM almoxarifado_saida_item_entrada_item
|
||||
INNER JOIN almoxarifado_saida_item
|
||||
ON almoxarifado_saida_item.id = almoxarifado_saida_item_entrada_item.saida_item_id
|
||||
INNER JOIN almoxarifado_saida
|
||||
ON almoxarifado_saida.id = almoxarifado_saida_item.saida_id
|
||||
WHERE almoxarifado_saida.finalizada = true
|
||||
AND almoxarifado_saida_item_entrada_item.entrada_item_id = almoxarifado_entrada_item.id
|
||||
), 0)) AS quantidade
|
||||
'),
|
||||
])
|
||||
->join('almoxarifado_entrada', 'almoxarifado_entrada.id', 'almoxarifado_entrada_item.entrada_id')
|
||||
->where('almoxarifado_entrada.finalizada', true)
|
||||
->whereNotNull('almoxarifado_entrada_item.fabricante_id')
|
||||
->whereNotNull('almoxarifado_entrada_item.lote')
|
||||
->where(DB::raw('ROUND(almoxarifado_entrada_item.valor_unitario, 2)'), '>', 0)
|
||||
->whereExists(fn ($q) => $q
|
||||
->select(DB::raw(1))
|
||||
->from('cadastro_material')
|
||||
->join('cadastro_material_bnafar', 'cadastro_material_bnafar.id', 'cadastro_material.material_bnafar_id')
|
||||
->whereColumn('cadastro_material.id', 'almoxarifado_entrada_item.material_id')
|
||||
)
|
||||
->groupBy([
|
||||
'almoxarifado_entrada.centro_custo_id',
|
||||
'almoxarifado_entrada_item.material_id',
|
||||
'almoxarifado_entrada_item.fabricante_id',
|
||||
'almoxarifado_entrada_item.integracao_bnafar_medicamento_id',
|
||||
'almoxarifado_entrada_item.lote',
|
||||
'almoxarifado_entrada_item.validade_lote',
|
||||
DB::raw('CURRENT_DATE'),
|
||||
])
|
||||
->get();
|
||||
}
|
||||
}
|
||||
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();
|
||||
}
|
||||
}
|
||||
434
api/app/Services/Integracao/Bnafar/SaidaService.php
Normal file
434
api/app/Services/Integracao/Bnafar/SaidaService.php
Normal file
@@ -0,0 +1,434 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Integracao\Bnafar;
|
||||
|
||||
use App\Enums\Almoxarifado\SaidaTipo;
|
||||
use App\Enums\Cadastro\Fabricante\Tipo as FabricanteTipo;
|
||||
use App\Enums\Integracao\Bnafar\BnafarOperacaoTipo;
|
||||
use App\Enums\Integracao\Bnafar\BnafarProcessamentoStatus;
|
||||
use App\Enums\Integracao\Bnafar\BnafarSaidaTipo;
|
||||
use App\Enums\Integracao\Bnafar\BnafarServicoTipo;
|
||||
use App\Models\Integracao\Bnafar\Protocolo;
|
||||
use App\Models\Integracao\Bnafar\ProtocoloResposta;
|
||||
use App\Models\Integracao\Bnafar\Saida;
|
||||
use App\Models\Integracao\Bnafar\SaidaItem;
|
||||
use App\Services\Integracao\BnafarService;
|
||||
use App\Services\Service;
|
||||
use App\Services\Telegram\TelegramService;
|
||||
use Exception;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class SaidaService extends Service
|
||||
{
|
||||
private const SAIDAS_POR_PROTOCOLO = 1000;
|
||||
private const ITENS_POR_SAIDA = 60;
|
||||
|
||||
public static function store()
|
||||
{
|
||||
$saidas = self::getAlmoxarifadoSaidas();
|
||||
|
||||
if (sizeof($saidas) > 0) {
|
||||
$protocoloId = Protocolo::create([
|
||||
'servico_tipo_id' => BnafarServicoTipo::SAIDA,
|
||||
'operacao_tipo_id' => BnafarOperacaoTipo::OPERACAO_INCLUSAO_REGISTRO,
|
||||
])->id;
|
||||
}
|
||||
|
||||
foreach ($saidas as $saida) {
|
||||
$saidaId = DB::table('integracao_bnafar_saida')
|
||||
->where('almoxarifado_saida_id', $saida->almoxarifado_saida_id)
|
||||
->whereRaw('
|
||||
(
|
||||
SELECT COUNT(*)
|
||||
FROM integracao_bnafar_saida_item
|
||||
WHERE integracao_bnafar_saida_item.saida_id = integracao_bnafar_saida.id
|
||||
) < ' . self::ITENS_POR_SAIDA . '
|
||||
')
|
||||
->first()->id ?? null;
|
||||
|
||||
if (is_null($saidaId)) {
|
||||
$protocoloId = DB::table('integracao_bnafar_protocolo')
|
||||
->where('id', $protocoloId)
|
||||
->whereRaw('
|
||||
(
|
||||
SELECT COUNT(*)
|
||||
FROM integracao_bnafar_saida
|
||||
WHERE integracao_bnafar_saida.protocolo_id = integracao_bnafar_protocolo.id
|
||||
) < ' . self::SAIDAS_POR_PROTOCOLO . '
|
||||
')
|
||||
->first()->id ?? null;
|
||||
|
||||
if (is_null($protocoloId)) {
|
||||
$protocoloId = Protocolo::create([
|
||||
'servico_tipo_id' => BnafarServicoTipo::SAIDA,
|
||||
'operacao_tipo_id' => BnafarOperacaoTipo::OPERACAO_INCLUSAO_REGISTRO,
|
||||
])->id;
|
||||
}
|
||||
|
||||
$saidaId = Saida::create([
|
||||
'protocolo_id' => $protocoloId,
|
||||
'saida_tipo_id' => self::getSaidaTipo($saida->saida_tipo_id),
|
||||
'almoxarifado_saida_id' => $saida->almoxarifado_saida_id,
|
||||
'centro_custo_id' => $saida->centro_custo_id,
|
||||
'data_saida' => $saida->data_saida,
|
||||
'centro_custo_destino_id' => $saida->centro_custo_destino_id,
|
||||
])->id;
|
||||
}
|
||||
|
||||
SaidaItem::create([
|
||||
'saida_id' => $saidaId,
|
||||
'almoxarifado_saida_item_id' => $saida->almoxarifado_saida_item_id,
|
||||
'material_id' => $saida->material_id,
|
||||
'fabricante_id' => $saida->fabricante_id,
|
||||
'integracao_bnafar_medicamento_id' => $saida->integracao_bnafar_medicamento_id,
|
||||
'lote' => $saida->lote,
|
||||
'data_validade' => $saida->data_validade,
|
||||
'quantidade' => $saida->quantidade,
|
||||
'valor_unitario' => $saida->valor_unitario,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
public static function post($cliente, $token, $ibge)
|
||||
{
|
||||
$protocolos = self::getSaidas();
|
||||
|
||||
foreach ($protocolos as $protocolo) {
|
||||
try {
|
||||
$response = BnafarService::post(['action' => 'saida-lote', 'token' => $token, 'ibge' => $ibge], $protocolo['saidas']);
|
||||
|
||||
if (isset($response['protocolo'])) {
|
||||
Protocolo::where('id', $protocolo['id'])->update([
|
||||
'processamento_status_id' => $response['situacao'],
|
||||
'protocolo' => $response['protocolo'],
|
||||
'data_protocolo' => $response['dataProtocolo'],
|
||||
]);
|
||||
} else {
|
||||
Protocolo::where('id', $protocolo['id'])->update(['processamento_status_id' => BnafarProcessamentoStatus::ERRO_INTERNO_SERVIDOR]);
|
||||
|
||||
ProtocoloResposta::create([
|
||||
'protocolo_id' => $protocolo['id'],
|
||||
'resposta' => json_encode($response->json()),
|
||||
]);
|
||||
}
|
||||
} catch (Exception $error) {
|
||||
Log::channel('integracao-bnafar')->error('Erro ao executar o comando', [
|
||||
'cliente' => $cliente,
|
||||
'origem' => 'PosicaoEstoqueService',
|
||||
'erro' => $error->getMessage(),
|
||||
]);
|
||||
|
||||
if (env('APP_ENV') === 'production') {
|
||||
TelegramService::send('<strong>Integração BNAFAR (' . $cliente . '):</strong> (Erro ao executar o comando: EnviarPosicaoEstoqueCommand).');
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function check($cliente, $token, $ibge)
|
||||
{
|
||||
Protocolo::whereNull('protocolo')->delete();
|
||||
|
||||
$protocolos = self::getProtocolos();
|
||||
|
||||
foreach ($protocolos as $protocolo) {
|
||||
try {
|
||||
$response = BnafarService::getDetalheProcessamento($token, $ibge, $protocolo->protocolo);
|
||||
|
||||
if (isset($response['protocolo'])) {
|
||||
Protocolo::where('id', $protocolo->id)->update(['processamento_status_id' => $response['protocolo']['situacao']]);
|
||||
}
|
||||
|
||||
$resposta = BnafarService::getInconsistencias($token, $ibge, $protocolo->protocolo);
|
||||
|
||||
if (!is_null($resposta)) {
|
||||
ProtocoloResposta::create([
|
||||
'protocolo_id' => $protocolo->id,
|
||||
'resposta' => $resposta,
|
||||
]);
|
||||
|
||||
self::salvarInconsistenciasItens($resposta);
|
||||
} else {
|
||||
ProtocoloResposta::where('protocolo_id', $protocolo->id)->delete();
|
||||
}
|
||||
|
||||
if (isset($response['itensProcessados'])) {
|
||||
foreach ($response['itensProcessados'] as $itemProcessado) {
|
||||
Saida::where('id', $itemProcessado['codigoOrigem'])->update([
|
||||
'codigo_registro' => isset($itemProcessado['codigoBnafar']) && $itemProcessado['codigoBnafar'] > 0 ? $itemProcessado['codigoBnafar'] : null,
|
||||
'processado_sucesso' => $itemProcessado['sucesso'],
|
||||
]);
|
||||
}
|
||||
}
|
||||
} catch (Exception $error) {
|
||||
Log::channel('integracao-bnafar')->error('Erro ao executar o comando', [
|
||||
'cliente' => $cliente,
|
||||
'origem' => 'PosicaoEstoqueService',
|
||||
'erro' => $error->getMessage(),
|
||||
]);
|
||||
|
||||
if (env('APP_ENV') === 'production') {
|
||||
TelegramService::send('<strong>Integração BNAFAR (' . $cliente . '):</strong> (Erro ao executar o comando: EnviarPosicaoEstoqueCommand).');
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static function salvarInconsistenciasItens($resposta)
|
||||
{
|
||||
collect(json_decode($resposta, true))
|
||||
->pluck('inconsistencias')
|
||||
->filter()
|
||||
->flatten(1)
|
||||
->groupBy('codigoOrigem')
|
||||
->each(function ($inconsistencias, $codigoOrigem) {
|
||||
$mensagem = $inconsistencias
|
||||
->pluck('mensagem')
|
||||
->map(fn ($mensagem) => BnafarService::formatarMensagem($mensagem))
|
||||
->filter()
|
||||
->unique()
|
||||
->implode(' ');
|
||||
|
||||
SaidaItem::where('id', $codigoOrigem)->update(['mensagem' => $mensagem]);
|
||||
});
|
||||
}
|
||||
|
||||
private static function getSaidas()
|
||||
{
|
||||
return DB::table('integracao_bnafar_protocolo')
|
||||
->select('id')
|
||||
->where('servico_tipo_id', BnafarServicoTipo::SAIDA)
|
||||
->whereNull('integracao_bnafar_protocolo.processamento_status_id')
|
||||
->get()
|
||||
->map(function($protocolo) {
|
||||
$saidas = DB::table('integracao_bnafar_saida')
|
||||
->select([
|
||||
'cadastro_unidade.cnes AS cnes',
|
||||
'cadastro_setor.id AS setor_tipo_id',
|
||||
'integracao_bnafar_saida.id AS codigo_origem',
|
||||
DB::raw("DATE_FORMAT(integracao_bnafar_saida.data_saida, '%Y-%m-%d') AS data_saida"),
|
||||
'cadastro_unidade_destino.cnes AS estabelecimento_destino',
|
||||
'integracao_bnafar_saida_tipo.codigo AS tipo_saida',
|
||||
])
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'integracao_bnafar_saida.centro_custo_id')
|
||||
->join('cadastro_setor', 'cadastro_setor.id', 'cadastro_centro_custo.setor_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id')
|
||||
->join('cadastro_centro_custo AS cadastro_centro_custo_destino', 'cadastro_centro_custo_destino.id', 'integracao_bnafar_saida.centro_custo_destino_id')
|
||||
->join('cadastro_infraestrutura AS cadastro_infraestrutura_destino', 'cadastro_infraestrutura_destino.id', 'cadastro_centro_custo_destino.infraestrutura_id')
|
||||
->join('cadastro_unidade AS cadastro_unidade_destino', 'cadastro_unidade_destino.id', 'cadastro_infraestrutura_destino.unidade_id')
|
||||
->join('integracao_bnafar_saida_tipo', 'integracao_bnafar_saida_tipo.id', 'integracao_bnafar_saida.saida_tipo_id')
|
||||
->where('integracao_bnafar_saida.protocolo_id', $protocolo->id)
|
||||
->where('cadastro_unidade_destino.cnes', '!=', null)
|
||||
->where(function($query) {
|
||||
$query
|
||||
->whereNull('integracao_bnafar_saida.processado_sucesso')
|
||||
->orWhere('integracao_bnafar_saida.processado_sucesso', false);
|
||||
})
|
||||
->get()
|
||||
->map(function($saida) {
|
||||
$itens = DB::table('integracao_bnafar_saida_item')
|
||||
->select([
|
||||
'integracao_bnafar_saida_item.id AS codigo_origem',
|
||||
'cadastro_material_bnafar.codigo AS numero',
|
||||
'cadastro_material_bnafar.tipo AS tipo_produto',
|
||||
'integracao_bnafar_saida_item.lote',
|
||||
DB::raw("DATE_FORMAT(integracao_bnafar_saida_item.data_validade, '%Y-%m-%d') AS data_validade"),
|
||||
'cadastro_fabricante.tipo_id AS tipo_fabricante',
|
||||
'cadastro_fabricante.cnpj AS cnpj_fabricante',
|
||||
'cadastro_fabricante.nome AS nome_fabricante',
|
||||
'integracao_bnafar_medicamento.codigo AS integracao_bnafar_medicamento_codigo',
|
||||
'integracao_bnafar_saida_item.quantidade',
|
||||
'integracao_bnafar_saida_item.valor_unitario',
|
||||
])
|
||||
->join('cadastro_material', 'cadastro_material.id', 'integracao_bnafar_saida_item.material_id')
|
||||
->join('cadastro_material_bnafar', 'cadastro_material_bnafar.id', 'cadastro_material.material_bnafar_id')
|
||||
->join('cadastro_fabricante', 'cadastro_fabricante.id', 'integracao_bnafar_saida_item.fabricante_id')
|
||||
->leftJoin('integracao_bnafar_medicamento', 'integracao_bnafar_medicamento.id', 'integracao_bnafar_saida_item.integracao_bnafar_medicamento_id')
|
||||
->where('integracao_bnafar_saida_item.saida_id', $saida->codigo_origem)
|
||||
->get()
|
||||
->map(function($item) {
|
||||
return [
|
||||
'codigoOrigem' => $item->codigo_origem,
|
||||
'numero' => $item->numero,
|
||||
'terminologia' => $item->integracao_bnafar_medicamento_codigo ? 'OBM' : 'CATMAT',
|
||||
'codigoAmpp' => $item->integracao_bnafar_medicamento_codigo,
|
||||
'tipoProduto' => $item->tipo_produto,
|
||||
'lote' => $item->lote,
|
||||
'dataValidade' => $item->data_validade,
|
||||
'cnpjFabricante' => $item->tipo_fabricante === FabricanteTipo::NACIONAL ? $item->cnpj_fabricante : null,
|
||||
'nomeFabricanteInternacional' => $item->tipo_fabricante === FabricanteTipo::INTERNACIONAL ? $item->nome_fabricante : null,
|
||||
'quantidade' => $item->quantidade,
|
||||
'valorUnitario' => $item->valor_unitario,
|
||||
];
|
||||
})
|
||||
->toArray();
|
||||
|
||||
return [
|
||||
'estabelecimento' => [
|
||||
'cnes' => $saida->cnes,
|
||||
'tipo' => BnafarService::getEstabelecimentoTipo($saida->setor_tipo_id),
|
||||
],
|
||||
'caracterizacao' => [
|
||||
'codigoOrigem' => $saida->codigo_origem,
|
||||
'dataSaida' => $saida->data_saida,
|
||||
'estabelecimentoDestino' => $saida->estabelecimento_destino,
|
||||
'tipoSaida' => $saida->tipo_saida,
|
||||
],
|
||||
'itens' => $itens,
|
||||
];
|
||||
})
|
||||
->toArray();
|
||||
|
||||
return [
|
||||
'id' => $protocolo->id,
|
||||
'saidas' => $saidas,
|
||||
];
|
||||
})
|
||||
->toArray();
|
||||
}
|
||||
|
||||
private static function getProtocolos()
|
||||
{
|
||||
return DB::table('integracao_bnafar_protocolo')
|
||||
->select([
|
||||
'id',
|
||||
'protocolo',
|
||||
])
|
||||
->where('servico_tipo_id', BnafarServicoTipo::SAIDA)
|
||||
->where('processamento_status_id', '!=', BnafarProcessamentoStatus::PROCESSAMENTO_FINALIZADO_SEM_INCONSISTENCIA)
|
||||
->whereNotNull('processamento_status_id')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getAlmoxarifadoSaidas()
|
||||
{
|
||||
return DB::table('almoxarifado_saida_item')
|
||||
->select([
|
||||
'almoxarifado_saida.tipo_id AS saida_tipo_id',
|
||||
'almoxarifado_saida.id AS almoxarifado_saida_id',
|
||||
'almoxarifado_saida.centro_custo_id',
|
||||
DB::raw("DATE_FORMAT(almoxarifado_saida.created_at, '%Y-%m-%d') AS data_saida"),
|
||||
'almoxarifado_saida_item.id AS almoxarifado_saida_item_id',
|
||||
'almoxarifado_saida_item.material_id',
|
||||
'almoxarifado_entrada_item.fabricante_id',
|
||||
'almoxarifado_entrada_item.integracao_bnafar_medicamento_id',
|
||||
'almoxarifado_entrada_item.lote AS lote',
|
||||
DB::raw("DATE_FORMAT(almoxarifado_entrada_item.validade_lote, '%Y-%m-%d') AS data_validade"),
|
||||
'almoxarifado_saida_item_entrada_item.quantidade_saida AS quantidade',
|
||||
'almoxarifado_entrada_item.valor_unitario',
|
||||
DB::raw("
|
||||
(
|
||||
CASE almoxarifado_saida.tipo_id WHEN " . SaidaTipo::MANUAL . " THEN
|
||||
(
|
||||
select centro_custo_id
|
||||
from almoxarifado_saida_requisicao
|
||||
where almoxarifado_saida_requisicao.saida_id = almoxarifado_saida.id
|
||||
)
|
||||
WHEN " . SaidaTipo::REQUISICAO . " THEN
|
||||
(
|
||||
select almoxarifado_requisicao.created_centro_custo_id
|
||||
from almoxarifado_requisicao_resposta_item
|
||||
inner join almoxarifado_requisicao_item
|
||||
on almoxarifado_requisicao_item.id = almoxarifado_requisicao_resposta_item.requisicao_item_id
|
||||
inner join almoxarifado_requisicao
|
||||
on almoxarifado_requisicao.id = almoxarifado_requisicao_item.requisicao_id
|
||||
where almoxarifado_requisicao_resposta_item.saida_item_id = almoxarifado_saida_item.id
|
||||
)
|
||||
WHEN " . SaidaTipo::INVENTARIO . " THEN
|
||||
almoxarifado_saida.centro_custo_id
|
||||
WHEN " . SaidaTipo::ESTORNO . " THEN
|
||||
almoxarifado_saida.centro_custo_id
|
||||
WHEN " . SaidaTipo::BAIXA . " THEN
|
||||
almoxarifado_saida.centro_custo_id
|
||||
WHEN " . SaidaTipo::TRANSFERENCIA . " THEN
|
||||
(
|
||||
select almoxarifado_saida_transferencia.centro_custo_id
|
||||
from almoxarifado_saida_transferencia
|
||||
where almoxarifado_saida_transferencia.saida_id = almoxarifado_saida.id
|
||||
)
|
||||
END
|
||||
) AS centro_custo_destino_id
|
||||
")
|
||||
])
|
||||
->join('almoxarifado_saida', 'almoxarifado_saida.id', 'almoxarifado_saida_item.saida_id')
|
||||
->join('almoxarifado_saida_item_entrada_item', 'almoxarifado_saida_item_entrada_item.saida_item_id', 'almoxarifado_saida_item.id')
|
||||
->join('almoxarifado_entrada_item', 'almoxarifado_entrada_item.id', 'almoxarifado_saida_item_entrada_item.entrada_item_id')
|
||||
->where('almoxarifado_saida.finalizada', true)
|
||||
->where('almoxarifado_saida.tipo_id', '<>', SaidaTipo::DISPENSACAO_FARMACIA)
|
||||
->whereRaw("CAST(almoxarifado_saida.created_at AS DATE) >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)")
|
||||
->whereNotNull('almoxarifado_entrada_item.fabricante_id')
|
||||
->whereNotNull('almoxarifado_entrada_item.lote')
|
||||
->where(DB::raw('ROUND(almoxarifado_entrada_item.valor_unitario, 2)'), '>', 0)
|
||||
->whereRaw("
|
||||
(
|
||||
CASE almoxarifado_saida.tipo_id WHEN " . SaidaTipo::MANUAL . " THEN
|
||||
(
|
||||
select centro_custo_id
|
||||
from almoxarifado_saida_requisicao
|
||||
where almoxarifado_saida_requisicao.saida_id = almoxarifado_saida.id
|
||||
)
|
||||
WHEN " . SaidaTipo::REQUISICAO . " THEN
|
||||
(
|
||||
select almoxarifado_requisicao.created_centro_custo_id
|
||||
from almoxarifado_requisicao_resposta_item
|
||||
inner join almoxarifado_requisicao_item
|
||||
on almoxarifado_requisicao_item.id = almoxarifado_requisicao_resposta_item.requisicao_item_id
|
||||
inner join almoxarifado_requisicao
|
||||
on almoxarifado_requisicao.id = almoxarifado_requisicao_item.requisicao_id
|
||||
where almoxarifado_requisicao_resposta_item.saida_item_id = almoxarifado_saida_item.id
|
||||
)
|
||||
WHEN " . SaidaTipo::INVENTARIO . " THEN
|
||||
almoxarifado_saida.centro_custo_id
|
||||
WHEN " . SaidaTipo::ESTORNO . " THEN
|
||||
almoxarifado_saida.centro_custo_id
|
||||
WHEN " . SaidaTipo::BAIXA . " THEN
|
||||
almoxarifado_saida.centro_custo_id
|
||||
WHEN " . SaidaTipo::TRANSFERENCIA . " THEN
|
||||
(
|
||||
select almoxarifado_saida_transferencia.centro_custo_id
|
||||
from almoxarifado_saida_transferencia
|
||||
where almoxarifado_saida_transferencia.saida_id = almoxarifado_saida.id
|
||||
)
|
||||
END
|
||||
) IS NOT NULL
|
||||
")
|
||||
->whereExists(fn ($q) => $q
|
||||
->select(DB::raw(1))
|
||||
->from('cadastro_material')
|
||||
->join('cadastro_material_bnafar', 'cadastro_material_bnafar.id', 'cadastro_material.material_bnafar_id')
|
||||
->whereColumn('cadastro_material.id', 'almoxarifado_saida_item.material_id')
|
||||
)
|
||||
->whereNotExists(function ($query) {
|
||||
$query->select(DB::raw(1))
|
||||
->from('integracao_bnafar_saida')
|
||||
->whereColumn('integracao_bnafar_saida.almoxarifado_saida_id', 'almoxarifado_saida.id');
|
||||
})
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getSaidaTipo($saidaTipoId)
|
||||
{
|
||||
$saidaTipo = null;
|
||||
|
||||
if ($saidaTipoId === SaidaTipo::INVENTARIO) {
|
||||
$saidaTipo = BnafarSaidaTipo::SAIDA_POR_AJUSTE_ESTOQUE;
|
||||
}
|
||||
else if ($saidaTipoId === SaidaTipo::ESTORNO) {
|
||||
$saidaTipo = BnafarSaidaTipo::DEVOLUCAO_DE_ENTRADA_PRODUTO;
|
||||
}
|
||||
else if ($saidaTipoId === SaidaTipo::BAIXA) {
|
||||
$saidaTipo = BnafarSaidaTipo::SAIDA_POR_PERDA;
|
||||
}
|
||||
else if ($saidaTipoId === SaidaTipo::MANUAL || $saidaTipoId === SaidaTipo::REQUISICAO || $saidaTipoId === SaidaTipo::TRANSFERENCIA) {
|
||||
$saidaTipo = BnafarSaidaTipo::SAIDA_POR_TRANSFERENCIA_REMANEJAMENTO;
|
||||
}
|
||||
|
||||
return $saidaTipo;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user