כלי עבודה פנימי

מחולל הצעות מחיר 2026

בוחרים שירותים, מחשבים את חבילת “זה מסוכן”, מעדכנים מע״מ והנחה ומפיקים הצעת מחיר ממותגת כקובץ PDF.

שימו לב: כל המחירים במחירון אינם כוללים מע״מ. שיעור המע״מ ניתן לעריכה לפני הייצוא.
01

פרטי ההצעה והלקוח

הפרטים שיופיעו בכותרת ה־PDF.

02

הוספת שירות מהמחירון

מחיר רגיל, מחיר הנחה, מזומן או מחיר מותאם ידנית.

הוספת פריט חופשי שאינו במחירון
03

מחשבון “זה מסוכן”

חישוב אוטומטי לפי מספר שחקנים, סבבים וימים מרוכזים. מספר גפ״ן: 46023.

סה״כ לפני מע״מ ₪0
יום סבב הנחת סבב הנחת יום מחיר
04

סל ההצעה

אפשר לערוך כמות ומחיר גם לאחר הוספת הפריט.

שירות כמות מחיר יחידה סה״כ
עדיין לא נוספו פריטים להצעה.
05

סיכום, הנחה ותנאים

הנחה כללית מוגבלת ל־10%. המע״מ ניתן לשינוי.

סכום ביניים₪0
הנחה₪0
מע״מ₪0
סה״כ כולל מע״מ₪0
'); doc.close(); doc.body.appendChild(clone); applyPreparedLogoToClone(clone, logoDataUrl).then(function () { window.setTimeout(function () { resolve({ frame: iframe, element: clone }); }, 180); }); } catch (error) { reject(error); } }; document.body.appendChild(iframe); iframe.src = 'about:blank'; }); }); } function cleanPdfError(error) { var message = error && error.message ? String(error.message) : 'שגיאה לא ידועה'; if (/oklch|color function|unsupported color/i.test(message)) { return 'סגנון צבע של התבנית התנגש במנוע ה-PDF.'; } if (/tainted|cross-origin|cors|securityerror/i.test(message)) { return 'אחת התמונות נחסמה ליצוא. יש להשתמש בתמונה המאוחסנת באותו אתר.'; } if (/script|load|blocked|dependency|library|ספרי/i.test(message)) { return 'ספריות יצירת ה-PDF לא נטענו. ייתכן שחסימת אבטחה באתר מונעת טעינת קבצים חיצוניים.'; } return message.slice(0, 180); } function safeFilename() { var client = ($('#sqbClientName').value || 'לקוח').trim().replace(/[\\/:*?"<>|]+/g, '-'); var quote = ($('#sqbQuoteNumber').value || 'הצעה').trim().replace(/[\\/:*?"<>|]+/g, '-'); return 'הצעת-מחיר-' + client + '-' + quote + '.pdf'; } function addCanvasToPdf(canvas, filename) { var jsPDF = window.jspdf.jsPDF; var pdf = new jsPDF({ orientation: 'portrait', unit: 'mm', format: 'a4', compress: true }); var pageWidth = 210; var pageHeight = 297; var margin = 7; var printableWidth = pageWidth - margin * 2; var printableHeight = pageHeight - margin * 2; var pixelsPerMm = canvas.width / printableWidth; var pageSliceHeight = Math.max(1, Math.floor(printableHeight * pixelsPerMm)); var offsetY = 0; var pageIndex = 0; while (offsetY < canvas.height) { var sliceHeight = Math.min(pageSliceHeight, canvas.height - offsetY); var slice = document.createElement('canvas'); slice.width = canvas.width; slice.height = sliceHeight; var context = slice.getContext('2d', { alpha: false }); context.fillStyle = '#ffffff'; context.fillRect(0, 0, slice.width, slice.height); context.drawImage( canvas, 0, offsetY, canvas.width, sliceHeight, 0, 0, canvas.width, sliceHeight ); var imageData = slice.toDataURL('image/png'); var renderedHeight = sliceHeight / pixelsPerMm; if (pageIndex > 0) pdf.addPage('a4', 'portrait'); pdf.addImage( imageData, 'PNG', margin, margin, printableWidth, renderedHeight, undefined, 'FAST' ); offsetY += sliceHeight; pageIndex += 1; } pdf.save(filename); } function exportPdf() { var button = $('#sqbExportBtn'); var isolated = null; renderAll(); button.disabled = true; button.textContent = 'מכין PDF...'; showToast('מכין את קובץ ה-PDF...'); ensurePdfDependencies() .then(function () { return createIsolatedPdfFrame($('#sqbPdfSheet')); }) .then(function (result) { isolated = result; return window.html2canvas(isolated.element, { scale: 2, useCORS: true, allowTaint: false, backgroundColor: '#ffffff', scrollX: 0, scrollY: 0, logging: false, imageTimeout: 12000, foreignObjectRendering: false, onclone: function (clonedDocument) { var sheet = clonedDocument.querySelector('.sqb-pdf-sheet'); if (sheet) { sheet.style.transform = 'none'; sheet.style.margin = '0'; } } }); }) .then(function (canvas) { if (!canvas || !canvas.width || !canvas.height) { throw new Error('מנוע הצילום לא החזיר תמונה תקינה.'); } addCanvasToPdf(canvas, safeFilename()); showToast('ה-PDF נוצר וירד למחשב.'); }) .catch(function (error) { console.error('Shemesh PDF export failed:', error); showToast('יצירת ה-PDF נכשלה: ' + cleanPdfError(error)); }) .finally(function () { if (isolated && isolated.frame && isolated.frame.parentNode) { isolated.frame.parentNode.removeChild(isolated.frame); } button.disabled = false; button.textContent = 'יצירת PDF'; }); } $('#sqbProductSelect').addEventListener('change', updatePriceModes); $('#sqbPriceMode').addEventListener('change', updateSelectedUnitPrice); $('#sqbAddProductBtn').addEventListener('click', addSelectedProduct); $('#sqbAddManualBtn').addEventListener('click', addManualProduct); $('#sqbAddDangerBtn').addEventListener('click', addDangerPackage); $('#sqbDangerActors').addEventListener('change', renderDanger); $('#sqbDangerRounds').addEventListener('change', renderDanger); $('#sqbDangerDays').addEventListener('change', renderDanger); $('#sqbItemsBody').addEventListener('change', handleItemsInput); $('#sqbItemsBody').addEventListener('click', handleItemsClick); $('#sqbResetBtn').addEventListener('click', resetBuilder); $('#sqbExportBtn').addEventListener('click', exportPdf); window.setTimeout(function () { ensurePdfDependencies().catch(function () {}); }, 900); $all('input, textarea, select').forEach(function (field) { field.addEventListener('input', function () { if (field === $('#sqbDiscount')) field.value = clamp(toNumber(field.value), 0, 10); renderAll(); }); field.addEventListener('change', renderAll); }); applyLiveBrandLogo(); window.addEventListener('load', applyLiveBrandLogo, { once: true }); initializeDates(); populateProducts(); renderDanger(); renderAll(); })();