{"id":1097,"date":"2026-01-09T22:12:24","date_gmt":"2026-01-09T22:12:24","guid":{"rendered":"https:\/\/safratransportadora.com.br\/cotacao\/?page_id=1097"},"modified":"2026-01-24T04:02:52","modified_gmt":"2026-01-24T04:02:52","slug":"resultado","status":"publish","type":"page","link":"https:\/\/safratransportadora.com.br\/cotacao\/resultado\/","title":{"rendered":"Resultado"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1097\" class=\"elementor elementor-1097\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c54ec10 e-flex e-con-boxed e-con e-parent\" data-id=\"c54ec10\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-307651c elementor-widget elementor-widget-shortcode\" data-id=\"307651c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n<nav class=\"nav-cotacao\">\n    <div class=\"nav-container\">\n        <a href=\"https:\/\/safratransportadora.com.br\/cotacao\/\" class=\"nav-logo\">AutoParts S\u00e3o Roque<\/a>\n        <input type=\"checkbox\" id=\"nav-check\">\n        <div class=\"nav-btn\">\n            <label for=\"nav-check\"><span><\/span><span><\/span><span><\/span><\/label>\n        <\/div>\n        <div class=\"nav-links\">\n            <a href=\"https:\/\/safratransportadora.com.br\/cotacao\/\">In\u00edcio<\/a>\n            <a href=\"https:\/\/safratransportadora.com.br\/cotacao\/listar-cotacoes-abertas\/\">Cota\u00e7\u00f5es Abertas<\/a>\n            <a href=\"https:\/\/safratransportadora.com.br\/cotacao\/resultado\/\">Resultados<\/a>\n            <a href=\"https:\/\/safratransportadora.com.br\/cotacao\/minha-conta\/\" class=\"btn-destaque\">Minha Conta<\/a>\n        <\/div>\n    <\/div>\n<\/nav>\n\n<style>\n    .nav-cotacao { background-color: #333; padding: 5px 0; font-family: sans-serif; margin-bottom: 15px; border-radius: 4px; }\n    .nav-container { max-width: 1200px; margin: 0 auto; display: flex; justify-content: space-between; align-items: center; padding: 0 15px; }\n    .nav-logo { color: #fff; font-size: 16px; font-weight: bold; text-decoration: none; }\n    .nav-links { display: flex; gap: 8px; align-items: center; }\n    .nav-links a { color: #efefef; text-decoration: none; font-size: 13px; padding: 6px 10px; transition: 0.3s; }\n    .nav-links a:hover { color: #28a745; }\n    .nav-links a.btn-destaque { background-color: #28a745; color: white; border-radius: 4px; font-weight: bold; }\n    #nav-check { display: none; }\n\n    @media (max-width: 768px) {\n        .nav-btn { display: inline-block; }\n        .nav-btn label { display: inline-block; width: 40px; height: 40px; padding: 10px; cursor: pointer; }\n        .nav-btn label span { display: block; width: 20px; height: 8px; border-top: 2px solid #fff; }\n        .nav-links { position: absolute; display: block; width: 100%; background-color: #333; height: 0px; transition: all 0.3s ease-in; overflow: hidden; top: 45px; left: 0; z-index: 1000; }\n        .nav-links a { border-bottom: 1px solid #444; padding: 12px 20px; }\n        #nav-check:checked ~ .nav-links { height: auto; padding-bottom: 10px; }\n    }\n\n    .melhor-preco { background-color: #c8e6c9 !important; color: #256029 !important;font-size: 1.0rem; font-weight: bold; border: 2px solid #28a745 !important; }\n    .segundo-preco { background-color: #fff9c4 !important; color: #856404 !important; }\n    .input-qtd-res { width: 50px; padding: 6px !important; border: 1px solid #ccc; border-radius: 3px; text-align: center; }\n    .carrinho-fornecedor { background: #fff; border: 1px solid #ddd; border-radius: 8px; padding: 15px; margin-top: 15px; box-shadow: 0 2px 5px rgba(0,0,0,0.1); overflow: hidden; }\n    .btn-acao { padding: 6px 12px; border: none; border-radius: 4px; cursor: pointer; font-weight: bold; margin-right: 5px; font-size: 12px; }\n    .btn-melhores { background: #28a745; color: white; }\n    .btn-limpar { background: #6c757d; color: white; }\n    .btn-salvar-global { background: #17a2b8; color: white; }\n    .btn-gerar-pedidos { background: #333; color: white; padding: 12px; border: none; border-radius: 6px; cursor: pointer; font-weight: bold; width: 100%; margin: 15px 0; }\n    .celula-preco { position: relative; transition: 0.2s; }\n    .area-acoes-cart { display: flex; gap: 10px; margin-top: 10px; }\n    .btn-cart-wpp { background: #25d366; color: white; text-decoration: none; padding: 8px 12px; border-radius: 4px; font-weight: bold; font-size: 12px; text-align: center; flex: 1; }\n    .btn-cart-print { background: #555; color: white; padding: 8px 12px; border: none; border-radius: 4px; cursor: pointer; }\n    \n    \/* CSS DA NOTIFICA\u00c7\u00c3O PULSANTE *\/\n    @keyframes pulse-alert {\n        0% { box-shadow: 0 0 0 0 rgba(40, 167, 69, 0.7); }\n        70% { box-shadow: 0 0 0 15px rgba(40, 167, 69, 0); }\n        100% { box-shadow: 0 0 0 0 rgba(40, 167, 69, 0); }\n    }\n    .notificacao-fixa {\n        position: fixed; bottom: 20px; right: 20px; background: #28a745; color: white; padding: 20px; \n        border-radius: 10px; z-index: 9999; cursor: pointer; animation: pulse-alert 2s infinite; font-family: sans-serif;\n        box-shadow: 0 5px 15px rgba(0,0,0,0.2);\n    }\n\n    .resumo-itens { width: 100%; border-collapse: collapse; font-size: 14px; margin-top: 10px; }\n    .resumo-itens th { background: #f4f4f4; padding: 5px; text-align: left; border: 1px solid #eee; }\n    .resumo-itens td { padding: 5px; border: 1px solid #eee; vertical-align: top; }\n<\/style>\n\n<div id=\"wrapper-resultados\" style=\"background: #f9f9f9; padding: 10px; border-radius: 8px; font-family: sans-serif;\">\n    <h2 style=\"margin-bottom: 10px; color: #333; display: flex; align-items: center; gap: 4px; font-size: large;\">\n        <span style=\"font-size: 1.5em;\">\ud83d\udcca<\/span> Painel de Compara\u00e7\u00e3o de Pre\u00e7os\n    <\/h2>\n\n            <div style=\"text-align:center; padding: 40px; background:#fff; border-radius: 8px;\">\n            <p style=\"color:#888;\">Nenhuma proposta recebida para an\u00e1lise at\u00e9 o momento.<\/p>\n        <\/div>\n    <\/div>\n\n<script>\n\/\/ --- L\u00d3GICA DE NOTIFICA\u00c7\u00c3O DE NOVAS RESPOSTAS (VERS\u00c3O PRECIS\u00c3O TOTAL) ---\n\nconst somNotificacao = new Audio('https:\/\/actions.google.com\/sounds\/v1\/alarms\/beep_short.ogg');\n\nconst CookieManager = {\n    set: (name, value) => { document.cookie = `${name}=${value};path=\/;max-age=86400`; },\n    get: (name) => {\n        const parts = (`; ${document.cookie}`).split(`; ${name}=`);\n        if (parts.length === 2) return parts.pop().split(';').shift();\n    }\n};\n\ndocument.addEventListener('DOMContentLoaded', () => {\n    if (Notification.permission !== \"granted\" && Notification.permission !== \"denied\") {\n        Notification.requestPermission();\n    }\n});\n\nfunction dispararAlertasResposta(idResposta) {\n    somNotificacao.play().catch(() => {});\n    if (Notification.permission === \"granted\") {\n        const n = new Notification(\"AutoParts S\u00e3o Roque\", {\n            body: `\ud83d\udcb0 Nova resposta de fornecedor recebida (Ref: #${idResposta})`,\n            icon: 'https:\/\/safratransportadora.com.br\/cotacao\/wp-content\/uploads\/2024\/favicon.png'\n        });\n        n.onclick = () => { window.focus(); location.reload(); };\n    }\n    \n    \/\/ Remove aviso anterior se existir para n\u00e3o acumular na tela\n    const avisoAntigo = document.querySelector('.notificacao-fixa');\n    if(avisoAntigo) avisoAntigo.remove();\n\n    const aviso = document.createElement('div');\n    aviso.className = 'notificacao-fixa';\n    aviso.innerHTML = `<strong>\ud83d\udcb0 NOVO PRE\u00c7O RECEBIDO!<\/strong><br>Um fornecedor acabou de responder. Clique para atualizar.`;\n    aviso.onclick = () => location.reload();\n    document.body.appendChild(aviso);\n}\n\nfunction verificarNovasRespostas() {\n    \/\/ IMPORTANTE: Aqui chamamos uma a\u00e7\u00e3o que deve retornar o MAIOR ID da tabela 'cotacoes_respostas'\n    fetch('https:\/\/safratransportadora.com.br\/cotacao\/wp-admin\/admin-ajax.php?action=verificar_ultima_resposta_db')\n        .then(r => r.json())\n        .then(res => {\n            if (res.success && res.data.ultimo_id_resposta) {\n                const novoId = parseInt(res.data.ultimo_id_resposta);\n                const antigoId = parseInt(CookieManager.get('ultimo_id_resposta_visto'));\n                \n                if (!antigoId) { \n                    CookieManager.set('ultimo_id_resposta_visto', novoId); \n                    return; \n                }\n                \n                \/\/ Se o ID da tabela de respostas aumentou, significa que algu\u00e9m enviou algo novo\n                if (novoId > antigoId) {\n                    CookieManager.set('ultimo_id_resposta_visto', novoId);\n                    dispararAlertasResposta(novoId);\n                }\n            }\n        });\n}\n\n\/\/ Verifica a cada 30 segundos para ser mais \u00e1gil\nsetInterval(verificarNovasRespostas, 30000);\nverificarNovasRespostas();\n\n\/\/ --- SUAS FUN\u00c7\u00d5ES ORIGINAIS (MANTIDAS 100%) ---\n\nfunction enviarWhatsApp(empresa, cotacaoTitulo, total, itens) {\n    let msg = `*PEDIDO DE COMPRA - AutoParts S\u00e3o Roque*\\n`;\n    msg += `*Cota\u00e7\u00e3o:* ${cotacaoTitulo}\\n`;\n    msg += `*Fornecedor:* ${empresa}\\n`;\n    msg += `------------------------------------------\\n`;\n    itens.forEach(i => {\n        msg += `\u2705 *${i.qtd}x* ${i.nome}\\n`;\n        msg += `    C\u00f3d. Original: ${i.cod}\\n`;\n        if(i.similar) msg += `    Marca\/Similar: ${i.similar}\\n`;\n        msg += `    Unit: R$ ${i.unit.toLocaleString('pt-BR',{minimumFractionDigits:2})} | Sub: R$ ${i.sub.toLocaleString('pt-BR',{minimumFractionDigits:2})}\\n\\n`;\n    });\n    msg += `------------------------------------------\\n`;\n    msg += `*TOTAL DO PEDIDO: R$ ${total.toLocaleString('pt-BR',{minimumFractionDigits:2})}*`;\n    window.open(`https:\/\/api.whatsapp.com\/send?text=${encodeURIComponent(msg)}`, '_blank');\n}\n\nfunction gerarCarrinhos(botao) {\n    const container = botao.closest('.container-cotacao');\n    const display = container.querySelector('.display-carrinhos');\n    const checks = container.querySelectorAll('.check-compra:checked');\n    display.innerHTML = '';\n    \n    if (checks.length === 0) return alert('Selecione ao menos um item para comprar.');\n\n    let carrinhos = {};\n    checks.forEach(check => {\n        const emp = check.dataset.fornecedor;\n        const filial = check.dataset.filial; \n        const linha = check.closest('.linha-produto');\n        const celula = check.closest('.celula-preco');\n        \n        const unit = parseFloat(check.dataset.preco);\n        const qtd = parseFloat(linha.querySelector('.input-qtd-res').value) || 0;\n        const sub = unit * qtd;\n        const similar = celula.dataset.similar;\n        const chaveForn = `${emp} - ${filial}`; \n        \n        if (!carrinhos[chaveForn]) {\n            carrinhos[chaveForn] = { \n                nomeEmpresa: emp, \n                nomeFilial: filial, \n                itens: [], \n                total: 0 \n            };\n        }\n        \n        carrinhos[chaveForn].itens.push({ \n            cod: linha.dataset.itemCod, \n            nome: linha.dataset.itemNome, \n            qtd: qtd, \n            unit: unit, \n            sub: sub,\n            similar: similar\n        });\n        carrinhos[chaveForn].total += sub;\n    });\n\n    for (let chave in carrinhos) {\n        const forn = carrinhos[chave];\n        let htmlItens = forn.itens.map(i => `\n            <tr>\n                <td style=\"text-align:center;\">${i.qtd}<\/td>\n                <td>\n                    <strong>${i.nome}<\/strong><br>\n                    <small style=\"color:#666\">Cod: ${i.cod}<\/small>\n                    ${i.similar ? `<br><small style=\"color:#d9534f\">Marca: ${i.similar}<\/small>` : ''}\n                <\/td>\n                <td style=\"text-align:right;\">R$ ${i.unit.toLocaleString('pt-BR',{minimumFractionDigits:2})}<\/td>\n                <td style=\"text-align:right; font-weight:bold;\">R$ ${i.sub.toLocaleString('pt-BR',{minimumFractionDigits:2})}<\/td>\n            <\/tr>\n        `).join('');\n\n        const dadosJSON = JSON.stringify(forn.itens).replace(\/'\/g, \"&apos;\");\n        const html = `\n            <div class=\"carrinho-fornecedor\" style=\"border: 1px solid #ddd; padding: 15px; border-radius: 8px; background: #fff;\">\n                <div style=\"margin-bottom:10px; border-bottom:2px solid #eee; padding-bottom:5px;\">\n                    <h4 style=\"margin:0; color:#28a745;\">\ud83d\udce6 ${forn.nomeEmpresa}<\/h4>\n                    <small style=\"color:#555; font-weight:bold; text-transform:uppercase;\">\ud83d\udccd Filial: ${forn.nomeFilial}<\/small>\n                <\/div>\n                <table class=\"resumo-itens\" style=\"width:100%; border-collapse:collapse;\">\n                    <thead>\n                        <tr style=\"background:#f4f4f4;\">\n                            <th width=\"30\">Qtd<\/th>\n                            <th>C\u00f3digo \/ Descri\u00e7\u00e3o<\/th>\n                            <th style=\"text-align:right;\">Unit.<\/th>\n                            <th style=\"text-align:right;\">Total<\/th>\n                        <\/tr>\n                    <\/thead>\n                    <tbody>${htmlItens}<\/tbody>\n                <\/table>\n                <div style=\"text-align:right; font-weight:bold; font-size:1.1em; margin-top:10px; color:#333; padding:5px; background:#f9f9f9;\">\n                    TOTAL DO PEDIDO: R$ ${forn.total.toLocaleString('pt-BR',{minimumFractionDigits:2})}\n                <\/div>\n                <div class=\"area-acoes-cart\" style=\"margin-top:15px; display:flex; gap:10px;\">\n                    <button class=\"btn-cart-print\" onclick=\"imprimirCarrinhoEspecifico(this)\">\ud83d\udda8\ufe0f Imprimir Pedido<\/button>\n                    <a href=\"#\" class=\"btn-cart-wpp\" onclick='enviarWhatsApp(\"${forn.nomeEmpresa}\", \"${container.dataset.titulo}\", ${forn.total}, ${dadosJSON}); return false;'>\ud83d\udcf1 WhatsApp<\/a>\n                <\/div>\n            <\/div>`;\n        display.insertAdjacentHTML('beforeend', html);\n    }\n}\nfunction imprimirCarrinhoEspecifico(btn) {\n    const carrinhoDiv = btn.closest('.carrinho-fornecedor');\n    \n    \/\/ Clonamos o conte\u00fado para n\u00e3o mexer no que aparece na tela\n    const conteudoOriginal = carrinhoDiv.cloneNode(true);\n    \n    \/\/ Removemos os bot\u00f5es do clone para garantir que n\u00e3o apare\u00e7am\n    const acoes = conteudoOriginal.querySelector('.area-acoes-cart');\n    if(acoes) acoes.remove();\n\n    const janelaImpressao = window.open('', '', 'width=900,height=700');\n    \n    janelaImpressao.document.write(`\n        <html>\n            <head>\n                <title>Impress\u00e3o de Pedido<\/title>\n                <style>\n                    body { font-family: sans-serif; padding: 30px; color: #333; }\n                    table { width: 100%; border-collapse: collapse; margin-top: 20px; }\n                    th, td { border: 1px solid #ccc; padding: 10px; text-align: left; font-size: 14px; }\n                    th { background: #f0f0f0; }\n                    h4 { font-size: 20px; margin: 0; color: #000; }\n                    small { font-size: 14px; color: #444; text-transform: uppercase; }\n                    \n                    \/* ESTA REGRA OCULTA OS EMOJIS DO WORDPRESS NA IMPRESS\u00c3O *\/\n                    img.emoji { \n                        display: none !important; \n                    }\n                    \n                    .resumo-itens { margin-bottom: 20px; }\n                    .total-box { \n                        text-align: right; \n                        font-weight: bold; \n                        font-size: 16px; \n                        padding: 10px; \n                        background: #eee; \n                        border: 1px solid #ccc;\n                    }\n                <\/style>\n            <\/head>\n            <body>\n                ${conteudoOriginal.innerHTML}\n                <script>\n                    window.onload = function() {\n                        window.print();\n                        window.close();\n                    };\n                <\\\/script>\n            <\/body>\n        <\/html>\n    `);\n    janelaImpressao.document.close();\n}\nfunction salvarEscolhasNoBanco(botao) {\n    const container = botao.closest('.container-cotacao');\n    const statusLabel = container.querySelector('.status-save');\n    const checks = container.querySelectorAll('.check-compra:checked');\n    \n    statusLabel.innerText = \"\u23f3 Salvando...\";\n    \n    const formData = new FormData();\n    formData.append('action', 'salvar_selecao_cotacao');\n    formData.append('cotacao_id', container.dataset.cotacaoId);\n    \n    checks.forEach(check => {\n        const linha = check.closest('.linha-produto');\n        const itemId = linha.dataset.itemId;\n        formData.append(`selecoes[${itemId}][fornecedor]`, check.dataset.fornecedor);\n        formData.append(`selecoes[${itemId}][qtd]`, linha.querySelector('.input-qtd-res').value);\n        formData.append(`selecoes[${itemId}][preco]`, check.dataset.preco);\n    });\n\n    fetch('https:\/\/safratransportadora.com.br\/cotacao\/wp-admin\/admin-ajax.php', { method: 'POST', body: formData })\n    .then(r => r.json())\n    .then(res => {\n        if(res.success) {\n            statusLabel.innerText = \"\u2705 Sele\u00e7\u00e3o Salva!\";\n            setTimeout(() => statusLabel.innerText = \"\", 3000);\n        }\n    });\n}\nfunction finalizarCotacao(botao, id) {\n    if (!confirm(\"Deseja encerrar o recebimento? A cota\u00e7\u00e3o sumir\u00e1 para os fornecedores, mas continuar\u00e1 aqui para voc\u00ea.\")) {\n        return;\n    }\n\n    \/\/ Chamada AJAX para o WordPress\n    fetch('https:\/\/safratransportadora.com.br\/cotacao\/wp-admin\/admin-ajax.php', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application\/x-www-form-urlencoded' },\n        body: new URLSearchParams({\n            action: 'finalizar_cotacao_acao',\n            cotacao_id: id\n        })\n    })\n    .then(r => r.json())\n    .then(res => {\n        if (res.success) {\n            \/\/ EM VEZ DE SUMIR, APENAS DESABILITAMOS O BOT\u00c3O\n            botao.innerHTML = \"\ud83d\udd12 Recebimento Encerrado\";\n            botao.style.background = \"#666\";\n            botao.style.cursor = \"not-allowed\";\n            botao.onclick = null; \/\/ Impede cliques repetidos\n            \n            alert(\"Sucesso! Fornecedores n\u00e3o podem mais responder a esta cota\u00e7\u00e3o.\");\n        } else {\n            alert(\"Erro ao finalizar: \" + res.data);\n        }\n    });\n}\nfunction marcarMelhoresPrecos(botao) {\n    const container = botao.closest('.container-cotacao');\n    container.querySelectorAll('.linha-produto').forEach(linha => {\n        linha.querySelectorAll('.check-compra').forEach(c => c.checked = false);\n        const melhor = linha.querySelector('.celula-preco.melhor-preco input');\n        if (melhor) melhor.checked = true;\n    });\n}\n\nfunction limparSelecao(botao) {\n    const container = botao.closest('.container-cotacao');\n    container.querySelectorAll('.check-compra').forEach(c => c.checked = false);\n    container.querySelector('.display-carrinhos').innerHTML = '';\n}\n\ndocument.addEventListener('input', function(e) {\n    if (e.target.classList.contains('input-qtd-res')) {\n        const linha = e.target.closest('.linha-produto');\n        const qtd = parseFloat(e.target.value) || 0;\n        linha.querySelectorAll('.celula-preco').forEach(cel => {\n            const unit = parseFloat(cel.dataset.unitario) || 0;\n            const sub = cel.querySelector('.txt-subtotal');\n            if(sub) sub.innerText = 'R$ ' + (qtd * unit).toLocaleString('pt-BR', {minimumFractionDigits: 2});\n        });\n    }\n});\n<\/script><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":7,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-1097","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/safratransportadora.com.br\/cotacao\/wp-json\/wp\/v2\/pages\/1097","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/safratransportadora.com.br\/cotacao\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/safratransportadora.com.br\/cotacao\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/safratransportadora.com.br\/cotacao\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/safratransportadora.com.br\/cotacao\/wp-json\/wp\/v2\/comments?post=1097"}],"version-history":[{"count":43,"href":"https:\/\/safratransportadora.com.br\/cotacao\/wp-json\/wp\/v2\/pages\/1097\/revisions"}],"predecessor-version":[{"id":1211,"href":"https:\/\/safratransportadora.com.br\/cotacao\/wp-json\/wp\/v2\/pages\/1097\/revisions\/1211"}],"wp:attachment":[{"href":"https:\/\/safratransportadora.com.br\/cotacao\/wp-json\/wp\/v2\/media?parent=1097"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}