40 év  tapasztalat Gyorshatáridő Megfizethető minőség Egyedi megoldások Alumíniumredőny Napellenző Motoros megoldások Teraszárnyékolás Szúnyoghálók Szövet árnyékolók

Fejlesztés alatt

×

Redőny kalkulátor

Műanyag redőnynél nincs motor.
0 Ft
Az árak bruttó árak, telepítéssel értendők Pest vármegye területén.
(Minimum elszámolás: 1.2 m²)
const J = window.JOZSA; J.openers = J.openers || {}; // { code: openFn } J.closers = J.closers || []; // [ closeFn, ... ] J.activeMail = J.activeMail || null; /* ====================== ALAP segédek ====================== */ J.ft = function(n){ const x = Math.round(Number(n||0)); return x.toLocaleString("hu-HU") + " Ft"; }; J.m2 = function(wCm,hCm){ const w = Number(wCm||0), h = Number(hCm||0); let m2 = (w*h)/10000; if(m2 < 1.2) m2 = 1.2; return m2; }; /* ===== KÖZÖS FOOTER (kalkulátorok aljára) ===== */ J.footerHTML = function(){ return `
Bruttó árak
Az árak bruttó árak, telepítéssel értendők Pest vármegye területén.
PDF ajánlat: az árajánlat szerkesztőből (Nyomtatás / PDF mentés).
`; }; /* ====================== MODAL ZÁRÁS EGYSÉGESEN - háttérkatt + ESC - a kalkulátorok a saját close-jukat regisztrálják J.closers-be ====================== */ J.closeAll = function(){ try{ (J.closers||[]).forEach(fn=>{ try{ if(typeof fn==="function") fn(); }catch(e){} }); }catch(e){} try{ if(location.hash && location.hash.indexOf("#calc=")===0){ history.replaceState(null,"",location.pathname+location.search); } }catch(e){} }; document.addEventListener("keydown", function(e){ if(e.key === "Escape") J.closeAll(); }); /* ====================== #calc=... TRIGGER - kattintás a menü linken - hash alapján (ha az URL-be beírja) ====================== */ function parseCalcCodeFromHref(href){ if(!href) return ""; const i = href.indexOf("#calc="); if(i === -1) return ""; return href.substring(i+6).trim(); } function openByCode(code){ if(!code) return false; const fn = J.openers && J.openers[code]; if(typeof fn === "function"){ fn(); return true; } try{ console.warn("[JOZSA] nincs regisztrált kalkulátor:", code); }catch(e){} return false; } document.addEventListener("click", function(e){ const a = e.target.closest ? e.target.closest('a[href*="#calc="]') : null; if(!a) return; const code = parseCalcCodeFromHref(a.getAttribute("href")||""); if(!code) return; e.preventDefault(); e.stopPropagation(); J.closeAll(); openByCode(code); }, true); function handleHash(){ const h = (location.hash||"").trim(); if(h.indexOf("#calc=")!==0) return; const code = h.replace("#calc=","").trim(); if(!code) return; J.closeAll(); openByCode(code); } window.addEventListener("hashchange", handleHash); setTimeout(handleHash, 0); /* ====================== OFFER (árajánlat) modul ====================== */ const LS_OFFER = "JOZSA_OFFER_v2"; function lsLoad(){ try{ return JSON.parse(localStorage.getItem(LS_OFFER) || "null"); }catch(e){ return null; } } function lsSave(state){ try{ localStorage.setItem(LS_OFFER, JSON.stringify(state)); }catch(e){} } function todayHU(){ const d = new Date(); const y = d.getFullYear(); const m = String(d.getMonth()+1).padStart(2,"0"); const day = String(d.getDate()).padStart(2,"0"); return `${y}. ${m}. ${day}.`; } function esc(s){ return String(s||"") .replaceAll("&","&") .replaceAll("<","<") .replaceAll(">",">") .replaceAll('"',""") .replaceAll("'","'"); } const offerState = Object.assign({ customer:{ nev:"", ceg:"", cim:"", tel:"", email:"" }, meta:{ sorszam:"", kelt: todayHU() }, items:[] }, (lsLoad()||{})); function sumTotal(){ return offerState.items.reduce((a,x)=>a+Number(x.total||0),0); } // Publikus API a kalkulátoroknak: J.offer = J.offer || {}; J.offer.addItemFromCalc = function(payload){ // payload: {name, spec, size, qty, unit, total} try{ const x = Object.assign({ id: Date.now(), name: payload.name || "Tétel", spec: payload.spec || "", size: payload.size || "", qty: Math.max(1, parseInt(payload.qty||1,10)), unit: Math.max(0, parseInt(payload.unit||0,10)), total: Math.max(0, parseInt(payload.total||0,10)) }, {}); if(!x.total) x.total = x.qty * x.unit; offerState.items.push(x); lsSave(offerState); if(typeof renderOffer === "function") renderOffer(); return true; }catch(e){ return false; } }; /* ====================== ÁRAJÁNLAT SZERKESZTŐ mount ====================== */ function el(id){ return document.getElementById(id); } function renderPreview(){ const p = el("jt_preview"); if(!p) return; const c = offerState.customer; const m = offerState.meta; const vevoLine = [c.nev||"—", c.ceg ? "("+c.ceg+")" : ""].filter(Boolean).join(" "); p.innerHTML = `

JÓZSA ÉS TÁRSA

Árnyékolástechnika • 2026

ÁRAJÁNLAT

Kelt: ${esc(m.kelt||todayHU())}${m.sorszam? " | Sorszám: "+esc(m.sorszam):""}

Vevő adatai

${esc(vevoLine)}

${esc(c.cim||"—")}

${esc([c.tel,c.email].filter(Boolean).join(" | ") || "—")}

Vállalkozó

Józsa és Társa Kft.

info@jozsa.hu

Az árak bruttó árak, telepítéssel értendők Pest vármegye területén.
Mindösszesen bruttó: ${J.ft(sumTotal())}
`; } function renderItems(){ const tb = el("jt_items"); if(!tb) return; tb.innerHTML = ""; offerState.items.forEach(x=>{ tb.innerHTML += ` ${esc(x.name)} ${x.size ? `
Méret: ${esc(x.size)}
` : ``} ${x.spec ? `
${esc(x.spec)}
` : ``} ${x.qty} db ${J.ft(x.total)} `; }); Array.from(tb.querySelectorAll(".jt-del")).forEach((btn, i)=>{ btn.addEventListener("click", ()=>{ offerState.items.splice(i,1); lsSave(offerState); renderOffer(); }); }); const totalEl = el("jt_total"); if(totalEl) totalEl.innerText = J.ft(sumTotal()); } function syncOfferState(){ offerState.customer.nev = el("c_nev").value||""; offerState.customer.ceg = el("c_ceg").value||""; offerState.customer.cim = el("c_cim").value||""; offerState.customer.tel = el("c_tel").value||""; offerState.customer.email = el("c_email").value||""; offerState.meta.sorszam = el("o_sorszam").value||""; offerState.meta.kelt = el("o_kelt").value||""; lsSave(offerState); renderPreview(); } function addManualItem(){ const name = (el("i_name").value||"").trim(); if(!name) return; const spec = (el("i_spec").value||"").trim(); const size = (el("i_size").value||"").trim(); const qty = Math.max(1, parseInt(el("i_qty").value||"1",10)); const unit = Math.max(0, parseInt(el("i_unit").value||"0",10)); const total = qty*unit; offerState.items.push({ id:Date.now(), name, spec, size, qty, unit, total }); lsSave(offerState); el("i_name").value=""; el("i_spec").value=""; el("i_size").value=""; el("i_qty").value="1"; el("i_unit").value=""; renderOffer(); } function clearOffer(){ if(!confirm("Biztosan üríted az ajánlatot?")) return; offerState.items = []; lsSave(offerState); renderOffer(); } function printPDF(){ window.print(); // böngésző -> Mentés PDF-be } function mailOffer(){ const to = (offerState.customer.email||"").trim(); if(!to){ alert("Add meg az ügyfél e-mail címét (Ügyfél adatok → E-mail)."); return; } const subj = encodeURIComponent("Árajánlat – Józsa és Társa"); const body = encodeURIComponent( "Kedves Ügyfél!\n\n" + "Küldjük az árajánlatot.\n" + "Az árak bruttó árak, telepítéssel értendők Pest vármegye területén.\n\n" + "PDF csatolás automatikusan böngészőből nem lehetséges, kérlek a 'PDF mentés' gombbal mentsd le és csatold.\n\n" + "Üdvözlettel,\nJózsa és Társa\n" ); window.location.href = `mailto:${encodeURIComponent(to)}?subject=${subj}&body=${body}`; } function mountOfferEditor(){ const host = document.getElementById("jt-offer-editor"); if(!host) return false; host.innerHTML = `
Bruttó árak • telepítéssel • Pest vármegye
A tételek kézzel is felvehetők. A kalkulátorokból is ide fogjuk küldeni (JOZSA.offer.addItemFromCalc).

Árajánlat szerkesztő

Ügyfél adatok

Ajánlat adatok

Tétel hozzáadás (manuális)

Később: Excel/CSV → JOZSA_DB → kalkulátor → tétel átadás → ajánlat.

Előnézet

Tételek

Megnevezés Db Összesen
Mindösszesen bruttó: 0 Ft
Fontos: csatolt PDF e-mail küldéshez szerver kell (WP/PHP endpoint). Most a „Nyomtatás / PDF” mentés + mailto működik.
`; // init from state el("c_nev").value = offerState.customer.nev||""; el("c_ceg").value = offerState.customer.ceg||""; el("c_cim").value = offerState.customer.cim||""; el("c_tel").value = offerState.customer.tel||""; el("c_email").value = offerState.customer.email||""; el("o_sorszam").value = offerState.meta.sorszam||""; el("o_kelt").value = offerState.meta.kelt||todayHU(); ["c_nev","c_ceg","c_cim","c_tel","c_email","o_sorszam","o_kelt"].forEach(id=>{ el(id).addEventListener("input", syncOfferState); }); el("jt_add_item").addEventListener("click", addManualItem); el("jt_offer_clear").addEventListener("click", clearOffer); el("jt_offer_pdf").addEventListener("click", printPDF); el("jt_offer_mail").addEventListener("click", mailOffer); renderOffer(); return true; } function renderOffer(){ renderPreview(); renderItems(); } // mount próbálkozás: azonnal + késleltetve (Elementor) function tryMount(){ mountOfferEditor(); } if(document.readyState === "loading"){ document.addEventListener("DOMContentLoaded", tryMount); }else{ tryMount(); } setTimeout(tryMount, 400); setTimeout(tryMount, 1200); })();