From 248109e6e812d607e27e61fedf7c4d0c7923e5f3 Mon Sep 17 00:00:00 2001 From: DeathKaioken Date: Sun, 15 Mar 2026 18:33:52 +0100 Subject: [PATCH 1/2] fk this shit --- .../abonemments/AbonemmentController.js | 2 + .../admin/DashboardPlatformsController.js | 120 +++ controller/admin/ShippingFeesController.js | 25 + .../DocumentTemplateController.js | 215 +++-- database/createDb.js | 215 ++++- debug-pdf/template_1_html_full.html | 156 +--- debug-pdf/template_1_html_raw.bin | 156 +--- debug-pdf/template_1_sanitized_preview.html | 210 +---- debug-pdf/template_2_html_full.html | 230 +---- debug-pdf/template_2_html_raw.bin | 230 +---- debug-pdf/template_2_sanitized_preview.html | 230 +---- debug-pdf/template_3_html_full.html | 210 +---- debug-pdf/template_3_html_raw.bin | 210 +---- debug-pdf/template_3_sanitized_preview.html | 1 + debug-pdf/template_4_html_full.html | 835 +++++++++++++----- debug-pdf/template_4_html_raw.bin | 835 +++++++++++++----- debug-pdf/template_4_sanitized_preview.html | 620 +++++++++++++ debug-pdf/template_5_html_full.html | 620 +++++++++++++ debug-pdf/template_5_html_raw.bin | 620 +++++++++++++ debug-pdf/template_5_sanitized_preview.html | 620 +++++++++++++ models/Abonemment.js | 2 + package-lock.json | 23 +- package.json | 3 +- .../abonemments/AbonemmentRepository.js | 23 + .../settings/DashboardPlatformsRepository.js | 142 +++ .../template/DocumentTemplateRepository.js | 10 +- routes/getRoutes.js | 13 + routes/patchRoutes.js | 4 + routes/postRoutes.js | 4 + routes/putRoutes.js | 8 + scripts/createAdminUser.js | 4 +- services/abonemments/AboContractService.js | 187 ++++ services/abonemments/AbonemmentService.js | 92 ++ services/contracts/ContractUploadService.js | 6 + services/email/MailService.js | 34 + .../subscriptions/CoffeeShippingFeeService.js | 70 ++ services/template/DocumentTemplateService.js | 17 +- templates/abo/abo-contract-template.html | 620 +++++++++++++ 38 files changed, 5452 insertions(+), 2170 deletions(-) create mode 100644 controller/admin/DashboardPlatformsController.js create mode 100644 controller/admin/ShippingFeesController.js create mode 100644 debug-pdf/template_3_sanitized_preview.html create mode 100644 debug-pdf/template_4_sanitized_preview.html create mode 100644 debug-pdf/template_5_html_full.html create mode 100644 debug-pdf/template_5_html_raw.bin create mode 100644 debug-pdf/template_5_sanitized_preview.html create mode 100644 repositories/settings/DashboardPlatformsRepository.js create mode 100644 services/abonemments/AboContractService.js create mode 100644 services/subscriptions/CoffeeShippingFeeService.js create mode 100644 templates/abo/abo-contract-template.html diff --git a/controller/abonemments/AbonemmentController.js b/controller/abonemments/AbonemmentController.js index a8031c2..2dd3670 100644 --- a/controller/abonemments/AbonemmentController.js +++ b/controller/abonemments/AbonemmentController.js @@ -35,6 +35,8 @@ module.exports = { country: req.body.country, frequency: req.body.frequency, startDate: req.body.startDate, + contractNumber: req.body.contractNumber || req.body.contract_number, + signatureDataUrl: req.body.signatureDataUrl || req.body.signature_data_url, actorUser, // normalized to include id referredBy: req.body.referred_by, }); diff --git a/controller/admin/DashboardPlatformsController.js b/controller/admin/DashboardPlatformsController.js new file mode 100644 index 0000000..c23779f --- /dev/null +++ b/controller/admin/DashboardPlatformsController.js @@ -0,0 +1,120 @@ +const { v4: uuidv4 } = require('uuid'); +const DashboardPlatformsRepository = require('../../repositories/settings/DashboardPlatformsRepository'); + +const repo = new DashboardPlatformsRepository(); + +function toBool(value, fallback) { + if (value === undefined) return fallback; + if (value === true || value === false) return value; + if (value === 'true') return true; + if (value === 'false') return false; + return fallback; +} + +function toNullableString(value) { + if (value === undefined) return undefined; + if (value === null) return null; + const s = String(value); + return s; +} + +function requireNonEmptyString(value, field) { + const s = typeof value === 'string' ? value.trim() : ''; + if (!s) { + const err = new Error(`${field} is required`); + err.status = 400; + throw err; + } + return s; +} + +class DashboardPlatformsController { + // Public endpoint (no auth): only returns active platforms (state=true) + static async listPublic(req, res) { + const list = await repo.listPublic(); + return res.json(list); + } + + static async list(req, res) { + const list = await repo.list(); + return res.json(list); + } + + static async create(req, res) { + try { + const title = requireNonEmptyString(req.body.title, 'title'); + const href = requireNonEmptyString(req.body.href, 'href'); + + const platform = { + id: uuidv4(), + title, + description: toNullableString(req.body.description) ?? '', + href, + icon: toNullableString(req.body.icon) ?? '', + color: toNullableString(req.body.color) ?? '', + state: toBool(req.body.state, true), + disabled: toBool(req.body.disabled, false), + disabledText: toNullableString(req.body.disabledText) ?? null, + sortOrder: Number.isFinite(Number(req.body.sortOrder)) ? Number(req.body.sortOrder) : 0, + }; + + const created = await repo.create(platform); + return res.status(201).json(created || platform); + } catch (err) { + const status = err?.status || 500; + return res.status(status).json({ error: err.message || 'Failed to create dashboard platform' }); + } + } + + static async update(req, res) { + try { + const id = String(req.params.id || '').trim(); + if (!id) return res.status(400).json({ error: 'id is required' }); + + const existing = await repo.getById(id); + if (!existing) return res.status(404).json({ error: 'Not found' }); + + const next = { + ...existing, + title: req.body.title === undefined ? existing.title : String(req.body.title), + description: req.body.description === undefined ? existing.description : String(req.body.description || ''), + href: req.body.href === undefined ? existing.href : String(req.body.href), + icon: req.body.icon === undefined ? existing.icon : String(req.body.icon || ''), + color: req.body.color === undefined ? existing.color : String(req.body.color || ''), + disabled: req.body.disabled === undefined ? existing.disabled : toBool(req.body.disabled, existing.disabled), + disabledText: req.body.disabledText === undefined ? existing.disabledText : (req.body.disabledText === null ? null : String(req.body.disabledText)), + sortOrder: req.body.sortOrder === undefined ? existing.sortOrder : (Number.isFinite(Number(req.body.sortOrder)) ? Number(req.body.sortOrder) : existing.sortOrder), + }; + + // If title/href were provided, require non-empty + if (req.body.title !== undefined) requireNonEmptyString(next.title, 'title'); + if (req.body.href !== undefined) requireNonEmptyString(next.href, 'href'); + + const updated = await repo.update(id, next); + if (!updated) return res.status(404).json({ error: 'Not found' }); + return res.json(updated); + } catch (err) { + const status = err?.status || 500; + return res.status(status).json({ error: err.message || 'Failed to update dashboard platform' }); + } + } + + static async setState(req, res) { + try { + const id = String(req.params.id || '').trim(); + if (!id) return res.status(400).json({ error: 'id is required' }); + + const state = toBool(req.body.state, undefined); + if (state === undefined) return res.status(400).json({ error: 'state must be boolean' }); + + const updated = await repo.setState(id, state); + if (!updated) return res.status(404).json({ error: 'Not found' }); + return res.json(updated); + } catch (err) { + const status = err?.status || 500; + return res.status(status).json({ error: err.message || 'Failed to update state' }); + } + } +} + +module.exports = DashboardPlatformsController; diff --git a/controller/admin/ShippingFeesController.js b/controller/admin/ShippingFeesController.js new file mode 100644 index 0000000..c296365 --- /dev/null +++ b/controller/admin/ShippingFeesController.js @@ -0,0 +1,25 @@ +const CoffeeShippingFeeService = require('../../services/subscriptions/CoffeeShippingFeeService'); + +class ShippingFeesController { + // Public endpoint: returns the 2 configured shipping fees (60/120) + static async listPublic(req, res) { + const list = await CoffeeShippingFeeService.list(); + return res.json(list); + } + + // Admin endpoint: update price for a pieceCount (60 or 120) + static async updatePrice(req, res) { + try { + const pieceCount = req.params.pieceCount; + const price = req.body?.price; + const updated = await CoffeeShippingFeeService.setPrice(pieceCount, price); + if (!updated) return res.status(404).json({ error: 'Not found' }); + return res.json(updated); + } catch (err) { + const status = err?.status || 500; + return res.status(status).json({ error: err?.message || 'Failed to update shipping fee' }); + } + } +} + +module.exports = ShippingFeesController; diff --git a/controller/documentTemplate/DocumentTemplateController.js b/controller/documentTemplate/DocumentTemplateController.js index 514703f..de08451 100644 --- a/controller/documentTemplate/DocumentTemplateController.js +++ b/controller/documentTemplate/DocumentTemplateController.js @@ -332,6 +332,95 @@ function ensureHtmlDocument(html) { `; } +function escapeRegExp(str) { + return String(str).replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); +} + +// Raw preview helper: fetch latest active contract template HTML (placeholders intact) +async function fetchLatestActiveContractTemplateHtml({ userType, contractType }) { + const allowedContractTypes = ['contract', 'gdpr', 'abo']; + const safeContractType = allowedContractTypes.includes(String(contractType || '').toLowerCase()) + ? String(contractType).toLowerCase() + : 'contract'; + + const latest = await DocumentTemplateService.getLatestActiveForUserType(userType, 'contract', safeContractType); + if (!latest) return { latest: null, html: '' }; + + const s3 = new S3Client({ + region: process.env.EXOSCALE_REGION, + endpoint: process.env.EXOSCALE_ENDPOINT, + credentials: { + accessKeyId: process.env.EXOSCALE_ACCESS_KEY, + secretAccessKey: process.env.EXOSCALE_SECRET_KEY + } + }); + const command = new GetObjectCommand({ Bucket: process.env.EXOSCALE_BUCKET, Key: latest.storageKey }); + const fileObj = await s3.send(command); + if (!fileObj.Body) { + logger.warn('[fetchLatestActiveContractTemplateHtml] empty S3 body', { id: latest.id, key: latest.storageKey }); + return { latest, html: '' }; + } + const html = await streamToString(fileObj.Body, latest.id); + return { latest, html: ensureHtmlDocument(html) }; +} + +async function renderLatestActiveContractHtmlForUser({ targetUserId, userType, contractType, req = null }) { + const allowedContractTypes = ['contract', 'gdpr', 'abo']; + const safeContractType = allowedContractTypes.includes(String(contractType || '').toLowerCase()) + ? String(contractType).toLowerCase() + : 'contract'; + + const latest = await DocumentTemplateService.getLatestActiveForUserType(userType, 'contract', safeContractType); + if (!latest) return { latest: null, html: '' }; + + const s3 = new S3Client({ + region: process.env.EXOSCALE_REGION, + endpoint: process.env.EXOSCALE_ENDPOINT, + credentials: { + accessKeyId: process.env.EXOSCALE_ACCESS_KEY, + secretAccessKey: process.env.EXOSCALE_SECRET_KEY + } + }); + const command = new GetObjectCommand({ Bucket: process.env.EXOSCALE_BUCKET, Key: latest.storageKey }); + const fileObj = await s3.send(command); + if (!fileObj.Body) { + const err = new Error('Template file not available'); + err.status = 404; + throw err; + } + let html = await streamToString(fileObj.Body, latest.id); + + const uow = new UnitOfWork(); + let vars; + try { + await uow.start(); + vars = await ContractUploadService.buildTemplateVars({ + userId: targetUserId, + user_type: userType, + contractData: {}, + unitOfWork: uow + }); + await uow.commit(); + } catch (e) { + try { await uow.rollback(e); } catch (_) {} + throw e; + } + + Object.entries(vars).forEach(([k, v]) => { + const pattern = new RegExp(`{{\\s*${escapeRegExp(k)}\\s*}}`, 'g'); + html = html.replace(pattern, String(v ?? '')); + }); + + html = html.replace(/{{\s*signatureImage\s*}}/g, 'Your signature will appear here'); + html = sanitizePlaceholders(html, ['companyStamp','companyStampInline','companyStampSmall','profitplanetSignature']); + + const reqForStamp = (req && req.user) ? req : { user: { id: targetUserId, user_type: userType } }; + try { html = await applyCompanyStampPlaceholders(html, reqForStamp); } catch (e) {} + try { html = await applyProfitPlanetSignature(html); } catch (e) {} + + return { latest, html: ensureHtmlDocument(html) }; +} + exports.listTemplates = async (req, res) => { const templates = await DocumentTemplateService.listTemplates(); const s3 = new S3Client({ @@ -385,9 +474,12 @@ exports.uploadTemplate = async (req, res) => { if (!file) return res.status(400).json({ error: 'No file uploaded' }); if (!lang || !['en', 'de'].includes(lang)) return res.status(400).json({ error: 'Invalid or missing language' }); - const allowedContractTypes = ['contract', 'gdpr']; - const contract_type = (type === 'contract' && allowedContractTypes.includes(rawContractType)) - ? rawContractType + const allowedContractTypes = ['contract', 'gdpr', 'abo']; + const normalizedContractType = rawContractType !== undefined && rawContractType !== null + ? String(rawContractType).trim().toLowerCase() + : rawContractType; + const contract_type = (type === 'contract' && allowedContractTypes.includes(normalizedContractType)) + ? normalizedContractType : (type === 'contract' ? 'contract' : null); // Use "english" for en, "german" for de @@ -449,12 +541,13 @@ exports.updateTemplate = async (req, res) => { if (!current) return res.status(404).json({ error: 'Template not found' }); const nextType = type !== undefined ? type : current.type; - const allowedContractTypes = ['contract', 'gdpr']; + const allowedContractTypes = ['contract', 'gdpr', 'abo']; let contract_type = null; if (nextType === 'contract') { const candidate = rawContractType !== undefined ? rawContractType : current.contract_type; - if (candidate && allowedContractTypes.includes(candidate)) { - contract_type = candidate; + const normalizedCandidate = candidate !== undefined && candidate !== null ? String(candidate).trim().toLowerCase() : candidate; + if (normalizedCandidate && allowedContractTypes.includes(normalizedCandidate)) { + contract_type = normalizedCandidate; } else { contract_type = 'contract'; } @@ -528,11 +621,12 @@ exports.reviseTemplate = async (req, res) => { ? rawUserType : (previous.user_type || 'both'); - const allowedContractTypes = ['contract', 'gdpr']; + const allowedContractTypes = ['contract', 'gdpr', 'abo']; let contract_type = null; if (nextType === 'contract') { const candidate = rawContractType !== undefined ? rawContractType : previous.contract_type; - contract_type = allowedContractTypes.includes(candidate) ? candidate : 'contract'; + const normalizedCandidate = candidate !== undefined && candidate !== null ? String(candidate).trim().toLowerCase() : candidate; + contract_type = allowedContractTypes.includes(normalizedCandidate) ? normalizedCandidate : 'contract'; } // Use "english" for en, "german" for de @@ -1180,9 +1274,10 @@ exports.generatePdfWithSignature = async (req, res) => { // Insert userData into HTML (simple replace, adjust as needed) if (userData && typeof userData === 'object') { Object.entries(userData).forEach(([key, value]) => { - const beforeCount = (html.match(new RegExp(`{{\s*${key}\s*}}`, 'g')) || []).length; - html = html.replace(new RegExp(`{{\s*${key}\s*}}`, 'g'), value); - const afterCount = (html.match(new RegExp(`{{\s*${key}\s*}}`, 'g')) || []).length; + const pattern = new RegExp(`{{\\s*${escapeRegExp(key)}\\s*}}`, 'g'); + const beforeCount = (html.match(pattern) || []).length; + html = html.replace(pattern, String(value ?? '')); + const afterCount = (html.match(pattern) || []).length; if (beforeCount || afterCount) { logger.debug(`[generatePdfWithSignature] replaced ${key}: before=${beforeCount} after=${afterCount}`); } @@ -1458,11 +1553,11 @@ exports.previewPdf = async (req, res) => { }; // NEW: Admin-only endpoint to preview the user's uploaded/signed contract (contract or gdpr) from object storage only -// GET /api/admin/contracts/:id/preview?userType=personal|company&contract_type=contract|gdpr +// GET /api/admin/contracts/:id/preview?userType=personal|company&contract_type=contract|gdpr|abo exports.previewLatestForUser = async (req, res) => { const targetUserId = parseInt(req.params.id, 10); const contractTypeParam = (req.query.contract_type || req.query.contractType || '').toString().toLowerCase(); - const allowedContractTypes = ['contract', 'gdpr']; + const allowedContractTypes = ['contract', 'gdpr', 'abo']; const contractType = allowedContractTypes.includes(contractTypeParam) ? contractTypeParam : 'contract'; const documentId = parseInt((req.query.documentId || req.query.document_id || '').toString(), 10); @@ -1518,7 +1613,8 @@ exports.previewLatestForUser = async (req, res) => { if (keys.length > 0) { const hasContractFolder = keys.some(k => k.startsWith(`${basePrefix}contract/`)); const hasGdprFolder = keys.some(k => k.startsWith(`${basePrefix}gdpr/`)); - if (!hasContractFolder && !hasGdprFolder) { + const hasAboFolder = keys.some(k => k.startsWith(`${basePrefix}abo/`)); + if (!hasContractFolder && !hasGdprFolder && !hasAboFolder) { folderStructureWarning = 'Admin user has to clean up and move the files in exoscale folder'; logger.error('[previewLatestForUser] contract folder structure invalid: Admin user has to clean up and move the files in exoscale folder', { userId: targetUserId, @@ -1568,6 +1664,7 @@ exports.previewLatestForUser = async (req, res) => { } if (key.includes('/gdpr/')) resolvedContractType = 'gdpr'; else if (key.includes('/contract/')) resolvedContractType = 'contract'; + else if (key.includes('/abo/')) resolvedContractType = 'abo'; doc = { object_storage_id: key }; logger.info('[previewLatestForUser] using objectKey directly', { targetUserId, resolvedContractType, key }); } else { @@ -1576,7 +1673,8 @@ exports.previewLatestForUser = async (req, res) => { // so use contract_type column to disambiguate between contract vs gdpr const docTypesMap = { contract: ['contract', 'signed_contract', 'contract_pdf', 'signed_contract_pdf'], - gdpr: ['contract', 'signed_contract', 'contract_pdf', 'signed_contract_pdf'] + gdpr: ['contract', 'signed_contract', 'contract_pdf', 'signed_contract_pdf'], + abo: ['contract', 'signed_contract', 'contract_pdf', 'signed_contract_pdf'] }; const docTypes = docTypesMap[contractType] || docTypesMap.contract; const placeholders = docTypes.map(() => '?').join(','); @@ -1788,6 +1886,7 @@ exports.listUserContractDocuments = async (req, res) => { let folderType = 'loose'; if (/\/gdpr\//i.test(key)) folderType = 'gdpr'; else if (/\/contract\//i.test(key)) folderType = 'contract'; + else if (/\/abo\//i.test(key)) folderType = 'abo'; return { ...d, folderType @@ -1809,7 +1908,7 @@ exports.listUserContractDocuments = async (req, res) => { exports.moveUserContractDocument = async (req, res) => { const targetUserId = parseInt(req.params.id, 10); const { documentId, targetType, objectKey } = req.body || {}; - const allowedTypes = ['contract', 'gdpr']; + const allowedTypes = ['contract', 'gdpr', 'abo']; const target = (targetType || '').toString().toLowerCase(); if (!req.user || !['admin', 'super_admin'].includes(req.user.role)) { @@ -1835,7 +1934,7 @@ exports.moveUserContractDocument = async (req, res) => { if (objectKey) { const key = String(objectKey); const basePrefix = `contracts/${contractCategory}/${targetUserId}/`; - if (!key.startsWith(basePrefix) || (!key.includes('/contract/') && !key.includes('/gdpr/'))) { + if (!key.startsWith(basePrefix) || (!key.includes('/contract/') && !key.includes('/gdpr/') && !key.includes('/abo/'))) { return res.status(400).json({ error: 'Invalid object key' }); } currentKey = key; @@ -1906,7 +2005,7 @@ exports.moveUserContractDocument = async (req, res) => { } }; -// NEW: Authenticated user endpoint to preview their own latest active contract with DB-filled placeholders +// Authenticated user endpoint to preview latest active contract template (raw HTML; placeholders intact) // GET /api/contracts/preview/latest exports.previewLatestForMe = async (req, res) => { if (!req.user) return res.status(401).json({ error: 'Unauthorized' }); @@ -1915,72 +2014,48 @@ exports.previewLatestForMe = async (req, res) => { if (!targetUserId || !userType) return res.status(400).json({ error: 'Invalid authenticated user' }); const contractTypeParam = (req.query.contract_type || req.query.contractType || '').toString().toLowerCase(); - const allowedContractTypes = ['contract', 'gdpr']; + const allowedContractTypes = ['contract', 'gdpr', 'abo']; const contractType = allowedContractTypes.includes(contractTypeParam) ? contractTypeParam : 'contract'; try { - // Find the latest active template for this user type - const latest = await DocumentTemplateService.getLatestActiveForUserType(userType, 'contract', contractType); + const { latest, html } = await fetchLatestActiveContractTemplateHtml({ userType, contractType }); if (!latest) { logger.info('[previewLatestForMe] no active template', { userId: targetUserId, userType, contractType }); - // Return 200 with empty body so clients can show a friendly empty state. + res.setHeader('Content-Type', 'text/html; charset=utf-8'); return res.status(200).send(''); } - - // Fetch template HTML from storage - const s3 = new S3Client({ - region: process.env.EXOSCALE_REGION, - endpoint: process.env.EXOSCALE_ENDPOINT, - credentials: { - accessKeyId: process.env.EXOSCALE_ACCESS_KEY, - secretAccessKey: process.env.EXOSCALE_SECRET_KEY - } - }); - const command = new GetObjectCommand({ Bucket: process.env.EXOSCALE_BUCKET, Key: latest.storageKey }); - const fileObj = await s3.send(command); - if (!fileObj.Body) return res.status(404).json({ error: 'Template file not available' }); - let html = await streamToString(fileObj.Body, latest.id); - - // Build variables using the same logic as contract upload - const uow = new UnitOfWork(); - await uow.start(); - const vars = await ContractUploadService.buildTemplateVars({ - userId: targetUserId, - user_type: userType, - contractData: {}, - unitOfWork: uow - }); - await uow.commit(); - - // Replace placeholders - Object.entries(vars).forEach(([k, v]) => { - html = html.replace(new RegExp(`{{\s*${k}\s*}}`, 'g'), String(v ?? '')); - }); - - // Show a friendly placeholder for signature in preview (not signed yet) - html = html.replace(/{{\s*signatureImage\s*}}/g, 'Your signature will appear here'); - - // Remove any remaining placeholders except stamp/signature markers - html = sanitizePlaceholders(html, ['companyStamp','companyStampInline','companyStampSmall','profitplanetSignature']); - - // Log any remaining placeholders to aid debugging - const remaining = html.match(/{{\s*([^}\s]+)\s*}}/g) || []; - if (remaining.length) { - logger.debug('[previewLatestForMe] unreplaced placeholders', { count: remaining.length, samples: remaining.slice(0, 5) }); - } - - // Apply company stamp and signature where applicable - try { html = await applyCompanyStampPlaceholders(html, req); } catch (e) {} - try { html = await applyProfitPlanetSignature(html); } catch (e) {} - res.setHeader('Content-Type', 'text/html; charset=utf-8'); - return res.send(ensureHtmlDocument(html)); + return res.send(html); } catch (err) { logger.error('[previewLatestForMe] error', err && err.stack ? err.stack : err); return res.status(500).json({ error: 'Failed to render preview' }); } }; +// User: convenience endpoint to preview latest active ABO contract (HTML) for authenticated user +// GET /api/contracts/abo/active +exports.previewLatestAboForMe = async (req, res) => { + if (!req.user) return res.status(401).json({ success: false, message: 'Unauthorized' }); + const targetUserId = req.user.id || req.user.userId; + const userType = (req.user.user_type || req.user.userType || '').toString().toLowerCase(); + if (!targetUserId || !userType) return res.status(400).json({ success: false, message: 'Invalid authenticated user' }); + + try { + const { latest, html } = await fetchLatestActiveContractTemplateHtml({ userType, contractType: 'abo' }); + if (!latest) { + logger.info('[previewLatestAboForMe] no active template', { userId: targetUserId, userType, contractType: 'abo' }); + res.setHeader('Content-Type', 'text/html; charset=utf-8'); + return res.status(200).send(''); + } + res.setHeader('Content-Type', 'text/html; charset=utf-8'); + return res.status(200).send(html || ''); + } catch (err) { + logger.error('[previewLatestAboForMe] error', err && err.stack ? err.stack : err); + const status = err && err.status ? err.status : 500; + return res.status(status).json({ success: false, message: 'Failed to render abo contract' }); + } +}; + // NEW controller: download sanitized PDF (variables emptied) // Keeps stamp/signature placeholders so company stamps or profitplanetSignature can still be applied if available. exports.downloadPdf = async (req, res) => { diff --git a/database/createDb.js b/database/createDb.js index 0166766..0acfeaf 100644 --- a/database/createDb.js +++ b/database/createDb.js @@ -375,7 +375,7 @@ const createDatabase = async () => { id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, document_type ENUM('personal_id', 'company_id', 'signature', 'contract', 'other') NOT NULL, - contract_type ENUM('contract','gdpr') NOT NULL DEFAULT 'contract', + contract_type ENUM('contract','gdpr','abo') NOT NULL DEFAULT 'contract', object_storage_id VARCHAR(255) UNIQUE NULL, signatureBase64 LONGTEXT NULL, original_filename VARCHAR(255), @@ -396,10 +396,21 @@ const createDatabase = async () => { connection, 'user_documents', 'contract_type', - `ENUM('contract','gdpr') NOT NULL DEFAULT 'contract' AFTER document_type` + `ENUM('contract','gdpr','abo') NOT NULL DEFAULT 'contract' AFTER document_type` ); await ensureIndex(connection, 'user_documents', 'idx_user_contract_type', '`user_id`, `contract_type`'); + // Ensure enum includes 'abo' on existing schemas + try { + await connection.query(` + ALTER TABLE user_documents + MODIFY COLUMN contract_type ENUM('contract','gdpr','abo') NOT NULL DEFAULT 'contract'; + `); + console.log("🔧 Ensured user_documents.contract_type includes 'abo'"); + } catch (e) { + console.log("ℹ️ user_documents.contract_type ENUM ALTER skipped:", e.message); + } + await connection.query(` ALTER TABLE user_documents MODIFY COLUMN object_storage_id VARCHAR(255) NULL; @@ -420,7 +431,7 @@ const createDatabase = async () => { id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, type VARCHAR(100) NOT NULL, - contract_type ENUM('contract','gdpr') NULL DEFAULT NULL, + contract_type ENUM('contract','gdpr','abo') NULL DEFAULT NULL, storageKey VARCHAR(255) NOT NULL, description TEXT, lang VARCHAR(10) NOT NULL, @@ -431,12 +442,87 @@ const createDatabase = async () => { updatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, CHECK ( (type <> 'contract' AND contract_type IS NULL) - OR (type = 'contract' AND contract_type IN ('contract','gdpr')) + OR (type = 'contract' AND contract_type IN ('contract','gdpr','abo')) ) ); `); console.log('✅ Document templates table created/verified'); + // Ensure enum includes 'abo' on existing schemas + try { + await connection.query(` + ALTER TABLE document_templates + MODIFY COLUMN contract_type ENUM('contract','gdpr','abo') NULL DEFAULT NULL; + `); + console.log("🔧 Ensured document_templates.contract_type includes 'abo'"); + } catch (e) { + console.log("ℹ️ document_templates.contract_type ENUM ALTER skipped:", e.message); + } + + // Ensure CHECK constraint includes 'abo' (best-effort; some MySQL/MariaDB versions ignore/limit CHECK) + try { + const [checks] = await connection.query(` + SELECT tc.CONSTRAINT_NAME AS name, cc.CHECK_CLAUSE AS clause + FROM information_schema.TABLE_CONSTRAINTS tc + JOIN information_schema.CHECK_CONSTRAINTS cc + ON tc.CONSTRAINT_SCHEMA = cc.CONSTRAINT_SCHEMA + AND tc.CONSTRAINT_NAME = cc.CONSTRAINT_NAME + WHERE tc.CONSTRAINT_SCHEMA = DATABASE() + AND tc.TABLE_NAME = 'document_templates' + AND tc.CONSTRAINT_TYPE = 'CHECK' + `); + + const checkRows = Array.isArray(checks) ? checks : []; + const toDrop = checkRows.filter(r => { + const clause = (r && r.clause) ? String(r.clause) : ''; + const looksLikeOldContractTypeCheck = clause.includes('contract_type') + && clause.includes("'contract'") + && clause.includes("'gdpr'") + && !clause.includes("'abo'"); + return looksLikeOldContractTypeCheck; + }); + + if (toDrop.length) { + for (const r of toDrop) { + const name = r && r.name ? String(r.name) : ''; + if (!name) continue; + try { + // MariaDB: DROP CONSTRAINT; MySQL: DROP CHECK + try { + await connection.query(`ALTER TABLE document_templates DROP CONSTRAINT \`${name}\`;`); + } catch (e1) { + await connection.query(`ALTER TABLE document_templates DROP CHECK \`${name}\`;`); + } + } catch (e2) { + console.log('ℹ️ document_templates CHECK drop skipped:', e2.message); + } + } + } + + // Add (or re-add) the desired check constraint + const hasDesired = checkRows.some(r => { + const clause = (r && r.clause) ? String(r.clause) : ''; + return clause.includes("contract_type IN ('contract','gdpr','abo')"); + }); + if (!hasDesired) { + try { + await connection.query(` + ALTER TABLE document_templates + ADD CONSTRAINT chk_document_templates_contract_type + CHECK ( + (type <> 'contract' AND contract_type IS NULL) + OR (type = 'contract' AND contract_type IN ('contract','gdpr','abo')) + ); + `); + console.log("🔧 Ensured document_templates CHECK allows 'abo'"); + } catch (e) { + console.log('ℹ️ document_templates CHECK add skipped:', e.message); + } + } + } catch (e) { + console.log('ℹ️ document_templates CHECK migration skipped:', e.message); + } + await connection.query(` CREATE TABLE IF NOT EXISTS no_user_abo_mails ( id INT AUTO_INCREMENT PRIMARY KEY, @@ -734,6 +820,93 @@ const createDatabase = async () => { `); console.log('✅ Company settings table created/verified'); + // --- Dashboard Platforms (admin managed dashboard cards) --- + await connection.query(` + CREATE TABLE IF NOT EXISTS dashboard_plattforms ( + id VARCHAR(36) PRIMARY KEY, + title VARCHAR(255) NOT NULL, + description TEXT NULL, + href VARCHAR(1024) NOT NULL, + icon VARCHAR(255) NULL, + color VARCHAR(255) NULL, + state BOOLEAN NOT NULL DEFAULT TRUE, + disabled BOOLEAN NOT NULL DEFAULT FALSE, + disabled_text VARCHAR(255) NULL, + sort_order INT NOT NULL DEFAULT 0, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP + ); + `); + console.log('✅ Dashboard plattforms table created/verified'); + + await ensureIndex(connection, 'dashboard_plattforms', 'idx_dashboard_plattforms_state', '`state`'); + await ensureIndex(connection, 'dashboard_plattforms', 'idx_dashboard_plattforms_sort_order', '`sort_order`'); + await ensureIndex(connection, 'dashboard_plattforms', 'idx_dashboard_plattforms_title', '`title`'); + + // Optional one-time migration from legacy company_settings.dashboard_plattforms (JSON column) + try { + const hasLegacyColumn = await columnExists(connection, 'company_settings', 'dashboard_plattforms'); + if (hasLegacyColumn) { + const [countRows] = await connection.query(`SELECT COUNT(*) AS c FROM dashboard_plattforms`); + const count = Number(countRows?.[0]?.c ?? 0); + if (count === 0) { + const [rows] = await connection.query(`SELECT dashboard_plattforms FROM company_settings WHERE id = 1`); + const raw = rows?.[0]?.dashboard_plattforms; + + let parsed = []; + try { + if (raw == null) parsed = []; + else if (typeof raw === 'string') parsed = JSON.parse(raw); + else parsed = raw; + } catch (_) { + parsed = []; + } + + const list = Array.isArray(parsed) ? parsed : []; + if (list.length) { + for (const p of list) { + const id = typeof p?.id === 'string' ? p.id.trim() : ''; + if (!id) continue; + + const title = typeof p?.title === 'string' ? p.title : ''; + const href = typeof p?.href === 'string' ? p.href : ''; + + await connection.query( + `INSERT INTO dashboard_plattforms + (id, title, description, href, icon, color, state, disabled, disabled_text, sort_order) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + ON DUPLICATE KEY UPDATE + title = VALUES(title), + description = VALUES(description), + href = VALUES(href), + icon = VALUES(icon), + color = VALUES(color), + state = VALUES(state), + disabled = VALUES(disabled), + disabled_text = VALUES(disabled_text), + sort_order = VALUES(sort_order)`, + [ + id, + title, + typeof p?.description === 'string' ? p.description : (p?.description == null ? '' : String(p.description)), + href, + typeof p?.icon === 'string' ? p.icon : (p?.icon == null ? '' : String(p.icon)), + typeof p?.color === 'string' ? p.color : (p?.color == null ? '' : String(p.color)), + p?.state === false ? 0 : 1, + p?.disabled === true ? 1 : 0, + p?.disabledText == null ? null : String(p.disabledText), + Number.isFinite(Number(p?.sortOrder)) ? Number(p.sortOrder) : 0, + ] + ); + } + console.log('🔁 Migrated legacy dashboard_plattforms JSON into dashboard_plattforms table'); + } + } + } + } catch (e) { + console.warn('⚠️ Dashboard platforms migration skipped/failed:', e?.message || e); + } + // --- Rate Limiting Table --- await connection.query(` CREATE TABLE IF NOT EXISTS rate_limit ( @@ -853,6 +1026,28 @@ const createDatabase = async () => { `); console.log('✅ Coffee table (simplified) created/verified'); + // --- Coffee shipping fees (fixed package sizes) --- + await connection.query(` + CREATE TABLE IF NOT EXISTS coffee_shipping_fees ( + id INT AUTO_INCREMENT PRIMARY KEY, + piece_count INT NOT NULL, + price DECIMAL(10,2) NOT NULL DEFAULT 0.00, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT uq_coffee_shipping_fees_piece_count UNIQUE (piece_count), + CONSTRAINT chk_coffee_shipping_fees_piece_count CHECK (piece_count IN (60, 120)) + ); + `); + await connection.query(` + INSERT INTO coffee_shipping_fees (piece_count, price) + VALUES + (60, 0.00), + (120, 0.00) + ON DUPLICATE KEY UPDATE + piece_count = VALUES(piece_count) + `); + console.log('✅ Coffee shipping fees table created/verified and seeded (60/120)'); + // --- Coffee Abonements (subscriptions) --- await connection.query(` CREATE TABLE IF NOT EXISTS coffee_abonements ( @@ -1067,7 +1262,11 @@ const createDatabase = async () => { console.log('ℹ️ position type change skipped:', e.message); } try { - await connection.query(`ALTER TABLE user_tree_edges DROP CHECK chk_position`); + try { + await connection.query('ALTER TABLE user_tree_edges DROP CONSTRAINT chk_position'); + } catch (e1) { + await connection.query('ALTER TABLE user_tree_edges DROP CHECK chk_position'); + } console.log('🧹 Dropped CHECK constraint chk_position on user_tree_edges'); } catch (e) { // MySQL versions or engines may report different messages if CHECK is not enforced or named differently @@ -1454,7 +1653,11 @@ const createDatabase = async () => { // Remove singleton constraint if present (best effort) try { - await connection.query(`ALTER TABLE matrix_config DROP CHECK chk_matrix_singleton`); + try { + await connection.query('ALTER TABLE matrix_config DROP CONSTRAINT chk_matrix_singleton'); + } catch (e1) { + await connection.query('ALTER TABLE matrix_config DROP CHECK chk_matrix_singleton'); + } console.log('🧹 Dropped chk_matrix_singleton'); } catch (e) { console.log('ℹ️ chk_matrix_singleton drop skipped:', e.message); diff --git a/debug-pdf/template_1_html_full.html b/debug-pdf/template_1_html_full.html index 2765e05..30d74d2 100644 --- a/debug-pdf/template_1_html_full.html +++ b/debug-pdf/template_1_html_full.html @@ -1,155 +1 @@ - - - - - - Invoice {{invoiceNumber}} - - - -
-
-

Invoice

-
- -
-
-
-
Invoice Number
-
{{invoiceNumber}}
-
-
-
Issued At
-
{{issuedAt}}
-
-
-
Customer
-
{{customerName}}
-
-
- - - - - - - - - - - - {{itemsHtml}} - -
ItemQtyUnit NetLine Net
- -
-
- Total Net - {{totalNet}} -
-
- Total Tax - {{totalTax}} -
-
- Total Gross - {{totalGross}} -
-
- - -
-
- - \ No newline at end of file +test \ No newline at end of file diff --git a/debug-pdf/template_1_html_raw.bin b/debug-pdf/template_1_html_raw.bin index 2765e05..30d74d2 100644 --- a/debug-pdf/template_1_html_raw.bin +++ b/debug-pdf/template_1_html_raw.bin @@ -1,155 +1 @@ - - - - - - Invoice {{invoiceNumber}} - - - -
-
-

Invoice

-
- -
-
-
-
Invoice Number
-
{{invoiceNumber}}
-
-
-
Issued At
-
{{issuedAt}}
-
-
-
Customer
-
{{customerName}}
-
-
- - - - - - - - - - - - {{itemsHtml}} - -
ItemQtyUnit NetLine Net
- -
-
- Total Net - {{totalNet}} -
-
- Total Tax - {{totalTax}} -
-
- Total Gross - {{totalGross}} -
-
- - -
-
- - \ No newline at end of file +test \ No newline at end of file diff --git a/debug-pdf/template_1_sanitized_preview.html b/debug-pdf/template_1_sanitized_preview.html index b77f2f2..30d74d2 100644 --- a/debug-pdf/template_1_sanitized_preview.html +++ b/debug-pdf/template_1_sanitized_preview.html @@ -1,209 +1 @@ - - - - - - VERTRIEBSPARTNER / BUSINESSPARTNER / AFFILIATE - VERTRAG - - - -
-
- - -
-

VERTRIEBSPARTNER / BUSINESSPARTNER / AFFILIATE - VERTRAG

-

idF 21.05.2025

-

abgeschlossen zwischen

-

Profit Planet GmbH (kurz PROFIT PLANET)
FN 649474i
Liebenauer Hauptstraße 82c
A-8041 Graz

-

und

-

Vertriebspartner / Businesspartner / Affiliate (kurz VP)

-
- - - - - - - - - - - - - - - - - - - - - -
Vertriebspartner
Adresse
PLZ / Ort
Vollständige Adresse
E-Mail / Telefon /
-
-

1. Präambel und Vertragsgegenstand

-

1.1. Dieser Vertrag regelt die Zusammenarbeit zwischen PROFIT PLANET und VP als Grundlage einer fairen, langfristigen und erfolgreichen Kooperation. Die VP unterstützen einander im Sinne der Ziele der Zusammenarbeit und unterrichten sich gegenseitig über alle Vorgänge, die für ihre Leistungen im Rahmen der Kooperation von Interesse sind.

-

1.2. PROFIT PLANET bietet über ein Vertriebspartner / Businesspartner / Affiliate-Netzwerk den Vertrieb verschiedener Dienstleistungen und Produkte, vornehmlich aus den Bereichen Nachhaltigkeit, Energie, Handel sowie Consulting und Coaching an.

-

1.3. Der VP vermittelt die jeweiligen Dienstleistungen, Produkte oder qualifizierten Leads, die zu einem Abschluss führen, und erhält dafür eine Provision. Für die Tätigkeit als VP ist es nicht erforderlich, weitere VP zu werben.

-

1.4. Der VP ist berechtigt, weitere Vertriebspartner / Businesspartner / Affiliate für den Vertrieb der Dienstleistungen und Produkte zu gewinnen. Für die Vermittlung und Betreuung der von ihm akquirierten Vertriebspartner / Businesspartner / Affiliate erhält der werbende VP eine Provision, die sich aus den erwirtschafteten Umsätzen der geworbenen VP ermittelt. Die Höhe der Provision ergibt sich aus der Provisionsübersicht.

-

1.5. Die Vertragsabschlüsse kommen nur zwischen dem Endkunden und dem jeweiligen Dienstleister und/oder Produktgeber (Energieversorgungs-, Handels-, Dienstleistungs- oder Coachingunternehmen) zustande, ohne dass dadurch eine Vertragsbeziehung zwischen dem VP und dem Endkunden entsteht. Ein Anspruch auf Abschluss des jeweiligen Vertrags seitens des Endkunden gegenüber PROFIT PLANET oder dem VP entsteht nicht; der Vertragsabschluss ist von der Annahme des entsprechenden Antrags durch den Dienstleister bzw. Produktgeber abhängig. PROFIT PLANET hat darauf keinen Einfluss.

-

1.6. PROFIT PLANET behält sich vor, die angebotenen Produkte zurückzuziehen, zu ändern, neue hinzuzufügen oder sonstige Anpassungen des Produktangebots vorzunehmen. PROFIT PLANET wird den VP über Änderungen von Produkten oder Tarifen nach Maßgabe der Möglichkeiten rechtzeitig vor Wirksamkeit der Änderungen informieren.

-

1.7. Die genauen Produktbestandteile und Konditionen ergeben sich aus dem jeweiligen Produktpartnerinformationsblatt, welches auf der Online-Plattform hinterlegt wird.

-

1.8. PROFIT PLANET ist berechtigt, nach eigenem Ermessen andere Personen und Unternehmen mit der Vermittlung von Produkten und Dienstleistungen von PROFIT PLANET bzw. Produktpartnern von PROFIT PLANET zu beauftragen. Es bestehen grundsätzlich keine Alleinvermittlungsaufträge und keine Exklusivität.

- -

2. Vertriebspartner / Businesspartner / Affiliate werden

-

2.1. Kapitalgesellschaften, Personengesellschaften und volljährige natürliche Personen können Vertriebspartner / Businesspartner / Affiliate des PROFIT PLANET werden; pro Entität ist die Registrierung nur eines VP-Vertrags vorgesehen. Natürliche Personen, die bloß als Verbraucher handeln (wollen), können nicht Vertriebspartner / Businesspartner / Affiliate von PROFIT PLANET werden.

-

2.2. Kapitalgesellschaften müssen ihrem VP-Antrag die Firmenbuchnummer und gegebenenfalls die Umsatzsteuer-Identifikationsnummer (UID) beilegen. Der Antrag muss von allen Zeichnungsbereichten der Gesellschaft derart gezeichnet werden, dass eine rechtwirksame Vertretung sichergestellt ist. Die Gesellschafter haften gegenüber PROFIT PLANET jeweils persönlich für das Verhalten der Gesellschaft.

-

2.3. Absatz 2.2 gilt inhaltsgemäß auch für Personengesellschaften.

-

2.4. Der VP ist verpflichtet, Änderungen seiner unternehmens- oder personenbezogenen Daten unverzüglich an PROFIT PLANET zu melden.

-

2.5. Für die Verwendung des Online-Systems gelten die allgemeinen Geschäftsbedingungen.

-

2.6. PROFIT PLANET kann Vertriebspartner / Businesspartner / Affiliate ohne Angabe von Gründen ablehnen.

- -

3. Leistungen / Pflichten des VP

-

3.1. Der VP handelt unabhängig als selbständiger Unternehmer, er ist weder Arbeitnehmer noch Handelsvertreter oder Makler von PROFIT PLANET. Er ist bei der Vermittlung von Produktverträgen eigenverantwortlich tätig, handelt abgesehen von den Pflichten aus diesem Vertrag frei von Weisungen und ist nicht mit der ständigen Vermittlung von Geschäften betraut. Es bestehen seitens PROFIT PLANET keine Umsatzvorgaben und keine Abnahme- oder Vertriebspflichten. Der VP trägt alle mit der Kundenakquisition verbundenen Kosten und Risiken selbst und verwendet eigene Betriebsmittel. Er stellt im geschäftlichen Verkehr klar, dass er nicht im Auftrag oder im Namen von PROFIT PLANET handelt, sondern als unabhängiger Vertriebspartner / Businesspartner / Affiliate.

-

3.2. Der VP betreibt sein Unternehmen mit der Sorgfalt eines ordentlichen Kaufmanns und ist für die Einhaltung aller gesetzlichen sowie der steuer- und sozialrechtlichen Vorgaben selbst verantwortlich.

-

3.3. Der VP hält sich insbesondere auch an das Wettbewerbsrecht und nimmt Abstand von ungenehmigter, irreführender oder sonst unlauterer Werbung. Der VP verpflichtet sich auch, falsche oder irreführende Aussagen über Dienstleistungen, Produkte und Vertriebssystem der PROFIT PLANET zu unterlassen.

-

3.4. Grundsätzlich steht es dem VP frei, Produkte / Dienstleistungen auch für andere Unternehmen zu vertreiben. Falls es allerdings in der Zusammenarbeit mit einem anderen Dienstleister oder Produktgeber in räumlicher oder zeitlicher Nähe zu Überschneidungen im Vertrieb, insbesondere bei Terminisierungen, Promotion-Auftritten (POS) oder anderen dienstleistungs- oder produktspezifischen Werbetätigkeiten kommen, so wäre dies nur nach ausdrücklicher Zustimmung durch PROFIT PLANET zulässig.

-

3.5. Beim Abschluss von Kundenverträgen ist der VP verpflichtet, die von PROFIT PLANET zur Verfügung gestellten Originalunterlagen (zB Antragsformulare, AGB, sonstige Unterlagen der Dienstleister oder Produktgeber) in der jeweils aktuellen Version zu verwenden und dem Kunden bei Vertragsabschluss vorzulegen bzw. auszuhändigen. Die Originalunterlagen sind durch den VP nicht zu verändern, missbräuchliche Verwendung ist zu verhindern.

-

3.6. Kundenverträge in Papierform sind vom VP unverzüglich, spätestens jedoch binnen 1 Woche nach Aufforderung durch PROFIT PLANET oder den Produktgeber an PROFIT PLANET auszuhändigen.

-

3.7. Sämtliche Präsentations-, Werbe- und Schulungsmaterialien sowie label von PROFIT PLANET sind urheberrechtlich geschützt und dürfen ohne ausdrückliches Einverständnis von PROFIT PLANET weder ganz noch teilweise vervielfältigt, verbreitet oder öffentlich zugänglich gemacht werden. Die Herstellung, Verwendung und Verbreitung eigener Werbemittel, Schulungsmaterialien oder Produktbroschüren ist nur nach schriftlicher Genehmigung und Freigabe durch PROFIT PLANET gestattet.

-

3.8. Der VP ist während der Dauer dieser Vereinbarung und für die Dauer von 36 Monaten nach Beendigung dieses Vertrags aus welchem Grund immer, nicht berechtigt, unmittelbar selbst bzw. mittelbar über Dritte Kunden von PROFIT PLANET und ihrer Produktpartner, einschließlich der vom VP vermittelten Endkunden, durch direkte Ansprache abzuwerben. Als Abwerben gilt jede Form des direkten Herantretens an den Kunden mit der Absicht, ihn zum Wechsel zu einem anderen Energieversorgungs-, Dienstleistungs-, Handels-, und/oder Coachingunternehmen zu bewegen (beispielsweise etwa durch Anrufe beim Kunden, Direktmailing mit Absicht der Abwerbung, Haustürgeschäfte etc.).

-

4. Geheimhaltung

-

4.1. Der VP verpflichtet sich, Geschäfts- und Betriebsgeheimnisse und sonstige vertrauliche Informationen von PROFIT PLANET und dessen Struktur, Geschäftspartner, Vertriebspartner / Businesspartner / Affiliate, Produktgeber, Provisionen und Endkunden unter äußerster Geheimhaltung zu behandeln und zu verwahren und diese Daten nur nach erfolgter schriftlicher Zustimmung durch den PROFIT PLANET an Dritte weiterzugeben.

-

4.2. Diese Verpflichtung gilt auch für Mitarbeiter und Unter-Vertriebspartner / Businesspartner / Affiliate des VP. Der VP hat für das Verhalten allfälliger Erfüllungsgehilfen und/oder Subpartner einzustehen.

-

4.3. Zu den Geschäftsgeheimnissen gehören insbesondere auch Informationen zu internen Betriebsabläufen, Provisionen und Provisionsstrukturen, Produkt- und Preiskalkulationen, Vertriebspartner / Businesspartner / Affiliate-strukturen und -aktivitäten.

-

4.4. Dem VP ist es nicht gestattet, auf Presseanfragen zu PROFIT PLANET, dessen Provisionspläne, Produkte oder andere Leistungen zu antworten. Presseanfragen sind immer an PROFIT PLANET weiterzuleiten.

-

5. Datenschutz

-

5.1. Die Vertragspartner sind verpflichtet, die gesetzlichen Datenschutzbestimmungen vollumfänglich einzuhalten. Für Verstöße gegen datenschutzrechtliche Schutzbestimmungen haftet ausschließlich der jeweils die Bestimmung verletzende Vertragspartner, dieser wird den schuldlos handelnden Vertragspartner von allen entsprechenden Ansprüchen freistellen und schad- und klaglos halten.

-

5.2. Im Regelfall ist der VP ist hinsichtlich der Daten der von ihm vermittelten Endkunden und Akquisitionskontakte Subauftragsverarbeiter im Sinne der Datenschutzgesetze (DSG, DSGVO); PROFIT PLANET ist Auftragsverarbeiter im Sinne der DSGVO. Soweit durch die gesetzlichen Bestimmungen vorgesehen, werden zu dieser Vereinbarung entsprechende datenschutzrechtliche Zusatzverträge abgeschlossen.

-

5.3. PROFIT PLANET ist bezüglich der Daten des VP auf Datenschutz verpflichtet. Die Datenschutzerklärung ist Online jederzeit abrufbar.

-

6. VP-Schutz

-

6.1. Ein neu geworbener VP wird in die Struktur desjenigen VP zugewiesen, der ihn geworben hat (VP-Schutz). Wenn mehrere VP denselben VP neu melden, wird seitens PROFIT PLANET nur die zuerst erfolgte Meldung berücksichtigt, wobei das Eingangsdatum des Registrierungsantrags bei PROFIT PLANET für die Zuteilung maßgeblich ist.

-

6.2. Der meldende VP ist verantwortlich dafür, die Daten des geworbenen VP vollständig und ordentlich zu übermitteln. PROFIT PLANET ist berechtigt, die Daten eines geworbenen VP aus ihrem System zu löschen, wenn von diesem innerhalb einer angemessenen Frist keine Umsätze oder Rückmeldungen kommen.

-

6.3. Ein Wechsel von der Struktur eines VP in die eines anderen ist grundsätzlich ausgeschlossen und nur ausnahmsweise möglich, wenn der wechselwillige VP nachweist, dass der in der Struktur über ihm stehende VP versucht hat, ihn zu einem gesetzes- oder vertragswidrigen Verhalten zu veranlassen oder sonst schwerwiegende Vorfälle die weitere Zusammenarbeit in der Struktur dieses VP untragbar machen. Über einen entsprechenden schriftlichen Antrag entscheidet PROFIT PLANET nach freiem Ermessen.

-

6.4. Ein VP, der innerhalb der letzten 12 Monate bereits einen VP-Vertrag mit PROFIT PLANET hatte, kann nicht geworben werden.

-

6.5. Eine Umgehung des VP-Schutzes etwa durch Verwendung der Namen von Strohnamen, -personen oder -firmen ist untersagt.

-

6.6. PROFIT PLANET räumt ihren VP ausdrücklich keinen Gebietsschutz ein. Alle VP können europaweit ohne Einschränkungen tätig sein.

-

7. Provision

-

7.1. Für jedes vom VP erfolgreich vermittelte Vertragsverhältnis zwischen Produktgeber und Endkunden erwirbt der VP Anspruch auf Provision als Bearbeitungs- und Aufwandspauschale

-

7.2. Die Höhe der Provision richtet sich nach der jeweils aktuell gültigen Provisionsübersicht laut Marketingkonzept. Die jeweils gültige Fassung dieser Provisionsübersicht ist jederzeit auf der Website von PROFIT PLANET (www.profit-planet.com) im internen Bereich abrufbar, einsehbar, downloadbar und kann dort auch auf Anfrage zur Verfügung gestellt werden. Änderungen der Provisionsübersicht werden dem VP rechtzeitig bekannt gegeben. Es gelten jeweils die zum Zeitpunkt der Vermittlung gültigen Provisionssätze.

-

7.3. Als erfolgreiche Vermittlung im Sinne dieses Vertrages gilt, wenn das Vertragsverhältnis zwischen Endkunden und Produktpartner tatsächlich zustande gekommen ist. Insbesondere entsteht kein Provisionsanspruch, wenn

- -

7.4. Anspruch auf Auszahlung der Provision entsteht gegenüber PROFIT PLANET grundsätzlich erst dann, wenn die Zahlungen seitens des Geschäftspartners / Produktgebers bei PROFIT PLANET eingelangt sind und alle sonstigen Auszahlungsvoraussetzungen vorliegen. Der VP nimmt zur Kenntnis, dass die exakten Zahlungsmodalitäten bei den verschiedenen Dienstleistern oder Produktgebern voneinander abweichen können und PROFIT PLANET diese Unterschiede bei der Auszahlung berücksichtigt. Die unterschiedlichen Zeitspannen divergieren je nach Partnerunternehmen derzeit durchschnittlich zwischen 30 bis 100 Tage. Die genauen Anforderungen und Konditionen ergeben sich aus dem jeweiligen Produktpartnerinformationsblatt und dem Marketingkonzept.

-

7.5. Die Auszahlung durch PROFIT PLANET erfolgt einmal monatlich, ungefähr um den 20. des auf den Zahlungseingang bei PROFIT PLANET folgenden Monats. Die Auszahlung erfolgt bargeldlos per Überweisung auf das vom VP genannte Konto. PROFIT PLANET kann Zahlungen bis zu einer Höhe von EUR 100,00 von der Auszahlung ausschließen (Mindestauszahlungshöhe); die nicht ausbezahlten Provisionsansprüche werden auf dem Provisionskonto des VP rechnerisch fortgeführt und im Folgemonat nach Erreichen der Mindestauszahlungshöhe ausbezahlt. Beträge unterhalb der Mindestauszahlungshöhe werden einmal jährlich zur Auszahlung gebracht.

-

7.6. Der Provisionsanspruch entfällt rückwirkend, wenn PROFIT PLANET, Provisionen an einen Produktgeber zurückzahlen muss, etwa weil ein Kunde den Vertrag widerruft oder andere Ausschlusskriterien seitens des Produktgebers vorliegen (Stornohaftung etc.). PROFIT PLANET ist berechtigt, Forderungen, die dem PROFIT PLANET gegen den VP zustehen, mit dessen Provisionsansprüchen ganz oder teilweise aufzurechnen.

-

7.7. Mit dieser Provision sind sämtliche Tätigkeiten des VP einschließlich aller ihm in Zusammenhang mit dieser Vereinbarung entstandenen Kosten, Auslagen und Aufwendungen, wie beispielsweise Fahrt- und Reisekosten, Bürokosten, Porto und Telefongebühren, abgegolten. Dasselbe gilt für Leistungen des VP in Hinblick auf Pflege und Herstellung eines VP-Bestandes und/oder Kundenstocks, sodass im Fall der Beendigung des Vertrags unbeachtet des Grundes der Auflösung keinesfalls Ansprüche auf Abfindungen oder Ausgleiche jedweder Art gegen PROFIT PLANET bestehen.

-

7.8. Fehlerhafte Provisionszahlungen oder sonstige Zahlungen sind vom VP binnen 60 Tagen schriftlich einzumahnen. Danach gelten die Zahlungen als genehmigt.

-

7.9. Wenn vom VP keine UID-Nummer bekannt gegeben wird, erfolgen alle Auszahlungen netto.

-

8. Vertragsstrafe, Schadenersatz

-

8.1. Bei einem ersten Verstoß gegen die in diesem Vertrag geregelten Pflichten durch den VP erfolgt eine schriftliche Abmahnung durch PROFIT PLANET. Die Pflichtverletzung ist unmittelbar zu beenden bzw. gegebenenfalls zu beheben.

-

8.2. Kommt es erneut zu einem Verstoß gegen diesen Vertrag oder wird der zuerst gemahnte Zustand nicht beseitigt, so verpflichtet sich der VP zur Zahlung einer verschuldensunabhängigen Vertragsstrafe für jeden jeweiligen Verstoß in Höhe von EUR 5.000,00.

-

8.3. Bei Verstößen gegen die Geheimhaltungs- und Datenschutzpflichten, sowie bei besonders schwerwiegenden Verstößen, insbesondere gegen Punkt 10.2 dieses Vertrags, ist PROFIT PLANET auch ohne vorhergehende Abmahnung zur Geltendmachung der jeweiligen Vertragsstrafe berechtigt.

-

8.4. Für jede Zuwiderhandlung gegen Punkt 3.8 verpflichtet sich der VP zur Zahlung einer verschuldens- und schadensunabhängigen Konventionalstrafe an den PROFIT PLANET von EUR 5.000,00 pro Verstoß (z.B. pro an ein anderes Unternehmen oder sonstigen Dritten vermittelten Vertrags oder pro abgeworbenen Kunden). Die Geltendmachung darüber hinausgehender sonstiger Schadenersatzansprüche, der Vertragsstrafe nach 8.2 oder etwa von Erfüllungsansprüchen bleibt dadurch unberührt.

-

8.5. Für jeden Verstoß gegen die in Punkt 4. dieses Vertrags (Geheimhaltungsverpflichtung) normierten Pflichten, verpflichtet sich der VP zur Zahlung einer verschuldensunabhängigen Vertragsstrafe in Höhe von EUR 7.000,00 pro Verstoß. Die Geltendmachung weitergehender zivilrechtlicher Ansprüche – insbesondere auf Unterlassung und Schadenersatz – bleibt davon unberührt.

-

8.6. Bei Handlungen, die dem Katalog außerordentlicher Kündigungsgründe gemäß Punkt 10.2 entsprechen, insbesondere bei treuwidrigem Verhalten im Sinne der dort beschriebenen Fallgruppen (z. B. unautorisierte Kaltakquise, rufschädigendes Verhalten, unbefugtes Auftreten im Namen von PROFIT PLANET), verpflichtet sich der VP zur Zahlung einer verschuldensunabhängigen Vertragsstrafe in Höhe von EUR 10.000,00 pro Verstoß. Auch in diesen Fällen bleiben darüber hinausgehende Ansprüche – insbesondere Schadenersatz oder außerordentliche Kündigung – ausdrücklich vorbehalten.

- -

9. Haftungsausschluss

-

9.1. Der VP führt seine Tätigkeiten nach bestem Wissen und Gewissen und in eigener Verantwortung, insbesondere auch in Bezug auf die korrekte Beratung der Endkunden aus. Eine Haftungsübernahme von PROFIT PLANET für Falschberatungen oder sonstiges Fehlverhalten des VP ist explizit ausgeschlossen.

-

9.2. Für Schäden haftet PROFIT PLANET nur, soweit diese auf Vorsatz oder grober Fahrlässigkeit oder auf grob schuldhafter Verletzung einer wesentlichen Vertragspflicht durch PROFIT PLANET, ihrer Mitarbeiter oder Erfüllungsgehilfen beruhen.

-

9.3. Eine Haftung von PROFIT PLANET für mittelbare Schäden, Folgeschäden, entgangenen Gewinn oder erwartete Ersparnis ist jedenfalls ausgeschlossen.

-

9.4. PROFIT PLANET übernimmt keine Haftung für Schäden, die durch Datenverlust auf den Servern auftreten, außer der Schaden beruht auf Vorsatz oder grober Fahrlässigkeit seitens PROFIT PLANET, ihrer Mitarbeiter oder Erfüllungsgehilfen.

-

9.5. Der Eintritt eines Schadens ist PROFIT PLANET unverzüglich mitzuteilen.

-

10. Vertragsdauer & Kündigung

-

10.1. Der Vertrag tritt mit Unterzeichnung oder im Fall einer Online-Registrierung, Online mit der Annahme des Vertrags durch PROFIT PLANET in Kraft und wird auf unbestimmte Zeit geschlossen. Er kann von beiden Parteien unter Einhaltung einer Frist von drei Monaten zum Ende jedes Kalendermonats schriftlich gekündigt werden.

-

10.2. Dessen ungeachtet kann der Vertrag seitens PROFIT PLANET aus wichtigem Grund ohne Einhaltung einer Kündigungsfrist gekündigt werden. Das Recht zur außerordentlichen Kündigung besteht ungeachtet weiterer Ansprüche. Folgende Gründe berechtigen insbesondere zur außerordentlichen Kündigung, die Aufzählung ist nicht abschließend:

- -

10.3. Abgesehen von 10.2 kann PROFIT PLANET den VP auch außerordentlich kündigen, wenn dieser in den letzten 6 Monaten keine neuen Umsätze erzielt hat oder bei den durch seine Vermittlung zustande gekommenen Verträgen zwischen Endkunden und Produktgebern über einen Zeitraum von 2 Monaten überdurchschnittliche Stornoquoten von mehr als 30% der vermittelten Verträge bestehen. PROFIT PLANET wird den VP vor einer außerordentlichen Kündigung nach diesem Passus einmalig schriftlich verwarnen, so dass der VP die Möglichkeit hat, innerhalb einer Frist von 30 Tagen die erforderlichen neuen Umsätze zu generieren oder seine Stornoquote zu verbessern.

-

10.4. Mit der Beendigung des Vertrags steht dem VP mit Ausnahme der Provision für zu diesem Zeitpunkt bereits erfolgreich vermittelte Verträge, kein Recht auf Provision mehr zu. Ein Anspruch auf Handelsvertreterausgleich ist ausdrücklich ausgeschlossen, da der VP nicht als Handelsvertreter für den PROFIT PLANET tätig wird. Etwaige Ansprüche auf Folgeprovisionen für vermittelte Produkte bestehen für 12 Monate nach Vertragsbeendigung fort; im Falle einer außerordentlichen Kündigung verfallen Ansprüche auf Folgeprovisionen unmittelbar mit der Vertragsbeendigung.

-

10.5. Nach Beendigung des Vertrags sind vom VP sämtliche überlassenen Unterlagen und Werbematerialien unaufgefordert binnen einem Monat an PROFIT PLANET zurückzugeben. Die Verwendung der Marke PROFIT PLANET und entsprechender Logos etwa auf Briefpapier oder in E-Mail-Signaturen ist nach Beendigung des Vertrags untersagt.

-

11. Übertragung

-

11.1. PROFIT PLANET ist jederzeit berechtigt, den Geschäftsbetrieb ganz oder teilweise auf Dritte zu übertragen.

-

11.2. Der VP ist nur mit ausdrücklicher Zustimmung von PROFIT PLANET berechtigt, seine Vertriebsstruktur an einen Dritten zu übertragen.

-

11.3. Wenn eine als VP registrierte Kapital- oder Personengesellschaft einen neuen Gesellschafter aufnimmt, hat dies auf diesen Vertrag keine Auswirkung, sofern der/die Gesellschafter, die den VP-Antrag ursprünglich unterzeichnet haben, als Gesellschafter in der Gesellschaft verbleiben. Wenn ein Gesellschafter aus einer registrierten Gesellschaft ausscheidet oder seine Anteile an einen Dritten überträgt, so ist dies in Bezug auf diesen Vertrag zulässig, sofern er dies PROFIT PLANET schriftlich unter Vorlage der entsprechenden rechtsgültigen Urkunden anzeigt, und der Vorgang keinen anderen Bestimmungen dieses Vertrags widerspricht; anderenfalls behält PROFIT PLANET sich das Recht vor, den VP-Vertrag der betreffenden Kapital- oder Personengesellschaft aufzukündigen.

-

11.4. Bei Auflösung einer als VP registrierten Gemeinschaft (Kapital- oder Personengesellschaft, aber auch z.B. Ehepartnerschaften oder ähnliches, die einen gemeinsamen VP-Vertrag haben), bleibt nur ein VP-Vertrag bestehen. Die Mitglieder der aufzulösenden Gemeinschaft haben sich intern zu einigen, durch welches Mitglied/Gesellschafter die Vertriebspartner / Businesspartner / Affiliateschaft fortgesetzt werden soll, und dies PROFIT PLANET schriftlich anzuzeigen. Falls sich die Mitglieder der Gemeinschaft in Bezug auf die Fortsetzung des VP-vertrags nicht gütlich einigen können, behält sich PROFIT PLANET das Recht einer außerordentlichen Kündigung vor, insbesondere, wenn es durch die Uneinigkeit über die Folgen zur Vernachlässigung der Pflichten des VP, einem Verstoß gegen diesen Vertrag oder geltendes Recht oder zu einer übermäßigen Belastung der Vertriebsstruktur des VP kommt.

-
-
- -

12. Schlussbestimmungen

-

12.1. Änderungen und Ergänzungen dieser Vereinbarung bedürfen der Schriftform. Dies gilt auch für das Abgehen der Schriftformerfordernis. Mündliche Nebenabreden bestehen nicht.

-

12.2. Sollte eine Bestimmung dieser Vereinbarung unwirksam sein oder werden, gilt anstelle der unwirksamen Bestimmung jene Bestimmung als vereinbart, die dem wirtschaftlichen Zweck der unwirksamen Bestimmung am nächsten kommt.

-

12.3. Vereinbarter Gerichtsstand für alle Streitigkeiten aus oder in Zusammenhang mit dieser Vereinbarung ist das für Graz sachlich zuständige Gericht. Diese Vereinbarung unterliegt österreichischem Recht, nicht jedoch den nichtzwingenden Verweisungsnormen des IPR. Weiter- bzw. Rückverweisungen sind ausgeschlossen. Darüber hinaus steht es PROFIT PLANET frei, den VP auch seinem allgemeinen Gerichtsstand zu klagen.

-
-
-

Für PROFIT PLANET (Auftraggeber)

- -
-
{{profitplanetSignature}}
-
{{currentDate}}
-
-

Datum, Unterschrift

-
-
-

Für den VP (Auftragnehmer)

-
- -
-
{{currentDate}}
-
-

Name, Datum, Unterschrift

-
-
-
- - - \ No newline at end of file +test \ No newline at end of file diff --git a/debug-pdf/template_2_html_full.html b/debug-pdf/template_2_html_full.html index 4df6877..30d74d2 100644 --- a/debug-pdf/template_2_html_full.html +++ b/debug-pdf/template_2_html_full.html @@ -1,229 +1 @@ - - - - - - SUB-AUFTRAGSVERARBEITUNGS-VERTRAG - - - -
- -
- -
- - -
-
-

SUB-AUFTRAGSVERARBEITUNGS-VERTRAG

-

i.S.d. Art. 28 Abs. 3 Datenschutz-Grundverordnung (DS-GVO)

-
- -

abgeschlossen zwischen

-

Profit Planet GmbH (kurz Auftraggeber)
- FN 649474i
- Liebenauer Hauptstraße 82c
- A-8041 Graz

-

und

-

Vertriebspartner (kurz Auftragnehmer)

- -
- - - - - - - - - - - - - - - - - - - - - -
Vertriebspartner{{fullName}}
Adresse{{address}}
PLZ / Ort{{zip_code}} {{city}}
Vollständige Adresse{{fullAddress}}
E-Mail / Telefon{{email}} / {{phone}}
-
- -
-

1. PRÄAMBEL

-
-

1.1. Diese Anlage konkretisiert die Verpflichtungen der Vertragsparteien zum Datenschutz, die sich aus der im bestehenden Vertriebspartner-Vertrag („Hauptvertrag“) und seinen Anlagen in ihren Einzelheiten beschriebenen Auftragsverarbeitung ergeben. Sie findet Anwendung auf alle Tätigkeiten, die mit dem Vertrag in Zusammenhang stehen, und bei denen Beschäftigte des Auftragnehmers oder durch den Auftragnehmer Beauftragte personenbezogene Daten („Daten“) des Auftraggebers verarbeiten.

-

1.2. Der Auftragnehmer ist sich bewusst, dass der Auftraggeber als Auftragsverarbeiter für Dritte („Verantwortliche“ im Sinne des Art. 4 Nr. 7 DS-GVO) tätig ist. Im Rahmen des vorbezeichneten Hauptvertrags nimmt der Auftraggeber die Dienste des Auftragnehmers als „weiteren Auftragsverarbeiter“ im Sinne von Art. 28 Nr. 4 DS-GVO in Anspruch, um bestimmte Verarbeitungstätigkeiten im Namen des Dritten („Verantwortlicher“ iSd Art. 4 Nr. 7 DS-GVO) auszuführen.

-

1.3. Der Auftragnehmer ist sich bewusst, dass der Auftraggeber gegenüber Dritten für die Einhaltung der Pflichten des Auftragnehmers haftet, falls der Auftragnehmer seinen Datenschutzpflichten nach diesem Vertrag und nach dem Gesetz nicht nachkommt.

-

1.4. Die Laufzeit dieser Anlage richtet sich nach der Laufzeit des Vertriebspartner-Vertrages, sofern sich aus den Bestimmungen dieser Anlage nicht darüber hinausgehende Verpflichtungen ergeben.

-
-
- -
-

2. DAUER, GEGENSTAND UND SPEZIFIZIERUNG DER AUFTRAGSVERARBEITUNG

-
-

2.1. Alle Daten dürfen nur so lange verarbeitet werden, als das durch die Vertragserfüllung oder den Zweck der Datenverarbeitung erforderlich ist.

-

2.2. Aus dem Vertrag ergeben sich Gegenstand und Dauer des Auftrags sowie Art und Zweck der Verarbeitung.

-

2.3. Im Einzelnen sind insbesondere die folgenden Daten Bestandteil der Datenverarbeitung:

-
-
-
- - -
- - - - - - - - - - - - - - - -
Art der DatenInteressenten- und Kundendaten; Kontaktdaten beim Auftraggeber; Kontaktdaten des jeweiligen Datenverantwortlichen
Art und Zweck der DatenverarbeitungDatenerfassung beim Interessenten (potenziellen Kunden); Datenübermittlung (auch elektronisch via E-Mail bzw. falls vorhanden über elektronische Schnittstellen der Verantwortlichen) an Auftraggeber bzw. Datenverantwortliche zur Legung eines Angebots bzw. zur Verwirklichung der Kundenbestellung; ggf. telefonischer Nachkontakt zur Qualitätskontrolle
Kategorien betroffener DatenName, Vorname, Adresse, Geburtsdatum, SV-Nr., E-Mail, Kontodaten Ausweiskopie; Daten zur Energieversorgung (z.B. Zählpunkt, Zählernummer, Kilowattprognose, Jahresverbrauch); Aufzeichnung etwaiger Qualitätskontrollen; Aufzeichnung etwaiger Interessensgebiete im Bereich Versicherung, Kreditwirtschaft, Telekommunikation, Energieeffizienz (PV, Speicher, LED, Infrarotheizung, Kalkschutz…).
- -
-

3. ANWENDUNGSBEREICH UND VERANTWORTLICHKEIT

-
-

3.1. Der Auftragnehmer verarbeitet personenbezogene Daten im Auftrag des Auftraggebers. Dies umfasst Tätigkeiten, die im Vertrag und in der Leistungsbeschreibung konkretisiert sind.

-

3.2. Der Auftraggeber ist gegenüber dem/den Dritten als („Verantwortliche Person“ iSd Art. 4 Nr. 7 DS-GVO) für die Einhaltung der gesetzlichen Bestimmungen der Datenschutzgesetze, insbesondere für die Rechtmäßigkeit der Datenweitergabe an den Auftragnehmer sowie für die Rechtmäßigkeit der Datenverarbeitung verantwortlich.

-

3.3. Der Auftragnehmer ist gegenüber dem Auftraggeber im Rahmen dieses Vertrages für die Einhaltung der gesetzlichen Bestimmungen der Datenschutzgesetze, insbesondere für die Rechtmäßigkeit der Datenweitergabe sowie der Datenverarbeitung verantwortlich.

-

3.4. Die Weisungen werden anfänglich durch diese Vertragsanlage festgelegt und können vom Auftraggeber danach in schriftlicher Form oder in einem elektronischen Format (Textform) an die vom Auftragnehmer bezeichnete Stelle durch einzelne Weisungen geändert, ergänzt oder ersetzt werden (Einzelweisung). Weisungen, die in der Vertragsanlage nicht vorgesehen sind, werden als Antrag auf Leistungsänderung behandelt. Mündliche Weisungen sind unverzüglich schriftlich oder in Textform zu bestätigen.

-
-
- -
-

4. PFLICHTEN DES AUFTRAGNEHMERS

-
-

4.1. Der Auftragnehmer darf Daten von betroffenen Personen nur im Rahmen des Auftrages und der Weisungen des Auftraggebers verarbeiten, außer es liegt ein Ausnahmefall iSd Art 28 Abs. 3 a) DS-GVO vor. Der Auftragnehmer informiert den Auftraggeber unverzüglich, wenn er der Auffassung ist, dass eine Weisung gegen anwendbare Gesetze verstößt. Der Auftragnehmer darf die Umsetzung der Weisung solange aussetzen, bis sie vom Auftraggeber bestätigt oder abgeändert wurde.

-

4.2. Der Auftragnehmer wird in seinem Verantwortungsbereich die innerbetriebliche Organisation so gestalten, dass sie den besonderen Anforderungen des Datenschutzes gerecht wird. Er wird technische und organisatorische Maßnahmen zum angemessenen Schutz der Daten des Auftraggebers treffen, die den Anforderungen der Datenschutz- Grundverordnung (Art. 32 DS-GVO) genügen. Der Auftragnehmer hat technische und organisatorische Maßnahmen zu treffen, die die Vertraulichkeit, Integrität, Verfügbarkeit und Belastbarkeit der Systeme und Dienste im Zusammenhang mit der Verarbeitung auf Dauer sicherstellen. Der Auftraggeber ist berechtigt, diese technischen und organisatorischen Maßnahmen dahingehend zu überprüfen, ob sie für die Risiken der zu verarbeitenden Daten ein angemessenes Schutzniveau bieten. Eine Änderung der getroffenen Sicherheitsmaßnahmen bleibt dem Auftragnehmer vorbehalten, wobei jedoch sichergestellt sein muss, dass das vertraglich vereinbarte Schutzniveau nicht unterschritten wird.

-

4.3. Der Auftragnehmer gewährleistet, seinen Pflichten nach Art. 32 Abs. 1 lit. d) DS-GVO nachzukommen, ein Verfahren zur regelmäßigen Überprüfung der Wirksamkeit der technischen und organisatorischen Maßnahmen zur Gewährleistung der Sicherheit der Verarbeitung einzusetzen.

-

4.4. Der Auftragnehmer unterstützt den Auftraggeber im Rahmen seiner Möglichkeiten bei der Erfüllung der Anfragen und Ansprüche betroffener Personen gem. Kapitel III der DS-GVO sowie bei der Einhaltung der in Art. 33 bis 36 DS-GVO genannten Pflichten.

-

4.5. Der Auftragnehmer gewährleistet, dass es den mit der Verarbeitung der Daten des Auftraggebers befassten Mitarbeiter und andere für den Auftragnehmer tätigen Personen untersagt ist, die Daten außerhalb der Weisung zu verarbeiten. Ferner gewährleistet der Auftragnehmer, dass sich die zur Verarbeitung der personenbezogenen Daten befugten Personen zur Vertraulichkeit verpflichtet haben oder einer angemessenen gesetzlichen Verschwiegenheitspflicht unterliegen. Die Vertraulichkeits-/ Verschwiegenheitspflicht besteht auch nach Beendigung des Auftrages fort.

-
-
- -
- -
-

4.6. Der Auftragnehmer unterrichtet den Auftraggeber unverzüglich, wenn ihm Verletzungen des Schutzes personenbezogener Daten des Auftraggebers bekannt werden. Der Auftragnehmer trifft die erforderlichen Maßnahmen zur Sicherung der Daten und zur Minderung möglicher nachteiliger Folgen der betroffenen Personen und spricht sich hierzu unverzüglich mit dem Auftraggeber ab.

-

4.7. Der Auftragnehmer nennt dem Auftraggeber den Ansprechpartner für im Rahmen des Vertrages anfallende Datenschutzfragen.

-

4.8. Der Auftragnehmer berichtigt oder löscht die vertragsgegenständlichen Daten, wenn der Auftraggeber dies anweist und dies vom Weisungsrahmen umfasst ist. Ist eine datenschutzkonforme Löschung oder eine entsprechende Einschränkung der Datenverarbeitung nicht möglich, übernimmt der Auftragnehmer die datenschutzkonforme Vernichtung von Datenträgern und sonstigen Materialien auf Grund einer Einzelbeauftragung durch den Auftraggeber oder gibt diese Datenträger an den Auftraggeber zurück, sofern nicht im Vertrag bereits vereinbart.

-

4.9. Daten, Datenträger sowie sämtliche sonstige Materialien sind nach Auftragsende auf Verlangen des Auftraggebers entweder herauszugeben oder zu löschen.

-

4.10. Im Falle einer Inanspruchnahme des Auftraggebers oder des Dritten durch eine betroffene Person hinsichtlich etwaiger Ansprüche nach Art. 82 DS-GVO, verpflichtet sich der Auftragnehmer den Auftraggeber bei der Abwehr des Anspruches im Rahmen seiner Möglichkeiten zu unterstützen.

-

4.11. Im Falle einer Inanspruchnahme des Auftraggebers durch den Dritten, verpflichtet sich der Auftragnehmer den Auftraggeber bei der Abwehr des Anspruches im Rahmen seiner Möglichkeiten zu unterstützen.

-
-
- -
-

5. PFLICHTEN DES AUFTRAGGEBERS

-
-

5.1. Der Auftraggeber hat den Auftragnehmer unverzüglich und vollständig zu informieren, wenn er in den Auftragsergebnissen Fehler oder Unregelmäßigkeiten bzgl. datenschutzrechtlicher Bestimmungen feststellt.

-

5.2. Im Falle einer Inanspruchnahme des Auftraggebers oder des Dritten durch eine betroffene Person hinsichtlich etwaiger Ansprüche nach Art. 82 DS-GVO, gilt §3 Abs. 10 entsprechend.

-

5.3. Der Auftraggeber nennt dem Auftragnehmer den Ansprechpartner für im Rahmen des Vertrages anfallende Datenschutzfragen.

-
-
- -
-

6. ANFRAGEN BETROFFENER PERSONEN

-
-

6.1. Wendet sich eine betroffene Person mit Forderungen zur Berichtigung, Löschung oder Auskunft an den Auftragnehmer, wird der Auftragnehmer die betroffene Person an den Auftraggeber verweisen und ggf. den Antrag der betroffenen Person unverzüglich an den Auftraggeber weiterleiten. Der Auftragnehmer unterstützt den Auftraggeber im Rahmen seiner Möglichkeiten bei der Erfüllung der jeweiligen Forderung.

-

6.2. Der Auftragnehmer haftet nicht, wenn das Ersuchen der betroffenen Person vom Auftraggeber nicht, nicht richtig oder nicht fristgerecht beantwortet wird.

-

6.3. Der Auftraggeber haftet nicht für Forderungen betroffener Personen, die dadurch entstehen, dass der Auftragnehmer das entsprechende Anliegen nicht zeitgerecht an den Auftraggeber übermittelt hat.

-
-
- -
-

7. NACHWEISMÖGLICHKEITEN

-
-

7.1. Der Auftragnehmer weist dem Auftraggeber die Einhaltung der in diesem Vertrag niedergelegten Pflichten mit geeigneten Mitteln nach.

-

7.2. Sollten im Einzelfall Inspektionen durch den Auftraggeber oder einen von diesem beauftragten Prüfer erforderlich sein, werden diese zu den üblichen Geschäftszeiten ohne Störung des Betriebsablaufs nach Anmeldung unter Berücksichtigung einer angemessenen Vorlaufzeit durchgeführt. Der Auftragnehmer darf diese von der Unterzeichnung einer Verschwiegenheitserklärung hinsichtlich der Daten anderer Kunden und der eingerichteten technischen und organisatorischen Maßnahmen abhängig machen. Sollte der durch den Auftraggeber beauftragte Prüfer in einem Wettbewerbsverhältnis zu dem Auftragnehmer stehen, hat der Auftragnehmer gegen diesen ein Einspruchsrecht

-
-
- - -
-

8. SUBUNTERNEHMER (WEITERE AUFTRAGSVERARBEITER)

-
-

8.1. Der Einsatz von Subunternehmern als weitere Auftragsverarbeiter ist nur zulässig, wenn der Auftraggeber vorher zugestimmt hat.

-

8.2. Ein zustimmungspflichtiges Subunternehmerverhältnis liegt vor, wenn der Auftragnehmer weitere Auftragnehmer mit der ganzen oder einer Teilleistung der im Vertrag vereinbarten Leistung beauftragt. Der Auftragnehmer wird mit diesen Dritten im erforderlichen Umfang Vereinbarungen treffen, um angemessene Datenschutz- und Informationssicherheitsmaßnahmen zu gewährleisten.

-

8.3. Erteilt der Auftragnehmer Aufträge an Subunternehmer, so obliegt es dem Auftragnehmer, seine datenschutzrechtlichen Pflichten aus diesem Vertrag dem Subunternehmer zu überbinden.

-
-
- -
-

9. INFORMATIONSPFLICHTEN, SCHRIFTFORMKLAUSEL, RECHTSWAHL

-
-

9.1. Sollten die Daten des Auftraggebers beim Auftragnehmer durch Pfändung oder Beschlagnahme, durch ein Insolvenz- oder Vergleichsverfahren oder durch sonstige Ereignisse oder Maßnahmen Dritter gefährdet werden, so hat der Auftragnehmer den Auftraggeber unverzüglich darüber zu informieren. Der Auftragnehmer wird alle in diesem Zusammenhang Verantwortlichen unverzüglich darüber informieren, dass die Hoheit und das Eigentum an den Daten ausschließlich beim Dritten als verantwortliche Person im Sinne der Datenschutz-Grundverordnung liegen.

-

9.2. Änderungen und Ergänzungen dieser Anlage und aller ihrer Bestandteile – einschließlich etwaiger Zusicherungen des Auftragnehmers – bedürfen einer schriftlichen Vereinbarung, die auch in einem elektronischen Format (Textform) erfolgen kann, und des ausdrücklichen Hinweises darauf, dass es sich um eine Änderung bzw. Ergänzung dieser Bedingungen handelt. Dies gilt auch für den Verzicht auf dieses Formerfordernis.

-

9.3. Bei etwaigen Widersprüchen gehen Regelungen dieser Anlage zum Datenschutz den Regelungen des Vertrages vor. Sollten einzelne Teile dieser Anlage unwirksam sein, so berührt dies die Wirksamkeit der Anlage im Übrigen nicht.

-

9.4. Es gilt das auf dem Hauptvertrag anwendbare Recht sowie Gerichtsstand.

-
-
- -
-
-

Für PROFIT PLANET (Auftraggeber)

- -
-
{{profitplanetSignature}}
-
{{currentDate}}
-
-

Datum, Unterschrift

-
-
-

Für den VP (Auftragnehmer)

-
- {{signatureImage}} -
{{fullName}}
-
{{currentDate}}
-
-

Name, Datum, Unterschrift

-
-
-
-
- - \ No newline at end of file +test \ No newline at end of file diff --git a/debug-pdf/template_2_html_raw.bin b/debug-pdf/template_2_html_raw.bin index 4df6877..30d74d2 100644 --- a/debug-pdf/template_2_html_raw.bin +++ b/debug-pdf/template_2_html_raw.bin @@ -1,229 +1 @@ - - - - - - SUB-AUFTRAGSVERARBEITUNGS-VERTRAG - - - -
- -
- -
- - -
-
-

SUB-AUFTRAGSVERARBEITUNGS-VERTRAG

-

i.S.d. Art. 28 Abs. 3 Datenschutz-Grundverordnung (DS-GVO)

-
- -

abgeschlossen zwischen

-

Profit Planet GmbH (kurz Auftraggeber)
- FN 649474i
- Liebenauer Hauptstraße 82c
- A-8041 Graz

-

und

-

Vertriebspartner (kurz Auftragnehmer)

- -
- - - - - - - - - - - - - - - - - - - - - -
Vertriebspartner{{fullName}}
Adresse{{address}}
PLZ / Ort{{zip_code}} {{city}}
Vollständige Adresse{{fullAddress}}
E-Mail / Telefon{{email}} / {{phone}}
-
- -
-

1. PRÄAMBEL

-
-

1.1. Diese Anlage konkretisiert die Verpflichtungen der Vertragsparteien zum Datenschutz, die sich aus der im bestehenden Vertriebspartner-Vertrag („Hauptvertrag“) und seinen Anlagen in ihren Einzelheiten beschriebenen Auftragsverarbeitung ergeben. Sie findet Anwendung auf alle Tätigkeiten, die mit dem Vertrag in Zusammenhang stehen, und bei denen Beschäftigte des Auftragnehmers oder durch den Auftragnehmer Beauftragte personenbezogene Daten („Daten“) des Auftraggebers verarbeiten.

-

1.2. Der Auftragnehmer ist sich bewusst, dass der Auftraggeber als Auftragsverarbeiter für Dritte („Verantwortliche“ im Sinne des Art. 4 Nr. 7 DS-GVO) tätig ist. Im Rahmen des vorbezeichneten Hauptvertrags nimmt der Auftraggeber die Dienste des Auftragnehmers als „weiteren Auftragsverarbeiter“ im Sinne von Art. 28 Nr. 4 DS-GVO in Anspruch, um bestimmte Verarbeitungstätigkeiten im Namen des Dritten („Verantwortlicher“ iSd Art. 4 Nr. 7 DS-GVO) auszuführen.

-

1.3. Der Auftragnehmer ist sich bewusst, dass der Auftraggeber gegenüber Dritten für die Einhaltung der Pflichten des Auftragnehmers haftet, falls der Auftragnehmer seinen Datenschutzpflichten nach diesem Vertrag und nach dem Gesetz nicht nachkommt.

-

1.4. Die Laufzeit dieser Anlage richtet sich nach der Laufzeit des Vertriebspartner-Vertrages, sofern sich aus den Bestimmungen dieser Anlage nicht darüber hinausgehende Verpflichtungen ergeben.

-
-
- -
-

2. DAUER, GEGENSTAND UND SPEZIFIZIERUNG DER AUFTRAGSVERARBEITUNG

-
-

2.1. Alle Daten dürfen nur so lange verarbeitet werden, als das durch die Vertragserfüllung oder den Zweck der Datenverarbeitung erforderlich ist.

-

2.2. Aus dem Vertrag ergeben sich Gegenstand und Dauer des Auftrags sowie Art und Zweck der Verarbeitung.

-

2.3. Im Einzelnen sind insbesondere die folgenden Daten Bestandteil der Datenverarbeitung:

-
-
-
- - -
- - - - - - - - - - - - - - - -
Art der DatenInteressenten- und Kundendaten; Kontaktdaten beim Auftraggeber; Kontaktdaten des jeweiligen Datenverantwortlichen
Art und Zweck der DatenverarbeitungDatenerfassung beim Interessenten (potenziellen Kunden); Datenübermittlung (auch elektronisch via E-Mail bzw. falls vorhanden über elektronische Schnittstellen der Verantwortlichen) an Auftraggeber bzw. Datenverantwortliche zur Legung eines Angebots bzw. zur Verwirklichung der Kundenbestellung; ggf. telefonischer Nachkontakt zur Qualitätskontrolle
Kategorien betroffener DatenName, Vorname, Adresse, Geburtsdatum, SV-Nr., E-Mail, Kontodaten Ausweiskopie; Daten zur Energieversorgung (z.B. Zählpunkt, Zählernummer, Kilowattprognose, Jahresverbrauch); Aufzeichnung etwaiger Qualitätskontrollen; Aufzeichnung etwaiger Interessensgebiete im Bereich Versicherung, Kreditwirtschaft, Telekommunikation, Energieeffizienz (PV, Speicher, LED, Infrarotheizung, Kalkschutz…).
- -
-

3. ANWENDUNGSBEREICH UND VERANTWORTLICHKEIT

-
-

3.1. Der Auftragnehmer verarbeitet personenbezogene Daten im Auftrag des Auftraggebers. Dies umfasst Tätigkeiten, die im Vertrag und in der Leistungsbeschreibung konkretisiert sind.

-

3.2. Der Auftraggeber ist gegenüber dem/den Dritten als („Verantwortliche Person“ iSd Art. 4 Nr. 7 DS-GVO) für die Einhaltung der gesetzlichen Bestimmungen der Datenschutzgesetze, insbesondere für die Rechtmäßigkeit der Datenweitergabe an den Auftragnehmer sowie für die Rechtmäßigkeit der Datenverarbeitung verantwortlich.

-

3.3. Der Auftragnehmer ist gegenüber dem Auftraggeber im Rahmen dieses Vertrages für die Einhaltung der gesetzlichen Bestimmungen der Datenschutzgesetze, insbesondere für die Rechtmäßigkeit der Datenweitergabe sowie der Datenverarbeitung verantwortlich.

-

3.4. Die Weisungen werden anfänglich durch diese Vertragsanlage festgelegt und können vom Auftraggeber danach in schriftlicher Form oder in einem elektronischen Format (Textform) an die vom Auftragnehmer bezeichnete Stelle durch einzelne Weisungen geändert, ergänzt oder ersetzt werden (Einzelweisung). Weisungen, die in der Vertragsanlage nicht vorgesehen sind, werden als Antrag auf Leistungsänderung behandelt. Mündliche Weisungen sind unverzüglich schriftlich oder in Textform zu bestätigen.

-
-
- -
-

4. PFLICHTEN DES AUFTRAGNEHMERS

-
-

4.1. Der Auftragnehmer darf Daten von betroffenen Personen nur im Rahmen des Auftrages und der Weisungen des Auftraggebers verarbeiten, außer es liegt ein Ausnahmefall iSd Art 28 Abs. 3 a) DS-GVO vor. Der Auftragnehmer informiert den Auftraggeber unverzüglich, wenn er der Auffassung ist, dass eine Weisung gegen anwendbare Gesetze verstößt. Der Auftragnehmer darf die Umsetzung der Weisung solange aussetzen, bis sie vom Auftraggeber bestätigt oder abgeändert wurde.

-

4.2. Der Auftragnehmer wird in seinem Verantwortungsbereich die innerbetriebliche Organisation so gestalten, dass sie den besonderen Anforderungen des Datenschutzes gerecht wird. Er wird technische und organisatorische Maßnahmen zum angemessenen Schutz der Daten des Auftraggebers treffen, die den Anforderungen der Datenschutz- Grundverordnung (Art. 32 DS-GVO) genügen. Der Auftragnehmer hat technische und organisatorische Maßnahmen zu treffen, die die Vertraulichkeit, Integrität, Verfügbarkeit und Belastbarkeit der Systeme und Dienste im Zusammenhang mit der Verarbeitung auf Dauer sicherstellen. Der Auftraggeber ist berechtigt, diese technischen und organisatorischen Maßnahmen dahingehend zu überprüfen, ob sie für die Risiken der zu verarbeitenden Daten ein angemessenes Schutzniveau bieten. Eine Änderung der getroffenen Sicherheitsmaßnahmen bleibt dem Auftragnehmer vorbehalten, wobei jedoch sichergestellt sein muss, dass das vertraglich vereinbarte Schutzniveau nicht unterschritten wird.

-

4.3. Der Auftragnehmer gewährleistet, seinen Pflichten nach Art. 32 Abs. 1 lit. d) DS-GVO nachzukommen, ein Verfahren zur regelmäßigen Überprüfung der Wirksamkeit der technischen und organisatorischen Maßnahmen zur Gewährleistung der Sicherheit der Verarbeitung einzusetzen.

-

4.4. Der Auftragnehmer unterstützt den Auftraggeber im Rahmen seiner Möglichkeiten bei der Erfüllung der Anfragen und Ansprüche betroffener Personen gem. Kapitel III der DS-GVO sowie bei der Einhaltung der in Art. 33 bis 36 DS-GVO genannten Pflichten.

-

4.5. Der Auftragnehmer gewährleistet, dass es den mit der Verarbeitung der Daten des Auftraggebers befassten Mitarbeiter und andere für den Auftragnehmer tätigen Personen untersagt ist, die Daten außerhalb der Weisung zu verarbeiten. Ferner gewährleistet der Auftragnehmer, dass sich die zur Verarbeitung der personenbezogenen Daten befugten Personen zur Vertraulichkeit verpflichtet haben oder einer angemessenen gesetzlichen Verschwiegenheitspflicht unterliegen. Die Vertraulichkeits-/ Verschwiegenheitspflicht besteht auch nach Beendigung des Auftrages fort.

-
-
- -
- -
-

4.6. Der Auftragnehmer unterrichtet den Auftraggeber unverzüglich, wenn ihm Verletzungen des Schutzes personenbezogener Daten des Auftraggebers bekannt werden. Der Auftragnehmer trifft die erforderlichen Maßnahmen zur Sicherung der Daten und zur Minderung möglicher nachteiliger Folgen der betroffenen Personen und spricht sich hierzu unverzüglich mit dem Auftraggeber ab.

-

4.7. Der Auftragnehmer nennt dem Auftraggeber den Ansprechpartner für im Rahmen des Vertrages anfallende Datenschutzfragen.

-

4.8. Der Auftragnehmer berichtigt oder löscht die vertragsgegenständlichen Daten, wenn der Auftraggeber dies anweist und dies vom Weisungsrahmen umfasst ist. Ist eine datenschutzkonforme Löschung oder eine entsprechende Einschränkung der Datenverarbeitung nicht möglich, übernimmt der Auftragnehmer die datenschutzkonforme Vernichtung von Datenträgern und sonstigen Materialien auf Grund einer Einzelbeauftragung durch den Auftraggeber oder gibt diese Datenträger an den Auftraggeber zurück, sofern nicht im Vertrag bereits vereinbart.

-

4.9. Daten, Datenträger sowie sämtliche sonstige Materialien sind nach Auftragsende auf Verlangen des Auftraggebers entweder herauszugeben oder zu löschen.

-

4.10. Im Falle einer Inanspruchnahme des Auftraggebers oder des Dritten durch eine betroffene Person hinsichtlich etwaiger Ansprüche nach Art. 82 DS-GVO, verpflichtet sich der Auftragnehmer den Auftraggeber bei der Abwehr des Anspruches im Rahmen seiner Möglichkeiten zu unterstützen.

-

4.11. Im Falle einer Inanspruchnahme des Auftraggebers durch den Dritten, verpflichtet sich der Auftragnehmer den Auftraggeber bei der Abwehr des Anspruches im Rahmen seiner Möglichkeiten zu unterstützen.

-
-
- -
-

5. PFLICHTEN DES AUFTRAGGEBERS

-
-

5.1. Der Auftraggeber hat den Auftragnehmer unverzüglich und vollständig zu informieren, wenn er in den Auftragsergebnissen Fehler oder Unregelmäßigkeiten bzgl. datenschutzrechtlicher Bestimmungen feststellt.

-

5.2. Im Falle einer Inanspruchnahme des Auftraggebers oder des Dritten durch eine betroffene Person hinsichtlich etwaiger Ansprüche nach Art. 82 DS-GVO, gilt §3 Abs. 10 entsprechend.

-

5.3. Der Auftraggeber nennt dem Auftragnehmer den Ansprechpartner für im Rahmen des Vertrages anfallende Datenschutzfragen.

-
-
- -
-

6. ANFRAGEN BETROFFENER PERSONEN

-
-

6.1. Wendet sich eine betroffene Person mit Forderungen zur Berichtigung, Löschung oder Auskunft an den Auftragnehmer, wird der Auftragnehmer die betroffene Person an den Auftraggeber verweisen und ggf. den Antrag der betroffenen Person unverzüglich an den Auftraggeber weiterleiten. Der Auftragnehmer unterstützt den Auftraggeber im Rahmen seiner Möglichkeiten bei der Erfüllung der jeweiligen Forderung.

-

6.2. Der Auftragnehmer haftet nicht, wenn das Ersuchen der betroffenen Person vom Auftraggeber nicht, nicht richtig oder nicht fristgerecht beantwortet wird.

-

6.3. Der Auftraggeber haftet nicht für Forderungen betroffener Personen, die dadurch entstehen, dass der Auftragnehmer das entsprechende Anliegen nicht zeitgerecht an den Auftraggeber übermittelt hat.

-
-
- -
-

7. NACHWEISMÖGLICHKEITEN

-
-

7.1. Der Auftragnehmer weist dem Auftraggeber die Einhaltung der in diesem Vertrag niedergelegten Pflichten mit geeigneten Mitteln nach.

-

7.2. Sollten im Einzelfall Inspektionen durch den Auftraggeber oder einen von diesem beauftragten Prüfer erforderlich sein, werden diese zu den üblichen Geschäftszeiten ohne Störung des Betriebsablaufs nach Anmeldung unter Berücksichtigung einer angemessenen Vorlaufzeit durchgeführt. Der Auftragnehmer darf diese von der Unterzeichnung einer Verschwiegenheitserklärung hinsichtlich der Daten anderer Kunden und der eingerichteten technischen und organisatorischen Maßnahmen abhängig machen. Sollte der durch den Auftraggeber beauftragte Prüfer in einem Wettbewerbsverhältnis zu dem Auftragnehmer stehen, hat der Auftragnehmer gegen diesen ein Einspruchsrecht

-
-
- - -
-

8. SUBUNTERNEHMER (WEITERE AUFTRAGSVERARBEITER)

-
-

8.1. Der Einsatz von Subunternehmern als weitere Auftragsverarbeiter ist nur zulässig, wenn der Auftraggeber vorher zugestimmt hat.

-

8.2. Ein zustimmungspflichtiges Subunternehmerverhältnis liegt vor, wenn der Auftragnehmer weitere Auftragnehmer mit der ganzen oder einer Teilleistung der im Vertrag vereinbarten Leistung beauftragt. Der Auftragnehmer wird mit diesen Dritten im erforderlichen Umfang Vereinbarungen treffen, um angemessene Datenschutz- und Informationssicherheitsmaßnahmen zu gewährleisten.

-

8.3. Erteilt der Auftragnehmer Aufträge an Subunternehmer, so obliegt es dem Auftragnehmer, seine datenschutzrechtlichen Pflichten aus diesem Vertrag dem Subunternehmer zu überbinden.

-
-
- -
-

9. INFORMATIONSPFLICHTEN, SCHRIFTFORMKLAUSEL, RECHTSWAHL

-
-

9.1. Sollten die Daten des Auftraggebers beim Auftragnehmer durch Pfändung oder Beschlagnahme, durch ein Insolvenz- oder Vergleichsverfahren oder durch sonstige Ereignisse oder Maßnahmen Dritter gefährdet werden, so hat der Auftragnehmer den Auftraggeber unverzüglich darüber zu informieren. Der Auftragnehmer wird alle in diesem Zusammenhang Verantwortlichen unverzüglich darüber informieren, dass die Hoheit und das Eigentum an den Daten ausschließlich beim Dritten als verantwortliche Person im Sinne der Datenschutz-Grundverordnung liegen.

-

9.2. Änderungen und Ergänzungen dieser Anlage und aller ihrer Bestandteile – einschließlich etwaiger Zusicherungen des Auftragnehmers – bedürfen einer schriftlichen Vereinbarung, die auch in einem elektronischen Format (Textform) erfolgen kann, und des ausdrücklichen Hinweises darauf, dass es sich um eine Änderung bzw. Ergänzung dieser Bedingungen handelt. Dies gilt auch für den Verzicht auf dieses Formerfordernis.

-

9.3. Bei etwaigen Widersprüchen gehen Regelungen dieser Anlage zum Datenschutz den Regelungen des Vertrages vor. Sollten einzelne Teile dieser Anlage unwirksam sein, so berührt dies die Wirksamkeit der Anlage im Übrigen nicht.

-

9.4. Es gilt das auf dem Hauptvertrag anwendbare Recht sowie Gerichtsstand.

-
-
- -
-
-

Für PROFIT PLANET (Auftraggeber)

- -
-
{{profitplanetSignature}}
-
{{currentDate}}
-
-

Datum, Unterschrift

-
-
-

Für den VP (Auftragnehmer)

-
- {{signatureImage}} -
{{fullName}}
-
{{currentDate}}
-
-

Name, Datum, Unterschrift

-
-
-
-
- - \ No newline at end of file +test \ No newline at end of file diff --git a/debug-pdf/template_2_sanitized_preview.html b/debug-pdf/template_2_sanitized_preview.html index 4a93851..30d74d2 100644 --- a/debug-pdf/template_2_sanitized_preview.html +++ b/debug-pdf/template_2_sanitized_preview.html @@ -1,229 +1 @@ - - - - - - SUB-AUFTRAGSVERARBEITUNGS-VERTRAG - - - -
- -
- -
- - -
-
-

SUB-AUFTRAGSVERARBEITUNGS-VERTRAG

-

i.S.d. Art. 28 Abs. 3 Datenschutz-Grundverordnung (DS-GVO)

-
- -

abgeschlossen zwischen

-

Profit Planet GmbH (kurz Auftraggeber)
- FN 649474i
- Liebenauer Hauptstraße 82c
- A-8041 Graz

-

und

-

Vertriebspartner (kurz Auftragnehmer)

- -
- - - - - - - - - - - - - - - - - - - - - -
Vertriebspartner
Adresse
PLZ / Ort
Vollständige Adresse
E-Mail / Telefon /
-
- -
-

1. PRÄAMBEL

-
-

1.1. Diese Anlage konkretisiert die Verpflichtungen der Vertragsparteien zum Datenschutz, die sich aus der im bestehenden Vertriebspartner-Vertrag („Hauptvertrag“) und seinen Anlagen in ihren Einzelheiten beschriebenen Auftragsverarbeitung ergeben. Sie findet Anwendung auf alle Tätigkeiten, die mit dem Vertrag in Zusammenhang stehen, und bei denen Beschäftigte des Auftragnehmers oder durch den Auftragnehmer Beauftragte personenbezogene Daten („Daten“) des Auftraggebers verarbeiten.

-

1.2. Der Auftragnehmer ist sich bewusst, dass der Auftraggeber als Auftragsverarbeiter für Dritte („Verantwortliche“ im Sinne des Art. 4 Nr. 7 DS-GVO) tätig ist. Im Rahmen des vorbezeichneten Hauptvertrags nimmt der Auftraggeber die Dienste des Auftragnehmers als „weiteren Auftragsverarbeiter“ im Sinne von Art. 28 Nr. 4 DS-GVO in Anspruch, um bestimmte Verarbeitungstätigkeiten im Namen des Dritten („Verantwortlicher“ iSd Art. 4 Nr. 7 DS-GVO) auszuführen.

-

1.3. Der Auftragnehmer ist sich bewusst, dass der Auftraggeber gegenüber Dritten für die Einhaltung der Pflichten des Auftragnehmers haftet, falls der Auftragnehmer seinen Datenschutzpflichten nach diesem Vertrag und nach dem Gesetz nicht nachkommt.

-

1.4. Die Laufzeit dieser Anlage richtet sich nach der Laufzeit des Vertriebspartner-Vertrages, sofern sich aus den Bestimmungen dieser Anlage nicht darüber hinausgehende Verpflichtungen ergeben.

-
-
- -
-

2. DAUER, GEGENSTAND UND SPEZIFIZIERUNG DER AUFTRAGSVERARBEITUNG

-
-

2.1. Alle Daten dürfen nur so lange verarbeitet werden, als das durch die Vertragserfüllung oder den Zweck der Datenverarbeitung erforderlich ist.

-

2.2. Aus dem Vertrag ergeben sich Gegenstand und Dauer des Auftrags sowie Art und Zweck der Verarbeitung.

-

2.3. Im Einzelnen sind insbesondere die folgenden Daten Bestandteil der Datenverarbeitung:

-
-
-
- - -
- - - - - - - - - - - - - - - -
Art der DatenInteressenten- und Kundendaten; Kontaktdaten beim Auftraggeber; Kontaktdaten des jeweiligen Datenverantwortlichen
Art und Zweck der DatenverarbeitungDatenerfassung beim Interessenten (potenziellen Kunden); Datenübermittlung (auch elektronisch via E-Mail bzw. falls vorhanden über elektronische Schnittstellen der Verantwortlichen) an Auftraggeber bzw. Datenverantwortliche zur Legung eines Angebots bzw. zur Verwirklichung der Kundenbestellung; ggf. telefonischer Nachkontakt zur Qualitätskontrolle
Kategorien betroffener DatenName, Vorname, Adresse, Geburtsdatum, SV-Nr., E-Mail, Kontodaten Ausweiskopie; Daten zur Energieversorgung (z.B. Zählpunkt, Zählernummer, Kilowattprognose, Jahresverbrauch); Aufzeichnung etwaiger Qualitätskontrollen; Aufzeichnung etwaiger Interessensgebiete im Bereich Versicherung, Kreditwirtschaft, Telekommunikation, Energieeffizienz (PV, Speicher, LED, Infrarotheizung, Kalkschutz…).
- -
-

3. ANWENDUNGSBEREICH UND VERANTWORTLICHKEIT

-
-

3.1. Der Auftragnehmer verarbeitet personenbezogene Daten im Auftrag des Auftraggebers. Dies umfasst Tätigkeiten, die im Vertrag und in der Leistungsbeschreibung konkretisiert sind.

-

3.2. Der Auftraggeber ist gegenüber dem/den Dritten als („Verantwortliche Person“ iSd Art. 4 Nr. 7 DS-GVO) für die Einhaltung der gesetzlichen Bestimmungen der Datenschutzgesetze, insbesondere für die Rechtmäßigkeit der Datenweitergabe an den Auftragnehmer sowie für die Rechtmäßigkeit der Datenverarbeitung verantwortlich.

-

3.3. Der Auftragnehmer ist gegenüber dem Auftraggeber im Rahmen dieses Vertrages für die Einhaltung der gesetzlichen Bestimmungen der Datenschutzgesetze, insbesondere für die Rechtmäßigkeit der Datenweitergabe sowie der Datenverarbeitung verantwortlich.

-

3.4. Die Weisungen werden anfänglich durch diese Vertragsanlage festgelegt und können vom Auftraggeber danach in schriftlicher Form oder in einem elektronischen Format (Textform) an die vom Auftragnehmer bezeichnete Stelle durch einzelne Weisungen geändert, ergänzt oder ersetzt werden (Einzelweisung). Weisungen, die in der Vertragsanlage nicht vorgesehen sind, werden als Antrag auf Leistungsänderung behandelt. Mündliche Weisungen sind unverzüglich schriftlich oder in Textform zu bestätigen.

-
-
- -
-

4. PFLICHTEN DES AUFTRAGNEHMERS

-
-

4.1. Der Auftragnehmer darf Daten von betroffenen Personen nur im Rahmen des Auftrages und der Weisungen des Auftraggebers verarbeiten, außer es liegt ein Ausnahmefall iSd Art 28 Abs. 3 a) DS-GVO vor. Der Auftragnehmer informiert den Auftraggeber unverzüglich, wenn er der Auffassung ist, dass eine Weisung gegen anwendbare Gesetze verstößt. Der Auftragnehmer darf die Umsetzung der Weisung solange aussetzen, bis sie vom Auftraggeber bestätigt oder abgeändert wurde.

-

4.2. Der Auftragnehmer wird in seinem Verantwortungsbereich die innerbetriebliche Organisation so gestalten, dass sie den besonderen Anforderungen des Datenschutzes gerecht wird. Er wird technische und organisatorische Maßnahmen zum angemessenen Schutz der Daten des Auftraggebers treffen, die den Anforderungen der Datenschutz- Grundverordnung (Art. 32 DS-GVO) genügen. Der Auftragnehmer hat technische und organisatorische Maßnahmen zu treffen, die die Vertraulichkeit, Integrität, Verfügbarkeit und Belastbarkeit der Systeme und Dienste im Zusammenhang mit der Verarbeitung auf Dauer sicherstellen. Der Auftraggeber ist berechtigt, diese technischen und organisatorischen Maßnahmen dahingehend zu überprüfen, ob sie für die Risiken der zu verarbeitenden Daten ein angemessenes Schutzniveau bieten. Eine Änderung der getroffenen Sicherheitsmaßnahmen bleibt dem Auftragnehmer vorbehalten, wobei jedoch sichergestellt sein muss, dass das vertraglich vereinbarte Schutzniveau nicht unterschritten wird.

-

4.3. Der Auftragnehmer gewährleistet, seinen Pflichten nach Art. 32 Abs. 1 lit. d) DS-GVO nachzukommen, ein Verfahren zur regelmäßigen Überprüfung der Wirksamkeit der technischen und organisatorischen Maßnahmen zur Gewährleistung der Sicherheit der Verarbeitung einzusetzen.

-

4.4. Der Auftragnehmer unterstützt den Auftraggeber im Rahmen seiner Möglichkeiten bei der Erfüllung der Anfragen und Ansprüche betroffener Personen gem. Kapitel III der DS-GVO sowie bei der Einhaltung der in Art. 33 bis 36 DS-GVO genannten Pflichten.

-

4.5. Der Auftragnehmer gewährleistet, dass es den mit der Verarbeitung der Daten des Auftraggebers befassten Mitarbeiter und andere für den Auftragnehmer tätigen Personen untersagt ist, die Daten außerhalb der Weisung zu verarbeiten. Ferner gewährleistet der Auftragnehmer, dass sich die zur Verarbeitung der personenbezogenen Daten befugten Personen zur Vertraulichkeit verpflichtet haben oder einer angemessenen gesetzlichen Verschwiegenheitspflicht unterliegen. Die Vertraulichkeits-/ Verschwiegenheitspflicht besteht auch nach Beendigung des Auftrages fort.

-
-
- -
- -
-

4.6. Der Auftragnehmer unterrichtet den Auftraggeber unverzüglich, wenn ihm Verletzungen des Schutzes personenbezogener Daten des Auftraggebers bekannt werden. Der Auftragnehmer trifft die erforderlichen Maßnahmen zur Sicherung der Daten und zur Minderung möglicher nachteiliger Folgen der betroffenen Personen und spricht sich hierzu unverzüglich mit dem Auftraggeber ab.

-

4.7. Der Auftragnehmer nennt dem Auftraggeber den Ansprechpartner für im Rahmen des Vertrages anfallende Datenschutzfragen.

-

4.8. Der Auftragnehmer berichtigt oder löscht die vertragsgegenständlichen Daten, wenn der Auftraggeber dies anweist und dies vom Weisungsrahmen umfasst ist. Ist eine datenschutzkonforme Löschung oder eine entsprechende Einschränkung der Datenverarbeitung nicht möglich, übernimmt der Auftragnehmer die datenschutzkonforme Vernichtung von Datenträgern und sonstigen Materialien auf Grund einer Einzelbeauftragung durch den Auftraggeber oder gibt diese Datenträger an den Auftraggeber zurück, sofern nicht im Vertrag bereits vereinbart.

-

4.9. Daten, Datenträger sowie sämtliche sonstige Materialien sind nach Auftragsende auf Verlangen des Auftraggebers entweder herauszugeben oder zu löschen.

-

4.10. Im Falle einer Inanspruchnahme des Auftraggebers oder des Dritten durch eine betroffene Person hinsichtlich etwaiger Ansprüche nach Art. 82 DS-GVO, verpflichtet sich der Auftragnehmer den Auftraggeber bei der Abwehr des Anspruches im Rahmen seiner Möglichkeiten zu unterstützen.

-

4.11. Im Falle einer Inanspruchnahme des Auftraggebers durch den Dritten, verpflichtet sich der Auftragnehmer den Auftraggeber bei der Abwehr des Anspruches im Rahmen seiner Möglichkeiten zu unterstützen.

-
-
- -
-

5. PFLICHTEN DES AUFTRAGGEBERS

-
-

5.1. Der Auftraggeber hat den Auftragnehmer unverzüglich und vollständig zu informieren, wenn er in den Auftragsergebnissen Fehler oder Unregelmäßigkeiten bzgl. datenschutzrechtlicher Bestimmungen feststellt.

-

5.2. Im Falle einer Inanspruchnahme des Auftraggebers oder des Dritten durch eine betroffene Person hinsichtlich etwaiger Ansprüche nach Art. 82 DS-GVO, gilt §3 Abs. 10 entsprechend.

-

5.3. Der Auftraggeber nennt dem Auftragnehmer den Ansprechpartner für im Rahmen des Vertrages anfallende Datenschutzfragen.

-
-
- -
-

6. ANFRAGEN BETROFFENER PERSONEN

-
-

6.1. Wendet sich eine betroffene Person mit Forderungen zur Berichtigung, Löschung oder Auskunft an den Auftragnehmer, wird der Auftragnehmer die betroffene Person an den Auftraggeber verweisen und ggf. den Antrag der betroffenen Person unverzüglich an den Auftraggeber weiterleiten. Der Auftragnehmer unterstützt den Auftraggeber im Rahmen seiner Möglichkeiten bei der Erfüllung der jeweiligen Forderung.

-

6.2. Der Auftragnehmer haftet nicht, wenn das Ersuchen der betroffenen Person vom Auftraggeber nicht, nicht richtig oder nicht fristgerecht beantwortet wird.

-

6.3. Der Auftraggeber haftet nicht für Forderungen betroffener Personen, die dadurch entstehen, dass der Auftragnehmer das entsprechende Anliegen nicht zeitgerecht an den Auftraggeber übermittelt hat.

-
-
- -
-

7. NACHWEISMÖGLICHKEITEN

-
-

7.1. Der Auftragnehmer weist dem Auftraggeber die Einhaltung der in diesem Vertrag niedergelegten Pflichten mit geeigneten Mitteln nach.

-

7.2. Sollten im Einzelfall Inspektionen durch den Auftraggeber oder einen von diesem beauftragten Prüfer erforderlich sein, werden diese zu den üblichen Geschäftszeiten ohne Störung des Betriebsablaufs nach Anmeldung unter Berücksichtigung einer angemessenen Vorlaufzeit durchgeführt. Der Auftragnehmer darf diese von der Unterzeichnung einer Verschwiegenheitserklärung hinsichtlich der Daten anderer Kunden und der eingerichteten technischen und organisatorischen Maßnahmen abhängig machen. Sollte der durch den Auftraggeber beauftragte Prüfer in einem Wettbewerbsverhältnis zu dem Auftragnehmer stehen, hat der Auftragnehmer gegen diesen ein Einspruchsrecht

-
-
- - -
-

8. SUBUNTERNEHMER (WEITERE AUFTRAGSVERARBEITER)

-
-

8.1. Der Einsatz von Subunternehmern als weitere Auftragsverarbeiter ist nur zulässig, wenn der Auftraggeber vorher zugestimmt hat.

-

8.2. Ein zustimmungspflichtiges Subunternehmerverhältnis liegt vor, wenn der Auftragnehmer weitere Auftragnehmer mit der ganzen oder einer Teilleistung der im Vertrag vereinbarten Leistung beauftragt. Der Auftragnehmer wird mit diesen Dritten im erforderlichen Umfang Vereinbarungen treffen, um angemessene Datenschutz- und Informationssicherheitsmaßnahmen zu gewährleisten.

-

8.3. Erteilt der Auftragnehmer Aufträge an Subunternehmer, so obliegt es dem Auftragnehmer, seine datenschutzrechtlichen Pflichten aus diesem Vertrag dem Subunternehmer zu überbinden.

-
-
- -
-

9. INFORMATIONSPFLICHTEN, SCHRIFTFORMKLAUSEL, RECHTSWAHL

-
-

9.1. Sollten die Daten des Auftraggebers beim Auftragnehmer durch Pfändung oder Beschlagnahme, durch ein Insolvenz- oder Vergleichsverfahren oder durch sonstige Ereignisse oder Maßnahmen Dritter gefährdet werden, so hat der Auftragnehmer den Auftraggeber unverzüglich darüber zu informieren. Der Auftragnehmer wird alle in diesem Zusammenhang Verantwortlichen unverzüglich darüber informieren, dass die Hoheit und das Eigentum an den Daten ausschließlich beim Dritten als verantwortliche Person im Sinne der Datenschutz-Grundverordnung liegen.

-

9.2. Änderungen und Ergänzungen dieser Anlage und aller ihrer Bestandteile – einschließlich etwaiger Zusicherungen des Auftragnehmers – bedürfen einer schriftlichen Vereinbarung, die auch in einem elektronischen Format (Textform) erfolgen kann, und des ausdrücklichen Hinweises darauf, dass es sich um eine Änderung bzw. Ergänzung dieser Bedingungen handelt. Dies gilt auch für den Verzicht auf dieses Formerfordernis.

-

9.3. Bei etwaigen Widersprüchen gehen Regelungen dieser Anlage zum Datenschutz den Regelungen des Vertrages vor. Sollten einzelne Teile dieser Anlage unwirksam sein, so berührt dies die Wirksamkeit der Anlage im Übrigen nicht.

-

9.4. Es gilt das auf dem Hauptvertrag anwendbare Recht sowie Gerichtsstand.

-
-
- -
-
-

Für PROFIT PLANET (Auftraggeber)

- -
-
{{profitplanetSignature}}
-
{{currentDate}}
-
-

Datum, Unterschrift

-
-
-

Für den VP (Auftragnehmer)

-
- -
-
{{currentDate}}
-
-

Name, Datum, Unterschrift

-
-
-
-
- - \ No newline at end of file +test \ No newline at end of file diff --git a/debug-pdf/template_3_html_full.html b/debug-pdf/template_3_html_full.html index ebcd475..30d74d2 100644 --- a/debug-pdf/template_3_html_full.html +++ b/debug-pdf/template_3_html_full.html @@ -1,209 +1 @@ - - - - - - VERTRIEBSPARTNER / BUSINESSPARTNER / AFFILIATE - VERTRAG - - - -
-
- - -
-

VERTRIEBSPARTNER / BUSINESSPARTNER / AFFILIATE - VERTRAG

-

idF 21.05.2025

-

abgeschlossen zwischen

-

Profit Planet GmbH (kurz PROFIT PLANET)
FN 649474i
Liebenauer Hauptstraße 82c
A-8041 Graz

-

und

-

Vertriebspartner / Businesspartner / Affiliate (kurz VP)

-
- - - - - - - - - - - - - - - - - - - - - -
Vertriebspartner{{fullName}}
Adresse{{address}}
PLZ / Ort{{zip_code}} {{city}}
Vollständige Adresse{{fullAddress}}
E-Mail / Telefon{{email}} / {{phone}}
-
-

1. Präambel und Vertragsgegenstand

-

1.1. Dieser Vertrag regelt die Zusammenarbeit zwischen PROFIT PLANET und VP als Grundlage einer fairen, langfristigen und erfolgreichen Kooperation. Die VP unterstützen einander im Sinne der Ziele der Zusammenarbeit und unterrichten sich gegenseitig über alle Vorgänge, die für ihre Leistungen im Rahmen der Kooperation von Interesse sind.

-

1.2. PROFIT PLANET bietet über ein Vertriebspartner / Businesspartner / Affiliate-Netzwerk den Vertrieb verschiedener Dienstleistungen und Produkte, vornehmlich aus den Bereichen Nachhaltigkeit, Energie, Handel sowie Consulting und Coaching an.

-

1.3. Der VP vermittelt die jeweiligen Dienstleistungen, Produkte oder qualifizierten Leads, die zu einem Abschluss führen, und erhält dafür eine Provision. Für die Tätigkeit als VP ist es nicht erforderlich, weitere VP zu werben.

-

1.4. Der VP ist berechtigt, weitere Vertriebspartner / Businesspartner / Affiliate für den Vertrieb der Dienstleistungen und Produkte zu gewinnen. Für die Vermittlung und Betreuung der von ihm akquirierten Vertriebspartner / Businesspartner / Affiliate erhält der werbende VP eine Provision, die sich aus den erwirtschafteten Umsätzen der geworbenen VP ermittelt. Die Höhe der Provision ergibt sich aus der Provisionsübersicht.

-

1.5. Die Vertragsabschlüsse kommen nur zwischen dem Endkunden und dem jeweiligen Dienstleister und/oder Produktgeber (Energieversorgungs-, Handels-, Dienstleistungs- oder Coachingunternehmen) zustande, ohne dass dadurch eine Vertragsbeziehung zwischen dem VP und dem Endkunden entsteht. Ein Anspruch auf Abschluss des jeweiligen Vertrags seitens des Endkunden gegenüber PROFIT PLANET oder dem VP entsteht nicht; der Vertragsabschluss ist von der Annahme des entsprechenden Antrags durch den Dienstleister bzw. Produktgeber abhängig. PROFIT PLANET hat darauf keinen Einfluss.

-

1.6. PROFIT PLANET behält sich vor, die angebotenen Produkte zurückzuziehen, zu ändern, neue hinzuzufügen oder sonstige Anpassungen des Produktangebots vorzunehmen. PROFIT PLANET wird den VP über Änderungen von Produkten oder Tarifen nach Maßgabe der Möglichkeiten rechtzeitig vor Wirksamkeit der Änderungen informieren.

-

1.7. Die genauen Produktbestandteile und Konditionen ergeben sich aus dem jeweiligen Produktpartnerinformationsblatt, welches auf der Online-Plattform hinterlegt wird.

-

1.8. PROFIT PLANET ist berechtigt, nach eigenem Ermessen andere Personen und Unternehmen mit der Vermittlung von Produkten und Dienstleistungen von PROFIT PLANET bzw. Produktpartnern von PROFIT PLANET zu beauftragen. Es bestehen grundsätzlich keine Alleinvermittlungsaufträge und keine Exklusivität.

- -

2. Vertriebspartner / Businesspartner / Affiliate werden

-

2.1. Kapitalgesellschaften, Personengesellschaften und volljährige natürliche Personen können Vertriebspartner / Businesspartner / Affiliate des PROFIT PLANET werden; pro Entität ist die Registrierung nur eines VP-Vertrags vorgesehen. Natürliche Personen, die bloß als Verbraucher handeln (wollen), können nicht Vertriebspartner / Businesspartner / Affiliate von PROFIT PLANET werden.

-

2.2. Kapitalgesellschaften müssen ihrem VP-Antrag die Firmenbuchnummer und gegebenenfalls die Umsatzsteuer-Identifikationsnummer (UID) beilegen. Der Antrag muss von allen Zeichnungsbereichten der Gesellschaft derart gezeichnet werden, dass eine rechtwirksame Vertretung sichergestellt ist. Die Gesellschafter haften gegenüber PROFIT PLANET jeweils persönlich für das Verhalten der Gesellschaft.

-

2.3. Absatz 2.2 gilt inhaltsgemäß auch für Personengesellschaften.

-

2.4. Der VP ist verpflichtet, Änderungen seiner unternehmens- oder personenbezogenen Daten unverzüglich an PROFIT PLANET zu melden.

-

2.5. Für die Verwendung des Online-Systems gelten die allgemeinen Geschäftsbedingungen.

-

2.6. PROFIT PLANET kann Vertriebspartner / Businesspartner / Affiliate ohne Angabe von Gründen ablehnen.

- -

3. Leistungen / Pflichten des VP

-

3.1. Der VP handelt unabhängig als selbständiger Unternehmer, er ist weder Arbeitnehmer noch Handelsvertreter oder Makler von PROFIT PLANET. Er ist bei der Vermittlung von Produktverträgen eigenverantwortlich tätig, handelt abgesehen von den Pflichten aus diesem Vertrag frei von Weisungen und ist nicht mit der ständigen Vermittlung von Geschäften betraut. Es bestehen seitens PROFIT PLANET keine Umsatzvorgaben und keine Abnahme- oder Vertriebspflichten. Der VP trägt alle mit der Kundenakquisition verbundenen Kosten und Risiken selbst und verwendet eigene Betriebsmittel. Er stellt im geschäftlichen Verkehr klar, dass er nicht im Auftrag oder im Namen von PROFIT PLANET handelt, sondern als unabhängiger Vertriebspartner / Businesspartner / Affiliate.

-

3.2. Der VP betreibt sein Unternehmen mit der Sorgfalt eines ordentlichen Kaufmanns und ist für die Einhaltung aller gesetzlichen sowie der steuer- und sozialrechtlichen Vorgaben selbst verantwortlich.

-

3.3. Der VP hält sich insbesondere auch an das Wettbewerbsrecht und nimmt Abstand von ungenehmigter, irreführender oder sonst unlauterer Werbung. Der VP verpflichtet sich auch, falsche oder irreführende Aussagen über Dienstleistungen, Produkte und Vertriebssystem der PROFIT PLANET zu unterlassen.

-

3.4. Grundsätzlich steht es dem VP frei, Produkte / Dienstleistungen auch für andere Unternehmen zu vertreiben. Falls es allerdings in der Zusammenarbeit mit einem anderen Dienstleister oder Produktgeber in räumlicher oder zeitlicher Nähe zu Überschneidungen im Vertrieb, insbesondere bei Terminisierungen, Promotion-Auftritten (POS) oder anderen dienstleistungs- oder produktspezifischen Werbetätigkeiten kommen, so wäre dies nur nach ausdrücklicher Zustimmung durch PROFIT PLANET zulässig.

-

3.5. Beim Abschluss von Kundenverträgen ist der VP verpflichtet, die von PROFIT PLANET zur Verfügung gestellten Originalunterlagen (zB Antragsformulare, AGB, sonstige Unterlagen der Dienstleister oder Produktgeber) in der jeweils aktuellen Version zu verwenden und dem Kunden bei Vertragsabschluss vorzulegen bzw. auszuhändigen. Die Originalunterlagen sind durch den VP nicht zu verändern, missbräuchliche Verwendung ist zu verhindern.

-

3.6. Kundenverträge in Papierform sind vom VP unverzüglich, spätestens jedoch binnen 1 Woche nach Aufforderung durch PROFIT PLANET oder den Produktgeber an PROFIT PLANET auszuhändigen.

-

3.7. Sämtliche Präsentations-, Werbe- und Schulungsmaterialien sowie label von PROFIT PLANET sind urheberrechtlich geschützt und dürfen ohne ausdrückliches Einverständnis von PROFIT PLANET weder ganz noch teilweise vervielfältigt, verbreitet oder öffentlich zugänglich gemacht werden. Die Herstellung, Verwendung und Verbreitung eigener Werbemittel, Schulungsmaterialien oder Produktbroschüren ist nur nach schriftlicher Genehmigung und Freigabe durch PROFIT PLANET gestattet.

-

3.8. Der VP ist während der Dauer dieser Vereinbarung und für die Dauer von 36 Monaten nach Beendigung dieses Vertrags aus welchem Grund immer, nicht berechtigt, unmittelbar selbst bzw. mittelbar über Dritte Kunden von PROFIT PLANET und ihrer Produktpartner, einschließlich der vom VP vermittelten Endkunden, durch direkte Ansprache abzuwerben. Als Abwerben gilt jede Form des direkten Herantretens an den Kunden mit der Absicht, ihn zum Wechsel zu einem anderen Energieversorgungs-, Dienstleistungs-, Handels-, und/oder Coachingunternehmen zu bewegen (beispielsweise etwa durch Anrufe beim Kunden, Direktmailing mit Absicht der Abwerbung, Haustürgeschäfte etc.).

-

4. Geheimhaltung

-

4.1. Der VP verpflichtet sich, Geschäfts- und Betriebsgeheimnisse und sonstige vertrauliche Informationen von PROFIT PLANET und dessen Struktur, Geschäftspartner, Vertriebspartner / Businesspartner / Affiliate, Produktgeber, Provisionen und Endkunden unter äußerster Geheimhaltung zu behandeln und zu verwahren und diese Daten nur nach erfolgter schriftlicher Zustimmung durch den PROFIT PLANET an Dritte weiterzugeben.

-

4.2. Diese Verpflichtung gilt auch für Mitarbeiter und Unter-Vertriebspartner / Businesspartner / Affiliate des VP. Der VP hat für das Verhalten allfälliger Erfüllungsgehilfen und/oder Subpartner einzustehen.

-

4.3. Zu den Geschäftsgeheimnissen gehören insbesondere auch Informationen zu internen Betriebsabläufen, Provisionen und Provisionsstrukturen, Produkt- und Preiskalkulationen, Vertriebspartner / Businesspartner / Affiliate-strukturen und -aktivitäten.

-

4.4. Dem VP ist es nicht gestattet, auf Presseanfragen zu PROFIT PLANET, dessen Provisionspläne, Produkte oder andere Leistungen zu antworten. Presseanfragen sind immer an PROFIT PLANET weiterzuleiten.

-

5. Datenschutz

-

5.1. Die Vertragspartner sind verpflichtet, die gesetzlichen Datenschutzbestimmungen vollumfänglich einzuhalten. Für Verstöße gegen datenschutzrechtliche Schutzbestimmungen haftet ausschließlich der jeweils die Bestimmung verletzende Vertragspartner, dieser wird den schuldlos handelnden Vertragspartner von allen entsprechenden Ansprüchen freistellen und schad- und klaglos halten.

-

5.2. Im Regelfall ist der VP ist hinsichtlich der Daten der von ihm vermittelten Endkunden und Akquisitionskontakte Subauftragsverarbeiter im Sinne der Datenschutzgesetze (DSG, DSGVO); PROFIT PLANET ist Auftragsverarbeiter im Sinne der DSGVO. Soweit durch die gesetzlichen Bestimmungen vorgesehen, werden zu dieser Vereinbarung entsprechende datenschutzrechtliche Zusatzverträge abgeschlossen.

-

5.3. PROFIT PLANET ist bezüglich der Daten des VP auf Datenschutz verpflichtet. Die Datenschutzerklärung ist Online jederzeit abrufbar.

-

6. VP-Schutz

-

6.1. Ein neu geworbener VP wird in die Struktur desjenigen VP zugewiesen, der ihn geworben hat (VP-Schutz). Wenn mehrere VP denselben VP neu melden, wird seitens PROFIT PLANET nur die zuerst erfolgte Meldung berücksichtigt, wobei das Eingangsdatum des Registrierungsantrags bei PROFIT PLANET für die Zuteilung maßgeblich ist.

-

6.2. Der meldende VP ist verantwortlich dafür, die Daten des geworbenen VP vollständig und ordentlich zu übermitteln. PROFIT PLANET ist berechtigt, die Daten eines geworbenen VP aus ihrem System zu löschen, wenn von diesem innerhalb einer angemessenen Frist keine Umsätze oder Rückmeldungen kommen.

-

6.3. Ein Wechsel von der Struktur eines VP in die eines anderen ist grundsätzlich ausgeschlossen und nur ausnahmsweise möglich, wenn der wechselwillige VP nachweist, dass der in der Struktur über ihm stehende VP versucht hat, ihn zu einem gesetzes- oder vertragswidrigen Verhalten zu veranlassen oder sonst schwerwiegende Vorfälle die weitere Zusammenarbeit in der Struktur dieses VP untragbar machen. Über einen entsprechenden schriftlichen Antrag entscheidet PROFIT PLANET nach freiem Ermessen.

-

6.4. Ein VP, der innerhalb der letzten 12 Monate bereits einen VP-Vertrag mit PROFIT PLANET hatte, kann nicht geworben werden.

-

6.5. Eine Umgehung des VP-Schutzes etwa durch Verwendung der Namen von Strohnamen, -personen oder -firmen ist untersagt.

-

6.6. PROFIT PLANET räumt ihren VP ausdrücklich keinen Gebietsschutz ein. Alle VP können europaweit ohne Einschränkungen tätig sein.

-

7. Provision

-

7.1. Für jedes vom VP erfolgreich vermittelte Vertragsverhältnis zwischen Produktgeber und Endkunden erwirbt der VP Anspruch auf Provision als Bearbeitungs- und Aufwandspauschale

-

7.2. Die Höhe der Provision richtet sich nach der jeweils aktuell gültigen Provisionsübersicht laut Marketingkonzept. Die jeweils gültige Fassung dieser Provisionsübersicht ist jederzeit auf der Website von PROFIT PLANET (www.profit-planet.com) im internen Bereich abrufbar, einsehbar, downloadbar und kann dort auch auf Anfrage zur Verfügung gestellt werden. Änderungen der Provisionsübersicht werden dem VP rechtzeitig bekannt gegeben. Es gelten jeweils die zum Zeitpunkt der Vermittlung gültigen Provisionssätze.

-

7.3. Als erfolgreiche Vermittlung im Sinne dieses Vertrages gilt, wenn das Vertragsverhältnis zwischen Endkunden und Produktpartner tatsächlich zustande gekommen ist. Insbesondere entsteht kein Provisionsanspruch, wenn

- -

7.4. Anspruch auf Auszahlung der Provision entsteht gegenüber PROFIT PLANET grundsätzlich erst dann, wenn die Zahlungen seitens des Geschäftspartners / Produktgebers bei PROFIT PLANET eingelangt sind und alle sonstigen Auszahlungsvoraussetzungen vorliegen. Der VP nimmt zur Kenntnis, dass die exakten Zahlungsmodalitäten bei den verschiedenen Dienstleistern oder Produktgebern voneinander abweichen können und PROFIT PLANET diese Unterschiede bei der Auszahlung berücksichtigt. Die unterschiedlichen Zeitspannen divergieren je nach Partnerunternehmen derzeit durchschnittlich zwischen 30 bis 100 Tage. Die genauen Anforderungen und Konditionen ergeben sich aus dem jeweiligen Produktpartnerinformationsblatt und dem Marketingkonzept.

-

7.5. Die Auszahlung durch PROFIT PLANET erfolgt einmal monatlich, ungefähr um den 20. des auf den Zahlungseingang bei PROFIT PLANET folgenden Monats. Die Auszahlung erfolgt bargeldlos per Überweisung auf das vom VP genannte Konto. PROFIT PLANET kann Zahlungen bis zu einer Höhe von EUR 100,00 von der Auszahlung ausschließen (Mindestauszahlungshöhe); die nicht ausbezahlten Provisionsansprüche werden auf dem Provisionskonto des VP rechnerisch fortgeführt und im Folgemonat nach Erreichen der Mindestauszahlungshöhe ausbezahlt. Beträge unterhalb der Mindestauszahlungshöhe werden einmal jährlich zur Auszahlung gebracht.

-

7.6. Der Provisionsanspruch entfällt rückwirkend, wenn PROFIT PLANET, Provisionen an einen Produktgeber zurückzahlen muss, etwa weil ein Kunde den Vertrag widerruft oder andere Ausschlusskriterien seitens des Produktgebers vorliegen (Stornohaftung etc.). PROFIT PLANET ist berechtigt, Forderungen, die dem PROFIT PLANET gegen den VP zustehen, mit dessen Provisionsansprüchen ganz oder teilweise aufzurechnen.

-

7.7. Mit dieser Provision sind sämtliche Tätigkeiten des VP einschließlich aller ihm in Zusammenhang mit dieser Vereinbarung entstandenen Kosten, Auslagen und Aufwendungen, wie beispielsweise Fahrt- und Reisekosten, Bürokosten, Porto und Telefongebühren, abgegolten. Dasselbe gilt für Leistungen des VP in Hinblick auf Pflege und Herstellung eines VP-Bestandes und/oder Kundenstocks, sodass im Fall der Beendigung des Vertrags unbeachtet des Grundes der Auflösung keinesfalls Ansprüche auf Abfindungen oder Ausgleiche jedweder Art gegen PROFIT PLANET bestehen.

-

7.8. Fehlerhafte Provisionszahlungen oder sonstige Zahlungen sind vom VP binnen 60 Tagen schriftlich einzumahnen. Danach gelten die Zahlungen als genehmigt.

-

7.9. Wenn vom VP keine UID-Nummer bekannt gegeben wird, erfolgen alle Auszahlungen netto.

-

8. Vertragsstrafe, Schadenersatz

-

8.1. Bei einem ersten Verstoß gegen die in diesem Vertrag geregelten Pflichten durch den VP erfolgt eine schriftliche Abmahnung durch PROFIT PLANET. Die Pflichtverletzung ist unmittelbar zu beenden bzw. gegebenenfalls zu beheben.

-

8.2. Kommt es erneut zu einem Verstoß gegen diesen Vertrag oder wird der zuerst gemahnte Zustand nicht beseitigt, so verpflichtet sich der VP zur Zahlung einer verschuldensunabhängigen Vertragsstrafe für jeden jeweiligen Verstoß in Höhe von EUR 5.000,00.

-

8.3. Bei Verstößen gegen die Geheimhaltungs- und Datenschutzpflichten, sowie bei besonders schwerwiegenden Verstößen, insbesondere gegen Punkt 10.2 dieses Vertrags, ist PROFIT PLANET auch ohne vorhergehende Abmahnung zur Geltendmachung der jeweiligen Vertragsstrafe berechtigt.

-

8.4. Für jede Zuwiderhandlung gegen Punkt 3.8 verpflichtet sich der VP zur Zahlung einer verschuldens- und schadensunabhängigen Konventionalstrafe an den PROFIT PLANET von EUR 5.000,00 pro Verstoß (z.B. pro an ein anderes Unternehmen oder sonstigen Dritten vermittelten Vertrags oder pro abgeworbenen Kunden). Die Geltendmachung darüber hinausgehender sonstiger Schadenersatzansprüche, der Vertragsstrafe nach 8.2 oder etwa von Erfüllungsansprüchen bleibt dadurch unberührt.

-

8.5. Für jeden Verstoß gegen die in Punkt 4. dieses Vertrags (Geheimhaltungsverpflichtung) normierten Pflichten, verpflichtet sich der VP zur Zahlung einer verschuldensunabhängigen Vertragsstrafe in Höhe von EUR 7.000,00 pro Verstoß. Die Geltendmachung weitergehender zivilrechtlicher Ansprüche – insbesondere auf Unterlassung und Schadenersatz – bleibt davon unberührt.

-

8.6. Bei Handlungen, die dem Katalog außerordentlicher Kündigungsgründe gemäß Punkt 10.2 entsprechen, insbesondere bei treuwidrigem Verhalten im Sinne der dort beschriebenen Fallgruppen (z. B. unautorisierte Kaltakquise, rufschädigendes Verhalten, unbefugtes Auftreten im Namen von PROFIT PLANET), verpflichtet sich der VP zur Zahlung einer verschuldensunabhängigen Vertragsstrafe in Höhe von EUR 10.000,00 pro Verstoß. Auch in diesen Fällen bleiben darüber hinausgehende Ansprüche – insbesondere Schadenersatz oder außerordentliche Kündigung – ausdrücklich vorbehalten.

- -

9. Haftungsausschluss

-

9.1. Der VP führt seine Tätigkeiten nach bestem Wissen und Gewissen und in eigener Verantwortung, insbesondere auch in Bezug auf die korrekte Beratung der Endkunden aus. Eine Haftungsübernahme von PROFIT PLANET für Falschberatungen oder sonstiges Fehlverhalten des VP ist explizit ausgeschlossen.

-

9.2. Für Schäden haftet PROFIT PLANET nur, soweit diese auf Vorsatz oder grober Fahrlässigkeit oder auf grob schuldhafter Verletzung einer wesentlichen Vertragspflicht durch PROFIT PLANET, ihrer Mitarbeiter oder Erfüllungsgehilfen beruhen.

-

9.3. Eine Haftung von PROFIT PLANET für mittelbare Schäden, Folgeschäden, entgangenen Gewinn oder erwartete Ersparnis ist jedenfalls ausgeschlossen.

-

9.4. PROFIT PLANET übernimmt keine Haftung für Schäden, die durch Datenverlust auf den Servern auftreten, außer der Schaden beruht auf Vorsatz oder grober Fahrlässigkeit seitens PROFIT PLANET, ihrer Mitarbeiter oder Erfüllungsgehilfen.

-

9.5. Der Eintritt eines Schadens ist PROFIT PLANET unverzüglich mitzuteilen.

-

10. Vertragsdauer & Kündigung

-

10.1. Der Vertrag tritt mit Unterzeichnung oder im Fall einer Online-Registrierung, Online mit der Annahme des Vertrags durch PROFIT PLANET in Kraft und wird auf unbestimmte Zeit geschlossen. Er kann von beiden Parteien unter Einhaltung einer Frist von drei Monaten zum Ende jedes Kalendermonats schriftlich gekündigt werden.

-

10.2. Dessen ungeachtet kann der Vertrag seitens PROFIT PLANET aus wichtigem Grund ohne Einhaltung einer Kündigungsfrist gekündigt werden. Das Recht zur außerordentlichen Kündigung besteht ungeachtet weiterer Ansprüche. Folgende Gründe berechtigen insbesondere zur außerordentlichen Kündigung, die Aufzählung ist nicht abschließend:

- -

10.3. Abgesehen von 10.2 kann PROFIT PLANET den VP auch außerordentlich kündigen, wenn dieser in den letzten 6 Monaten keine neuen Umsätze erzielt hat oder bei den durch seine Vermittlung zustande gekommenen Verträgen zwischen Endkunden und Produktgebern über einen Zeitraum von 2 Monaten überdurchschnittliche Stornoquoten von mehr als 30% der vermittelten Verträge bestehen. PROFIT PLANET wird den VP vor einer außerordentlichen Kündigung nach diesem Passus einmalig schriftlich verwarnen, so dass der VP die Möglichkeit hat, innerhalb einer Frist von 30 Tagen die erforderlichen neuen Umsätze zu generieren oder seine Stornoquote zu verbessern.

-

10.4. Mit der Beendigung des Vertrags steht dem VP mit Ausnahme der Provision für zu diesem Zeitpunkt bereits erfolgreich vermittelte Verträge, kein Recht auf Provision mehr zu. Ein Anspruch auf Handelsvertreterausgleich ist ausdrücklich ausgeschlossen, da der VP nicht als Handelsvertreter für den PROFIT PLANET tätig wird. Etwaige Ansprüche auf Folgeprovisionen für vermittelte Produkte bestehen für 12 Monate nach Vertragsbeendigung fort; im Falle einer außerordentlichen Kündigung verfallen Ansprüche auf Folgeprovisionen unmittelbar mit der Vertragsbeendigung.

-

10.5. Nach Beendigung des Vertrags sind vom VP sämtliche überlassenen Unterlagen und Werbematerialien unaufgefordert binnen einem Monat an PROFIT PLANET zurückzugeben. Die Verwendung der Marke PROFIT PLANET und entsprechender Logos etwa auf Briefpapier oder in E-Mail-Signaturen ist nach Beendigung des Vertrags untersagt.

-

11. Übertragung

-

11.1. PROFIT PLANET ist jederzeit berechtigt, den Geschäftsbetrieb ganz oder teilweise auf Dritte zu übertragen.

-

11.2. Der VP ist nur mit ausdrücklicher Zustimmung von PROFIT PLANET berechtigt, seine Vertriebsstruktur an einen Dritten zu übertragen.

-

11.3. Wenn eine als VP registrierte Kapital- oder Personengesellschaft einen neuen Gesellschafter aufnimmt, hat dies auf diesen Vertrag keine Auswirkung, sofern der/die Gesellschafter, die den VP-Antrag ursprünglich unterzeichnet haben, als Gesellschafter in der Gesellschaft verbleiben. Wenn ein Gesellschafter aus einer registrierten Gesellschaft ausscheidet oder seine Anteile an einen Dritten überträgt, so ist dies in Bezug auf diesen Vertrag zulässig, sofern er dies PROFIT PLANET schriftlich unter Vorlage der entsprechenden rechtsgültigen Urkunden anzeigt, und der Vorgang keinen anderen Bestimmungen dieses Vertrags widerspricht; anderenfalls behält PROFIT PLANET sich das Recht vor, den VP-Vertrag der betreffenden Kapital- oder Personengesellschaft aufzukündigen.

-

11.4. Bei Auflösung einer als VP registrierten Gemeinschaft (Kapital- oder Personengesellschaft, aber auch z.B. Ehepartnerschaften oder ähnliches, die einen gemeinsamen VP-Vertrag haben), bleibt nur ein VP-Vertrag bestehen. Die Mitglieder der aufzulösenden Gemeinschaft haben sich intern zu einigen, durch welches Mitglied/Gesellschafter die Vertriebspartner / Businesspartner / Affiliateschaft fortgesetzt werden soll, und dies PROFIT PLANET schriftlich anzuzeigen. Falls sich die Mitglieder der Gemeinschaft in Bezug auf die Fortsetzung des VP-vertrags nicht gütlich einigen können, behält sich PROFIT PLANET das Recht einer außerordentlichen Kündigung vor, insbesondere, wenn es durch die Uneinigkeit über die Folgen zur Vernachlässigung der Pflichten des VP, einem Verstoß gegen diesen Vertrag oder geltendes Recht oder zu einer übermäßigen Belastung der Vertriebsstruktur des VP kommt.

-
-
- -

12. Schlussbestimmungen

-

12.1. Änderungen und Ergänzungen dieser Vereinbarung bedürfen der Schriftform. Dies gilt auch für das Abgehen der Schriftformerfordernis. Mündliche Nebenabreden bestehen nicht.

-

12.2. Sollte eine Bestimmung dieser Vereinbarung unwirksam sein oder werden, gilt anstelle der unwirksamen Bestimmung jene Bestimmung als vereinbart, die dem wirtschaftlichen Zweck der unwirksamen Bestimmung am nächsten kommt.

-

12.3. Vereinbarter Gerichtsstand für alle Streitigkeiten aus oder in Zusammenhang mit dieser Vereinbarung ist das für Graz sachlich zuständige Gericht. Diese Vereinbarung unterliegt österreichischem Recht, nicht jedoch den nichtzwingenden Verweisungsnormen des IPR. Weiter- bzw. Rückverweisungen sind ausgeschlossen. Darüber hinaus steht es PROFIT PLANET frei, den VP auch seinem allgemeinen Gerichtsstand zu klagen.

-
-
-

Für PROFIT PLANET (Auftraggeber)

- -
-
{{profitplanetSignature}}
-
{{currentDate}}
-
-

Datum, Unterschrift

-
-
-

Für den VP (Auftragnehmer)

-
- {{signatureImage}} -
{{fullName}}
-
{{currentDate}}
-
-

Name, Datum, Unterschrift

-
-
-
- - - \ No newline at end of file +test \ No newline at end of file diff --git a/debug-pdf/template_3_html_raw.bin b/debug-pdf/template_3_html_raw.bin index ebcd475..30d74d2 100644 --- a/debug-pdf/template_3_html_raw.bin +++ b/debug-pdf/template_3_html_raw.bin @@ -1,209 +1 @@ - - - - - - VERTRIEBSPARTNER / BUSINESSPARTNER / AFFILIATE - VERTRAG - - - -
-
- - -
-

VERTRIEBSPARTNER / BUSINESSPARTNER / AFFILIATE - VERTRAG

-

idF 21.05.2025

-

abgeschlossen zwischen

-

Profit Planet GmbH (kurz PROFIT PLANET)
FN 649474i
Liebenauer Hauptstraße 82c
A-8041 Graz

-

und

-

Vertriebspartner / Businesspartner / Affiliate (kurz VP)

-
- - - - - - - - - - - - - - - - - - - - - -
Vertriebspartner{{fullName}}
Adresse{{address}}
PLZ / Ort{{zip_code}} {{city}}
Vollständige Adresse{{fullAddress}}
E-Mail / Telefon{{email}} / {{phone}}
-
-

1. Präambel und Vertragsgegenstand

-

1.1. Dieser Vertrag regelt die Zusammenarbeit zwischen PROFIT PLANET und VP als Grundlage einer fairen, langfristigen und erfolgreichen Kooperation. Die VP unterstützen einander im Sinne der Ziele der Zusammenarbeit und unterrichten sich gegenseitig über alle Vorgänge, die für ihre Leistungen im Rahmen der Kooperation von Interesse sind.

-

1.2. PROFIT PLANET bietet über ein Vertriebspartner / Businesspartner / Affiliate-Netzwerk den Vertrieb verschiedener Dienstleistungen und Produkte, vornehmlich aus den Bereichen Nachhaltigkeit, Energie, Handel sowie Consulting und Coaching an.

-

1.3. Der VP vermittelt die jeweiligen Dienstleistungen, Produkte oder qualifizierten Leads, die zu einem Abschluss führen, und erhält dafür eine Provision. Für die Tätigkeit als VP ist es nicht erforderlich, weitere VP zu werben.

-

1.4. Der VP ist berechtigt, weitere Vertriebspartner / Businesspartner / Affiliate für den Vertrieb der Dienstleistungen und Produkte zu gewinnen. Für die Vermittlung und Betreuung der von ihm akquirierten Vertriebspartner / Businesspartner / Affiliate erhält der werbende VP eine Provision, die sich aus den erwirtschafteten Umsätzen der geworbenen VP ermittelt. Die Höhe der Provision ergibt sich aus der Provisionsübersicht.

-

1.5. Die Vertragsabschlüsse kommen nur zwischen dem Endkunden und dem jeweiligen Dienstleister und/oder Produktgeber (Energieversorgungs-, Handels-, Dienstleistungs- oder Coachingunternehmen) zustande, ohne dass dadurch eine Vertragsbeziehung zwischen dem VP und dem Endkunden entsteht. Ein Anspruch auf Abschluss des jeweiligen Vertrags seitens des Endkunden gegenüber PROFIT PLANET oder dem VP entsteht nicht; der Vertragsabschluss ist von der Annahme des entsprechenden Antrags durch den Dienstleister bzw. Produktgeber abhängig. PROFIT PLANET hat darauf keinen Einfluss.

-

1.6. PROFIT PLANET behält sich vor, die angebotenen Produkte zurückzuziehen, zu ändern, neue hinzuzufügen oder sonstige Anpassungen des Produktangebots vorzunehmen. PROFIT PLANET wird den VP über Änderungen von Produkten oder Tarifen nach Maßgabe der Möglichkeiten rechtzeitig vor Wirksamkeit der Änderungen informieren.

-

1.7. Die genauen Produktbestandteile und Konditionen ergeben sich aus dem jeweiligen Produktpartnerinformationsblatt, welches auf der Online-Plattform hinterlegt wird.

-

1.8. PROFIT PLANET ist berechtigt, nach eigenem Ermessen andere Personen und Unternehmen mit der Vermittlung von Produkten und Dienstleistungen von PROFIT PLANET bzw. Produktpartnern von PROFIT PLANET zu beauftragen. Es bestehen grundsätzlich keine Alleinvermittlungsaufträge und keine Exklusivität.

- -

2. Vertriebspartner / Businesspartner / Affiliate werden

-

2.1. Kapitalgesellschaften, Personengesellschaften und volljährige natürliche Personen können Vertriebspartner / Businesspartner / Affiliate des PROFIT PLANET werden; pro Entität ist die Registrierung nur eines VP-Vertrags vorgesehen. Natürliche Personen, die bloß als Verbraucher handeln (wollen), können nicht Vertriebspartner / Businesspartner / Affiliate von PROFIT PLANET werden.

-

2.2. Kapitalgesellschaften müssen ihrem VP-Antrag die Firmenbuchnummer und gegebenenfalls die Umsatzsteuer-Identifikationsnummer (UID) beilegen. Der Antrag muss von allen Zeichnungsbereichten der Gesellschaft derart gezeichnet werden, dass eine rechtwirksame Vertretung sichergestellt ist. Die Gesellschafter haften gegenüber PROFIT PLANET jeweils persönlich für das Verhalten der Gesellschaft.

-

2.3. Absatz 2.2 gilt inhaltsgemäß auch für Personengesellschaften.

-

2.4. Der VP ist verpflichtet, Änderungen seiner unternehmens- oder personenbezogenen Daten unverzüglich an PROFIT PLANET zu melden.

-

2.5. Für die Verwendung des Online-Systems gelten die allgemeinen Geschäftsbedingungen.

-

2.6. PROFIT PLANET kann Vertriebspartner / Businesspartner / Affiliate ohne Angabe von Gründen ablehnen.

- -

3. Leistungen / Pflichten des VP

-

3.1. Der VP handelt unabhängig als selbständiger Unternehmer, er ist weder Arbeitnehmer noch Handelsvertreter oder Makler von PROFIT PLANET. Er ist bei der Vermittlung von Produktverträgen eigenverantwortlich tätig, handelt abgesehen von den Pflichten aus diesem Vertrag frei von Weisungen und ist nicht mit der ständigen Vermittlung von Geschäften betraut. Es bestehen seitens PROFIT PLANET keine Umsatzvorgaben und keine Abnahme- oder Vertriebspflichten. Der VP trägt alle mit der Kundenakquisition verbundenen Kosten und Risiken selbst und verwendet eigene Betriebsmittel. Er stellt im geschäftlichen Verkehr klar, dass er nicht im Auftrag oder im Namen von PROFIT PLANET handelt, sondern als unabhängiger Vertriebspartner / Businesspartner / Affiliate.

-

3.2. Der VP betreibt sein Unternehmen mit der Sorgfalt eines ordentlichen Kaufmanns und ist für die Einhaltung aller gesetzlichen sowie der steuer- und sozialrechtlichen Vorgaben selbst verantwortlich.

-

3.3. Der VP hält sich insbesondere auch an das Wettbewerbsrecht und nimmt Abstand von ungenehmigter, irreführender oder sonst unlauterer Werbung. Der VP verpflichtet sich auch, falsche oder irreführende Aussagen über Dienstleistungen, Produkte und Vertriebssystem der PROFIT PLANET zu unterlassen.

-

3.4. Grundsätzlich steht es dem VP frei, Produkte / Dienstleistungen auch für andere Unternehmen zu vertreiben. Falls es allerdings in der Zusammenarbeit mit einem anderen Dienstleister oder Produktgeber in räumlicher oder zeitlicher Nähe zu Überschneidungen im Vertrieb, insbesondere bei Terminisierungen, Promotion-Auftritten (POS) oder anderen dienstleistungs- oder produktspezifischen Werbetätigkeiten kommen, so wäre dies nur nach ausdrücklicher Zustimmung durch PROFIT PLANET zulässig.

-

3.5. Beim Abschluss von Kundenverträgen ist der VP verpflichtet, die von PROFIT PLANET zur Verfügung gestellten Originalunterlagen (zB Antragsformulare, AGB, sonstige Unterlagen der Dienstleister oder Produktgeber) in der jeweils aktuellen Version zu verwenden und dem Kunden bei Vertragsabschluss vorzulegen bzw. auszuhändigen. Die Originalunterlagen sind durch den VP nicht zu verändern, missbräuchliche Verwendung ist zu verhindern.

-

3.6. Kundenverträge in Papierform sind vom VP unverzüglich, spätestens jedoch binnen 1 Woche nach Aufforderung durch PROFIT PLANET oder den Produktgeber an PROFIT PLANET auszuhändigen.

-

3.7. Sämtliche Präsentations-, Werbe- und Schulungsmaterialien sowie label von PROFIT PLANET sind urheberrechtlich geschützt und dürfen ohne ausdrückliches Einverständnis von PROFIT PLANET weder ganz noch teilweise vervielfältigt, verbreitet oder öffentlich zugänglich gemacht werden. Die Herstellung, Verwendung und Verbreitung eigener Werbemittel, Schulungsmaterialien oder Produktbroschüren ist nur nach schriftlicher Genehmigung und Freigabe durch PROFIT PLANET gestattet.

-

3.8. Der VP ist während der Dauer dieser Vereinbarung und für die Dauer von 36 Monaten nach Beendigung dieses Vertrags aus welchem Grund immer, nicht berechtigt, unmittelbar selbst bzw. mittelbar über Dritte Kunden von PROFIT PLANET und ihrer Produktpartner, einschließlich der vom VP vermittelten Endkunden, durch direkte Ansprache abzuwerben. Als Abwerben gilt jede Form des direkten Herantretens an den Kunden mit der Absicht, ihn zum Wechsel zu einem anderen Energieversorgungs-, Dienstleistungs-, Handels-, und/oder Coachingunternehmen zu bewegen (beispielsweise etwa durch Anrufe beim Kunden, Direktmailing mit Absicht der Abwerbung, Haustürgeschäfte etc.).

-

4. Geheimhaltung

-

4.1. Der VP verpflichtet sich, Geschäfts- und Betriebsgeheimnisse und sonstige vertrauliche Informationen von PROFIT PLANET und dessen Struktur, Geschäftspartner, Vertriebspartner / Businesspartner / Affiliate, Produktgeber, Provisionen und Endkunden unter äußerster Geheimhaltung zu behandeln und zu verwahren und diese Daten nur nach erfolgter schriftlicher Zustimmung durch den PROFIT PLANET an Dritte weiterzugeben.

-

4.2. Diese Verpflichtung gilt auch für Mitarbeiter und Unter-Vertriebspartner / Businesspartner / Affiliate des VP. Der VP hat für das Verhalten allfälliger Erfüllungsgehilfen und/oder Subpartner einzustehen.

-

4.3. Zu den Geschäftsgeheimnissen gehören insbesondere auch Informationen zu internen Betriebsabläufen, Provisionen und Provisionsstrukturen, Produkt- und Preiskalkulationen, Vertriebspartner / Businesspartner / Affiliate-strukturen und -aktivitäten.

-

4.4. Dem VP ist es nicht gestattet, auf Presseanfragen zu PROFIT PLANET, dessen Provisionspläne, Produkte oder andere Leistungen zu antworten. Presseanfragen sind immer an PROFIT PLANET weiterzuleiten.

-

5. Datenschutz

-

5.1. Die Vertragspartner sind verpflichtet, die gesetzlichen Datenschutzbestimmungen vollumfänglich einzuhalten. Für Verstöße gegen datenschutzrechtliche Schutzbestimmungen haftet ausschließlich der jeweils die Bestimmung verletzende Vertragspartner, dieser wird den schuldlos handelnden Vertragspartner von allen entsprechenden Ansprüchen freistellen und schad- und klaglos halten.

-

5.2. Im Regelfall ist der VP ist hinsichtlich der Daten der von ihm vermittelten Endkunden und Akquisitionskontakte Subauftragsverarbeiter im Sinne der Datenschutzgesetze (DSG, DSGVO); PROFIT PLANET ist Auftragsverarbeiter im Sinne der DSGVO. Soweit durch die gesetzlichen Bestimmungen vorgesehen, werden zu dieser Vereinbarung entsprechende datenschutzrechtliche Zusatzverträge abgeschlossen.

-

5.3. PROFIT PLANET ist bezüglich der Daten des VP auf Datenschutz verpflichtet. Die Datenschutzerklärung ist Online jederzeit abrufbar.

-

6. VP-Schutz

-

6.1. Ein neu geworbener VP wird in die Struktur desjenigen VP zugewiesen, der ihn geworben hat (VP-Schutz). Wenn mehrere VP denselben VP neu melden, wird seitens PROFIT PLANET nur die zuerst erfolgte Meldung berücksichtigt, wobei das Eingangsdatum des Registrierungsantrags bei PROFIT PLANET für die Zuteilung maßgeblich ist.

-

6.2. Der meldende VP ist verantwortlich dafür, die Daten des geworbenen VP vollständig und ordentlich zu übermitteln. PROFIT PLANET ist berechtigt, die Daten eines geworbenen VP aus ihrem System zu löschen, wenn von diesem innerhalb einer angemessenen Frist keine Umsätze oder Rückmeldungen kommen.

-

6.3. Ein Wechsel von der Struktur eines VP in die eines anderen ist grundsätzlich ausgeschlossen und nur ausnahmsweise möglich, wenn der wechselwillige VP nachweist, dass der in der Struktur über ihm stehende VP versucht hat, ihn zu einem gesetzes- oder vertragswidrigen Verhalten zu veranlassen oder sonst schwerwiegende Vorfälle die weitere Zusammenarbeit in der Struktur dieses VP untragbar machen. Über einen entsprechenden schriftlichen Antrag entscheidet PROFIT PLANET nach freiem Ermessen.

-

6.4. Ein VP, der innerhalb der letzten 12 Monate bereits einen VP-Vertrag mit PROFIT PLANET hatte, kann nicht geworben werden.

-

6.5. Eine Umgehung des VP-Schutzes etwa durch Verwendung der Namen von Strohnamen, -personen oder -firmen ist untersagt.

-

6.6. PROFIT PLANET räumt ihren VP ausdrücklich keinen Gebietsschutz ein. Alle VP können europaweit ohne Einschränkungen tätig sein.

-

7. Provision

-

7.1. Für jedes vom VP erfolgreich vermittelte Vertragsverhältnis zwischen Produktgeber und Endkunden erwirbt der VP Anspruch auf Provision als Bearbeitungs- und Aufwandspauschale

-

7.2. Die Höhe der Provision richtet sich nach der jeweils aktuell gültigen Provisionsübersicht laut Marketingkonzept. Die jeweils gültige Fassung dieser Provisionsübersicht ist jederzeit auf der Website von PROFIT PLANET (www.profit-planet.com) im internen Bereich abrufbar, einsehbar, downloadbar und kann dort auch auf Anfrage zur Verfügung gestellt werden. Änderungen der Provisionsübersicht werden dem VP rechtzeitig bekannt gegeben. Es gelten jeweils die zum Zeitpunkt der Vermittlung gültigen Provisionssätze.

-

7.3. Als erfolgreiche Vermittlung im Sinne dieses Vertrages gilt, wenn das Vertragsverhältnis zwischen Endkunden und Produktpartner tatsächlich zustande gekommen ist. Insbesondere entsteht kein Provisionsanspruch, wenn

- -

7.4. Anspruch auf Auszahlung der Provision entsteht gegenüber PROFIT PLANET grundsätzlich erst dann, wenn die Zahlungen seitens des Geschäftspartners / Produktgebers bei PROFIT PLANET eingelangt sind und alle sonstigen Auszahlungsvoraussetzungen vorliegen. Der VP nimmt zur Kenntnis, dass die exakten Zahlungsmodalitäten bei den verschiedenen Dienstleistern oder Produktgebern voneinander abweichen können und PROFIT PLANET diese Unterschiede bei der Auszahlung berücksichtigt. Die unterschiedlichen Zeitspannen divergieren je nach Partnerunternehmen derzeit durchschnittlich zwischen 30 bis 100 Tage. Die genauen Anforderungen und Konditionen ergeben sich aus dem jeweiligen Produktpartnerinformationsblatt und dem Marketingkonzept.

-

7.5. Die Auszahlung durch PROFIT PLANET erfolgt einmal monatlich, ungefähr um den 20. des auf den Zahlungseingang bei PROFIT PLANET folgenden Monats. Die Auszahlung erfolgt bargeldlos per Überweisung auf das vom VP genannte Konto. PROFIT PLANET kann Zahlungen bis zu einer Höhe von EUR 100,00 von der Auszahlung ausschließen (Mindestauszahlungshöhe); die nicht ausbezahlten Provisionsansprüche werden auf dem Provisionskonto des VP rechnerisch fortgeführt und im Folgemonat nach Erreichen der Mindestauszahlungshöhe ausbezahlt. Beträge unterhalb der Mindestauszahlungshöhe werden einmal jährlich zur Auszahlung gebracht.

-

7.6. Der Provisionsanspruch entfällt rückwirkend, wenn PROFIT PLANET, Provisionen an einen Produktgeber zurückzahlen muss, etwa weil ein Kunde den Vertrag widerruft oder andere Ausschlusskriterien seitens des Produktgebers vorliegen (Stornohaftung etc.). PROFIT PLANET ist berechtigt, Forderungen, die dem PROFIT PLANET gegen den VP zustehen, mit dessen Provisionsansprüchen ganz oder teilweise aufzurechnen.

-

7.7. Mit dieser Provision sind sämtliche Tätigkeiten des VP einschließlich aller ihm in Zusammenhang mit dieser Vereinbarung entstandenen Kosten, Auslagen und Aufwendungen, wie beispielsweise Fahrt- und Reisekosten, Bürokosten, Porto und Telefongebühren, abgegolten. Dasselbe gilt für Leistungen des VP in Hinblick auf Pflege und Herstellung eines VP-Bestandes und/oder Kundenstocks, sodass im Fall der Beendigung des Vertrags unbeachtet des Grundes der Auflösung keinesfalls Ansprüche auf Abfindungen oder Ausgleiche jedweder Art gegen PROFIT PLANET bestehen.

-

7.8. Fehlerhafte Provisionszahlungen oder sonstige Zahlungen sind vom VP binnen 60 Tagen schriftlich einzumahnen. Danach gelten die Zahlungen als genehmigt.

-

7.9. Wenn vom VP keine UID-Nummer bekannt gegeben wird, erfolgen alle Auszahlungen netto.

-

8. Vertragsstrafe, Schadenersatz

-

8.1. Bei einem ersten Verstoß gegen die in diesem Vertrag geregelten Pflichten durch den VP erfolgt eine schriftliche Abmahnung durch PROFIT PLANET. Die Pflichtverletzung ist unmittelbar zu beenden bzw. gegebenenfalls zu beheben.

-

8.2. Kommt es erneut zu einem Verstoß gegen diesen Vertrag oder wird der zuerst gemahnte Zustand nicht beseitigt, so verpflichtet sich der VP zur Zahlung einer verschuldensunabhängigen Vertragsstrafe für jeden jeweiligen Verstoß in Höhe von EUR 5.000,00.

-

8.3. Bei Verstößen gegen die Geheimhaltungs- und Datenschutzpflichten, sowie bei besonders schwerwiegenden Verstößen, insbesondere gegen Punkt 10.2 dieses Vertrags, ist PROFIT PLANET auch ohne vorhergehende Abmahnung zur Geltendmachung der jeweiligen Vertragsstrafe berechtigt.

-

8.4. Für jede Zuwiderhandlung gegen Punkt 3.8 verpflichtet sich der VP zur Zahlung einer verschuldens- und schadensunabhängigen Konventionalstrafe an den PROFIT PLANET von EUR 5.000,00 pro Verstoß (z.B. pro an ein anderes Unternehmen oder sonstigen Dritten vermittelten Vertrags oder pro abgeworbenen Kunden). Die Geltendmachung darüber hinausgehender sonstiger Schadenersatzansprüche, der Vertragsstrafe nach 8.2 oder etwa von Erfüllungsansprüchen bleibt dadurch unberührt.

-

8.5. Für jeden Verstoß gegen die in Punkt 4. dieses Vertrags (Geheimhaltungsverpflichtung) normierten Pflichten, verpflichtet sich der VP zur Zahlung einer verschuldensunabhängigen Vertragsstrafe in Höhe von EUR 7.000,00 pro Verstoß. Die Geltendmachung weitergehender zivilrechtlicher Ansprüche – insbesondere auf Unterlassung und Schadenersatz – bleibt davon unberührt.

-

8.6. Bei Handlungen, die dem Katalog außerordentlicher Kündigungsgründe gemäß Punkt 10.2 entsprechen, insbesondere bei treuwidrigem Verhalten im Sinne der dort beschriebenen Fallgruppen (z. B. unautorisierte Kaltakquise, rufschädigendes Verhalten, unbefugtes Auftreten im Namen von PROFIT PLANET), verpflichtet sich der VP zur Zahlung einer verschuldensunabhängigen Vertragsstrafe in Höhe von EUR 10.000,00 pro Verstoß. Auch in diesen Fällen bleiben darüber hinausgehende Ansprüche – insbesondere Schadenersatz oder außerordentliche Kündigung – ausdrücklich vorbehalten.

- -

9. Haftungsausschluss

-

9.1. Der VP führt seine Tätigkeiten nach bestem Wissen und Gewissen und in eigener Verantwortung, insbesondere auch in Bezug auf die korrekte Beratung der Endkunden aus. Eine Haftungsübernahme von PROFIT PLANET für Falschberatungen oder sonstiges Fehlverhalten des VP ist explizit ausgeschlossen.

-

9.2. Für Schäden haftet PROFIT PLANET nur, soweit diese auf Vorsatz oder grober Fahrlässigkeit oder auf grob schuldhafter Verletzung einer wesentlichen Vertragspflicht durch PROFIT PLANET, ihrer Mitarbeiter oder Erfüllungsgehilfen beruhen.

-

9.3. Eine Haftung von PROFIT PLANET für mittelbare Schäden, Folgeschäden, entgangenen Gewinn oder erwartete Ersparnis ist jedenfalls ausgeschlossen.

-

9.4. PROFIT PLANET übernimmt keine Haftung für Schäden, die durch Datenverlust auf den Servern auftreten, außer der Schaden beruht auf Vorsatz oder grober Fahrlässigkeit seitens PROFIT PLANET, ihrer Mitarbeiter oder Erfüllungsgehilfen.

-

9.5. Der Eintritt eines Schadens ist PROFIT PLANET unverzüglich mitzuteilen.

-

10. Vertragsdauer & Kündigung

-

10.1. Der Vertrag tritt mit Unterzeichnung oder im Fall einer Online-Registrierung, Online mit der Annahme des Vertrags durch PROFIT PLANET in Kraft und wird auf unbestimmte Zeit geschlossen. Er kann von beiden Parteien unter Einhaltung einer Frist von drei Monaten zum Ende jedes Kalendermonats schriftlich gekündigt werden.

-

10.2. Dessen ungeachtet kann der Vertrag seitens PROFIT PLANET aus wichtigem Grund ohne Einhaltung einer Kündigungsfrist gekündigt werden. Das Recht zur außerordentlichen Kündigung besteht ungeachtet weiterer Ansprüche. Folgende Gründe berechtigen insbesondere zur außerordentlichen Kündigung, die Aufzählung ist nicht abschließend:

- -

10.3. Abgesehen von 10.2 kann PROFIT PLANET den VP auch außerordentlich kündigen, wenn dieser in den letzten 6 Monaten keine neuen Umsätze erzielt hat oder bei den durch seine Vermittlung zustande gekommenen Verträgen zwischen Endkunden und Produktgebern über einen Zeitraum von 2 Monaten überdurchschnittliche Stornoquoten von mehr als 30% der vermittelten Verträge bestehen. PROFIT PLANET wird den VP vor einer außerordentlichen Kündigung nach diesem Passus einmalig schriftlich verwarnen, so dass der VP die Möglichkeit hat, innerhalb einer Frist von 30 Tagen die erforderlichen neuen Umsätze zu generieren oder seine Stornoquote zu verbessern.

-

10.4. Mit der Beendigung des Vertrags steht dem VP mit Ausnahme der Provision für zu diesem Zeitpunkt bereits erfolgreich vermittelte Verträge, kein Recht auf Provision mehr zu. Ein Anspruch auf Handelsvertreterausgleich ist ausdrücklich ausgeschlossen, da der VP nicht als Handelsvertreter für den PROFIT PLANET tätig wird. Etwaige Ansprüche auf Folgeprovisionen für vermittelte Produkte bestehen für 12 Monate nach Vertragsbeendigung fort; im Falle einer außerordentlichen Kündigung verfallen Ansprüche auf Folgeprovisionen unmittelbar mit der Vertragsbeendigung.

-

10.5. Nach Beendigung des Vertrags sind vom VP sämtliche überlassenen Unterlagen und Werbematerialien unaufgefordert binnen einem Monat an PROFIT PLANET zurückzugeben. Die Verwendung der Marke PROFIT PLANET und entsprechender Logos etwa auf Briefpapier oder in E-Mail-Signaturen ist nach Beendigung des Vertrags untersagt.

-

11. Übertragung

-

11.1. PROFIT PLANET ist jederzeit berechtigt, den Geschäftsbetrieb ganz oder teilweise auf Dritte zu übertragen.

-

11.2. Der VP ist nur mit ausdrücklicher Zustimmung von PROFIT PLANET berechtigt, seine Vertriebsstruktur an einen Dritten zu übertragen.

-

11.3. Wenn eine als VP registrierte Kapital- oder Personengesellschaft einen neuen Gesellschafter aufnimmt, hat dies auf diesen Vertrag keine Auswirkung, sofern der/die Gesellschafter, die den VP-Antrag ursprünglich unterzeichnet haben, als Gesellschafter in der Gesellschaft verbleiben. Wenn ein Gesellschafter aus einer registrierten Gesellschaft ausscheidet oder seine Anteile an einen Dritten überträgt, so ist dies in Bezug auf diesen Vertrag zulässig, sofern er dies PROFIT PLANET schriftlich unter Vorlage der entsprechenden rechtsgültigen Urkunden anzeigt, und der Vorgang keinen anderen Bestimmungen dieses Vertrags widerspricht; anderenfalls behält PROFIT PLANET sich das Recht vor, den VP-Vertrag der betreffenden Kapital- oder Personengesellschaft aufzukündigen.

-

11.4. Bei Auflösung einer als VP registrierten Gemeinschaft (Kapital- oder Personengesellschaft, aber auch z.B. Ehepartnerschaften oder ähnliches, die einen gemeinsamen VP-Vertrag haben), bleibt nur ein VP-Vertrag bestehen. Die Mitglieder der aufzulösenden Gemeinschaft haben sich intern zu einigen, durch welches Mitglied/Gesellschafter die Vertriebspartner / Businesspartner / Affiliateschaft fortgesetzt werden soll, und dies PROFIT PLANET schriftlich anzuzeigen. Falls sich die Mitglieder der Gemeinschaft in Bezug auf die Fortsetzung des VP-vertrags nicht gütlich einigen können, behält sich PROFIT PLANET das Recht einer außerordentlichen Kündigung vor, insbesondere, wenn es durch die Uneinigkeit über die Folgen zur Vernachlässigung der Pflichten des VP, einem Verstoß gegen diesen Vertrag oder geltendes Recht oder zu einer übermäßigen Belastung der Vertriebsstruktur des VP kommt.

-
-
- -

12. Schlussbestimmungen

-

12.1. Änderungen und Ergänzungen dieser Vereinbarung bedürfen der Schriftform. Dies gilt auch für das Abgehen der Schriftformerfordernis. Mündliche Nebenabreden bestehen nicht.

-

12.2. Sollte eine Bestimmung dieser Vereinbarung unwirksam sein oder werden, gilt anstelle der unwirksamen Bestimmung jene Bestimmung als vereinbart, die dem wirtschaftlichen Zweck der unwirksamen Bestimmung am nächsten kommt.

-

12.3. Vereinbarter Gerichtsstand für alle Streitigkeiten aus oder in Zusammenhang mit dieser Vereinbarung ist das für Graz sachlich zuständige Gericht. Diese Vereinbarung unterliegt österreichischem Recht, nicht jedoch den nichtzwingenden Verweisungsnormen des IPR. Weiter- bzw. Rückverweisungen sind ausgeschlossen. Darüber hinaus steht es PROFIT PLANET frei, den VP auch seinem allgemeinen Gerichtsstand zu klagen.

-
-
-

Für PROFIT PLANET (Auftraggeber)

- -
-
{{profitplanetSignature}}
-
{{currentDate}}
-
-

Datum, Unterschrift

-
-
-

Für den VP (Auftragnehmer)

-
- {{signatureImage}} -
{{fullName}}
-
{{currentDate}}
-
-

Name, Datum, Unterschrift

-
-
-
- - - \ No newline at end of file +test \ No newline at end of file diff --git a/debug-pdf/template_3_sanitized_preview.html b/debug-pdf/template_3_sanitized_preview.html new file mode 100644 index 0000000..30d74d2 --- /dev/null +++ b/debug-pdf/template_3_sanitized_preview.html @@ -0,0 +1 @@ +test \ No newline at end of file diff --git a/debug-pdf/template_4_html_full.html b/debug-pdf/template_4_html_full.html index 4df6877..432ba7b 100644 --- a/debug-pdf/template_4_html_full.html +++ b/debug-pdf/template_4_html_full.html @@ -1,229 +1,620 @@ - - - SUB-AUFTRAGSVERARBEITUNGS-VERTRAG - + + + ABO Vertrag – Profit Planet GmbH + - -
- -
- -
- - -
-
-

SUB-AUFTRAGSVERARBEITUNGS-VERTRAG

-

i.S.d. Art. 28 Abs. 3 Datenschutz-Grundverordnung (DS-GVO)

-
- -

abgeschlossen zwischen

-

Profit Planet GmbH (kurz Auftraggeber)
- FN 649474i
- Liebenauer Hauptstraße 82c
- A-8041 Graz

-

und

-

Vertriebspartner (kurz Auftragnehmer)

- -
- - - - - - - - - - - - - - - - - - - - - -
Vertriebspartner{{fullName}}
Adresse{{address}}
PLZ / Ort{{zip_code}} {{city}}
Vollständige Adresse{{fullAddress}}
E-Mail / Telefon{{email}} / {{phone}}
-
- -
-

1. PRÄAMBEL

-
-

1.1. Diese Anlage konkretisiert die Verpflichtungen der Vertragsparteien zum Datenschutz, die sich aus der im bestehenden Vertriebspartner-Vertrag („Hauptvertrag“) und seinen Anlagen in ihren Einzelheiten beschriebenen Auftragsverarbeitung ergeben. Sie findet Anwendung auf alle Tätigkeiten, die mit dem Vertrag in Zusammenhang stehen, und bei denen Beschäftigte des Auftragnehmers oder durch den Auftragnehmer Beauftragte personenbezogene Daten („Daten“) des Auftraggebers verarbeiten.

-

1.2. Der Auftragnehmer ist sich bewusst, dass der Auftraggeber als Auftragsverarbeiter für Dritte („Verantwortliche“ im Sinne des Art. 4 Nr. 7 DS-GVO) tätig ist. Im Rahmen des vorbezeichneten Hauptvertrags nimmt der Auftraggeber die Dienste des Auftragnehmers als „weiteren Auftragsverarbeiter“ im Sinne von Art. 28 Nr. 4 DS-GVO in Anspruch, um bestimmte Verarbeitungstätigkeiten im Namen des Dritten („Verantwortlicher“ iSd Art. 4 Nr. 7 DS-GVO) auszuführen.

-

1.3. Der Auftragnehmer ist sich bewusst, dass der Auftraggeber gegenüber Dritten für die Einhaltung der Pflichten des Auftragnehmers haftet, falls der Auftragnehmer seinen Datenschutzpflichten nach diesem Vertrag und nach dem Gesetz nicht nachkommt.

-

1.4. Die Laufzeit dieser Anlage richtet sich nach der Laufzeit des Vertriebspartner-Vertrages, sofern sich aus den Bestimmungen dieser Anlage nicht darüber hinausgehende Verpflichtungen ergeben.

-
-
- -
-

2. DAUER, GEGENSTAND UND SPEZIFIZIERUNG DER AUFTRAGSVERARBEITUNG

-
-

2.1. Alle Daten dürfen nur so lange verarbeitet werden, als das durch die Vertragserfüllung oder den Zweck der Datenverarbeitung erforderlich ist.

-

2.2. Aus dem Vertrag ergeben sich Gegenstand und Dauer des Auftrags sowie Art und Zweck der Verarbeitung.

-

2.3. Im Einzelnen sind insbesondere die folgenden Daten Bestandteil der Datenverarbeitung:

-
-
-
- - -
- - - - - - - - - - - - - - - -
Art der DatenInteressenten- und Kundendaten; Kontaktdaten beim Auftraggeber; Kontaktdaten des jeweiligen Datenverantwortlichen
Art und Zweck der DatenverarbeitungDatenerfassung beim Interessenten (potenziellen Kunden); Datenübermittlung (auch elektronisch via E-Mail bzw. falls vorhanden über elektronische Schnittstellen der Verantwortlichen) an Auftraggeber bzw. Datenverantwortliche zur Legung eines Angebots bzw. zur Verwirklichung der Kundenbestellung; ggf. telefonischer Nachkontakt zur Qualitätskontrolle
Kategorien betroffener DatenName, Vorname, Adresse, Geburtsdatum, SV-Nr., E-Mail, Kontodaten Ausweiskopie; Daten zur Energieversorgung (z.B. Zählpunkt, Zählernummer, Kilowattprognose, Jahresverbrauch); Aufzeichnung etwaiger Qualitätskontrollen; Aufzeichnung etwaiger Interessensgebiete im Bereich Versicherung, Kreditwirtschaft, Telekommunikation, Energieeffizienz (PV, Speicher, LED, Infrarotheizung, Kalkschutz…).
- -
-

3. ANWENDUNGSBEREICH UND VERANTWORTLICHKEIT

-
-

3.1. Der Auftragnehmer verarbeitet personenbezogene Daten im Auftrag des Auftraggebers. Dies umfasst Tätigkeiten, die im Vertrag und in der Leistungsbeschreibung konkretisiert sind.

-

3.2. Der Auftraggeber ist gegenüber dem/den Dritten als („Verantwortliche Person“ iSd Art. 4 Nr. 7 DS-GVO) für die Einhaltung der gesetzlichen Bestimmungen der Datenschutzgesetze, insbesondere für die Rechtmäßigkeit der Datenweitergabe an den Auftragnehmer sowie für die Rechtmäßigkeit der Datenverarbeitung verantwortlich.

-

3.3. Der Auftragnehmer ist gegenüber dem Auftraggeber im Rahmen dieses Vertrages für die Einhaltung der gesetzlichen Bestimmungen der Datenschutzgesetze, insbesondere für die Rechtmäßigkeit der Datenweitergabe sowie der Datenverarbeitung verantwortlich.

-

3.4. Die Weisungen werden anfänglich durch diese Vertragsanlage festgelegt und können vom Auftraggeber danach in schriftlicher Form oder in einem elektronischen Format (Textform) an die vom Auftragnehmer bezeichnete Stelle durch einzelne Weisungen geändert, ergänzt oder ersetzt werden (Einzelweisung). Weisungen, die in der Vertragsanlage nicht vorgesehen sind, werden als Antrag auf Leistungsänderung behandelt. Mündliche Weisungen sind unverzüglich schriftlich oder in Textform zu bestätigen.

-
-
- -
-

4. PFLICHTEN DES AUFTRAGNEHMERS

-
-

4.1. Der Auftragnehmer darf Daten von betroffenen Personen nur im Rahmen des Auftrages und der Weisungen des Auftraggebers verarbeiten, außer es liegt ein Ausnahmefall iSd Art 28 Abs. 3 a) DS-GVO vor. Der Auftragnehmer informiert den Auftraggeber unverzüglich, wenn er der Auffassung ist, dass eine Weisung gegen anwendbare Gesetze verstößt. Der Auftragnehmer darf die Umsetzung der Weisung solange aussetzen, bis sie vom Auftraggeber bestätigt oder abgeändert wurde.

-

4.2. Der Auftragnehmer wird in seinem Verantwortungsbereich die innerbetriebliche Organisation so gestalten, dass sie den besonderen Anforderungen des Datenschutzes gerecht wird. Er wird technische und organisatorische Maßnahmen zum angemessenen Schutz der Daten des Auftraggebers treffen, die den Anforderungen der Datenschutz- Grundverordnung (Art. 32 DS-GVO) genügen. Der Auftragnehmer hat technische und organisatorische Maßnahmen zu treffen, die die Vertraulichkeit, Integrität, Verfügbarkeit und Belastbarkeit der Systeme und Dienste im Zusammenhang mit der Verarbeitung auf Dauer sicherstellen. Der Auftraggeber ist berechtigt, diese technischen und organisatorischen Maßnahmen dahingehend zu überprüfen, ob sie für die Risiken der zu verarbeitenden Daten ein angemessenes Schutzniveau bieten. Eine Änderung der getroffenen Sicherheitsmaßnahmen bleibt dem Auftragnehmer vorbehalten, wobei jedoch sichergestellt sein muss, dass das vertraglich vereinbarte Schutzniveau nicht unterschritten wird.

-

4.3. Der Auftragnehmer gewährleistet, seinen Pflichten nach Art. 32 Abs. 1 lit. d) DS-GVO nachzukommen, ein Verfahren zur regelmäßigen Überprüfung der Wirksamkeit der technischen und organisatorischen Maßnahmen zur Gewährleistung der Sicherheit der Verarbeitung einzusetzen.

-

4.4. Der Auftragnehmer unterstützt den Auftraggeber im Rahmen seiner Möglichkeiten bei der Erfüllung der Anfragen und Ansprüche betroffener Personen gem. Kapitel III der DS-GVO sowie bei der Einhaltung der in Art. 33 bis 36 DS-GVO genannten Pflichten.

-

4.5. Der Auftragnehmer gewährleistet, dass es den mit der Verarbeitung der Daten des Auftraggebers befassten Mitarbeiter und andere für den Auftragnehmer tätigen Personen untersagt ist, die Daten außerhalb der Weisung zu verarbeiten. Ferner gewährleistet der Auftragnehmer, dass sich die zur Verarbeitung der personenbezogenen Daten befugten Personen zur Vertraulichkeit verpflichtet haben oder einer angemessenen gesetzlichen Verschwiegenheitspflicht unterliegen. Die Vertraulichkeits-/ Verschwiegenheitspflicht besteht auch nach Beendigung des Auftrages fort.

-
-
- -
- -
-

4.6. Der Auftragnehmer unterrichtet den Auftraggeber unverzüglich, wenn ihm Verletzungen des Schutzes personenbezogener Daten des Auftraggebers bekannt werden. Der Auftragnehmer trifft die erforderlichen Maßnahmen zur Sicherung der Daten und zur Minderung möglicher nachteiliger Folgen der betroffenen Personen und spricht sich hierzu unverzüglich mit dem Auftraggeber ab.

-

4.7. Der Auftragnehmer nennt dem Auftraggeber den Ansprechpartner für im Rahmen des Vertrages anfallende Datenschutzfragen.

-

4.8. Der Auftragnehmer berichtigt oder löscht die vertragsgegenständlichen Daten, wenn der Auftraggeber dies anweist und dies vom Weisungsrahmen umfasst ist. Ist eine datenschutzkonforme Löschung oder eine entsprechende Einschränkung der Datenverarbeitung nicht möglich, übernimmt der Auftragnehmer die datenschutzkonforme Vernichtung von Datenträgern und sonstigen Materialien auf Grund einer Einzelbeauftragung durch den Auftraggeber oder gibt diese Datenträger an den Auftraggeber zurück, sofern nicht im Vertrag bereits vereinbart.

-

4.9. Daten, Datenträger sowie sämtliche sonstige Materialien sind nach Auftragsende auf Verlangen des Auftraggebers entweder herauszugeben oder zu löschen.

-

4.10. Im Falle einer Inanspruchnahme des Auftraggebers oder des Dritten durch eine betroffene Person hinsichtlich etwaiger Ansprüche nach Art. 82 DS-GVO, verpflichtet sich der Auftragnehmer den Auftraggeber bei der Abwehr des Anspruches im Rahmen seiner Möglichkeiten zu unterstützen.

-

4.11. Im Falle einer Inanspruchnahme des Auftraggebers durch den Dritten, verpflichtet sich der Auftragnehmer den Auftraggeber bei der Abwehr des Anspruches im Rahmen seiner Möglichkeiten zu unterstützen.

-
-
- -
-

5. PFLICHTEN DES AUFTRAGGEBERS

-
-

5.1. Der Auftraggeber hat den Auftragnehmer unverzüglich und vollständig zu informieren, wenn er in den Auftragsergebnissen Fehler oder Unregelmäßigkeiten bzgl. datenschutzrechtlicher Bestimmungen feststellt.

-

5.2. Im Falle einer Inanspruchnahme des Auftraggebers oder des Dritten durch eine betroffene Person hinsichtlich etwaiger Ansprüche nach Art. 82 DS-GVO, gilt §3 Abs. 10 entsprechend.

-

5.3. Der Auftraggeber nennt dem Auftragnehmer den Ansprechpartner für im Rahmen des Vertrages anfallende Datenschutzfragen.

-
-
- -
-

6. ANFRAGEN BETROFFENER PERSONEN

-
-

6.1. Wendet sich eine betroffene Person mit Forderungen zur Berichtigung, Löschung oder Auskunft an den Auftragnehmer, wird der Auftragnehmer die betroffene Person an den Auftraggeber verweisen und ggf. den Antrag der betroffenen Person unverzüglich an den Auftraggeber weiterleiten. Der Auftragnehmer unterstützt den Auftraggeber im Rahmen seiner Möglichkeiten bei der Erfüllung der jeweiligen Forderung.

-

6.2. Der Auftragnehmer haftet nicht, wenn das Ersuchen der betroffenen Person vom Auftraggeber nicht, nicht richtig oder nicht fristgerecht beantwortet wird.

-

6.3. Der Auftraggeber haftet nicht für Forderungen betroffener Personen, die dadurch entstehen, dass der Auftragnehmer das entsprechende Anliegen nicht zeitgerecht an den Auftraggeber übermittelt hat.

-
-
- -
-

7. NACHWEISMÖGLICHKEITEN

-
-

7.1. Der Auftragnehmer weist dem Auftraggeber die Einhaltung der in diesem Vertrag niedergelegten Pflichten mit geeigneten Mitteln nach.

-

7.2. Sollten im Einzelfall Inspektionen durch den Auftraggeber oder einen von diesem beauftragten Prüfer erforderlich sein, werden diese zu den üblichen Geschäftszeiten ohne Störung des Betriebsablaufs nach Anmeldung unter Berücksichtigung einer angemessenen Vorlaufzeit durchgeführt. Der Auftragnehmer darf diese von der Unterzeichnung einer Verschwiegenheitserklärung hinsichtlich der Daten anderer Kunden und der eingerichteten technischen und organisatorischen Maßnahmen abhängig machen. Sollte der durch den Auftraggeber beauftragte Prüfer in einem Wettbewerbsverhältnis zu dem Auftragnehmer stehen, hat der Auftragnehmer gegen diesen ein Einspruchsrecht

-
-
- - -
-

8. SUBUNTERNEHMER (WEITERE AUFTRAGSVERARBEITER)

-
-

8.1. Der Einsatz von Subunternehmern als weitere Auftragsverarbeiter ist nur zulässig, wenn der Auftraggeber vorher zugestimmt hat.

-

8.2. Ein zustimmungspflichtiges Subunternehmerverhältnis liegt vor, wenn der Auftragnehmer weitere Auftragnehmer mit der ganzen oder einer Teilleistung der im Vertrag vereinbarten Leistung beauftragt. Der Auftragnehmer wird mit diesen Dritten im erforderlichen Umfang Vereinbarungen treffen, um angemessene Datenschutz- und Informationssicherheitsmaßnahmen zu gewährleisten.

-

8.3. Erteilt der Auftragnehmer Aufträge an Subunternehmer, so obliegt es dem Auftragnehmer, seine datenschutzrechtlichen Pflichten aus diesem Vertrag dem Subunternehmer zu überbinden.

-
-
- -
-

9. INFORMATIONSPFLICHTEN, SCHRIFTFORMKLAUSEL, RECHTSWAHL

-
-

9.1. Sollten die Daten des Auftraggebers beim Auftragnehmer durch Pfändung oder Beschlagnahme, durch ein Insolvenz- oder Vergleichsverfahren oder durch sonstige Ereignisse oder Maßnahmen Dritter gefährdet werden, so hat der Auftragnehmer den Auftraggeber unverzüglich darüber zu informieren. Der Auftragnehmer wird alle in diesem Zusammenhang Verantwortlichen unverzüglich darüber informieren, dass die Hoheit und das Eigentum an den Daten ausschließlich beim Dritten als verantwortliche Person im Sinne der Datenschutz-Grundverordnung liegen.

-

9.2. Änderungen und Ergänzungen dieser Anlage und aller ihrer Bestandteile – einschließlich etwaiger Zusicherungen des Auftragnehmers – bedürfen einer schriftlichen Vereinbarung, die auch in einem elektronischen Format (Textform) erfolgen kann, und des ausdrücklichen Hinweises darauf, dass es sich um eine Änderung bzw. Ergänzung dieser Bedingungen handelt. Dies gilt auch für den Verzicht auf dieses Formerfordernis.

-

9.3. Bei etwaigen Widersprüchen gehen Regelungen dieser Anlage zum Datenschutz den Regelungen des Vertrages vor. Sollten einzelne Teile dieser Anlage unwirksam sein, so berührt dies die Wirksamkeit der Anlage im Übrigen nicht.

-

9.4. Es gilt das auf dem Hauptvertrag anwendbare Recht sowie Gerichtsstand.

-
-
- -
-
-

Für PROFIT PLANET (Auftraggeber)

- -
-
{{profitplanetSignature}}
-
{{currentDate}}
-
-

Datum, Unterschrift

-
-
-

Für den VP (Auftragnehmer)

-
- {{signatureImage}} -
{{fullName}}
-
{{currentDate}}
-
-

Name, Datum, Unterschrift

-
-
-
+ +
+
+
+

ABO Vertrag

+

Kaffee-/Tee-Service & automatische Wiederbestellungen

+
+
+
PROFIT PLANET GMBH
+
Liebenauer Hauptstraße 82c
+
A-8041 Graz
+
FN-649474 i
+
IBAN: AT16 2081 5000 4639 9507
+
Swift/BIC Code: STSPAT2GXXX
+
ATU82089605
+
+ +
+
+

Vertrag über automatische Wiederbestellungen (ABO)

+

Bitte alle Felder vollständig ausfüllen und Zutreffendes ankreuzen.

+
+
+
Vertragsnummer: {{contractNumber}}
+
Datum: {{currentDate}}
+
+
+ +

An die

+
+
+
Empfänger
+
{{recipientName}}
+
+
+
Adresse
+
{{recipientAddress}}
+
+
+ +
+
+
Affiliate
+
+
AFFILIATE NAME
+
{{affiliateName}}
+
+
+
+
Client
+
+
CLIENT NAME
+
{{clientName}}
+
+
+
+ +

Lieferadresse

+
+
+
+
+ KUNDE + FIRMA +
+
Vor- und Nachname
{{shippingFullName}}
+
Adresse
{{shippingStreet}}
+
PLZ / Ort
{{shippingPostalCode}}    {{shippingCity}}
+
+
+
Telefonnummer
{{shippingPhone}}
+
Mobil
{{shippingMobile}}
+
E-Mail-Adresse
{{shippingEmail}}
+
+
Bevorzugte Kontaktaufnahme
+
+ Telefon + E-Mail +
+
+
+
+ +
Rechnungsadresse: {{invoiceSameAsShippingMark}} wie Lieferadresse
+
+ +

Rechnungsadresse (falls abweichend)

+
+
+
+
+ FIRMA + KUNDE +
+
Vor- und Nachname
{{invoiceFullName}}
+
Adresse
{{invoiceStreet}}
+
PLZ / Ort
{{invoicePostalCode}}    {{invoiceCity}}
+
+
+
Telefonnummer
{{invoicePhone}}
+
Mobil
{{invoiceMobile}}
+
E-Mail-Adresse
{{invoiceEmail}}
+
+
Bevorzugte Kontaktaufnahme
+
+ Telefon + E-Mail +
+
+
+
+ +
+ FN: {{fnNumber}} + ATU: {{atuNumber}} + (falls zutreffend ausfüllen) +
+
+ +

Zutreffendes bitte ankreuzen

+
+
+ + Der Kunde/Käufer tätigt das gegenständliche Rechtsgeschäft als Unternehmer im Sinne des § 1 Abs 1 Z 1 KSchG, das heißt, das Geschäft gehört zum Betrieb seines Unternehmens. +
+
+ + Der Kunde/Käufer tätigt das gegenständliche Rechtsgeschäft als Konsument im Sinne des § 1 Abs 1 Z 2 KSchG. +
+
+ +

Angebote

+
+

+ Mindestbestellmenge für BIO Kaffee und BIO Tee und BIO Kakao beträgt pro Bestellung jeweils 120 Kapseln. + Preis pro Kapsel € 2,97 inkl. 20% MwSt. Preise und Konditionen gemäß gültigem PROFIT PLANET GMBH Tarif. +

+ + + + + + + + + + + + + + + + + +
TarifPreis pro Kapsel
Customer without abo2.97€
Customer with abo1.77€
+
+ +

Produktauswahl

+
+

Superfood Coffee – 60 Kapseln (bitte gewünschte Sorten ankreuzen / ergänzen)

+ {{selectedProductsHtml}} + +

+ Bei Angabe einer automatischen Wiederbestellung, gemäß den Regelungen in nachstehendem Punkt 3, erhält der Kunde in regelmäßigen Abständen, + BEGINNEND AM (Unterzeichnung des Vertrages) vorstehend eingetragene BIO Kaffee-Teemenge für die Dauer des Vertrages oder bis zum Widerruf der automatischen Wiederbestellung. + Der BIO Kaffee-Tee wird automatisch im Abstand von (zutreffendes bitte ankreuzen) +

+ +
+ 1 Monat + 2 Monate + 3 Monate +
+ +

fakturiert und innerhalb von drei bis fünf Werktagen an den Kunden geliefert.

+
+ +

Zahlungsart

+
+
+ Sepa + Kreditkarte + Sofortbanking +
+
+ Bitte senden Sie mir meine Rechnung per E-Mail zu! +
+
+ +
+ + +
\ No newline at end of file diff --git a/debug-pdf/template_4_html_raw.bin b/debug-pdf/template_4_html_raw.bin index 4df6877..432ba7b 100644 --- a/debug-pdf/template_4_html_raw.bin +++ b/debug-pdf/template_4_html_raw.bin @@ -1,229 +1,620 @@ - - - SUB-AUFTRAGSVERARBEITUNGS-VERTRAG - + + + ABO Vertrag – Profit Planet GmbH + - -
- -
- -
- - -
-
-

SUB-AUFTRAGSVERARBEITUNGS-VERTRAG

-

i.S.d. Art. 28 Abs. 3 Datenschutz-Grundverordnung (DS-GVO)

-
- -

abgeschlossen zwischen

-

Profit Planet GmbH (kurz Auftraggeber)
- FN 649474i
- Liebenauer Hauptstraße 82c
- A-8041 Graz

-

und

-

Vertriebspartner (kurz Auftragnehmer)

- -
- - - - - - - - - - - - - - - - - - - - - -
Vertriebspartner{{fullName}}
Adresse{{address}}
PLZ / Ort{{zip_code}} {{city}}
Vollständige Adresse{{fullAddress}}
E-Mail / Telefon{{email}} / {{phone}}
-
- -
-

1. PRÄAMBEL

-
-

1.1. Diese Anlage konkretisiert die Verpflichtungen der Vertragsparteien zum Datenschutz, die sich aus der im bestehenden Vertriebspartner-Vertrag („Hauptvertrag“) und seinen Anlagen in ihren Einzelheiten beschriebenen Auftragsverarbeitung ergeben. Sie findet Anwendung auf alle Tätigkeiten, die mit dem Vertrag in Zusammenhang stehen, und bei denen Beschäftigte des Auftragnehmers oder durch den Auftragnehmer Beauftragte personenbezogene Daten („Daten“) des Auftraggebers verarbeiten.

-

1.2. Der Auftragnehmer ist sich bewusst, dass der Auftraggeber als Auftragsverarbeiter für Dritte („Verantwortliche“ im Sinne des Art. 4 Nr. 7 DS-GVO) tätig ist. Im Rahmen des vorbezeichneten Hauptvertrags nimmt der Auftraggeber die Dienste des Auftragnehmers als „weiteren Auftragsverarbeiter“ im Sinne von Art. 28 Nr. 4 DS-GVO in Anspruch, um bestimmte Verarbeitungstätigkeiten im Namen des Dritten („Verantwortlicher“ iSd Art. 4 Nr. 7 DS-GVO) auszuführen.

-

1.3. Der Auftragnehmer ist sich bewusst, dass der Auftraggeber gegenüber Dritten für die Einhaltung der Pflichten des Auftragnehmers haftet, falls der Auftragnehmer seinen Datenschutzpflichten nach diesem Vertrag und nach dem Gesetz nicht nachkommt.

-

1.4. Die Laufzeit dieser Anlage richtet sich nach der Laufzeit des Vertriebspartner-Vertrages, sofern sich aus den Bestimmungen dieser Anlage nicht darüber hinausgehende Verpflichtungen ergeben.

-
-
- -
-

2. DAUER, GEGENSTAND UND SPEZIFIZIERUNG DER AUFTRAGSVERARBEITUNG

-
-

2.1. Alle Daten dürfen nur so lange verarbeitet werden, als das durch die Vertragserfüllung oder den Zweck der Datenverarbeitung erforderlich ist.

-

2.2. Aus dem Vertrag ergeben sich Gegenstand und Dauer des Auftrags sowie Art und Zweck der Verarbeitung.

-

2.3. Im Einzelnen sind insbesondere die folgenden Daten Bestandteil der Datenverarbeitung:

-
-
-
- - -
- - - - - - - - - - - - - - - -
Art der DatenInteressenten- und Kundendaten; Kontaktdaten beim Auftraggeber; Kontaktdaten des jeweiligen Datenverantwortlichen
Art und Zweck der DatenverarbeitungDatenerfassung beim Interessenten (potenziellen Kunden); Datenübermittlung (auch elektronisch via E-Mail bzw. falls vorhanden über elektronische Schnittstellen der Verantwortlichen) an Auftraggeber bzw. Datenverantwortliche zur Legung eines Angebots bzw. zur Verwirklichung der Kundenbestellung; ggf. telefonischer Nachkontakt zur Qualitätskontrolle
Kategorien betroffener DatenName, Vorname, Adresse, Geburtsdatum, SV-Nr., E-Mail, Kontodaten Ausweiskopie; Daten zur Energieversorgung (z.B. Zählpunkt, Zählernummer, Kilowattprognose, Jahresverbrauch); Aufzeichnung etwaiger Qualitätskontrollen; Aufzeichnung etwaiger Interessensgebiete im Bereich Versicherung, Kreditwirtschaft, Telekommunikation, Energieeffizienz (PV, Speicher, LED, Infrarotheizung, Kalkschutz…).
- -
-

3. ANWENDUNGSBEREICH UND VERANTWORTLICHKEIT

-
-

3.1. Der Auftragnehmer verarbeitet personenbezogene Daten im Auftrag des Auftraggebers. Dies umfasst Tätigkeiten, die im Vertrag und in der Leistungsbeschreibung konkretisiert sind.

-

3.2. Der Auftraggeber ist gegenüber dem/den Dritten als („Verantwortliche Person“ iSd Art. 4 Nr. 7 DS-GVO) für die Einhaltung der gesetzlichen Bestimmungen der Datenschutzgesetze, insbesondere für die Rechtmäßigkeit der Datenweitergabe an den Auftragnehmer sowie für die Rechtmäßigkeit der Datenverarbeitung verantwortlich.

-

3.3. Der Auftragnehmer ist gegenüber dem Auftraggeber im Rahmen dieses Vertrages für die Einhaltung der gesetzlichen Bestimmungen der Datenschutzgesetze, insbesondere für die Rechtmäßigkeit der Datenweitergabe sowie der Datenverarbeitung verantwortlich.

-

3.4. Die Weisungen werden anfänglich durch diese Vertragsanlage festgelegt und können vom Auftraggeber danach in schriftlicher Form oder in einem elektronischen Format (Textform) an die vom Auftragnehmer bezeichnete Stelle durch einzelne Weisungen geändert, ergänzt oder ersetzt werden (Einzelweisung). Weisungen, die in der Vertragsanlage nicht vorgesehen sind, werden als Antrag auf Leistungsänderung behandelt. Mündliche Weisungen sind unverzüglich schriftlich oder in Textform zu bestätigen.

-
-
- -
-

4. PFLICHTEN DES AUFTRAGNEHMERS

-
-

4.1. Der Auftragnehmer darf Daten von betroffenen Personen nur im Rahmen des Auftrages und der Weisungen des Auftraggebers verarbeiten, außer es liegt ein Ausnahmefall iSd Art 28 Abs. 3 a) DS-GVO vor. Der Auftragnehmer informiert den Auftraggeber unverzüglich, wenn er der Auffassung ist, dass eine Weisung gegen anwendbare Gesetze verstößt. Der Auftragnehmer darf die Umsetzung der Weisung solange aussetzen, bis sie vom Auftraggeber bestätigt oder abgeändert wurde.

-

4.2. Der Auftragnehmer wird in seinem Verantwortungsbereich die innerbetriebliche Organisation so gestalten, dass sie den besonderen Anforderungen des Datenschutzes gerecht wird. Er wird technische und organisatorische Maßnahmen zum angemessenen Schutz der Daten des Auftraggebers treffen, die den Anforderungen der Datenschutz- Grundverordnung (Art. 32 DS-GVO) genügen. Der Auftragnehmer hat technische und organisatorische Maßnahmen zu treffen, die die Vertraulichkeit, Integrität, Verfügbarkeit und Belastbarkeit der Systeme und Dienste im Zusammenhang mit der Verarbeitung auf Dauer sicherstellen. Der Auftraggeber ist berechtigt, diese technischen und organisatorischen Maßnahmen dahingehend zu überprüfen, ob sie für die Risiken der zu verarbeitenden Daten ein angemessenes Schutzniveau bieten. Eine Änderung der getroffenen Sicherheitsmaßnahmen bleibt dem Auftragnehmer vorbehalten, wobei jedoch sichergestellt sein muss, dass das vertraglich vereinbarte Schutzniveau nicht unterschritten wird.

-

4.3. Der Auftragnehmer gewährleistet, seinen Pflichten nach Art. 32 Abs. 1 lit. d) DS-GVO nachzukommen, ein Verfahren zur regelmäßigen Überprüfung der Wirksamkeit der technischen und organisatorischen Maßnahmen zur Gewährleistung der Sicherheit der Verarbeitung einzusetzen.

-

4.4. Der Auftragnehmer unterstützt den Auftraggeber im Rahmen seiner Möglichkeiten bei der Erfüllung der Anfragen und Ansprüche betroffener Personen gem. Kapitel III der DS-GVO sowie bei der Einhaltung der in Art. 33 bis 36 DS-GVO genannten Pflichten.

-

4.5. Der Auftragnehmer gewährleistet, dass es den mit der Verarbeitung der Daten des Auftraggebers befassten Mitarbeiter und andere für den Auftragnehmer tätigen Personen untersagt ist, die Daten außerhalb der Weisung zu verarbeiten. Ferner gewährleistet der Auftragnehmer, dass sich die zur Verarbeitung der personenbezogenen Daten befugten Personen zur Vertraulichkeit verpflichtet haben oder einer angemessenen gesetzlichen Verschwiegenheitspflicht unterliegen. Die Vertraulichkeits-/ Verschwiegenheitspflicht besteht auch nach Beendigung des Auftrages fort.

-
-
- -
- -
-

4.6. Der Auftragnehmer unterrichtet den Auftraggeber unverzüglich, wenn ihm Verletzungen des Schutzes personenbezogener Daten des Auftraggebers bekannt werden. Der Auftragnehmer trifft die erforderlichen Maßnahmen zur Sicherung der Daten und zur Minderung möglicher nachteiliger Folgen der betroffenen Personen und spricht sich hierzu unverzüglich mit dem Auftraggeber ab.

-

4.7. Der Auftragnehmer nennt dem Auftraggeber den Ansprechpartner für im Rahmen des Vertrages anfallende Datenschutzfragen.

-

4.8. Der Auftragnehmer berichtigt oder löscht die vertragsgegenständlichen Daten, wenn der Auftraggeber dies anweist und dies vom Weisungsrahmen umfasst ist. Ist eine datenschutzkonforme Löschung oder eine entsprechende Einschränkung der Datenverarbeitung nicht möglich, übernimmt der Auftragnehmer die datenschutzkonforme Vernichtung von Datenträgern und sonstigen Materialien auf Grund einer Einzelbeauftragung durch den Auftraggeber oder gibt diese Datenträger an den Auftraggeber zurück, sofern nicht im Vertrag bereits vereinbart.

-

4.9. Daten, Datenträger sowie sämtliche sonstige Materialien sind nach Auftragsende auf Verlangen des Auftraggebers entweder herauszugeben oder zu löschen.

-

4.10. Im Falle einer Inanspruchnahme des Auftraggebers oder des Dritten durch eine betroffene Person hinsichtlich etwaiger Ansprüche nach Art. 82 DS-GVO, verpflichtet sich der Auftragnehmer den Auftraggeber bei der Abwehr des Anspruches im Rahmen seiner Möglichkeiten zu unterstützen.

-

4.11. Im Falle einer Inanspruchnahme des Auftraggebers durch den Dritten, verpflichtet sich der Auftragnehmer den Auftraggeber bei der Abwehr des Anspruches im Rahmen seiner Möglichkeiten zu unterstützen.

-
-
- -
-

5. PFLICHTEN DES AUFTRAGGEBERS

-
-

5.1. Der Auftraggeber hat den Auftragnehmer unverzüglich und vollständig zu informieren, wenn er in den Auftragsergebnissen Fehler oder Unregelmäßigkeiten bzgl. datenschutzrechtlicher Bestimmungen feststellt.

-

5.2. Im Falle einer Inanspruchnahme des Auftraggebers oder des Dritten durch eine betroffene Person hinsichtlich etwaiger Ansprüche nach Art. 82 DS-GVO, gilt §3 Abs. 10 entsprechend.

-

5.3. Der Auftraggeber nennt dem Auftragnehmer den Ansprechpartner für im Rahmen des Vertrages anfallende Datenschutzfragen.

-
-
- -
-

6. ANFRAGEN BETROFFENER PERSONEN

-
-

6.1. Wendet sich eine betroffene Person mit Forderungen zur Berichtigung, Löschung oder Auskunft an den Auftragnehmer, wird der Auftragnehmer die betroffene Person an den Auftraggeber verweisen und ggf. den Antrag der betroffenen Person unverzüglich an den Auftraggeber weiterleiten. Der Auftragnehmer unterstützt den Auftraggeber im Rahmen seiner Möglichkeiten bei der Erfüllung der jeweiligen Forderung.

-

6.2. Der Auftragnehmer haftet nicht, wenn das Ersuchen der betroffenen Person vom Auftraggeber nicht, nicht richtig oder nicht fristgerecht beantwortet wird.

-

6.3. Der Auftraggeber haftet nicht für Forderungen betroffener Personen, die dadurch entstehen, dass der Auftragnehmer das entsprechende Anliegen nicht zeitgerecht an den Auftraggeber übermittelt hat.

-
-
- -
-

7. NACHWEISMÖGLICHKEITEN

-
-

7.1. Der Auftragnehmer weist dem Auftraggeber die Einhaltung der in diesem Vertrag niedergelegten Pflichten mit geeigneten Mitteln nach.

-

7.2. Sollten im Einzelfall Inspektionen durch den Auftraggeber oder einen von diesem beauftragten Prüfer erforderlich sein, werden diese zu den üblichen Geschäftszeiten ohne Störung des Betriebsablaufs nach Anmeldung unter Berücksichtigung einer angemessenen Vorlaufzeit durchgeführt. Der Auftragnehmer darf diese von der Unterzeichnung einer Verschwiegenheitserklärung hinsichtlich der Daten anderer Kunden und der eingerichteten technischen und organisatorischen Maßnahmen abhängig machen. Sollte der durch den Auftraggeber beauftragte Prüfer in einem Wettbewerbsverhältnis zu dem Auftragnehmer stehen, hat der Auftragnehmer gegen diesen ein Einspruchsrecht

-
-
- - -
-

8. SUBUNTERNEHMER (WEITERE AUFTRAGSVERARBEITER)

-
-

8.1. Der Einsatz von Subunternehmern als weitere Auftragsverarbeiter ist nur zulässig, wenn der Auftraggeber vorher zugestimmt hat.

-

8.2. Ein zustimmungspflichtiges Subunternehmerverhältnis liegt vor, wenn der Auftragnehmer weitere Auftragnehmer mit der ganzen oder einer Teilleistung der im Vertrag vereinbarten Leistung beauftragt. Der Auftragnehmer wird mit diesen Dritten im erforderlichen Umfang Vereinbarungen treffen, um angemessene Datenschutz- und Informationssicherheitsmaßnahmen zu gewährleisten.

-

8.3. Erteilt der Auftragnehmer Aufträge an Subunternehmer, so obliegt es dem Auftragnehmer, seine datenschutzrechtlichen Pflichten aus diesem Vertrag dem Subunternehmer zu überbinden.

-
-
- -
-

9. INFORMATIONSPFLICHTEN, SCHRIFTFORMKLAUSEL, RECHTSWAHL

-
-

9.1. Sollten die Daten des Auftraggebers beim Auftragnehmer durch Pfändung oder Beschlagnahme, durch ein Insolvenz- oder Vergleichsverfahren oder durch sonstige Ereignisse oder Maßnahmen Dritter gefährdet werden, so hat der Auftragnehmer den Auftraggeber unverzüglich darüber zu informieren. Der Auftragnehmer wird alle in diesem Zusammenhang Verantwortlichen unverzüglich darüber informieren, dass die Hoheit und das Eigentum an den Daten ausschließlich beim Dritten als verantwortliche Person im Sinne der Datenschutz-Grundverordnung liegen.

-

9.2. Änderungen und Ergänzungen dieser Anlage und aller ihrer Bestandteile – einschließlich etwaiger Zusicherungen des Auftragnehmers – bedürfen einer schriftlichen Vereinbarung, die auch in einem elektronischen Format (Textform) erfolgen kann, und des ausdrücklichen Hinweises darauf, dass es sich um eine Änderung bzw. Ergänzung dieser Bedingungen handelt. Dies gilt auch für den Verzicht auf dieses Formerfordernis.

-

9.3. Bei etwaigen Widersprüchen gehen Regelungen dieser Anlage zum Datenschutz den Regelungen des Vertrages vor. Sollten einzelne Teile dieser Anlage unwirksam sein, so berührt dies die Wirksamkeit der Anlage im Übrigen nicht.

-

9.4. Es gilt das auf dem Hauptvertrag anwendbare Recht sowie Gerichtsstand.

-
-
- -
-
-

Für PROFIT PLANET (Auftraggeber)

- -
-
{{profitplanetSignature}}
-
{{currentDate}}
-
-

Datum, Unterschrift

-
-
-

Für den VP (Auftragnehmer)

-
- {{signatureImage}} -
{{fullName}}
-
{{currentDate}}
-
-

Name, Datum, Unterschrift

-
-
-
+ +
+
+
+

ABO Vertrag

+

Kaffee-/Tee-Service & automatische Wiederbestellungen

+
+
+
PROFIT PLANET GMBH
+
Liebenauer Hauptstraße 82c
+
A-8041 Graz
+
FN-649474 i
+
IBAN: AT16 2081 5000 4639 9507
+
Swift/BIC Code: STSPAT2GXXX
+
ATU82089605
+
+ +
+
+

Vertrag über automatische Wiederbestellungen (ABO)

+

Bitte alle Felder vollständig ausfüllen und Zutreffendes ankreuzen.

+
+
+
Vertragsnummer: {{contractNumber}}
+
Datum: {{currentDate}}
+
+
+ +

An die

+
+
+
Empfänger
+
{{recipientName}}
+
+
+
Adresse
+
{{recipientAddress}}
+
+
+ +
+
+
Affiliate
+
+
AFFILIATE NAME
+
{{affiliateName}}
+
+
+
+
Client
+
+
CLIENT NAME
+
{{clientName}}
+
+
+
+ +

Lieferadresse

+
+
+
+
+ KUNDE + FIRMA +
+
Vor- und Nachname
{{shippingFullName}}
+
Adresse
{{shippingStreet}}
+
PLZ / Ort
{{shippingPostalCode}}    {{shippingCity}}
+
+
+
Telefonnummer
{{shippingPhone}}
+
Mobil
{{shippingMobile}}
+
E-Mail-Adresse
{{shippingEmail}}
+
+
Bevorzugte Kontaktaufnahme
+
+ Telefon + E-Mail +
+
+
+
+ +
Rechnungsadresse: {{invoiceSameAsShippingMark}} wie Lieferadresse
+
+ +

Rechnungsadresse (falls abweichend)

+
+
+
+
+ FIRMA + KUNDE +
+
Vor- und Nachname
{{invoiceFullName}}
+
Adresse
{{invoiceStreet}}
+
PLZ / Ort
{{invoicePostalCode}}    {{invoiceCity}}
+
+
+
Telefonnummer
{{invoicePhone}}
+
Mobil
{{invoiceMobile}}
+
E-Mail-Adresse
{{invoiceEmail}}
+
+
Bevorzugte Kontaktaufnahme
+
+ Telefon + E-Mail +
+
+
+
+ +
+ FN: {{fnNumber}} + ATU: {{atuNumber}} + (falls zutreffend ausfüllen) +
+
+ +

Zutreffendes bitte ankreuzen

+
+
+ + Der Kunde/Käufer tätigt das gegenständliche Rechtsgeschäft als Unternehmer im Sinne des § 1 Abs 1 Z 1 KSchG, das heißt, das Geschäft gehört zum Betrieb seines Unternehmens. +
+
+ + Der Kunde/Käufer tätigt das gegenständliche Rechtsgeschäft als Konsument im Sinne des § 1 Abs 1 Z 2 KSchG. +
+
+ +

Angebote

+
+

+ Mindestbestellmenge für BIO Kaffee und BIO Tee und BIO Kakao beträgt pro Bestellung jeweils 120 Kapseln. + Preis pro Kapsel € 2,97 inkl. 20% MwSt. Preise und Konditionen gemäß gültigem PROFIT PLANET GMBH Tarif. +

+ + + + + + + + + + + + + + + + + +
TarifPreis pro Kapsel
Customer without abo2.97€
Customer with abo1.77€
+
+ +

Produktauswahl

+
+

Superfood Coffee – 60 Kapseln (bitte gewünschte Sorten ankreuzen / ergänzen)

+ {{selectedProductsHtml}} + +

+ Bei Angabe einer automatischen Wiederbestellung, gemäß den Regelungen in nachstehendem Punkt 3, erhält der Kunde in regelmäßigen Abständen, + BEGINNEND AM (Unterzeichnung des Vertrages) vorstehend eingetragene BIO Kaffee-Teemenge für die Dauer des Vertrages oder bis zum Widerruf der automatischen Wiederbestellung. + Der BIO Kaffee-Tee wird automatisch im Abstand von (zutreffendes bitte ankreuzen) +

+ +
+ 1 Monat + 2 Monate + 3 Monate +
+ +

fakturiert und innerhalb von drei bis fünf Werktagen an den Kunden geliefert.

+
+ +

Zahlungsart

+
+
+ Sepa + Kreditkarte + Sofortbanking +
+
+ Bitte senden Sie mir meine Rechnung per E-Mail zu! +
+
+ +
+ + +
\ No newline at end of file diff --git a/debug-pdf/template_4_sanitized_preview.html b/debug-pdf/template_4_sanitized_preview.html new file mode 100644 index 0000000..70e80be --- /dev/null +++ b/debug-pdf/template_4_sanitized_preview.html @@ -0,0 +1,620 @@ + + + + + + ABO Vertrag – Profit Planet GmbH + + + +
+
+
+

ABO Vertrag

+

Kaffee-/Tee-Service & automatische Wiederbestellungen

+
+
+
PROFIT PLANET GMBH
+
Liebenauer Hauptstraße 82c
+
A-8041 Graz
+
FN-649474 i
+
IBAN: AT16 2081 5000 4639 9507
+
Swift/BIC Code: STSPAT2GXXX
+
ATU82089605
+
+
+ +
+
+

Vertrag über automatische Wiederbestellungen (ABO)

+

Bitte alle Felder vollständig ausfüllen und Zutreffendes ankreuzen.

+
+
+
Vertragsnummer:
+
Datum: {{currentDate}}
+
+
+ +

An die

+
+
+
Empfänger
+
+
+
+
Adresse
+
+
+
+ +
+
+
Affiliate
+
+
AFFILIATE NAME
+
+
+
+
+
Client
+
+
CLIENT NAME
+
+
+
+
+ +

Lieferadresse

+
+
+
+
+ KUNDE + FIRMA +
+
Vor- und Nachname
+
Adresse
+
PLZ / Ort
  
+
+
+
Telefonnummer
+
Mobil
+
E-Mail-Adresse
+
+
Bevorzugte Kontaktaufnahme
+
+ Telefon + E-Mail +
+
+
+
+ +
Rechnungsadresse: wie Lieferadresse
+
+ +

Rechnungsadresse (falls abweichend)

+
+
+
+
+ FIRMA + KUNDE +
+
Vor- und Nachname
+
Adresse
+
PLZ / Ort
  
+
+
+
Telefonnummer
+
Mobil
+
E-Mail-Adresse
+
+
Bevorzugte Kontaktaufnahme
+
+ Telefon + E-Mail +
+
+
+
+ +
+ FN: + ATU: + (falls zutreffend ausfüllen) +
+
+ +

Zutreffendes bitte ankreuzen

+
+
+ + Der Kunde/Käufer tätigt das gegenständliche Rechtsgeschäft als Unternehmer im Sinne des § 1 Abs 1 Z 1 KSchG, das heißt, das Geschäft gehört zum Betrieb seines Unternehmens. +
+
+ + Der Kunde/Käufer tätigt das gegenständliche Rechtsgeschäft als Konsument im Sinne des § 1 Abs 1 Z 2 KSchG. +
+
+ +

Angebote

+
+

+ Mindestbestellmenge für BIO Kaffee und BIO Tee und BIO Kakao beträgt pro Bestellung jeweils 120 Kapseln. + Preis pro Kapsel € 2,97 inkl. 20% MwSt. Preise und Konditionen gemäß gültigem PROFIT PLANET GMBH Tarif. +

+ + + + + + + + + + + + + + + + + +
TarifPreis pro Kapsel
Customer without abo2.97€
Customer with abo1.77€
+
+ +

Produktauswahl

+
+

Superfood Coffee – 60 Kapseln (bitte gewünschte Sorten ankreuzen / ergänzen)

+ + +

+ Bei Angabe einer automatischen Wiederbestellung, gemäß den Regelungen in nachstehendem Punkt 3, erhält der Kunde in regelmäßigen Abständen, + BEGINNEND AM (Unterzeichnung des Vertrages) vorstehend eingetragene BIO Kaffee-Teemenge für die Dauer des Vertrages oder bis zum Widerruf der automatischen Wiederbestellung. + Der BIO Kaffee-Tee wird automatisch im Abstand von (zutreffendes bitte ankreuzen) +

+ +
+ 1 Monat + 2 Monate + 3 Monate +
+ +

fakturiert und innerhalb von drei bis fünf Werktagen an den Kunden geliefert.

+
+ +

Zahlungsart

+
+
+ Sepa + Kreditkarte + Sofortbanking +
+
+ Bitte senden Sie mir meine Rechnung per E-Mail zu! +
+
+ +
+ + +
+ + \ No newline at end of file diff --git a/debug-pdf/template_5_html_full.html b/debug-pdf/template_5_html_full.html new file mode 100644 index 0000000..432ba7b --- /dev/null +++ b/debug-pdf/template_5_html_full.html @@ -0,0 +1,620 @@ + + + + + + ABO Vertrag – Profit Planet GmbH + + + +
+
+
+

ABO Vertrag

+

Kaffee-/Tee-Service & automatische Wiederbestellungen

+
+
+
PROFIT PLANET GMBH
+
Liebenauer Hauptstraße 82c
+
A-8041 Graz
+
FN-649474 i
+
IBAN: AT16 2081 5000 4639 9507
+
Swift/BIC Code: STSPAT2GXXX
+
ATU82089605
+
+
+ +
+
+

Vertrag über automatische Wiederbestellungen (ABO)

+

Bitte alle Felder vollständig ausfüllen und Zutreffendes ankreuzen.

+
+
+
Vertragsnummer: {{contractNumber}}
+
Datum: {{currentDate}}
+
+
+ +

An die

+
+
+
Empfänger
+
{{recipientName}}
+
+
+
Adresse
+
{{recipientAddress}}
+
+
+ +
+
+
Affiliate
+
+
AFFILIATE NAME
+
{{affiliateName}}
+
+
+
+
Client
+
+
CLIENT NAME
+
{{clientName}}
+
+
+
+ +

Lieferadresse

+
+
+
+
+ KUNDE + FIRMA +
+
Vor- und Nachname
{{shippingFullName}}
+
Adresse
{{shippingStreet}}
+
PLZ / Ort
{{shippingPostalCode}}    {{shippingCity}}
+
+
+
Telefonnummer
{{shippingPhone}}
+
Mobil
{{shippingMobile}}
+
E-Mail-Adresse
{{shippingEmail}}
+
+
Bevorzugte Kontaktaufnahme
+
+ Telefon + E-Mail +
+
+
+
+ +
Rechnungsadresse: {{invoiceSameAsShippingMark}} wie Lieferadresse
+
+ +

Rechnungsadresse (falls abweichend)

+
+
+
+
+ FIRMA + KUNDE +
+
Vor- und Nachname
{{invoiceFullName}}
+
Adresse
{{invoiceStreet}}
+
PLZ / Ort
{{invoicePostalCode}}    {{invoiceCity}}
+
+
+
Telefonnummer
{{invoicePhone}}
+
Mobil
{{invoiceMobile}}
+
E-Mail-Adresse
{{invoiceEmail}}
+
+
Bevorzugte Kontaktaufnahme
+
+ Telefon + E-Mail +
+
+
+
+ +
+ FN: {{fnNumber}} + ATU: {{atuNumber}} + (falls zutreffend ausfüllen) +
+
+ +

Zutreffendes bitte ankreuzen

+
+
+ + Der Kunde/Käufer tätigt das gegenständliche Rechtsgeschäft als Unternehmer im Sinne des § 1 Abs 1 Z 1 KSchG, das heißt, das Geschäft gehört zum Betrieb seines Unternehmens. +
+
+ + Der Kunde/Käufer tätigt das gegenständliche Rechtsgeschäft als Konsument im Sinne des § 1 Abs 1 Z 2 KSchG. +
+
+ +

Angebote

+
+

+ Mindestbestellmenge für BIO Kaffee und BIO Tee und BIO Kakao beträgt pro Bestellung jeweils 120 Kapseln. + Preis pro Kapsel € 2,97 inkl. 20% MwSt. Preise und Konditionen gemäß gültigem PROFIT PLANET GMBH Tarif. +

+ + + + + + + + + + + + + + + + + +
TarifPreis pro Kapsel
Customer without abo2.97€
Customer with abo1.77€
+
+ +

Produktauswahl

+
+

Superfood Coffee – 60 Kapseln (bitte gewünschte Sorten ankreuzen / ergänzen)

+ {{selectedProductsHtml}} + +

+ Bei Angabe einer automatischen Wiederbestellung, gemäß den Regelungen in nachstehendem Punkt 3, erhält der Kunde in regelmäßigen Abständen, + BEGINNEND AM (Unterzeichnung des Vertrages) vorstehend eingetragene BIO Kaffee-Teemenge für die Dauer des Vertrages oder bis zum Widerruf der automatischen Wiederbestellung. + Der BIO Kaffee-Tee wird automatisch im Abstand von (zutreffendes bitte ankreuzen) +

+ +
+ 1 Monat + 2 Monate + 3 Monate +
+ +

fakturiert und innerhalb von drei bis fünf Werktagen an den Kunden geliefert.

+
+ +

Zahlungsart

+
+
+ Sepa + Kreditkarte + Sofortbanking +
+
+ Bitte senden Sie mir meine Rechnung per E-Mail zu! +
+
+ +
+ + +
+ + \ No newline at end of file diff --git a/debug-pdf/template_5_html_raw.bin b/debug-pdf/template_5_html_raw.bin new file mode 100644 index 0000000..432ba7b --- /dev/null +++ b/debug-pdf/template_5_html_raw.bin @@ -0,0 +1,620 @@ + + + + + + ABO Vertrag – Profit Planet GmbH + + + +
+
+
+

ABO Vertrag

+

Kaffee-/Tee-Service & automatische Wiederbestellungen

+
+
+
PROFIT PLANET GMBH
+
Liebenauer Hauptstraße 82c
+
A-8041 Graz
+
FN-649474 i
+
IBAN: AT16 2081 5000 4639 9507
+
Swift/BIC Code: STSPAT2GXXX
+
ATU82089605
+
+
+ +
+
+

Vertrag über automatische Wiederbestellungen (ABO)

+

Bitte alle Felder vollständig ausfüllen und Zutreffendes ankreuzen.

+
+
+
Vertragsnummer: {{contractNumber}}
+
Datum: {{currentDate}}
+
+
+ +

An die

+
+
+
Empfänger
+
{{recipientName}}
+
+
+
Adresse
+
{{recipientAddress}}
+
+
+ +
+
+
Affiliate
+
+
AFFILIATE NAME
+
{{affiliateName}}
+
+
+
+
Client
+
+
CLIENT NAME
+
{{clientName}}
+
+
+
+ +

Lieferadresse

+
+
+
+
+ KUNDE + FIRMA +
+
Vor- und Nachname
{{shippingFullName}}
+
Adresse
{{shippingStreet}}
+
PLZ / Ort
{{shippingPostalCode}}    {{shippingCity}}
+
+
+
Telefonnummer
{{shippingPhone}}
+
Mobil
{{shippingMobile}}
+
E-Mail-Adresse
{{shippingEmail}}
+
+
Bevorzugte Kontaktaufnahme
+
+ Telefon + E-Mail +
+
+
+
+ +
Rechnungsadresse: {{invoiceSameAsShippingMark}} wie Lieferadresse
+
+ +

Rechnungsadresse (falls abweichend)

+
+
+
+
+ FIRMA + KUNDE +
+
Vor- und Nachname
{{invoiceFullName}}
+
Adresse
{{invoiceStreet}}
+
PLZ / Ort
{{invoicePostalCode}}    {{invoiceCity}}
+
+
+
Telefonnummer
{{invoicePhone}}
+
Mobil
{{invoiceMobile}}
+
E-Mail-Adresse
{{invoiceEmail}}
+
+
Bevorzugte Kontaktaufnahme
+
+ Telefon + E-Mail +
+
+
+
+ +
+ FN: {{fnNumber}} + ATU: {{atuNumber}} + (falls zutreffend ausfüllen) +
+
+ +

Zutreffendes bitte ankreuzen

+
+
+ + Der Kunde/Käufer tätigt das gegenständliche Rechtsgeschäft als Unternehmer im Sinne des § 1 Abs 1 Z 1 KSchG, das heißt, das Geschäft gehört zum Betrieb seines Unternehmens. +
+
+ + Der Kunde/Käufer tätigt das gegenständliche Rechtsgeschäft als Konsument im Sinne des § 1 Abs 1 Z 2 KSchG. +
+
+ +

Angebote

+
+

+ Mindestbestellmenge für BIO Kaffee und BIO Tee und BIO Kakao beträgt pro Bestellung jeweils 120 Kapseln. + Preis pro Kapsel € 2,97 inkl. 20% MwSt. Preise und Konditionen gemäß gültigem PROFIT PLANET GMBH Tarif. +

+ + + + + + + + + + + + + + + + + +
TarifPreis pro Kapsel
Customer without abo2.97€
Customer with abo1.77€
+
+ +

Produktauswahl

+
+

Superfood Coffee – 60 Kapseln (bitte gewünschte Sorten ankreuzen / ergänzen)

+ {{selectedProductsHtml}} + +

+ Bei Angabe einer automatischen Wiederbestellung, gemäß den Regelungen in nachstehendem Punkt 3, erhält der Kunde in regelmäßigen Abständen, + BEGINNEND AM (Unterzeichnung des Vertrages) vorstehend eingetragene BIO Kaffee-Teemenge für die Dauer des Vertrages oder bis zum Widerruf der automatischen Wiederbestellung. + Der BIO Kaffee-Tee wird automatisch im Abstand von (zutreffendes bitte ankreuzen) +

+ +
+ 1 Monat + 2 Monate + 3 Monate +
+ +

fakturiert und innerhalb von drei bis fünf Werktagen an den Kunden geliefert.

+
+ +

Zahlungsart

+
+
+ Sepa + Kreditkarte + Sofortbanking +
+
+ Bitte senden Sie mir meine Rechnung per E-Mail zu! +
+
+ +
+ + +
+ + \ No newline at end of file diff --git a/debug-pdf/template_5_sanitized_preview.html b/debug-pdf/template_5_sanitized_preview.html new file mode 100644 index 0000000..70e80be --- /dev/null +++ b/debug-pdf/template_5_sanitized_preview.html @@ -0,0 +1,620 @@ + + + + + + ABO Vertrag – Profit Planet GmbH + + + +
+
+
+

ABO Vertrag

+

Kaffee-/Tee-Service & automatische Wiederbestellungen

+
+
+
PROFIT PLANET GMBH
+
Liebenauer Hauptstraße 82c
+
A-8041 Graz
+
FN-649474 i
+
IBAN: AT16 2081 5000 4639 9507
+
Swift/BIC Code: STSPAT2GXXX
+
ATU82089605
+
+
+ +
+
+

Vertrag über automatische Wiederbestellungen (ABO)

+

Bitte alle Felder vollständig ausfüllen und Zutreffendes ankreuzen.

+
+
+
Vertragsnummer:
+
Datum: {{currentDate}}
+
+
+ +

An die

+
+
+
Empfänger
+
+
+
+
Adresse
+
+
+
+ +
+
+
Affiliate
+
+
AFFILIATE NAME
+
+
+
+
+
Client
+
+
CLIENT NAME
+
+
+
+
+ +

Lieferadresse

+
+
+
+
+ KUNDE + FIRMA +
+
Vor- und Nachname
+
Adresse
+
PLZ / Ort
  
+
+
+
Telefonnummer
+
Mobil
+
E-Mail-Adresse
+
+
Bevorzugte Kontaktaufnahme
+
+ Telefon + E-Mail +
+
+
+
+ +
Rechnungsadresse: wie Lieferadresse
+
+ +

Rechnungsadresse (falls abweichend)

+
+
+
+
+ FIRMA + KUNDE +
+
Vor- und Nachname
+
Adresse
+
PLZ / Ort
  
+
+
+
Telefonnummer
+
Mobil
+
E-Mail-Adresse
+
+
Bevorzugte Kontaktaufnahme
+
+ Telefon + E-Mail +
+
+
+
+ +
+ FN: + ATU: + (falls zutreffend ausfüllen) +
+
+ +

Zutreffendes bitte ankreuzen

+
+
+ + Der Kunde/Käufer tätigt das gegenständliche Rechtsgeschäft als Unternehmer im Sinne des § 1 Abs 1 Z 1 KSchG, das heißt, das Geschäft gehört zum Betrieb seines Unternehmens. +
+
+ + Der Kunde/Käufer tätigt das gegenständliche Rechtsgeschäft als Konsument im Sinne des § 1 Abs 1 Z 2 KSchG. +
+
+ +

Angebote

+
+

+ Mindestbestellmenge für BIO Kaffee und BIO Tee und BIO Kakao beträgt pro Bestellung jeweils 120 Kapseln. + Preis pro Kapsel € 2,97 inkl. 20% MwSt. Preise und Konditionen gemäß gültigem PROFIT PLANET GMBH Tarif. +

+ + + + + + + + + + + + + + + + + +
TarifPreis pro Kapsel
Customer without abo2.97€
Customer with abo1.77€
+
+ +

Produktauswahl

+
+

Superfood Coffee – 60 Kapseln (bitte gewünschte Sorten ankreuzen / ergänzen)

+ + +

+ Bei Angabe einer automatischen Wiederbestellung, gemäß den Regelungen in nachstehendem Punkt 3, erhält der Kunde in regelmäßigen Abständen, + BEGINNEND AM (Unterzeichnung des Vertrages) vorstehend eingetragene BIO Kaffee-Teemenge für die Dauer des Vertrages oder bis zum Widerruf der automatischen Wiederbestellung. + Der BIO Kaffee-Tee wird automatisch im Abstand von (zutreffendes bitte ankreuzen) +

+ +
+ 1 Monat + 2 Monate + 3 Monate +
+ +

fakturiert und innerhalb von drei bis fünf Werktagen an den Kunden geliefert.

+
+ +

Zahlungsart

+
+
+ Sepa + Kreditkarte + Sofortbanking +
+
+ Bitte senden Sie mir meine Rechnung per E-Mail zu! +
+
+ +
+ + +
+ + \ No newline at end of file diff --git a/models/Abonemment.js b/models/Abonemment.js index 96e57cc..f2b9b4f 100644 --- a/models/Abonemment.js +++ b/models/Abonemment.js @@ -24,6 +24,8 @@ class Abonemment { this.referred_by = row.referred_by; // NEW this.purchaser_user_id = row.purchaser_user_id ?? null; // NEW this.user_id = row.user_id ?? null; // NEW: map owner user_id + this.contract_number = row.contract_number ?? null; + this.contract_storage_key = row.contract_storage_key ?? null; this.created_at = row.created_at; this.updated_at = row.updated_at; } diff --git a/package-lock.json b/package-lock.json index cd95b67..ceb6f91 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2644,7 +2644,8 @@ "version": "0.0.1581282", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1581282.tgz", "integrity": "sha512-nv7iKtNZQshSW2hKzYNr46nM/Cfh5SEvE2oV0/SEGgc9XupIY5ggf84Cz8eJIkBce7S3bmTAauFD6aysMpnqsQ==", - "license": "BSD-3-Clause" + "license": "BSD-3-Clause", + "peer": true }, "node_modules/dfa": { "version": "1.2.0", @@ -2990,15 +2991,6 @@ "fxparser": "src/cli/cli.js" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "license": "MIT", - "dependencies": { - "pend": "~1.2.0" - } - }, "node_modules/fecha": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", @@ -5098,13 +5090,16 @@ } }, "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.2.1.tgz", + "integrity": "sha512-k1isifdbpNSFEHFJ1ZY4YDewv0IH9FR61lDetaRMD3j2ae3bIXGV+7c+LHCqtQGofSd8PIyV4X6+dHMAnSr60A==", "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" + "pend": "~1.2.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/zod": { diff --git a/package.json b/package.json index 2320352..f12c600 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,8 @@ "@aws-sdk/xml-builder": { "fast-xml-parser": "^5.3.4", "ajv": "8.18.0" - } + }, + "yauzl": "^3.2.1" }, "dependencies": { "@aws-sdk/client-s3": "^3.992.0", diff --git a/repositories/abonemments/AbonemmentRepository.js b/repositories/abonemments/AbonemmentRepository.js index 596b3f8..3c442bd 100644 --- a/repositories/abonemments/AbonemmentRepository.js +++ b/repositories/abonemments/AbonemmentRepository.js @@ -182,6 +182,29 @@ class AbonemmentRepository { return this.getAbonementById(id); } + async updateContractInfo(id, { contractNumber = null, storageKey = null } = {}) { + const sets = []; + const params = []; + + if (await this.hasColumn('contract_number') && contractNumber) { + sets.push('contract_number = ?'); + params.push(String(contractNumber)); + } + + if (await this.hasColumn('contract_storage_key') && storageKey) { + sets.push('contract_storage_key = ?'); + params.push(String(storageKey)); + } + + if (!sets.length) return; + + sets.push('updated_at = NOW()'); + await pool.query( + `UPDATE coffee_abonements SET ${sets.join(', ')} WHERE id = ?`, + [...params, id], + ); + } + async appendHistory(abonementId, eventType, actorUserId, details = {}, eventAt = new Date()) { await pool.query( `INSERT INTO coffee_abonement_history diff --git a/repositories/settings/DashboardPlatformsRepository.js b/repositories/settings/DashboardPlatformsRepository.js new file mode 100644 index 0000000..5ae8a9a --- /dev/null +++ b/repositories/settings/DashboardPlatformsRepository.js @@ -0,0 +1,142 @@ +const pool = require('../../database/database'); + +class DashboardPlatformsRepository { + async _hasTable() { + const [rows] = await pool.query( + `SELECT 1 + FROM INFORMATION_SCHEMA.TABLES + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'dashboard_plattforms' + LIMIT 1` + ); + return Array.isArray(rows) && rows.length > 0; + } + + _mapRow(row) { + if (!row) return null; + return { + id: row.id, + title: row.title, + description: row.description ?? '', + href: row.href, + icon: row.icon ?? '', + color: row.color ?? '', + state: row.state !== 0 && row.state !== false, + disabled: row.disabled === 1 || row.disabled === true, + disabledText: row.disabled_text ?? null, + sortOrder: Number.isFinite(Number(row.sort_order)) ? Number(row.sort_order) : 0, + }; + } + + async list() { + const has = await this._hasTable(); + if (!has) return []; + + const [rows] = await pool.query( + `SELECT id, title, description, href, icon, color, state, disabled, disabled_text, sort_order + FROM dashboard_plattforms + ORDER BY sort_order ASC, title ASC` + ); + return (rows || []).map(r => this._mapRow(r)); + } + + async listPublic() { + const has = await this._hasTable(); + if (!has) return []; + + const [rows] = await pool.query( + `SELECT id, title, description, href, icon, color, state, disabled, disabled_text, sort_order + FROM dashboard_plattforms + WHERE state = 1 + ORDER BY sort_order ASC, title ASC` + ); + return (rows || []).map(r => this._mapRow(r)); + } + + async getById(id) { + const has = await this._hasTable(); + if (!has) return null; + + const [rows] = await pool.query( + `SELECT id, title, description, href, icon, color, state, disabled, disabled_text, sort_order + FROM dashboard_plattforms + WHERE id = ? + LIMIT 1`, + [id] + ); + return this._mapRow(rows?.[0]); + } + + async create(platform) { + const has = await this._hasTable(); + if (!has) throw new Error('dashboard_plattforms table missing'); + + await pool.query( + `INSERT INTO dashboard_plattforms + (id, title, description, href, icon, color, state, disabled, disabled_text, sort_order) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, + [ + platform.id, + platform.title, + platform.description ?? '', + platform.href, + platform.icon ?? '', + platform.color ?? '', + platform.state ? 1 : 0, + platform.disabled ? 1 : 0, + platform.disabledText ?? null, + Number.isFinite(Number(platform.sortOrder)) ? Number(platform.sortOrder) : 0, + ] + ); + + return this.getById(platform.id); + } + + async update(id, fields) { + const has = await this._hasTable(); + if (!has) throw new Error('dashboard_plattforms table missing'); + + const [result] = await pool.query( + `UPDATE dashboard_plattforms + SET + title = ?, + description = ?, + href = ?, + icon = ?, + color = ?, + disabled = ?, + disabled_text = ?, + sort_order = ? + WHERE id = ?`, + [ + fields.title, + fields.description ?? '', + fields.href, + fields.icon ?? '', + fields.color ?? '', + fields.disabled ? 1 : 0, + fields.disabledText ?? null, + Number.isFinite(Number(fields.sortOrder)) ? Number(fields.sortOrder) : 0, + id, + ] + ); + + if (!result?.affectedRows) return null; + return this.getById(id); + } + + async setState(id, state) { + const has = await this._hasTable(); + if (!has) throw new Error('dashboard_plattforms table missing'); + + const [result] = await pool.query( + `UPDATE dashboard_plattforms SET state = ? WHERE id = ?`, + [state ? 1 : 0, id] + ); + + if (!result?.affectedRows) return null; + return this.getById(id); + } +} + +module.exports = DashboardPlatformsRepository; diff --git a/repositories/template/DocumentTemplateRepository.js b/repositories/template/DocumentTemplateRepository.js index c3355d7..0d7c708 100644 --- a/repositories/template/DocumentTemplateRepository.js +++ b/repositories/template/DocumentTemplateRepository.js @@ -22,9 +22,10 @@ class DocumentTemplateRepository { const lang = String(data.lang); const allowedUserTypes = new Set(['personal', 'company', 'both']); const user_type = allowedUserTypes.has(data.user_type || data.userType) ? (data.user_type || data.userType) : 'both'; - const allowedContractTypes = new Set(['contract', 'gdpr']); + const allowedContractTypes = new Set(['contract', 'gdpr', 'abo']); + const normalizeContractType = (value) => (value === undefined || value === null) ? value : String(value).trim().toLowerCase(); const contract_type = type === 'contract' - ? (allowedContractTypes.has(data.contract_type || data.contractType) ? (data.contract_type || data.contractType) : null) + ? (allowedContractTypes.has(normalizeContractType(data.contract_type || data.contractType)) ? normalizeContractType(data.contract_type || data.contractType) : null) : null; const finalContractType = type === 'contract' ? (contract_type || 'contract') : null; @@ -152,7 +153,10 @@ class DocumentTemplateRepository { // - overlapping user_type (personal/company/both) async deactivateOtherActiveContracts({ excludeId, contract_type, lang, user_type }, conn) { logger.info('DocumentTemplateRepository.deactivateOtherActiveContracts:start', { excludeId, contract_type, lang, user_type }); - const safeContractType = (contract_type === 'gdpr' || contract_type === 'contract') ? contract_type : 'contract'; + const normalizedContractType = (contract_type === undefined || contract_type === null) ? '' : String(contract_type).trim().toLowerCase(); + const safeContractType = (normalizedContractType === 'gdpr' || normalizedContractType === 'contract' || normalizedContractType === 'abo') + ? normalizedContractType + : 'contract'; const safeLang = (lang === 'en' || lang === 'de') ? lang : 'en'; const safeUserType = (user_type === 'personal' || user_type === 'company' || user_type === 'both') ? user_type : 'both'; diff --git a/routes/getRoutes.js b/routes/getRoutes.js index dc60a58..436795e 100644 --- a/routes/getRoutes.js +++ b/routes/getRoutes.js @@ -28,6 +28,8 @@ const NewsController = require('../controller/news/NewsController'); const InvoiceController = require('../controller/invoice/InvoiceController'); // NEW const DevManagementController = require('../controller/dev/DevManagementController'); const CompanySettingsController = require('../controller/admin/CompanySettingsController'); +const DashboardPlatformsController = require('../controller/admin/DashboardPlatformsController'); +const ShippingFeesController = require('../controller/admin/ShippingFeesController'); // small helpers copied from original files @@ -64,6 +66,14 @@ router.get('/admin/server-status', authMiddleware, adminOnly, ServerStatusContro router.get('/admin/dev/exoscale/folder-structure-issues', authMiddleware, adminOnly, DevManagementController.listFolderStructureIssues); router.get('/admin/dev/exoscale/loose-files', authMiddleware, adminOnly, DevManagementController.listLooseFiles); router.get('/admin/dev/exoscale/ghost-directories', authMiddleware, adminOnly, DevManagementController.listGhostDirectories); +// Admin: dashboard platforms +router.get('/admin/dashboard-platforms', authMiddleware, adminOnly, DashboardPlatformsController.list); + +// Public: dashboard platforms (active only) +router.get('/dashboard-platforms', DashboardPlatformsController.listPublic); + +// Public: shipping fees (60/120) +router.get('/shipping-fees', ShippingFeesController.listPublic); // Contract preview for admin: latest active by user type router.get('/admin/contracts/:id/preview', authMiddleware, adminOnly, DocumentTemplateController.previewLatestForUser); // Admin: list all contract documents for a user @@ -100,6 +110,9 @@ router.get('/contracts/company', authMiddleware, (req, res) => { // User: preview latest active contract (HTML) for authenticated user router.get('/contracts/preview/latest', authMiddleware, DocumentTemplateController.previewLatestForMe); +// User: preview latest active ABO contract (HTML) for authenticated user +router.get('/contracts/abo/active', authMiddleware, DocumentTemplateController.previewLatestAboForMe); + // documentTemplates.js GETs router.get('/document-templates', authMiddleware, DocumentTemplateController.listTemplates); router.get('/document-templates/:id', authMiddleware, DocumentTemplateController.getTemplate); diff --git a/routes/patchRoutes.js b/routes/patchRoutes.js index 43fd94e..ff78e8e 100644 --- a/routes/patchRoutes.js +++ b/routes/patchRoutes.js @@ -14,6 +14,7 @@ const AffiliateController = require('../controller/affiliate/AffiliateController const NewsController = require('../controller/news/NewsController'); const AbonemmentController = require('../controller/abonemments/AbonemmentController'); const InvoiceController = require('../controller/invoice/InvoiceController'); +const DashboardPlatformsController = require('../controller/admin/DashboardPlatformsController'); const multer = require('multer'); const upload = multer({ storage: multer.memoryStorage() }); @@ -60,6 +61,9 @@ router.patch('/admin/news/:id/status', authMiddleware, adminOnly, NewsController // Admin: update invoice status router.patch('/admin/invoices/:id/status', authMiddleware, adminOnly, InvoiceController.updateStatus); +// Admin: dashboard platforms state +router.patch('/admin/dashboard-platforms/:id/state', authMiddleware, adminOnly, DashboardPlatformsController.setState); + // Personal profile (self-service) - no admin guard router.patch('/profile/personal/basic', authMiddleware, PersonalProfileController.updateBasic); router.patch('/profile/personal/bank', authMiddleware, PersonalProfileController.updateBank); diff --git a/routes/postRoutes.js b/routes/postRoutes.js index 52c640b..d04e3ef 100644 --- a/routes/postRoutes.js +++ b/routes/postRoutes.js @@ -31,6 +31,7 @@ const AbonemmentController = require('../controller/abonemments/AbonemmentContro const NewsController = require('../controller/news/NewsController'); const InvoiceController = require('../controller/invoice/InvoiceController'); // NEW const DevManagementController = require('../controller/dev/DevManagementController'); +const DashboardPlatformsController = require('../controller/admin/DashboardPlatformsController'); const multer = require('multer'); const upload = multer({ storage: multer.memoryStorage() }); @@ -163,6 +164,9 @@ router.post('/admin/affiliates', authMiddleware, adminOnly, upload.single('logo' // NEW: Admin create news with image upload router.post('/admin/news', authMiddleware, adminOnly, upload.single('image'), NewsController.create); +// NEW: Admin dashboard platforms +router.post('/admin/dashboard-platforms', authMiddleware, adminOnly, DashboardPlatformsController.create); + // NEW: Dev Management SQL dump import (admin + super_admin) router.post('/admin/dev/sql', authMiddleware, adminOnly, upload.single('file'), DevManagementController.importSqlDump); // NEW: Dev Management Exoscale folder structure + loose file actions (admin + super_admin) diff --git a/routes/putRoutes.js b/routes/putRoutes.js index b0f4af3..de17da9 100644 --- a/routes/putRoutes.js +++ b/routes/putRoutes.js @@ -7,6 +7,8 @@ const AdminUserController = require('../controller/admin/AdminUserController'); const DocumentTemplateController = require('../controller/documentTemplate/DocumentTemplateController'); const CoffeeController = require('../controller/admin/CoffeeController'); const CompanySettingsController = require('../controller/admin/CompanySettingsController'); +const DashboardPlatformsController = require('../controller/admin/DashboardPlatformsController'); +const ShippingFeesController = require('../controller/admin/ShippingFeesController'); const multer = require('multer'); const upload = multer({ storage: multer.memoryStorage() }); @@ -21,4 +23,10 @@ router.put('/admin/coffee/:id', authMiddleware, adminOnly, upload.single('pictur // Admin: update company settings (invoice address etc.) router.put('/admin/company-settings', authMiddleware, adminOnly, CompanySettingsController.update); +// Admin: update dashboard platform +router.put('/admin/dashboard-platforms/:id', authMiddleware, adminOnly, DashboardPlatformsController.update); + +// Admin: update shipping fee for a piece count (60/120) +router.put('/admin/shipping-fees/:pieceCount', authMiddleware, adminOnly, ShippingFeesController.updatePrice); + module.exports = router; diff --git a/scripts/createAdminUser.js b/scripts/createAdminUser.js index a75482f..f5af814 100644 --- a/scripts/createAdminUser.js +++ b/scripts/createAdminUser.js @@ -5,8 +5,8 @@ const argon2 = require('argon2'); async function createAdminUser() { // const adminEmail = process.env.ADMIN_EMAIL || 'office@profit-planet.com'; - // const adminEmail = process.env.ADMIN_EMAIL || 'alexander.ibrahim.ai@gmail.com'; - const adminEmail = process.env.ADMIN_EMAIL || 'loki.aahi@gmail.com'; + const adminEmail = process.env.ADMIN_EMAIL || 'alexander.ibrahim.ai@gmail.com'; + // const adminEmail = process.env.ADMIN_EMAIL || 'loki.aahi@gmail.com'; const adminPassword = process.env.ADMIN_PASSWORD || 'Chalanger75$%'; // const adminPassword = process.env.ADMIN_PASSWORD || 'W.profit-planet.com.2025'; const firstName = process.env.ADMIN_FIRST_NAME || 'Admin'; diff --git a/services/abonemments/AboContractService.js b/services/abonemments/AboContractService.js new file mode 100644 index 0000000..b7ef66b --- /dev/null +++ b/services/abonemments/AboContractService.js @@ -0,0 +1,187 @@ +const fs = require('fs'); +const path = require('path'); +const puppeteer = require('puppeteer'); +const { PutObjectCommand } = require('@aws-sdk/client-s3'); +const { s3: sharedExoscaleClient } = require('../../utils/exoscaleUploader'); +const DocumentTemplateService = require('../template/DocumentTemplateService'); +const MailService = require('../email/MailService'); +const { logger } = require('../../middleware/logger'); + +class AboContractService { + constructor() { + this.templatePath = path.join(__dirname, '..', '..', 'templates', 'abo', 'abo-contract-template.html'); + } + + _escapeHtml(value) { + return String(value ?? '') + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); + } + + _formatDateTime(d = new Date()) { + const pad = (n) => String(n).padStart(2, '0'); + return `${pad(d.getDate())}.${pad(d.getMonth() + 1)}.${d.getFullYear()} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`; + } + + _sanitizeKeyPart(input, fallback) { + const raw = String(input ?? '').trim(); + const safe = raw.replace(/[^a-zA-Z0-9._-]+/g, '_').replace(/^_+|_+$/g, '').slice(0, 80); + return safe || fallback; + } + + _renderTemplate(template, variables, { rawKeys = new Set() } = {}) { + if (!template) return ''; + return template.replace(/{{\s*([\w]+)\s*}}/g, (_, key) => { + const value = variables[key]; + if (value === undefined || value === null) return ''; + if (rawKeys.has(key)) return String(value); + return this._escapeHtml(String(value)); + }); + } + + _buildSelectedProductsHtml(abonement) { + const breakdown = Array.isArray(abonement?.pack_breakdown) ? abonement.pack_breakdown : []; + if (!breakdown.length) return '

-

'; + + const rows = breakdown.map((item) => { + const title = this._escapeHtml(item?.coffee_title || item?.title || 'Coffee'); + const packs = Number(item?.packs ?? item?.quantity ?? 0); + return `
  • ${title} — ${Number.isFinite(packs) ? packs : 0} pack(s)
  • `; + }).join(''); + + return `
      ${rows}
    `; + } + + _buildSignatureImgHtml(signatureDataUrl) { + const s = typeof signatureDataUrl === 'string' ? signatureDataUrl.trim() : ''; + if (!s) return ''; + // Basic safety: only accept data:image/... urls + if (!/^data:image\//i.test(s)) return ''; + const escaped = this._escapeHtml(s); + return `Signature`; + } + + async _renderPdfFromHtml(html) { + const browser = await puppeteer.launch({ + headless: 'new', + args: ['--no-sandbox', '--disable-setuid-sandbox'], + }); + try { + const page = await browser.newPage(); + await page.setContent(html, { waitUntil: 'networkidle0' }); + const pdfBuffer = await page.pdf({ + format: 'A4', + printBackground: true, + margin: { top: '16mm', right: '14mm', bottom: '16mm', left: '14mm' }, + }); + return Buffer.isBuffer(pdfBuffer) ? pdfBuffer : Buffer.from(pdfBuffer); + } finally { + await browser.close(); + } + } + + async generateUploadAndEmail({ + abonement, + actorUser, + contractNumber, + signatureDataUrl, + lang = 'en', + }) { + if (!abonement?.id) throw new Error('abonement is required'); + + let template; + try { + template = fs.readFileSync(this.templatePath, 'utf8'); + } catch (e) { + logger.error('AboContractService:template_missing', { templatePath: this.templatePath, message: e?.message }); + throw new Error('ABO contract template missing'); + } + + const displayContractNumber = String(contractNumber || '').trim() || `ABO-${abonement.id}`; + const contractKeyPart = this._sanitizeKeyPart(displayContractNumber, `abo-${abonement.id}`); + + let profitplanetSignature = ''; + try { + const sig = await DocumentTemplateService.getProfitPlanetSignatureTag({ maxW: 300, maxH: 300 }); + profitplanetSignature = sig?.tag || ''; + } catch (e) { + logger.warn('AboContractService:getProfitPlanetSignatureTag_failed', { message: e?.message }); + } + + const variables = { + contractNumber: displayContractNumber, + currentDate: this._formatDateTime(new Date()), + firstName: abonement.first_name || '', + lastName: abonement.last_name || '', + email: abonement.email || '', + street: abonement.street || '', + postalCode: abonement.postal_code || '', + city: abonement.city || '', + country: abonement.country || '', + frequency: abonement.frequency || '', + price: abonement.price != null ? String(abonement.price) : '', + currency: abonement.currency || 'EUR', + selectedProductsHtml: this._buildSelectedProductsHtml(abonement), + profitplanetSignature, + signatureImage: this._buildSignatureImgHtml(signatureDataUrl), + }; + + const html = this._renderTemplate(template, variables, { + rawKeys: new Set(['selectedProductsHtml', 'profitplanetSignature', 'signatureImage']), + }); + + const pdfBuffer = await this._renderPdfFromHtml(html); + + const key = `abo/${abonement.id}/${contractKeyPart}.pdf`; + await sharedExoscaleClient.send(new PutObjectCommand({ + Bucket: process.env.EXOSCALE_BUCKET, + Key: key, + Body: pdfBuffer, + ContentType: 'application/pdf', + })); + + const recipientEmail = abonement.email || actorUser?.email; + if (recipientEmail) { + const isDe = lang === 'de'; + const subject = isDe + ? `ProfitPlanet Vertrag ${displayContractNumber}` + : `ProfitPlanet Contract ${displayContractNumber}`; + + const text = isDe + ? 'Ihr unterschriebener Vertrag ist als PDF im Anhang.' + : 'Your signed contract is attached as a PDF.'; + + const mailHtml = ` + + + +

    ${isDe ? 'Hallo' : 'Hi'},

    +

    ${isDe ? 'Ihr unterschriebener Vertrag ist als PDF im Anhang.' : 'Your signed contract is attached as a PDF.'}

    +

    ${isDe ? 'Vertragsnummer' : 'Contract number'}: ${this._escapeHtml(displayContractNumber)}

    +

    ${isDe ? 'Viele Grüße' : 'Best regards'},
    ProfitPlanet

    + +`; + + await MailService.sendAboContractEmail({ + email: recipientEmail, + subject, + text, + html: mailHtml, + lang, + attachments: [{ + name: `${contractKeyPart}.pdf`, + content: pdfBuffer.toString('base64'), + }], + }); + } else { + logger.warn('AboContractService:missing_recipient_email', { abonementId: abonement.id }); + } + + return { storageKey: key, contractNumber: displayContractNumber }; + } +} + +module.exports = AboContractService; diff --git a/services/abonemments/AbonemmentService.js b/services/abonemments/AbonemmentService.js index 3b90fe1..81b93a1 100644 --- a/services/abonemments/AbonemmentService.js +++ b/services/abonemments/AbonemmentService.js @@ -1,6 +1,7 @@ const pool = require('../../database/database'); const AbonemmentRepository = require('../../repositories/abonemments/AbonemmentRepository'); const InvoiceService = require('../invoice/InvoiceService'); // NEW +const AboContractService = require('./AboContractService'); const UnitOfWork = require('../../database/UnitOfWork'); const ReferralService = require('../referral/ReferralService'); const ReferralTokenRepository = require('../../repositories/referral/ReferralTokenRepository'); @@ -10,6 +11,7 @@ class AbonemmentService { constructor() { this.repo = new AbonemmentRepository(); this.invoiceService = new InvoiceService(); // NEW + this.aboContractService = new AboContractService(); } isAdmin(user) { @@ -57,6 +59,8 @@ class AbonemmentService { country, frequency, startDate, + contractNumber, + signatureDataUrl, actorUser, referredBy, // NEW: referred_by field }) { @@ -166,6 +170,48 @@ class AbonemmentService { pack_group: abonement?.pack_group, }); + // NEW: issue ABO contract PDF (best-effort) + if (signatureDataUrl) { + try { + if (!abonement.contract_storage_key) { + const lang = actorUser?.lang || actorUser?.language || 'en'; + const issued = await this.aboContractService.generateUploadAndEmail({ + abonement, + actorUser, + contractNumber, + signatureDataUrl, + lang, + }); + + await this.repo.updateContractInfo(abonement.id, { + contractNumber: issued.contractNumber, + storageKey: issued.storageKey, + }); + + await this.repo.appendHistory( + abonement.id, + 'abo_contract_issued', + actorUser?.id || null, + { contractNumber: issued.contractNumber, storageKey: issued.storageKey, pack_group: abonement.pack_group }, + new Date(), + ); + } + } catch (e) { + console.error('[SUBSCRIBE ORDER] ABO contract generation failed:', e); + try { + await this.repo.appendHistory( + abonement.id, + 'abo_contract_failed', + actorUser?.id || null, + { message: e?.message || String(e), pack_group: abonement.pack_group }, + new Date(), + ); + } catch (_) {} + } + } else { + console.warn('[SUBSCRIBE ORDER] No signatureDataUrl provided; skipping ABO contract PDF generation.'); + } + // NEW: issue invoice for first period and append history try { const invoice = await this.invoiceService.issueForAbonement( @@ -267,6 +313,8 @@ class AbonemmentService { recipientName, recipientEmail, recipientNotes, + contractNumber, + signatureDataUrl, actorUser, referredBy, // NEW: referred_by field }) { @@ -357,6 +405,50 @@ class AbonemmentService { pack_group: abonement?.pack_group, }); + // NEW: only generate contract when this is a new subscription (not merging into existing) + if (!existing) { + if (signatureDataUrl) { + try { + if (!abonement.contract_storage_key) { + const lang = actorUser?.lang || actorUser?.language || 'en'; + const issued = await this.aboContractService.generateUploadAndEmail({ + abonement, + actorUser, + contractNumber, + signatureDataUrl, + lang, + }); + + await this.repo.updateContractInfo(abonement.id, { + contractNumber: issued.contractNumber, + storageKey: issued.storageKey, + }); + + await this.repo.appendHistory( + abonement.id, + 'abo_contract_issued', + actorUser?.id || null, + { contractNumber: issued.contractNumber, storageKey: issued.storageKey, pack_group: abonement.pack_group }, + new Date(), + ); + } + } catch (e) { + console.error('[SUBSCRIBE] ABO contract generation failed:', e); + try { + await this.repo.appendHistory( + abonement.id, + 'abo_contract_failed', + actorUser?.id || null, + { message: e?.message || String(e), pack_group: abonement.pack_group }, + new Date(), + ); + } catch (_) {} + } + } else { + console.warn('[SUBSCRIBE] No signatureDataUrl provided; skipping ABO contract PDF generation.'); + } + } + // NEW: issue invoice for first period and append history try { const invoice = await this.invoiceService.issueForAbonement( diff --git a/services/contracts/ContractUploadService.js b/services/contracts/ContractUploadService.js index c17fbf4..a8beb97 100644 --- a/services/contracts/ContractUploadService.js +++ b/services/contracts/ContractUploadService.js @@ -232,6 +232,12 @@ class ContractUploadService { let pdfBuffer, originalFilename, mimeType, fileSize; let contractBody; + const allowedContractTypes = new Set(['contract', 'gdpr', 'abo']); + const normalizedContractType = (contract_type === undefined || contract_type === null) + ? 'contract' + : String(contract_type).trim().toLowerCase(); + contract_type = allowedContractTypes.has(normalizedContractType) ? normalizedContractType : 'contract'; + try { // If templateId and lang are provided, fetch HTML template from object storage if (templateId && lang) { diff --git a/services/email/MailService.js b/services/email/MailService.js index 25f5df0..ea5e2cc 100644 --- a/services/email/MailService.js +++ b/services/email/MailService.js @@ -265,6 +265,40 @@ class MailService { } } + async sendAboContractEmail({ email, subject, text, html, lang, attachments = [] }) { + logger.info('MailService.sendAboContractEmail:start', { email, lang, hasHtml: Boolean(html), attachments: attachments.length }); + try { + const payload = { + sender: this.sender, + to: [{ email }], + subject, + textContent: text + }; + + if (html) { + payload.htmlContent = html; + } + + if (Array.isArray(attachments) && attachments.length) { + payload.attachment = attachments; + } + + const data = await this.brevo.transactionalEmails.sendTransacEmail(payload); + logger.info('MailService.sendAboContractEmail:email_sent', { email, lang, hasHtml: Boolean(html), attachments: attachments.length }); + return data; + } catch (error) { + const brevoError = this._extractBrevoErrorDetails(error); + logger.error('MailService.sendAboContractEmail:error', { + email, + lang, + message: error?.message, + brevoStatus: brevoError.status, + brevoData: brevoError.data + }); + throw error; + } + } + async sendSubscriptionInvitationEmail({ email, inviterName, referralLink, lang = 'en' }) { logger.info('MailService.sendSubscriptionInvitationEmail:start', { email, lang }); const isDe = lang === 'de'; diff --git a/services/subscriptions/CoffeeShippingFeeService.js b/services/subscriptions/CoffeeShippingFeeService.js new file mode 100644 index 0000000..21a4317 --- /dev/null +++ b/services/subscriptions/CoffeeShippingFeeService.js @@ -0,0 +1,70 @@ +const pool = require('../../database/database'); + +class CoffeeShippingFeeService { + static _normalizePieceCount(value) { + const n = Number(value); + if (!Number.isInteger(n)) return null; + if (![60, 120].includes(n)) return null; + return n; + } + + static _normalizePrice(value) { + const n = Number(value); + if (!Number.isFinite(n)) return null; + if (n < 0) return null; + return n; + } + + static _mapRow(row) { + if (!row) return null; + return { + pieceCount: Number(row.piece_count), + price: Number(row.price), + }; + } + + static async list() { + const [rows] = await pool.query( + 'SELECT piece_count, price FROM coffee_shipping_fees ORDER BY piece_count ASC' + ); + return (rows || []).map((r) => this._mapRow(r)); + } + + static async get(pieceCount) { + const pc = this._normalizePieceCount(pieceCount); + if (!pc) return null; + + const [rows] = await pool.query( + 'SELECT piece_count, price FROM coffee_shipping_fees WHERE piece_count = ? LIMIT 1', + [pc] + ); + return this._mapRow(rows?.[0]); + } + + static async setPrice(pieceCount, price) { + const pc = this._normalizePieceCount(pieceCount); + if (!pc) { + const err = new Error('pieceCount must be 60 or 120'); + err.status = 400; + throw err; + } + + const p = this._normalizePrice(price); + if (p === null) { + const err = new Error('price must be a number >= 0'); + err.status = 400; + throw err; + } + + await pool.query( + `INSERT INTO coffee_shipping_fees (piece_count, price) + VALUES (?, ?) + ON DUPLICATE KEY UPDATE price = VALUES(price)`, + [pc, p] + ); + + return this.get(pc); + } +} + +module.exports = CoffeeShippingFeeService; diff --git a/services/template/DocumentTemplateService.js b/services/template/DocumentTemplateService.js index ff94aa5..e3ade92 100644 --- a/services/template/DocumentTemplateService.js +++ b/services/template/DocumentTemplateService.js @@ -25,9 +25,13 @@ class DocumentTemplateService { await uow.start(); const allowed = ['personal','company','both']; const user_type = allowed.includes(data.user_type || data.userType) ? (data.user_type || data.userType) : 'both'; - const allowedContractTypes = ['contract', 'gdpr']; - const contract_type = (data.type === 'contract' && allowedContractTypes.includes(data.contract_type || data.contractType)) - ? (data.contract_type || data.contractType) + const allowedContractTypes = ['contract', 'gdpr', 'abo']; + const rawContractType = (data.contract_type || data.contractType); + const normalizedContractType = rawContractType !== undefined && rawContractType !== null + ? String(rawContractType).trim().toLowerCase() + : rawContractType; + const contract_type = (data.type === 'contract' && allowedContractTypes.includes(normalizedContractType)) + ? normalizedContractType : (data.type === 'contract' ? 'contract' : null); const created = await DocumentTemplateRepository.create({ ...data, user_type, contract_type }, uow.connection); await uow.commit(); @@ -88,10 +92,11 @@ class DocumentTemplateService { if (data.userType && !allowed.includes(data.userType)) delete data.userType; if (data.user_type && !allowed.includes(data.user_type)) delete data.user_type; const nextType = data.type !== undefined ? data.type : current.type; - const allowedContractTypes = ['contract', 'gdpr']; + const allowedContractTypes = ['contract', 'gdpr', 'abo']; + const normalizeContractType = (value) => (value === undefined || value === null) ? value : String(value).trim().toLowerCase(); const contract_type = nextType === 'contract' - ? (allowedContractTypes.includes(data.contract_type || data.contractType || current.contract_type) - ? (data.contract_type || data.contractType || current.contract_type) + ? (allowedContractTypes.includes(normalizeContractType(data.contract_type || data.contractType || current.contract_type)) + ? normalizeContractType(data.contract_type || data.contractType || current.contract_type) : 'contract') : null; const newVersion = (current.version || 1) + 1; diff --git a/templates/abo/abo-contract-template.html b/templates/abo/abo-contract-template.html new file mode 100644 index 0000000..9e24630 --- /dev/null +++ b/templates/abo/abo-contract-template.html @@ -0,0 +1,620 @@ + + + + + + ABO Vertrag – Profit Planet GmbH + + + +
    +
    +
    +

    ABO Vertrag

    +

    Kaffee-/Tee-Service & automatische Wiederbestellungen

    +
    +
    +
    PROFIT PLANET GMBH
    +
    Liebenauer Hauptstraße 82c
    +
    A-8041 Graz
    +
    FN-649474 i
    +
    IBAN: AT16 2081 5000 4639 9507
    +
    Swift/BIC Code: STSPAT2GXXX
    +
    ATU82089605
    +
    +
    + +
    +
    +

    Vertrag über automatische Wiederbestellungen (ABO)

    +

    Bitte alle Felder vollständig ausfüllen und Zutreffendes ankreuzen.

    +
    +
    +
    Vertragsnummer: {{contractNumber}}
    +
    Datum: {{currentDate}}
    +
    +
    + +

    An die

    +
    +
    +
    Empfänger
    +
    {{recipientName}}
    +
    +
    +
    Adresse
    +
    {{recipientAddress}}
    +
    +
    + +
    +
    +
    Affiliate
    +
    +
    AFFILIATE NAME
    +
    {{affiliateName}}
    +
    +
    +
    +
    Client
    +
    +
    CLIENT NAME
    +
    {{clientName}}
    +
    +
    +
    + +

    Lieferadresse

    +
    +
    +
    +
    + KUNDE + FIRMA +
    +
    Vor- und Nachname
    {{shippingFullName}}
    +
    Adresse
    {{shippingStreet}}
    +
    PLZ / Ort
    {{shippingPostalCode}}    {{shippingCity}}
    +
    +
    +
    Telefonnummer
    {{shippingPhone}}
    +
    Mobil
    {{shippingMobile}}
    +
    E-Mail-Adresse
    {{shippingEmail}}
    +
    +
    Bevorzugte Kontaktaufnahme
    +
    + Telefon + E-Mail +
    +
    +
    +
    + +
    Rechnungsadresse: {{invoiceSameAsShippingMark}} wie Lieferadresse
    +
    + +

    Rechnungsadresse (falls abweichend)

    +
    +
    +
    +
    + FIRMA + KUNDE +
    +
    Vor- und Nachname
    {{invoiceFullName}}
    +
    Adresse
    {{invoiceStreet}}
    +
    PLZ / Ort
    {{invoicePostalCode}}    {{invoiceCity}}
    +
    +
    +
    Telefonnummer
    {{invoicePhone}}
    +
    Mobil
    {{invoiceMobile}}
    +
    E-Mail-Adresse
    {{invoiceEmail}}
    +
    +
    Bevorzugte Kontaktaufnahme
    +
    + Telefon + E-Mail +
    +
    +
    +
    + +
    + FN: {{fnNumber}} + ATU: {{atuNumber}} + (falls zutreffend ausfüllen) +
    +
    + +

    Zutreffendes bitte ankreuzen

    +
    +
    + + Der Kunde/Käufer tätigt das gegenständliche Rechtsgeschäft als Unternehmer im Sinne des § 1 Abs 1 Z 1 KSchG, das heißt, das Geschäft gehört zum Betrieb seines Unternehmens. +
    +
    + + Der Kunde/Käufer tätigt das gegenständliche Rechtsgeschäft als Konsument im Sinne des § 1 Abs 1 Z 2 KSchG. +
    +
    + +

    Angebote

    +
    +

    + Mindestbestellmenge für BIO Kaffee und BIO Tee und BIO Kakao beträgt pro Bestellung jeweils 120 Kapseln. + Preis pro Kapsel € 2,97 inkl. 20% MwSt. Preise und Konditionen gemäß gültigem PROFIT PLANET GMBH Tarif. +

    + + + + + + + + + + + + + + + + + +
    TarifPreis pro Kapsel
    Customer without abo2.97€
    Customer with abo1.77€
    +
    + +

    Produktauswahl

    +
    +

    Superfood Coffee – 60 Kapseln (bitte gewünschte Sorten ankreuzen / ergänzen)

    + {{selectedProductsHtml}} + +

    + Bei Angabe einer automatischen Wiederbestellung, gemäß den Regelungen in nachstehendem Punkt 3, erhält der Kunde in regelmäßigen Abständen, + BEGINNEND AM (Unterzeichnung des Vertrages) vorstehend eingetragene BIO Kaffee-Teemenge für die Dauer des Vertrages oder bis zum Widerruf der automatischen Wiederbestellung. + Der BIO Kaffee-Tee wird automatisch im Abstand von (zutreffendes bitte ankreuzen) +

    + +
    + 1 Monat + 2 Monate + 3 Monate +
    + +

    fakturiert und innerhalb von drei bis fünf Werktagen an den Kunden geliefert.

    +
    + +

    Zahlungsart

    +
    +
    + Sepa + Kreditkarte + Sofortbanking +
    +
    + Bitte senden Sie mir meine Rechnung per E-Mail zu! +
    +
    + +
    + + +
    + + From 0a469da27fb29cd10dc6bdafd8f35d599613af72 Mon Sep 17 00:00:00 2001 From: DeathKaioken Date: Sun, 15 Mar 2026 20:50:27 +0100 Subject: [PATCH 2/2] fml --- debug-pdf/template_1_html_full.html | 1 - debug-pdf/template_1_html_raw.bin | 1 - debug-pdf/template_1_sanitized_preview.html | 1 - debug-pdf/template_2_html_full.html | 1 - debug-pdf/template_2_html_raw.bin | 1 - debug-pdf/template_2_sanitized_preview.html | 1 - debug-pdf/template_3_html_full.html | 1 - debug-pdf/template_3_html_raw.bin | 1 - debug-pdf/template_3_sanitized_preview.html | 1 - debug-pdf/template_4_html_full.html | 620 -------------------- debug-pdf/template_4_html_raw.bin | 620 -------------------- debug-pdf/template_4_sanitized_preview.html | 620 -------------------- debug-pdf/template_5_html_full.html | 620 -------------------- debug-pdf/template_5_html_raw.bin | 620 -------------------- debug-pdf/template_5_sanitized_preview.html | 620 -------------------- templates/abo/abo-contract-template.html | 70 ++- 16 files changed, 62 insertions(+), 3737 deletions(-) delete mode 100644 debug-pdf/template_1_html_full.html delete mode 100644 debug-pdf/template_1_html_raw.bin delete mode 100644 debug-pdf/template_1_sanitized_preview.html delete mode 100644 debug-pdf/template_2_html_full.html delete mode 100644 debug-pdf/template_2_html_raw.bin delete mode 100644 debug-pdf/template_2_sanitized_preview.html delete mode 100644 debug-pdf/template_3_html_full.html delete mode 100644 debug-pdf/template_3_html_raw.bin delete mode 100644 debug-pdf/template_3_sanitized_preview.html delete mode 100644 debug-pdf/template_4_html_full.html delete mode 100644 debug-pdf/template_4_html_raw.bin delete mode 100644 debug-pdf/template_4_sanitized_preview.html delete mode 100644 debug-pdf/template_5_html_full.html delete mode 100644 debug-pdf/template_5_html_raw.bin delete mode 100644 debug-pdf/template_5_sanitized_preview.html diff --git a/debug-pdf/template_1_html_full.html b/debug-pdf/template_1_html_full.html deleted file mode 100644 index 30d74d2..0000000 --- a/debug-pdf/template_1_html_full.html +++ /dev/null @@ -1 +0,0 @@ -test \ No newline at end of file diff --git a/debug-pdf/template_1_html_raw.bin b/debug-pdf/template_1_html_raw.bin deleted file mode 100644 index 30d74d2..0000000 --- a/debug-pdf/template_1_html_raw.bin +++ /dev/null @@ -1 +0,0 @@ -test \ No newline at end of file diff --git a/debug-pdf/template_1_sanitized_preview.html b/debug-pdf/template_1_sanitized_preview.html deleted file mode 100644 index 30d74d2..0000000 --- a/debug-pdf/template_1_sanitized_preview.html +++ /dev/null @@ -1 +0,0 @@ -test \ No newline at end of file diff --git a/debug-pdf/template_2_html_full.html b/debug-pdf/template_2_html_full.html deleted file mode 100644 index 30d74d2..0000000 --- a/debug-pdf/template_2_html_full.html +++ /dev/null @@ -1 +0,0 @@ -test \ No newline at end of file diff --git a/debug-pdf/template_2_html_raw.bin b/debug-pdf/template_2_html_raw.bin deleted file mode 100644 index 30d74d2..0000000 --- a/debug-pdf/template_2_html_raw.bin +++ /dev/null @@ -1 +0,0 @@ -test \ No newline at end of file diff --git a/debug-pdf/template_2_sanitized_preview.html b/debug-pdf/template_2_sanitized_preview.html deleted file mode 100644 index 30d74d2..0000000 --- a/debug-pdf/template_2_sanitized_preview.html +++ /dev/null @@ -1 +0,0 @@ -test \ No newline at end of file diff --git a/debug-pdf/template_3_html_full.html b/debug-pdf/template_3_html_full.html deleted file mode 100644 index 30d74d2..0000000 --- a/debug-pdf/template_3_html_full.html +++ /dev/null @@ -1 +0,0 @@ -test \ No newline at end of file diff --git a/debug-pdf/template_3_html_raw.bin b/debug-pdf/template_3_html_raw.bin deleted file mode 100644 index 30d74d2..0000000 --- a/debug-pdf/template_3_html_raw.bin +++ /dev/null @@ -1 +0,0 @@ -test \ No newline at end of file diff --git a/debug-pdf/template_3_sanitized_preview.html b/debug-pdf/template_3_sanitized_preview.html deleted file mode 100644 index 30d74d2..0000000 --- a/debug-pdf/template_3_sanitized_preview.html +++ /dev/null @@ -1 +0,0 @@ -test \ No newline at end of file diff --git a/debug-pdf/template_4_html_full.html b/debug-pdf/template_4_html_full.html deleted file mode 100644 index 432ba7b..0000000 --- a/debug-pdf/template_4_html_full.html +++ /dev/null @@ -1,620 +0,0 @@ - - - - - - ABO Vertrag – Profit Planet GmbH - - - -
    -
    -
    -

    ABO Vertrag

    -

    Kaffee-/Tee-Service & automatische Wiederbestellungen

    -
    -
    -
    PROFIT PLANET GMBH
    -
    Liebenauer Hauptstraße 82c
    -
    A-8041 Graz
    -
    FN-649474 i
    -
    IBAN: AT16 2081 5000 4639 9507
    -
    Swift/BIC Code: STSPAT2GXXX
    -
    ATU82089605
    -
    -
    - -
    -
    -

    Vertrag über automatische Wiederbestellungen (ABO)

    -

    Bitte alle Felder vollständig ausfüllen und Zutreffendes ankreuzen.

    -
    -
    -
    Vertragsnummer: {{contractNumber}}
    -
    Datum: {{currentDate}}
    -
    -
    - -

    An die

    -
    -
    -
    Empfänger
    -
    {{recipientName}}
    -
    -
    -
    Adresse
    -
    {{recipientAddress}}
    -
    -
    - -
    -
    -
    Affiliate
    -
    -
    AFFILIATE NAME
    -
    {{affiliateName}}
    -
    -
    -
    -
    Client
    -
    -
    CLIENT NAME
    -
    {{clientName}}
    -
    -
    -
    - -

    Lieferadresse

    -
    -
    -
    -
    - KUNDE - FIRMA -
    -
    Vor- und Nachname
    {{shippingFullName}}
    -
    Adresse
    {{shippingStreet}}
    -
    PLZ / Ort
    {{shippingPostalCode}}    {{shippingCity}}
    -
    -
    -
    Telefonnummer
    {{shippingPhone}}
    -
    Mobil
    {{shippingMobile}}
    -
    E-Mail-Adresse
    {{shippingEmail}}
    -
    -
    Bevorzugte Kontaktaufnahme
    -
    - Telefon - E-Mail -
    -
    -
    -
    - -
    Rechnungsadresse: {{invoiceSameAsShippingMark}} wie Lieferadresse
    -
    - -

    Rechnungsadresse (falls abweichend)

    -
    -
    -
    -
    - FIRMA - KUNDE -
    -
    Vor- und Nachname
    {{invoiceFullName}}
    -
    Adresse
    {{invoiceStreet}}
    -
    PLZ / Ort
    {{invoicePostalCode}}    {{invoiceCity}}
    -
    -
    -
    Telefonnummer
    {{invoicePhone}}
    -
    Mobil
    {{invoiceMobile}}
    -
    E-Mail-Adresse
    {{invoiceEmail}}
    -
    -
    Bevorzugte Kontaktaufnahme
    -
    - Telefon - E-Mail -
    -
    -
    -
    - -
    - FN: {{fnNumber}} - ATU: {{atuNumber}} - (falls zutreffend ausfüllen) -
    -
    - -

    Zutreffendes bitte ankreuzen

    -
    -
    - - Der Kunde/Käufer tätigt das gegenständliche Rechtsgeschäft als Unternehmer im Sinne des § 1 Abs 1 Z 1 KSchG, das heißt, das Geschäft gehört zum Betrieb seines Unternehmens. -
    -
    - - Der Kunde/Käufer tätigt das gegenständliche Rechtsgeschäft als Konsument im Sinne des § 1 Abs 1 Z 2 KSchG. -
    -
    - -

    Angebote

    -
    -

    - Mindestbestellmenge für BIO Kaffee und BIO Tee und BIO Kakao beträgt pro Bestellung jeweils 120 Kapseln. - Preis pro Kapsel € 2,97 inkl. 20% MwSt. Preise und Konditionen gemäß gültigem PROFIT PLANET GMBH Tarif. -

    - - - - - - - - - - - - - - - - - -
    TarifPreis pro Kapsel
    Customer without abo2.97€
    Customer with abo1.77€
    -
    - -

    Produktauswahl

    -
    -

    Superfood Coffee – 60 Kapseln (bitte gewünschte Sorten ankreuzen / ergänzen)

    - {{selectedProductsHtml}} - -

    - Bei Angabe einer automatischen Wiederbestellung, gemäß den Regelungen in nachstehendem Punkt 3, erhält der Kunde in regelmäßigen Abständen, - BEGINNEND AM (Unterzeichnung des Vertrages) vorstehend eingetragene BIO Kaffee-Teemenge für die Dauer des Vertrages oder bis zum Widerruf der automatischen Wiederbestellung. - Der BIO Kaffee-Tee wird automatisch im Abstand von (zutreffendes bitte ankreuzen) -

    - -
    - 1 Monat - 2 Monate - 3 Monate -
    - -

    fakturiert und innerhalb von drei bis fünf Werktagen an den Kunden geliefert.

    -
    - -

    Zahlungsart

    -
    -
    - Sepa - Kreditkarte - Sofortbanking -
    -
    - Bitte senden Sie mir meine Rechnung per E-Mail zu! -
    -
    - -
    - - -
    - - \ No newline at end of file diff --git a/debug-pdf/template_4_html_raw.bin b/debug-pdf/template_4_html_raw.bin deleted file mode 100644 index 432ba7b..0000000 --- a/debug-pdf/template_4_html_raw.bin +++ /dev/null @@ -1,620 +0,0 @@ - - - - - - ABO Vertrag – Profit Planet GmbH - - - -
    -
    -
    -

    ABO Vertrag

    -

    Kaffee-/Tee-Service & automatische Wiederbestellungen

    -
    -
    -
    PROFIT PLANET GMBH
    -
    Liebenauer Hauptstraße 82c
    -
    A-8041 Graz
    -
    FN-649474 i
    -
    IBAN: AT16 2081 5000 4639 9507
    -
    Swift/BIC Code: STSPAT2GXXX
    -
    ATU82089605
    -
    -
    - -
    -
    -

    Vertrag über automatische Wiederbestellungen (ABO)

    -

    Bitte alle Felder vollständig ausfüllen und Zutreffendes ankreuzen.

    -
    -
    -
    Vertragsnummer: {{contractNumber}}
    -
    Datum: {{currentDate}}
    -
    -
    - -

    An die

    -
    -
    -
    Empfänger
    -
    {{recipientName}}
    -
    -
    -
    Adresse
    -
    {{recipientAddress}}
    -
    -
    - -
    -
    -
    Affiliate
    -
    -
    AFFILIATE NAME
    -
    {{affiliateName}}
    -
    -
    -
    -
    Client
    -
    -
    CLIENT NAME
    -
    {{clientName}}
    -
    -
    -
    - -

    Lieferadresse

    -
    -
    -
    -
    - KUNDE - FIRMA -
    -
    Vor- und Nachname
    {{shippingFullName}}
    -
    Adresse
    {{shippingStreet}}
    -
    PLZ / Ort
    {{shippingPostalCode}}    {{shippingCity}}
    -
    -
    -
    Telefonnummer
    {{shippingPhone}}
    -
    Mobil
    {{shippingMobile}}
    -
    E-Mail-Adresse
    {{shippingEmail}}
    -
    -
    Bevorzugte Kontaktaufnahme
    -
    - Telefon - E-Mail -
    -
    -
    -
    - -
    Rechnungsadresse: {{invoiceSameAsShippingMark}} wie Lieferadresse
    -
    - -

    Rechnungsadresse (falls abweichend)

    -
    -
    -
    -
    - FIRMA - KUNDE -
    -
    Vor- und Nachname
    {{invoiceFullName}}
    -
    Adresse
    {{invoiceStreet}}
    -
    PLZ / Ort
    {{invoicePostalCode}}    {{invoiceCity}}
    -
    -
    -
    Telefonnummer
    {{invoicePhone}}
    -
    Mobil
    {{invoiceMobile}}
    -
    E-Mail-Adresse
    {{invoiceEmail}}
    -
    -
    Bevorzugte Kontaktaufnahme
    -
    - Telefon - E-Mail -
    -
    -
    -
    - -
    - FN: {{fnNumber}} - ATU: {{atuNumber}} - (falls zutreffend ausfüllen) -
    -
    - -

    Zutreffendes bitte ankreuzen

    -
    -
    - - Der Kunde/Käufer tätigt das gegenständliche Rechtsgeschäft als Unternehmer im Sinne des § 1 Abs 1 Z 1 KSchG, das heißt, das Geschäft gehört zum Betrieb seines Unternehmens. -
    -
    - - Der Kunde/Käufer tätigt das gegenständliche Rechtsgeschäft als Konsument im Sinne des § 1 Abs 1 Z 2 KSchG. -
    -
    - -

    Angebote

    -
    -

    - Mindestbestellmenge für BIO Kaffee und BIO Tee und BIO Kakao beträgt pro Bestellung jeweils 120 Kapseln. - Preis pro Kapsel € 2,97 inkl. 20% MwSt. Preise und Konditionen gemäß gültigem PROFIT PLANET GMBH Tarif. -

    - - - - - - - - - - - - - - - - - -
    TarifPreis pro Kapsel
    Customer without abo2.97€
    Customer with abo1.77€
    -
    - -

    Produktauswahl

    -
    -

    Superfood Coffee – 60 Kapseln (bitte gewünschte Sorten ankreuzen / ergänzen)

    - {{selectedProductsHtml}} - -

    - Bei Angabe einer automatischen Wiederbestellung, gemäß den Regelungen in nachstehendem Punkt 3, erhält der Kunde in regelmäßigen Abständen, - BEGINNEND AM (Unterzeichnung des Vertrages) vorstehend eingetragene BIO Kaffee-Teemenge für die Dauer des Vertrages oder bis zum Widerruf der automatischen Wiederbestellung. - Der BIO Kaffee-Tee wird automatisch im Abstand von (zutreffendes bitte ankreuzen) -

    - -
    - 1 Monat - 2 Monate - 3 Monate -
    - -

    fakturiert und innerhalb von drei bis fünf Werktagen an den Kunden geliefert.

    -
    - -

    Zahlungsart

    -
    -
    - Sepa - Kreditkarte - Sofortbanking -
    -
    - Bitte senden Sie mir meine Rechnung per E-Mail zu! -
    -
    - -
    - - -
    - - \ No newline at end of file diff --git a/debug-pdf/template_4_sanitized_preview.html b/debug-pdf/template_4_sanitized_preview.html deleted file mode 100644 index 70e80be..0000000 --- a/debug-pdf/template_4_sanitized_preview.html +++ /dev/null @@ -1,620 +0,0 @@ - - - - - - ABO Vertrag – Profit Planet GmbH - - - -
    -
    -
    -

    ABO Vertrag

    -

    Kaffee-/Tee-Service & automatische Wiederbestellungen

    -
    -
    -
    PROFIT PLANET GMBH
    -
    Liebenauer Hauptstraße 82c
    -
    A-8041 Graz
    -
    FN-649474 i
    -
    IBAN: AT16 2081 5000 4639 9507
    -
    Swift/BIC Code: STSPAT2GXXX
    -
    ATU82089605
    -
    -
    - -
    -
    -

    Vertrag über automatische Wiederbestellungen (ABO)

    -

    Bitte alle Felder vollständig ausfüllen und Zutreffendes ankreuzen.

    -
    -
    -
    Vertragsnummer:
    -
    Datum: {{currentDate}}
    -
    -
    - -

    An die

    -
    -
    -
    Empfänger
    -
    -
    -
    -
    Adresse
    -
    -
    -
    - -
    -
    -
    Affiliate
    -
    -
    AFFILIATE NAME
    -
    -
    -
    -
    -
    Client
    -
    -
    CLIENT NAME
    -
    -
    -
    -
    - -

    Lieferadresse

    -
    -
    -
    -
    - KUNDE - FIRMA -
    -
    Vor- und Nachname
    -
    Adresse
    -
    PLZ / Ort
      
    -
    -
    -
    Telefonnummer
    -
    Mobil
    -
    E-Mail-Adresse
    -
    -
    Bevorzugte Kontaktaufnahme
    -
    - Telefon - E-Mail -
    -
    -
    -
    - -
    Rechnungsadresse: wie Lieferadresse
    -
    - -

    Rechnungsadresse (falls abweichend)

    -
    -
    -
    -
    - FIRMA - KUNDE -
    -
    Vor- und Nachname
    -
    Adresse
    -
    PLZ / Ort
      
    -
    -
    -
    Telefonnummer
    -
    Mobil
    -
    E-Mail-Adresse
    -
    -
    Bevorzugte Kontaktaufnahme
    -
    - Telefon - E-Mail -
    -
    -
    -
    - -
    - FN: - ATU: - (falls zutreffend ausfüllen) -
    -
    - -

    Zutreffendes bitte ankreuzen

    -
    -
    - - Der Kunde/Käufer tätigt das gegenständliche Rechtsgeschäft als Unternehmer im Sinne des § 1 Abs 1 Z 1 KSchG, das heißt, das Geschäft gehört zum Betrieb seines Unternehmens. -
    -
    - - Der Kunde/Käufer tätigt das gegenständliche Rechtsgeschäft als Konsument im Sinne des § 1 Abs 1 Z 2 KSchG. -
    -
    - -

    Angebote

    -
    -

    - Mindestbestellmenge für BIO Kaffee und BIO Tee und BIO Kakao beträgt pro Bestellung jeweils 120 Kapseln. - Preis pro Kapsel € 2,97 inkl. 20% MwSt. Preise und Konditionen gemäß gültigem PROFIT PLANET GMBH Tarif. -

    - - - - - - - - - - - - - - - - - -
    TarifPreis pro Kapsel
    Customer without abo2.97€
    Customer with abo1.77€
    -
    - -

    Produktauswahl

    -
    -

    Superfood Coffee – 60 Kapseln (bitte gewünschte Sorten ankreuzen / ergänzen)

    - - -

    - Bei Angabe einer automatischen Wiederbestellung, gemäß den Regelungen in nachstehendem Punkt 3, erhält der Kunde in regelmäßigen Abständen, - BEGINNEND AM (Unterzeichnung des Vertrages) vorstehend eingetragene BIO Kaffee-Teemenge für die Dauer des Vertrages oder bis zum Widerruf der automatischen Wiederbestellung. - Der BIO Kaffee-Tee wird automatisch im Abstand von (zutreffendes bitte ankreuzen) -

    - -
    - 1 Monat - 2 Monate - 3 Monate -
    - -

    fakturiert und innerhalb von drei bis fünf Werktagen an den Kunden geliefert.

    -
    - -

    Zahlungsart

    -
    -
    - Sepa - Kreditkarte - Sofortbanking -
    -
    - Bitte senden Sie mir meine Rechnung per E-Mail zu! -
    -
    - -
    - - -
    - - \ No newline at end of file diff --git a/debug-pdf/template_5_html_full.html b/debug-pdf/template_5_html_full.html deleted file mode 100644 index 432ba7b..0000000 --- a/debug-pdf/template_5_html_full.html +++ /dev/null @@ -1,620 +0,0 @@ - - - - - - ABO Vertrag – Profit Planet GmbH - - - -
    -
    -
    -

    ABO Vertrag

    -

    Kaffee-/Tee-Service & automatische Wiederbestellungen

    -
    -
    -
    PROFIT PLANET GMBH
    -
    Liebenauer Hauptstraße 82c
    -
    A-8041 Graz
    -
    FN-649474 i
    -
    IBAN: AT16 2081 5000 4639 9507
    -
    Swift/BIC Code: STSPAT2GXXX
    -
    ATU82089605
    -
    -
    - -
    -
    -

    Vertrag über automatische Wiederbestellungen (ABO)

    -

    Bitte alle Felder vollständig ausfüllen und Zutreffendes ankreuzen.

    -
    -
    -
    Vertragsnummer: {{contractNumber}}
    -
    Datum: {{currentDate}}
    -
    -
    - -

    An die

    -
    -
    -
    Empfänger
    -
    {{recipientName}}
    -
    -
    -
    Adresse
    -
    {{recipientAddress}}
    -
    -
    - -
    -
    -
    Affiliate
    -
    -
    AFFILIATE NAME
    -
    {{affiliateName}}
    -
    -
    -
    -
    Client
    -
    -
    CLIENT NAME
    -
    {{clientName}}
    -
    -
    -
    - -

    Lieferadresse

    -
    -
    -
    -
    - KUNDE - FIRMA -
    -
    Vor- und Nachname
    {{shippingFullName}}
    -
    Adresse
    {{shippingStreet}}
    -
    PLZ / Ort
    {{shippingPostalCode}}    {{shippingCity}}
    -
    -
    -
    Telefonnummer
    {{shippingPhone}}
    -
    Mobil
    {{shippingMobile}}
    -
    E-Mail-Adresse
    {{shippingEmail}}
    -
    -
    Bevorzugte Kontaktaufnahme
    -
    - Telefon - E-Mail -
    -
    -
    -
    - -
    Rechnungsadresse: {{invoiceSameAsShippingMark}} wie Lieferadresse
    -
    - -

    Rechnungsadresse (falls abweichend)

    -
    -
    -
    -
    - FIRMA - KUNDE -
    -
    Vor- und Nachname
    {{invoiceFullName}}
    -
    Adresse
    {{invoiceStreet}}
    -
    PLZ / Ort
    {{invoicePostalCode}}    {{invoiceCity}}
    -
    -
    -
    Telefonnummer
    {{invoicePhone}}
    -
    Mobil
    {{invoiceMobile}}
    -
    E-Mail-Adresse
    {{invoiceEmail}}
    -
    -
    Bevorzugte Kontaktaufnahme
    -
    - Telefon - E-Mail -
    -
    -
    -
    - -
    - FN: {{fnNumber}} - ATU: {{atuNumber}} - (falls zutreffend ausfüllen) -
    -
    - -

    Zutreffendes bitte ankreuzen

    -
    -
    - - Der Kunde/Käufer tätigt das gegenständliche Rechtsgeschäft als Unternehmer im Sinne des § 1 Abs 1 Z 1 KSchG, das heißt, das Geschäft gehört zum Betrieb seines Unternehmens. -
    -
    - - Der Kunde/Käufer tätigt das gegenständliche Rechtsgeschäft als Konsument im Sinne des § 1 Abs 1 Z 2 KSchG. -
    -
    - -

    Angebote

    -
    -

    - Mindestbestellmenge für BIO Kaffee und BIO Tee und BIO Kakao beträgt pro Bestellung jeweils 120 Kapseln. - Preis pro Kapsel € 2,97 inkl. 20% MwSt. Preise und Konditionen gemäß gültigem PROFIT PLANET GMBH Tarif. -

    - - - - - - - - - - - - - - - - - -
    TarifPreis pro Kapsel
    Customer without abo2.97€
    Customer with abo1.77€
    -
    - -

    Produktauswahl

    -
    -

    Superfood Coffee – 60 Kapseln (bitte gewünschte Sorten ankreuzen / ergänzen)

    - {{selectedProductsHtml}} - -

    - Bei Angabe einer automatischen Wiederbestellung, gemäß den Regelungen in nachstehendem Punkt 3, erhält der Kunde in regelmäßigen Abständen, - BEGINNEND AM (Unterzeichnung des Vertrages) vorstehend eingetragene BIO Kaffee-Teemenge für die Dauer des Vertrages oder bis zum Widerruf der automatischen Wiederbestellung. - Der BIO Kaffee-Tee wird automatisch im Abstand von (zutreffendes bitte ankreuzen) -

    - -
    - 1 Monat - 2 Monate - 3 Monate -
    - -

    fakturiert und innerhalb von drei bis fünf Werktagen an den Kunden geliefert.

    -
    - -

    Zahlungsart

    -
    -
    - Sepa - Kreditkarte - Sofortbanking -
    -
    - Bitte senden Sie mir meine Rechnung per E-Mail zu! -
    -
    - -
    - - -
    - - \ No newline at end of file diff --git a/debug-pdf/template_5_html_raw.bin b/debug-pdf/template_5_html_raw.bin deleted file mode 100644 index 432ba7b..0000000 --- a/debug-pdf/template_5_html_raw.bin +++ /dev/null @@ -1,620 +0,0 @@ - - - - - - ABO Vertrag – Profit Planet GmbH - - - -
    -
    -
    -

    ABO Vertrag

    -

    Kaffee-/Tee-Service & automatische Wiederbestellungen

    -
    -
    -
    PROFIT PLANET GMBH
    -
    Liebenauer Hauptstraße 82c
    -
    A-8041 Graz
    -
    FN-649474 i
    -
    IBAN: AT16 2081 5000 4639 9507
    -
    Swift/BIC Code: STSPAT2GXXX
    -
    ATU82089605
    -
    -
    - -
    -
    -

    Vertrag über automatische Wiederbestellungen (ABO)

    -

    Bitte alle Felder vollständig ausfüllen und Zutreffendes ankreuzen.

    -
    -
    -
    Vertragsnummer: {{contractNumber}}
    -
    Datum: {{currentDate}}
    -
    -
    - -

    An die

    -
    -
    -
    Empfänger
    -
    {{recipientName}}
    -
    -
    -
    Adresse
    -
    {{recipientAddress}}
    -
    -
    - -
    -
    -
    Affiliate
    -
    -
    AFFILIATE NAME
    -
    {{affiliateName}}
    -
    -
    -
    -
    Client
    -
    -
    CLIENT NAME
    -
    {{clientName}}
    -
    -
    -
    - -

    Lieferadresse

    -
    -
    -
    -
    - KUNDE - FIRMA -
    -
    Vor- und Nachname
    {{shippingFullName}}
    -
    Adresse
    {{shippingStreet}}
    -
    PLZ / Ort
    {{shippingPostalCode}}    {{shippingCity}}
    -
    -
    -
    Telefonnummer
    {{shippingPhone}}
    -
    Mobil
    {{shippingMobile}}
    -
    E-Mail-Adresse
    {{shippingEmail}}
    -
    -
    Bevorzugte Kontaktaufnahme
    -
    - Telefon - E-Mail -
    -
    -
    -
    - -
    Rechnungsadresse: {{invoiceSameAsShippingMark}} wie Lieferadresse
    -
    - -

    Rechnungsadresse (falls abweichend)

    -
    -
    -
    -
    - FIRMA - KUNDE -
    -
    Vor- und Nachname
    {{invoiceFullName}}
    -
    Adresse
    {{invoiceStreet}}
    -
    PLZ / Ort
    {{invoicePostalCode}}    {{invoiceCity}}
    -
    -
    -
    Telefonnummer
    {{invoicePhone}}
    -
    Mobil
    {{invoiceMobile}}
    -
    E-Mail-Adresse
    {{invoiceEmail}}
    -
    -
    Bevorzugte Kontaktaufnahme
    -
    - Telefon - E-Mail -
    -
    -
    -
    - -
    - FN: {{fnNumber}} - ATU: {{atuNumber}} - (falls zutreffend ausfüllen) -
    -
    - -

    Zutreffendes bitte ankreuzen

    -
    -
    - - Der Kunde/Käufer tätigt das gegenständliche Rechtsgeschäft als Unternehmer im Sinne des § 1 Abs 1 Z 1 KSchG, das heißt, das Geschäft gehört zum Betrieb seines Unternehmens. -
    -
    - - Der Kunde/Käufer tätigt das gegenständliche Rechtsgeschäft als Konsument im Sinne des § 1 Abs 1 Z 2 KSchG. -
    -
    - -

    Angebote

    -
    -

    - Mindestbestellmenge für BIO Kaffee und BIO Tee und BIO Kakao beträgt pro Bestellung jeweils 120 Kapseln. - Preis pro Kapsel € 2,97 inkl. 20% MwSt. Preise und Konditionen gemäß gültigem PROFIT PLANET GMBH Tarif. -

    - - - - - - - - - - - - - - - - - -
    TarifPreis pro Kapsel
    Customer without abo2.97€
    Customer with abo1.77€
    -
    - -

    Produktauswahl

    -
    -

    Superfood Coffee – 60 Kapseln (bitte gewünschte Sorten ankreuzen / ergänzen)

    - {{selectedProductsHtml}} - -

    - Bei Angabe einer automatischen Wiederbestellung, gemäß den Regelungen in nachstehendem Punkt 3, erhält der Kunde in regelmäßigen Abständen, - BEGINNEND AM (Unterzeichnung des Vertrages) vorstehend eingetragene BIO Kaffee-Teemenge für die Dauer des Vertrages oder bis zum Widerruf der automatischen Wiederbestellung. - Der BIO Kaffee-Tee wird automatisch im Abstand von (zutreffendes bitte ankreuzen) -

    - -
    - 1 Monat - 2 Monate - 3 Monate -
    - -

    fakturiert und innerhalb von drei bis fünf Werktagen an den Kunden geliefert.

    -
    - -

    Zahlungsart

    -
    -
    - Sepa - Kreditkarte - Sofortbanking -
    -
    - Bitte senden Sie mir meine Rechnung per E-Mail zu! -
    -
    - -
    - - -
    - - \ No newline at end of file diff --git a/debug-pdf/template_5_sanitized_preview.html b/debug-pdf/template_5_sanitized_preview.html deleted file mode 100644 index 70e80be..0000000 --- a/debug-pdf/template_5_sanitized_preview.html +++ /dev/null @@ -1,620 +0,0 @@ - - - - - - ABO Vertrag – Profit Planet GmbH - - - -
    -
    -
    -

    ABO Vertrag

    -

    Kaffee-/Tee-Service & automatische Wiederbestellungen

    -
    -
    -
    PROFIT PLANET GMBH
    -
    Liebenauer Hauptstraße 82c
    -
    A-8041 Graz
    -
    FN-649474 i
    -
    IBAN: AT16 2081 5000 4639 9507
    -
    Swift/BIC Code: STSPAT2GXXX
    -
    ATU82089605
    -
    -
    - -
    -
    -

    Vertrag über automatische Wiederbestellungen (ABO)

    -

    Bitte alle Felder vollständig ausfüllen und Zutreffendes ankreuzen.

    -
    -
    -
    Vertragsnummer:
    -
    Datum: {{currentDate}}
    -
    -
    - -

    An die

    -
    -
    -
    Empfänger
    -
    -
    -
    -
    Adresse
    -
    -
    -
    - -
    -
    -
    Affiliate
    -
    -
    AFFILIATE NAME
    -
    -
    -
    -
    -
    Client
    -
    -
    CLIENT NAME
    -
    -
    -
    -
    - -

    Lieferadresse

    -
    -
    -
    -
    - KUNDE - FIRMA -
    -
    Vor- und Nachname
    -
    Adresse
    -
    PLZ / Ort
      
    -
    -
    -
    Telefonnummer
    -
    Mobil
    -
    E-Mail-Adresse
    -
    -
    Bevorzugte Kontaktaufnahme
    -
    - Telefon - E-Mail -
    -
    -
    -
    - -
    Rechnungsadresse: wie Lieferadresse
    -
    - -

    Rechnungsadresse (falls abweichend)

    -
    -
    -
    -
    - FIRMA - KUNDE -
    -
    Vor- und Nachname
    -
    Adresse
    -
    PLZ / Ort
      
    -
    -
    -
    Telefonnummer
    -
    Mobil
    -
    E-Mail-Adresse
    -
    -
    Bevorzugte Kontaktaufnahme
    -
    - Telefon - E-Mail -
    -
    -
    -
    - -
    - FN: - ATU: - (falls zutreffend ausfüllen) -
    -
    - -

    Zutreffendes bitte ankreuzen

    -
    -
    - - Der Kunde/Käufer tätigt das gegenständliche Rechtsgeschäft als Unternehmer im Sinne des § 1 Abs 1 Z 1 KSchG, das heißt, das Geschäft gehört zum Betrieb seines Unternehmens. -
    -
    - - Der Kunde/Käufer tätigt das gegenständliche Rechtsgeschäft als Konsument im Sinne des § 1 Abs 1 Z 2 KSchG. -
    -
    - -

    Angebote

    -
    -

    - Mindestbestellmenge für BIO Kaffee und BIO Tee und BIO Kakao beträgt pro Bestellung jeweils 120 Kapseln. - Preis pro Kapsel € 2,97 inkl. 20% MwSt. Preise und Konditionen gemäß gültigem PROFIT PLANET GMBH Tarif. -

    - - - - - - - - - - - - - - - - - -
    TarifPreis pro Kapsel
    Customer without abo2.97€
    Customer with abo1.77€
    -
    - -

    Produktauswahl

    -
    -

    Superfood Coffee – 60 Kapseln (bitte gewünschte Sorten ankreuzen / ergänzen)

    - - -

    - Bei Angabe einer automatischen Wiederbestellung, gemäß den Regelungen in nachstehendem Punkt 3, erhält der Kunde in regelmäßigen Abständen, - BEGINNEND AM (Unterzeichnung des Vertrages) vorstehend eingetragene BIO Kaffee-Teemenge für die Dauer des Vertrages oder bis zum Widerruf der automatischen Wiederbestellung. - Der BIO Kaffee-Tee wird automatisch im Abstand von (zutreffendes bitte ankreuzen) -

    - -
    - 1 Monat - 2 Monate - 3 Monate -
    - -

    fakturiert und innerhalb von drei bis fünf Werktagen an den Kunden geliefert.

    -
    - -

    Zahlungsart

    -
    -
    - Sepa - Kreditkarte - Sofortbanking -
    -
    - Bitte senden Sie mir meine Rechnung per E-Mail zu! -
    -
    - -
    - - -
    - - \ No newline at end of file diff --git a/templates/abo/abo-contract-template.html b/templates/abo/abo-contract-template.html index 9e24630..9367398 100644 --- a/templates/abo/abo-contract-template.html +++ b/templates/abo/abo-contract-template.html @@ -257,6 +257,58 @@ body { background: #fff; } .box { background: #fff; } thead th { background: #f3f4f6; } + + /* Keep important blocks from being split across pages */ + .header, + .grid2, + .box, + table, + thead, + tbody, + tr, + .sigGrid, + .signature-grid, + .signature-cell, + .signature-section { + break-inside: avoid; + page-break-inside: avoid; + -webkit-column-break-inside: avoid; + } + + /* Keep labels/rows together */ + .row { + break-inside: avoid; + page-break-inside: avoid; + } + + /* Force specific blocks (like §7) to stay together */ + .keepTogether { + break-inside: avoid; + page-break-inside: avoid; + -webkit-column-break-inside: avoid; + } + + /* Keep headings with the first lines of the following content */ + h1, h2, h3 { + break-after: avoid-page; + page-break-after: avoid; + } + + /* Improve paragraph pagination */ + p { + orphans: 3; + widows: 3; + } + + /* Repeat table header on new pages (Chromium/Puppeteer) */ + thead { display: table-header-group; } + + /* Explicit page breaks */ + .pageBreak { + break-before: page; + page-break-before: always; + margin-top: 0; + } } @@ -335,11 +387,6 @@
    Mobil
    {{shippingMobile}}
    E-Mail-Adresse
    {{shippingEmail}}
    -
    Bevorzugte Kontaktaufnahme
    -
    - Telefon - E-Mail -
    @@ -392,6 +439,8 @@ +
    +

    Angebote

    @@ -412,7 +461,7 @@ Customer with abo - 1.77€ + 1.47€ @@ -470,6 +519,8 @@

    (2) Der Kaffee wird wiederkehrend zugestellt laut Bestellung.

    (3) Verstößt der Kunde gegen seine Verpflichtung aus Abs. 1, so ist die Profit Planet GmbH zur außerordentlichen fristlosen Kündigung aus wichtigem Grund berechtigt. Darüber hinaus vereinbaren die Parteien die Zahlung einer verschuldensunabhängigen Vertragsstrafe durch den Kunden an die Profit Planet GmbH in angemessener Höhe, wobei die Profit Planet GmbH die Höhe nach billigem Ermessen bestimmen wird und die Angemessenheit der Vertragsstrafe im Streitfall von dem zuständigen Gericht überprüft werden kann. Die Geltendmachung weiteren Schadensersatzes bleibt vorbehalten.

    +
    +

    § 5 Wartung und Reparatur

    (1) Wartung und Reparaturen der Kaffeemaschinen sind in der Gestellung wie folgt enthalten:

    (a) Alle Wartungsarbeiten und Reparaturen werden werktags, von Montag bis Freitag zu den üblichen Arbeitszeiten (09:00 - 17:00 Uhr) telefonisch: 0043 676 3440274 oder schriftlich an office@profit-planet.com durchgeführt. Dienstleistungen an Wochenenden und Feiertagen sind ausgeschlossen und können nur gegen einen Aufpreis vom Kunden selbst bei dem von uns benannten, autorisierten Servicepartner beauftragt werden.

    @@ -488,10 +539,13 @@

    § 7 Eigentumsverhältnisse

    Die gelieferten Maschinen bleiben Eigentum von Profit Planet GmbH.

    + +
    +

    § 8 Interne Bestellsysteme und Bestellungen, Datenschutz

    Weiteres stimme ich dem Erhalt von exklusiven Angeboten und Informationen wie folgt zu:

    -

    Ich stimme zu, dass die angegebenen Daten von der Profit Planet GmbH verarbeitet und zur Information über exklusive Angebote und sonstige Informationen über E-Mail-Newsletters verwendet werden. Die Zustimmung kann jederzeit per E-Mail an office@profit-planet.com widerrufen werden. Ich akzeptiere hiermit die Datenschutzbestimmungen.

    -

    Ich stimme zu, dass die angegebenen Daten von der Profit Planet GmbH verarbeitet und zur telefonischen Information über exklusive Angebote und sonstige Informationen verwendet werden. Die Zustimmung kann jederzeit per E-Mail an office@profit-planet.com widerrufen werden. Ich akzeptiere hiermit die Datenschutzbestimmungen.

    +

    Ich stimme zu, dass die angegebenen Daten von der Profit Planet GmbH verarbeitet und zur Information über exklusive Angebote und sonstige Informationen über E-Mail-Newsletters verwendet werden. Die Zustimmung kann jederzeit per E-Mail an office@profit-planet.com widerrufen werden. Ich akzeptiere hiermit die Datenschutzbestimmungen.

    +

    Ich stimme zu, dass die angegebenen Daten von der Profit Planet GmbH verarbeitet und zur telefonischen Information über exklusive Angebote und sonstige Informationen verwendet werden. Die Zustimmung kann jederzeit per E-Mail an office@profit-planet.com widerrufen werden. Ich akzeptiere hiermit die Datenschutzbestimmungen.

    Sie haben uns schon früher Ihre Zustimmung gegeben und erhalten schon Informationen und Angebote zu unseren Produkten, wollen diese Einwilligung aber jetzt widerrufen: Diese Zustimmung kann jederzeit per E-Mail an office@profit-planet.com widerrufen werden.

    Mit dieser Unterschrift wird (werden) das (die) auf Seite 1 genannte(n) Gerät(e) zu genannten Konditionen übernommen.