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');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user