From e4efdac226aa738e5f2e7f4d760c21eaa5aa8285 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 29 Sep 2026 16:29:01 +0000 Subject: [PATCH] =?UTF-8?q?Hosting-Abo:=20Preis=2015=20=E2=82=AC=20->=2020?= =?UTF-8?q?=20=E2=82=AC=20pro=20Monat=20(Vertragsbedingungen=20v4,=20Katal?= =?UTF-8?q?og,=20Leitfaden)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - server/config.js: amountCents 2000, lookup_key webklar_hosting_monatlich_2000 - ensurePrice haengt einen neuen Preis an das vorhandene Stripe-Produkt (metadata.webklar), statt ein zweites "WEBklar Hosting-Abo" anzulegen - abo-bedingungen.html (Uebersicht, Preise, Leistungsbeschreibung) + PDF, Leitfaden + PDF - Tests auf 20 € umgestellt (399/399) Co-Authored-By: Claude Opus 5.5 --- docs/WEBklar-Leitfaden-Empfehlungsgeber.pdf | Bin 53422 -> 53419 bytes docs/leitfaden-empfehlungsgeber.html | 2 +- public/WEBklar-Abo-Vertragsunterlagen.pdf | Bin 288100 -> 288097 bytes public/abo-bedingungen.html | 6 ++-- public/app.js | 2 +- server/config.js | 4 +-- .../K01 Vertragsbestaetigung.html | 2 +- server/services/stripeBilling.js | 8 ++++-- test/aboRoutes.test.js | 12 ++++---- test/hourCredits.test.js | 10 +++---- test/legalTexts.test.js | 4 +-- test/mailStorage.test.js | 12 ++++---- test/mailTemplates.test.js | 6 ++-- test/offerProduct.test.js | 10 +++---- test/products.test.js | 20 +++++++------- test/stripeBilling.test.js | 26 +++++++++++++----- test/support/fakeStripe.js | 4 +++ test/takeoverCredits.test.js | 10 +++---- 18 files changed, 79 insertions(+), 59 deletions(-) diff --git a/docs/WEBklar-Leitfaden-Empfehlungsgeber.pdf b/docs/WEBklar-Leitfaden-Empfehlungsgeber.pdf index 72d6b53e72a4be382694329e863c2c81a9c9461b..ff9d3beac7aa3b6f3e6fd686374b139473db625c 100644 GIT binary patch delta 7593 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 diff --git a/docs/leitfaden-empfehlungsgeber.html b/docs/leitfaden-empfehlungsgeber.html index d537eb4..c8ac1b9 100644 --- a/docs/leitfaden-empfehlungsgeber.html +++ b/docs/leitfaden-empfehlungsgeber.html @@ -48,7 +48,7 @@
Unsere Abos auf einen Blick · beide mit Mindestlaufzeit 12 Monate, danach monatlich kündbar