{"id":21225,"date":"2026-10-03T10:21:36","date_gmt":"2026-10-03T13:21:36","guid":{"rendered":"https:\/\/jobstore.cl\/index.php\/aprobacion-presupuesto\/"},"modified":"2026-10-03T10:21:36","modified_gmt":"2026-10-03T13:21:36","slug":"aprobacion-presupuesto","status":"publish","type":"page","link":"https:\/\/jobstore.cl\/index.php\/aprobacion-presupuesto\/","title":{"rendered":"Aprobaci\u00f3n de presupuesto"},"content":{"rendered":"<div id=\"jkbAp\" class=\"jkb-ap\"><div class=\"ap-card\"><p>Cargando\u2026<\/p><\/div><\/div>\n<style>\n.jkb-ap{max-width:760px;margin:10px auto 40px;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Helvetica,Arial,sans-serif;color:#1d1d1f}\n.jkb-ap *{box-sizing:border-box}\n.ap-card{background:#fff;border:1px solid #e5e5ea;border-radius:14px;padding:22px 24px;margin-bottom:16px;box-shadow:0 1px 3px rgba(0,0,0,.04)}\n.ap-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap;border-bottom:2px solid #1d1d1f;padding-bottom:12px;margin-bottom:14px}\n.ap-head h1{font-size:22px;margin:0;line-height:1.2}.ap-head .ot{font-size:13px;color:#6e6e73;text-transform:uppercase;letter-spacing:.6px}.ap-head .otn{font-size:26px;font-weight:800}\n.ap-kv{display:grid;grid-template-columns:150px 1fr;gap:6px 12px;font-size:14.5px;margin:6px 0}.ap-kv span{color:#6e6e73}\n.ap-tab{width:100%;border-collapse:collapse;font-size:14px;margin:10px 0}.ap-tab td{padding:7px 4px;border-bottom:1px solid #eee}.ap-tab td:last-child{text-align:right;white-space:nowrap}\n.ap-tot{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:12px}.ap-tot div{border-radius:10px;padding:12px;background:#f5f5f7}.ap-tot b{display:block;font-size:22px}.ap-tot small{color:#6e6e73}\n.ap-tot .main{background:#1d1d1f;color:#fff}.ap-tot .main small{color:#c7c7cc}\n.ap-btns{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px}\n.ap-btn{border:0;border-radius:10px;padding:13px 20px;font-size:15.5px;font-weight:700;cursor:pointer;background:#e5e5ea;color:#1d1d1f;text-decoration:none;display:inline-block}\n.ap-btn.ok{background:#1f8f4e;color:#fff}.ap-btn.no{background:#fff;color:#c8102e;border:2px solid #c8102e}.ap-btn.pri{background:#c8102e;color:#fff}.ap-btn:disabled{opacity:.6;cursor:wait}\n.ap-f{margin:10px 0}.ap-f label{display:block;font-weight:600;font-size:13.5px;margin-bottom:4px}.ap-f input,.ap-f select,.ap-f textarea{width:100%;padding:11px 12px;border:1px solid #c7c7cc;border-radius:8px;font-size:15px;font-family:inherit;background:#fff}\n.ap-chk{display:flex;gap:10px;align-items:flex-start;font-size:14px;margin:12px 0}.ap-chk input{width:20px;height:20px;margin-top:2px;flex:none}\n.ap-opts{display:grid;gap:10px;margin-top:10px}\n.ap-opt{border:2px solid #e5e5ea;border-radius:12px;padding:14px 16px;cursor:pointer;text-align:left;background:#fff;font-family:inherit;color:inherit}\n.ap-opt:hover,.ap-opt.sel{border-color:#c8102e}.ap-opt h3{margin:0 0 3px;font-size:16.5px}.ap-opt p{margin:0;color:#6e6e73;font-size:14px}.ap-opt .m{float:right;font-weight:800;font-size:17px;color:#1d1d1f}\n.ap-msg{border-radius:10px;padding:12px 14px;margin:10px 0;font-size:14.5px}.ap-msg.ok{background:#e8f7ee;border:1px solid #9fd8b4}.ap-msg.err{background:#fdecec;border:1px solid #f3b4b4}.ap-msg.info{background:#fff4e5;border:1px solid #f0c27a}\n.ap-banco{width:100%;font-size:14.5px;border-collapse:collapse}.ap-banco td{padding:5px 0;border-bottom:1px solid #f0f0f0}.ap-banco td:first-child{color:#6e6e73;width:40%}\n.ap-legal{font-size:12px;color:#6e6e73;line-height:1.45}\n.jkb-ap table,.jkb-ap tr,.jkb-ap td{background:none!important;border:0!important}.jkb-ap .ap-tab td,.jkb-ap .ap-banco td{border-bottom:1px solid #eee!important;text-align:left;padding:8px 4px;vertical-align:top}.jkb-ap .ap-tab td:last-child{text-align:right}.jkb-ap .ap-head h1{font-size:26px!important;font-weight:700;letter-spacing:0;text-transform:none}.jkb-ap h2{font-size:21px!important;margin:0 0 8px}.jkb-ap h3{font-size:17px!important;margin:12px 0 6px}\n@media(max-width:560px){.ap-kv{grid-template-columns:1fr}.ap-tot{grid-template-columns:1fr}.ap-card{padding:18px 16px}}\n<\/style>\n<script>\n(function(){\n  \"use strict\";\n  var CFG = {\"rest\":\"https:\\\/\\\/jobstore.cl\\\/index.php\\\/wp-json\\\/jobstore\\\/v1\\\/aprobacion\\\/\"};\n  var root = document.getElementById('jkbAp'), P = null, Q = new URLSearchParams(location.search);\n  function esc(s){ return String(s==null?'':s).replace(\/[&<>\"']\/g,function(c){return {'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[c];}); }\n  function clp(n){ return '$' + Math.round(Number(n)||0).toString().replace(\/\\B(?=(\\d{3})+(?!\\d))\/g, '.'); }\n  function api(ruta, datos, archivo){\n    var op = {method: datos ? 'POST' : 'GET', credentials:'same-origin'};\n    if(archivo){ var fd = new FormData(); Object.keys(datos).forEach(function(k){ fd.append(k, datos[k]); }); fd.append('archivo', archivo); op.body = fd; }\n    else if(datos){ op.headers = {'Content-Type':'application\/json'}; op.body = JSON.stringify(datos); }\n    op.cache = 'no-store'; if(!op.method || String(op.method).toUpperCase()==='GET'){ ruta += (ruta.indexOf('?') > -1 ? '&' : '?') + '_=' + Date.now(); } \/* 2026-10-07: evita respuestas guardadas en cach\u00e9 *\/ return fetch(CFG.rest + ruta, op).then(function(r){ return r.json().catch(function(){ return {}; }).then(function(j){ if(!r.ok) throw new Error(j.message || ('Error ' + r.status)); return j; }); });\n  }\n  function ids(){ return {id: P.id, ot: P.ot}; }\n  function msg(cls, t){ return '<div class=\"ap-msg ' + cls + '\">' + t + '<\/div>'; }\n  function card(h){ return '<div class=\"ap-card\">' + h + '<\/div>'; }\n\n  function buscar(err){\n    root.innerHTML = card('<div class=\"ap-head\"><div><div class=\"ot\">Jobstore \u00b7 Servicio T\u00e9cnico Autorizado Apple<\/div><h1>Aprobaci\u00f3n de presupuesto<\/h1><\/div><\/div>'\n      + '<p>Ingresa tu N\u00b0 de orden de trabajo (OT) y el correo con el que dejaste tu equipo. Tambi\u00e9n puedes entrar directo con el bot\u00f3n <b>\u201cAceptar o rechazar el presupuesto\u201d<\/b> del correo que te enviamos.<\/p>'\n      + (err ? msg('err', esc(err)) : '')\n      + '<div class=\"ap-f\"><label>N\u00b0 de OT<\/label><input id=\"apOt\" inputmode=\"numeric\" placeholder=\"Ej: 15926\" value=\"' + esc(Q.get('ot')||'') + '\"><\/div>'\n      + '<div class=\"ap-f\"><label>Correo electr\u00f3nico<\/label><input id=\"apMail\" type=\"email\" placeholder=\"tu@correo.cl\"><\/div>'\n      + '<div class=\"ap-btns\"><button class=\"ap-btn pri\" id=\"apBuscar\">Ver mi presupuesto<\/button><\/div>');\n    document.getElementById('apBuscar').onclick = function(){\n      var b = this; b.disabled = true;\n      api('buscar', {ot: document.getElementById('apOt').value, email: document.getElementById('apMail').value})\n        .then(function(j){ P = j.presupuesto; history.replaceState(null, '', '?ot=' + encodeURIComponent(P.ot) + '&id=' + encodeURIComponent(P.id)); pintar(); })\n        .catch(function(e){ buscar(e.message); });\n    };\n  }\n\n  function resumen(){\n    \/\/ 2026-10-05: garant\u00eda (informativo) \u2192 al cliente no se le muestran valores: todo cubierto por Apple, total $0.\n    if(P.informativo){\n      var filasG = P.piezas.map(function(z){ return '<tr><td>' + esc(z.descripcion) + '<\/td><td style=\"color:#1f8f4e;white-space:nowrap\">Cubierto por garant\u00eda<\/td><\/tr>'; }).join('');\n      filasG += '<tr><td>Mano de obra \/ servicio t\u00e9cnico<\/td><td style=\"color:#1f8f4e;white-space:nowrap\">Cubierto por garant\u00eda<\/td><\/tr>';\n      return '<div class=\"ap-head\"><div><div class=\"ot\">Presupuesto informativo<\/div><h1>Hola' + (P.cliente ? ', ' + esc(P.cliente.split(' ')[0]) : '') + '<\/h1><\/div><div style=\"text-align:right\"><div class=\"ot\">Orden de trabajo<\/div><div class=\"otn\">OT ' + esc(P.ot) + '<\/div><\/div><\/div>'\n        + '<div class=\"ap-kv\"><span>Equipo<\/span><div>' + esc(P.modelo) + '<\/div><span>N\u00b0 de serie<\/span><div><b>' + esc(P.serie) + '<\/b><\/div>' + (P.diagnostico ? '<span>Diagn\u00f3stico<\/span><div>' + esc(P.diagnostico).replace(\/\\n\/g,'<br>') + '<\/div>' : '') + '<\/div>'\n        + '<table class=\"ap-tab\">' + filasG + '<\/table>'\n        + '<div class=\"ap-tot\"><div class=\"main\"><small>Total a pagar \u00b7 cubierto por garant\u00eda Apple<\/small><b>$0<\/b><\/div><\/div>';\n    }\n    var filas = P.piezas.map(function(z){ return '<tr><td>' + esc(z.descripcion) + '<\/td><td>' + clp(z.monto) + '<\/td><\/tr>'; }).join('');\n    if(P.horas && P.horas.total) filas += '<tr><td>Horas de servicio t\u00e9cnico (' + esc(P.horas.cantidad) + ')<\/td><td>' + clp(P.horas.total) + '<\/td><\/tr>';\n    if(P.descuento > 0 && P.cobertura === 'AC+') filas += '<tr><td>Precio normal<\/td><td>' + clp((P.montos.total || P.montos.efectivo) + P.descuento) + '<\/td><\/tr>'; \/\/ 2026-10-06 AC+ Price\n    if(P.descuento > 0) filas += '<tr><td style=\"color:#1f8f4e\">' + (P.cobertura === 'AC+' ? 'Descuento AppleCare+ (AC+)' : 'Descuento') + '<\/td><td style=\"color:#1f8f4e\">\u2212 ' + clp(P.descuento) + '<\/td><\/tr>';\n    if(P.montos.abono > 0) filas += '<tr><td>Total del servicio<\/td><td>' + clp(P.montos.total) + '<\/td><\/tr><tr><td style=\"color:#1f8f4e\">Abono pagado al ingreso del equipo<\/td><td style=\"color:#1f8f4e\">\u2212 ' + clp(P.montos.abono) + '<\/td><\/tr>'; \/\/ 2026-10-06 abono OOW\n    if(filas) filas += '<tr><td colspan=\"2\" style=\"text-align:left;color:#6e6e73;font-size:12.5px;border:0\">Valores en pesos chilenos con IVA incluido.<\/td><\/tr>';\n    return '<div class=\"ap-head\"><div><div class=\"ot\">' + (P.informativo ? 'Presupuesto informativo' : 'Presupuesto de servicio') + '<\/div><h1>Hola' + (P.cliente ? ', ' + esc(P.cliente.split(' ')[0]) : '') + '<\/h1><\/div><div style=\"text-align:right\"><div class=\"ot\">Orden de trabajo<\/div><div class=\"otn\">OT ' + esc(P.ot) + '<\/div><\/div><\/div>'\n      + '<div class=\"ap-kv\"><span>Equipo<\/span><div>' + esc(P.modelo) + '<\/div><span>N\u00b0 de serie<\/span><div><b>' + esc(P.serie) + '<\/b><\/div>' + (P.diagnostico ? '<span>Diagn\u00f3stico<\/span><div>' + esc(P.diagnostico).replace(\/\\n\/g,'<br>') + '<\/div>' : '') + '<\/div>'\n      + (filas ? '<table class=\"ap-tab\">' + filas + '<\/table>' : '')\n      + (P.informativo ? '' : '<div class=\"ap-tot\"><div class=\"main\"><small>' + (P.montos.abono > 0 ? 'Saldo a pagar \u00b7 efectivo o transferencia' : (P.cobertura === 'AC+' ? 'AC+ Price \u00b7 efectivo o transferencia' : 'Efectivo o transferencia')) + '<\/small><b>' + clp(P.montos.efectivo) + '<\/b><\/div><div><small>Tarjeta d\u00e9bito\/cr\u00e9dito o Webpay (+4% Transbank)<\/small><b>' + clp(P.montos.tarjeta) + '<\/b><\/div><\/div>');\n  }\n\n  function pintar(extra){\n    var h = card(resumen() + (extra || ''));\n    if(P.informativo){\n      h += card(msg('info', '<b>Este presupuesto es solo informativo.<\/b> Tu equipo cuenta con cobertura de garant\u00eda Apple, por lo que los aranceles de servicio, piezas y mano de obra son cubiertos por la marca. <b>No necesitas aceptarlo ni pagarlo<\/b>: continuaremos con la reparaci\u00f3n y te avisaremos cuando tu equipo est\u00e9 listo.'));\n    } else if(!P.vigente){\n      h += card(msg('info', 'Este presupuesto fue reemplazado por una versi\u00f3n m\u00e1s reciente. Revisa el \u00faltimo correo que te enviamos o escr\u00edbenos a service@jobstore.cl.'));\n    } else if(!P.aceptacion){\n      h += card(P.vencido ? vencido() : paso1()); \/\/ 2026-10-22 vigencia 24 h h\u00e1biles\n    } else if(P.aceptacion.estado === 'rechazado'){\n      h += card(msg('err', '<b>Rechazaste este presupuesto<\/b> el ' + esc(P.aceptacion.fecha) + '.') + retiro());\n    } else {\n      h += card(pago());\n    }\n    root.innerHTML = h;\n    enlazar();\n  }\n  function retiro(){\n    var t = P.tienda;\n    return '<h3>Retiro de tu equipo<\/h3><p>' + esc(t.direccion) + '<br>' + esc(t.horario) + '<\/p><p class=\"ap-legal\">Si el equipo no es retirado dentro de 30 d\u00edas desde la notificaci\u00f3n, se cobrar\u00e1 bodegaje seg\u00fan las condiciones del servicio. Si otra persona lo retirar\u00e1, debe presentar tu autorizaci\u00f3n y su c\u00e9dula de identidad.<\/p>';\n  }\n  function vencido(){\n    return '<h2 style=\"margin-top:0\">Este presupuesto est\u00e1 vencido<\/h2>'\n      + msg('err', 'La validez del presupuesto es de <b>24 horas h\u00e1biles<\/b> desde su env\u00edo' + (P.vence_en ? ' y venci\u00f3 el <b>' + esc(P.vence_en) + '<\/b>' : '') + '. Por eso ya no se puede aceptar: los valores de piezas y servicios pueden haber cambiado.')\n      + (P.revalidacion\n        ? msg('ok', '<b>Ya notificamos al taller<\/b> (' + esc(P.revalidacion) + '). Revisaremos el presupuesto y te enviaremos por correo la confirmaci\u00f3n del mismo valor o un presupuesto actualizado.')\n        : '<p>Av\u00edsanos y el taller revisar\u00e1 tu caso: puede <b>aprobar este mismo presupuesto<\/b> por una nueva vigencia o <b>enviarte uno actualizado<\/b>.<\/p><div id=\"apErr\"><\/div><div class=\"ap-btns\"><button class=\"ap-btn pri\" id=\"apReval\">\ud83d\udd14 Notificar al taller<\/button><\/div>')\n      + '<p class=\"ap-legal\" style=\"margin-top:18px\">Si ya no deseas la reparaci\u00f3n, puedes <a href=\"javascript:void(0)\" data-dec=\"rechazar\">rechazar el presupuesto<\/a>.<\/p><div id=\"apForm\"><\/div>';\n  }\n  function paso1(){\n    return '<h2 style=\"margin-top:0\">\u00bfAceptas el presupuesto?<\/h2>'\n      + '<p>Por normativa (Ley N\u00b0 19.496 de Protecci\u00f3n de los Derechos de los Consumidores) necesitamos que confirmes formalmente tu decisi\u00f3n antes de continuar.<\/p>'\n      + (P.vence_en ? '<p class=\"ap-legal\">Presupuesto v\u00e1lido por 24 horas h\u00e1biles: hasta el <b>' + esc(P.vence_en) + '<\/b>.<\/p>' : '')\n      + '<div class=\"ap-btns\"><button class=\"ap-btn ok\" data-dec=\"aceptar\">\u2713 Acepto el presupuesto<\/button><button class=\"ap-btn no\" data-dec=\"rechazar\">\u2715 Rechazo el presupuesto<\/button><\/div>'\n      + '<div id=\"apForm\"><\/div>';\n  }\n  function formDecision(dec){\n    var f = document.getElementById('apForm');\n    f.innerHTML = '<div style=\"border-top:1px solid #eee;margin-top:16px;padding-top:6px\">'\n      + '<h3>' + (dec === 'aceptar' ? 'Confirma tu aceptaci\u00f3n' : 'Confirma el rechazo') + '<\/h3>'\n      + '<div class=\"ap-f\"><label>Nombre y apellido<\/label><input id=\"apNom\" value=\"' + esc(P.cliente) + '\"><\/div>'\n      + '<div class=\"ap-f\"><label>RUT<\/label><input id=\"apRut\" placeholder=\"12.345.678-9\"><\/div>'\n      + (dec === 'rechazar' ? '<div class=\"ap-f\"><label>Motivo<\/label><select id=\"apMot\"><option value=\"\">Seleccionar\u2026<\/option><option>El valor es m\u00e1s alto de lo esperado<\/option><option>Ya no necesito la reparaci\u00f3n<\/option><option>Reparar\u00e9 en otro lugar<\/option><option>Comprar\u00e9 un equipo nuevo<\/option><option>Otro<\/option><\/select><\/div><div class=\"ap-f\"><label>Comentario (opcional)<\/label><textarea id=\"apCom\" rows=\"3\"><\/textarea><\/div>' : '')\n      + '<label class=\"ap-chk\"><input type=\"checkbox\" id=\"apAcepto\"><span>' + (dec === 'aceptar'\n          ? 'Declaro que revis\u00e9 el presupuesto de la OT ' + esc(P.ot) + ', acepto su valor y las condiciones del servicio de Jobstore, y autorizo la reparaci\u00f3n.'\n          : 'Declaro que revis\u00e9 el presupuesto de la OT ' + esc(P.ot) + ' y lo rechazo.') + '<\/span><\/label>'\n      + '<div id=\"apErr\"><\/div><div class=\"ap-btns\"><button class=\"ap-btn ' + (dec === 'aceptar' ? 'ok' : 'pri') + '\" id=\"apEnviar\">' + (dec === 'aceptar' ? 'Confirmar aceptaci\u00f3n' : 'Confirmar rechazo') + '<\/button><\/div><\/div>';\n    document.getElementById('apEnviar').onclick = function(){\n      var b = this; b.disabled = true;\n      var d = Object.assign(ids(), {decision: dec, nombre: document.getElementById('apNom').value, rut: document.getElementById('apRut').value, acepto: document.getElementById('apAcepto').checked ? 1 : 0});\n      if(dec === 'rechazar'){ d.motivo = document.getElementById('apMot').value; d.comentario = document.getElementById('apCom').value; }\n      api('responder', d).then(function(j){ P = j.presupuesto; pintar(dec === 'aceptar' ? msg('ok', '<b>\u00a1Gracias! Registramos tu aceptaci\u00f3n.<\/b> Te enviamos un correo con las opciones de pago.') : msg('ok', 'Registramos tu respuesta. Te enviamos un correo de confirmaci\u00f3n.')); window.scrollTo(0, root.offsetTop - 20); })\n        .catch(function(e){ b.disabled = false; document.getElementById('apErr').innerHTML = msg('err', esc(e.message)); });\n    };\n  }\n  function pago(){\n    var pg = P.pago || {}, t = P.tienda, h = '';\n    if(pg.estado === 'pagado') return msg('ok', '<b>\u2713 Pago recibido.<\/b> Ya estamos gestionando tu reparaci\u00f3n. Te avisaremos cuando tu equipo est\u00e9 listo para retiro.');\n    if(pg.estado === 'por_validar') return msg('ok', '<b>Recibimos tu comprobante de transferencia.<\/b> Lo validaremos a la brevedad y continuaremos con tu reparaci\u00f3n.');\n    h += '<h2 style=\"margin-top:0\">Elige c\u00f3mo pagar<\/h2><p>Aceptaste el presupuesto. Para continuar con la reparaci\u00f3n necesitamos el pago:<\/p><div class=\"ap-opts\">'\n      + '<button class=\"ap-opt' + (pg.metodo === 'tienda' ? ' sel' : '') + '\" data-met=\"tienda\"><span class=\"m\">' + clp(P.montos.efectivo) + '<\/span><h3>\ud83c\udfea Pago en tienda<\/h3><p>Efectivo ' + clp(P.montos.efectivo) + ' \u00b7 Tarjeta d\u00e9bito\/cr\u00e9dito ' + clp(P.montos.tarjeta) + '<\/p><\/button>'\n      + '<button class=\"ap-opt' + (pg.metodo === 'transferencia' ? ' sel' : '') + '\" data-met=\"transferencia\"><span class=\"m\">' + clp(P.montos.efectivo) + '<\/span><h3>\ud83c\udfe6 Transferencia bancaria<\/h3><p>Sin recargo. Debes adjuntar el comprobante.<\/p><\/button>'\n      + '<button class=\"ap-opt' + (pg.metodo === 'webpay' ? ' sel' : '') + '\" data-met=\"webpay\"><span class=\"m\">' + clp(P.montos.tarjeta) + '<\/span><h3>\ud83d\udcb3 Pago online (Webpay)<\/h3><p>Ticket de pago con tarjeta de d\u00e9bito o cr\u00e9dito. Incluye 4% Transbank.<\/p><\/button>'\n      + '<\/div><div id=\"apMet\">' + detalleMetodo(pg.metodo) + '<\/div>';\n    return h;\n  }\n  function detalleMetodo(m){\n    var t = P.tienda, pg = P.pago || {};\n    if(m === 'tienda') return '<div style=\"margin-top:14px\">' + msg('ok', '<p style=\"margin:0 0 10px\">Agradecemos sinceramente su confianza en nosotros. Le confirmamos que ha seleccionado la opci\u00f3n de pago en tienda. Le informamos que las piezas y componentes requeridos para su reparaci\u00f3n ser\u00e1n solicitados de manera inmediata una vez que se confirme dicho pago.<\/p><b>Te esperamos en tienda<\/b><br>' + esc(t.direccion) + '<br>' + esc(t.horario) + '<br><br>Efectivo: <b>' + clp(P.montos.efectivo) + '<\/b> \u00b7 Tarjeta de d\u00e9bito o cr\u00e9dito: <b>' + clp(P.montos.tarjeta) + '<\/b> (incluye 4% Transbank).<br>Indica tu N\u00b0 de OT <b>' + esc(P.ot) + '<\/b> en caja.') + '<\/div>';\n    if(m === 'transferencia') return '<div style=\"margin-top:14px\"><h3>Datos para transferir ' + clp(P.montos.efectivo) + '<\/h3><table class=\"ap-banco\">' + t.banco.map(function(b){ return '<tr><td>' + esc(b[0]) + '<\/td><td><b>' + esc(b[1]) + '<\/b><\/td><\/tr>'; }).join('') + '<tr><td>Monto<\/td><td><b>' + clp(P.montos.efectivo) + '<\/b><\/td><\/tr><tr><td>Asunto \/ comentario<\/td><td><b>OT ' + esc(P.ot) + '<\/b><\/td><\/tr><\/table>'\n      + '<div class=\"ap-f\" style=\"margin-top:14px\"><label>Adjunta el comprobante de la transferencia (obligatorio)<\/label><input type=\"file\" id=\"apComp\" accept=\"image\/*,application\/pdf\"><\/div><div id=\"apErr\"><\/div><div class=\"ap-btns\"><button class=\"ap-btn pri\" id=\"apSubir\">Enviar comprobante<\/button><\/div><\/div>';\n    if(m === 'webpay' && pg.pago_url) return '<div style=\"margin-top:14px\">' + msg('ok', 'Tu ticket de pago est\u00e1 listo por <b>' + clp(pg.monto || P.montos.tarjeta) + '<\/b>.') + '<div class=\"ap-btns\"><a class=\"ap-btn pri\" href=\"' + esc(pg.pago_url) + '\">Pagar ahora con Webpay \u2192<\/a><\/div><p class=\"ap-legal\">Ser\u00e1s dirigido a la p\u00e1gina de pago segura de Jobstore (Transbank Webpay). Al completar el pago, quedar\u00e1 registrado autom\u00e1ticamente en tu presupuesto.<\/p><\/div>';\n    return '';\n  }\n  function enlazar(){\n    var rv = document.getElementById('apReval');\n    if(rv) rv.onclick = function(){ rv.disabled = true; rv.textContent = 'Enviando\u2026'; api('revalidar', ids()).then(function(j){ P = j.presupuesto; pintar(msg('ok', '<b>Listo, notificamos al taller.<\/b> Te contactaremos por correo a la brevedad.')); }).catch(function(e){ rv.disabled = false; rv.textContent = '\ud83d\udd14 Notificar al taller'; document.getElementById('apErr').innerHTML = msg('err', esc(e.message)); }); };\n    Array.prototype.forEach.call(root.querySelectorAll('[data-dec]'), function(b){ b.onclick = function(){ formDecision(b.getAttribute('data-dec')); document.getElementById('apForm').scrollIntoView({behavior:'smooth'}); }; });\n    Array.prototype.forEach.call(root.querySelectorAll('[data-met]'), function(b){ b.onclick = function(){\n      var met = b.getAttribute('data-met');\n      Array.prototype.forEach.call(root.querySelectorAll('[data-met]'), function(x){ x.classList.toggle('sel', x === b); x.disabled = true; });\n      document.getElementById('apMet').innerHTML = '<p>Un momento\u2026<\/p>';\n      api('metodo', Object.assign(ids(), {metodo: met})).then(function(j){ P = j.presupuesto; pintar(); var d = document.getElementById('apMet'); if(d) d.scrollIntoView({behavior:'smooth'}); })\n        .catch(function(e){ Array.prototype.forEach.call(root.querySelectorAll('[data-met]'), function(x){ x.disabled = false; }); document.getElementById('apMet').innerHTML = msg('err', esc(e.message)); });\n    }; });\n    var s = document.getElementById('apSubir');\n    if(s) s.onclick = function(){\n      var f = document.getElementById('apComp').files[0];\n      if(!f){ document.getElementById('apErr').innerHTML = msg('err', 'Adjunta el comprobante (foto o PDF) antes de enviar.'); return; }\n      s.disabled = true; s.textContent = 'Enviando\u2026';\n      api('comprobante', ids(), f).then(function(j){ P = j.presupuesto; pintar(); })\n        .catch(function(e){ s.disabled = false; s.textContent = 'Enviar comprobante'; document.getElementById('apErr').innerHTML = msg('err', esc(e.message)); });\n    };\n  }\n\n  if(Q.get('id') && Q.get('ot')){\n    api('ver?id=' + encodeURIComponent(Q.get('id')) + '&ot=' + encodeURIComponent(Q.get('ot'))).then(function(j){ P = j.presupuesto; pintar(); }).catch(function(e){ buscar(e.message); });\n  } else { buscar(); }\n})();\n<\/script>\n    \n","protected":false},"excerpt":{"rendered":"","protected":false},"author":7,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_joinchat":[],"footnotes":""},"class_list":["post-21225","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/jobstore.cl\/index.php\/wp-json\/wp\/v2\/pages\/21225","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jobstore.cl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/jobstore.cl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/jobstore.cl\/index.php\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/jobstore.cl\/index.php\/wp-json\/wp\/v2\/comments?post=21225"}],"version-history":[{"count":0,"href":"https:\/\/jobstore.cl\/index.php\/wp-json\/wp\/v2\/pages\/21225\/revisions"}],"wp:attachment":[{"href":"https:\/\/jobstore.cl\/index.php\/wp-json\/wp\/v2\/media?parent=21225"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}