diff --git a/compras_digital/forms/Compras_digital/Compras_digital.html b/compras_digital/forms/Compras_digital/Compras_digital.html index 5a46dd7..46cea72 100644 --- a/compras_digital/forms/Compras_digital/Compras_digital.html +++ b/compras_digital/forms/Compras_digital/Compras_digital.html @@ -651,6 +651,7 @@ + @@ -914,7 +915,7 @@
-
-
Pedido
+
Pedido
-
@@ -953,7 +954,7 @@ 0
- Com pedido + Com documento 0
diff --git a/compras_digital/forms/Compras_digital/compras_digital.js b/compras_digital/forms/Compras_digital/compras_digital.js index 8854927..a956401 100644 --- a/compras_digital/forms/Compras_digital/compras_digital.js +++ b/compras_digital/forms/Compras_digital/compras_digital.js @@ -510,17 +510,28 @@ function documentoEhPlaceholder(valor) { return /^X+$/.test(v); } +function contratoEhValido(valor) { + var v = String(valor || "").trim(); + if (!v) return false; + if (/^0+$/.test(v)) return false; + return true; +} + function linhaCotacaoVencedora(row) { var pedido = String(row.C8_NUMPED || "").trim(); var itemPedido = String(row.C8_ITEMPED || "").trim(); var fornece = String(row.C8_FORNECE || "").trim(); var loja = String(row.C8_LOJA || "").trim(); - if (documentoEhPlaceholder(pedido)) return false; - if (documentoEhPlaceholder(itemPedido)) return false; if (!fornece || !loja) return false; - return true; + // Pedido gerado + if (!documentoEhPlaceholder(pedido) && !documentoEhPlaceholder(itemPedido)) return true; + + // Contrato gerado + if (contratoEhValido(row.C8_NUMCON)) return true; + + return false; } function possuiFornecedorCotacao(row) { @@ -557,7 +568,8 @@ function classificarLinhaCotacao(row) { var status = String(row.STATUS || "").trim().toUpperCase(); if (linhaCotacaoVencedora(row)) { - return { tipo: "PEDIDO_GERADO", label: "GANHOU", badge: "badge bg-success", tipoFornecedor: "Fornecedor homologado" }; + var tipoDoc = contratoEhValido(row.C8_NUMCON) ? "CONTRATO_GERADO" : "PEDIDO_GERADO"; + return { tipo: tipoDoc, label: "GANHOU", badge: "badge bg-success", tipoFornecedor: "Fornecedor homologado" }; } if (possuiFornecedorCotacao(row)) { @@ -1010,6 +1022,7 @@ function montarResumoCotacaoPorLinhas(rows, cotacao) { preco: row.C8_PRECO, total: row.C8_TOTAL, pedido: String(row.C8_NUMPED || "").trim(), + contrato: String(row.C8_NUMCON || "").trim(), statusApi: String(row.STATUS || "").trim(), tipo: classif.tipo, label: classif.label, @@ -1046,11 +1059,13 @@ function montarResumoCotacaoPorLinhas(rows, cotacao) { if (vencedorPedido) { qtdPedidoGerado++; + var tipoVencedor = contratoEhValido(vencedorPedido.C8_NUMCON) ? "CONTRATO_GERADO" : "PEDIDO_GERADO"; itens.push({ item: item, fornecedor: String(vencedorPedido.C8_FORNECE || "").trim() + "/" + String(vencedorPedido.C8_LOJA || "").trim(), pedido: String(vencedorPedido.C8_NUMPED || "").trim(), - tipo: "PEDIDO_GERADO" + contrato: String(vencedorPedido.C8_NUMCON || "").trim(), + tipo: tipoVencedor }); return; } @@ -1169,7 +1184,19 @@ function alternarTimelineSC() { focarTimelineSC(); } -function montarStatusAndamento(scRow, cotacao, pedido) { +function extrairContratoDoResumoCotacao(resumo) { + if (!resumo || !resumo.detalhes) return ""; + for (var i = 0; i < resumo.detalhes.length; i++) { + var d = resumo.detalhes[i]; + if (d.tipo === "CONTRATO_GERADO" && contratoEhValido(d.contrato)) { + return normalizarCodigoComparacao(d.contrato); + } + } + return ""; +} + +function montarStatusAndamento(scRow, cotacao, pedido, contrato) { + if (contrato) return "Contrato gerado"; if (pedido) return "Pedido gerado"; if (cotacao) return "Cotacao gerada"; @@ -1195,15 +1222,22 @@ function preencherResumoSC(resumoCotacao, erroCotacao, resumoPedido, erroPedido) var horaCadastro = valorCampo("horaCadastroSCProtheus"); var cotacao = limparNumeroDocumento(valorCampo("cotacaoSCProtheus")); var pedido = limparNumeroDocumento(valorCampo("pedidoSCProtheus")); + var contrato = limparNumeroDocumento(valorCampo("contratoSCProtheus")); var andamento = valorCampo("statusAtendimento"); var statusCadastroPadrao = normalizarStatusCadastro(statusCadastro, numero); + // Fallback: extrair contrato do resumo de cotação se ainda não salvo no campo + if (!contrato && resumoCotacao) { + contrato = extrairContratoDoResumoCotacao(resumoCotacao); + } + if (!andamento && numero) { - if (pedido) andamento = "Pedido gerado"; + if (contrato) andamento = "Contrato gerado"; + else if (pedido) andamento = "Pedido gerado"; else if (cotacao) andamento = "Cotacao gerada"; else andamento = "Em andamento"; } - andamento = normalizarAndamento(andamento, cotacao, pedido); + andamento = normalizarAndamento(andamento, cotacao, pedido || contrato); setLabel("numeroSCProtheus_label", numero); setLabel("solicitanteSCProtheus_label", solicitante); @@ -1212,7 +1246,8 @@ function preencherResumoSC(resumoCotacao, erroCotacao, resumoPedido, erroPedido) setLabel("dataCadastroSCProtheus_label", dataCadastro); setLabel("horaCadastroSCProtheus_label", horaCadastro); setLabel("cotacaoSC_label", cotacao); - setLabel("pedidoSC_label", pedido); + setLabel("pedidoSC_label", contrato || pedido); + $("#pedidoContratoTipo_label").text(contrato ? "Contrato" : "Pedido"); setBadge("#statusSCProtheus_label", statusCadastroPadrao || (numero ? "SC cadastrada com sucesso" : "")); setBadge("#statusSC_label", andamento); @@ -1264,14 +1299,16 @@ function consultarAndamentoSC() { var cotacao = limparNumeroDocumento(row.C1_COTACAO); var pedido = limparNumeroDocumento(row.C1_PEDIDO); + var contrato = limparNumeroDocumento(row.C1_CONTRATO || ""); if (cotacao) $("#cotacaoSCProtheus").val(cotacao); if (pedido) $("#pedidoSCProtheus").val(pedido); + if (contrato) $("#contratoSCProtheus").val(contrato); if (row.C1_SOLICIT) $("#solicitanteSCProtheus").val(String(row.C1_SOLICIT).trim()); if (row.C1_EMISSAO) $("#emissaoSCProtheus").val(normalizarDataProtheus(row.C1_EMISSAO)); - var andamento = montarStatusAndamento(row, cotacao, pedido); + var andamento = montarStatusAndamento(row, cotacao, pedido, contrato); if (andamento) $("#statusAtendimento").val(andamento); var resumoCotacao = null; @@ -1281,6 +1318,14 @@ function consultarAndamentoSC() { try { var cotacoes = JSON.parse(jsonCotacoes); resumoCotacao = montarResumoCotacaoPorLinhas(cotacoes, cotacao); + // Persistir contrato extraído das cotações no campo hidden para recargas futuras + if (!contrato && resumoCotacao) { + var contratoExtraido = extrairContratoDoResumoCotacao(resumoCotacao); + if (contratoExtraido) { + contrato = contratoExtraido; + $("#contratoSCProtheus").val(contrato); + } + } } catch (eCot) { if (!erroCotacao) erroCotacao = "Falha ao ler cotacoes retornadas pelo ds_consultaSC"; }