dynamic generator of voucher code card

main
alex 2024-07-21 11:06:22 +02:00
parent fbacdadd73
commit c84e92ed1e
15 changed files with 641 additions and 277 deletions

View File

@ -47,6 +47,7 @@
"#15809 Ruby die Schlange, FARBE, Himmelblau, (Fluoreszierend)", "#15809 Ruby die Schlange, FARBE, Himmelblau, (Fluoreszierend)",
"#49461 Ruby die Schlange, FARBE, Rosa, (Matt)", "#49461 Ruby die Schlange, FARBE, Rosa, (Matt)",
"#84491 Ruby die Schlange, FARBE, Rot/Schwarz, (Glänzend)", "#84491 Ruby die Schlange, FARBE, Rot/Schwarz, (Glänzend)",
"#36688 Ruby die Schlange, FARBE, Grün/Blau/Orange, (Glänzend)",
"#21433 Bruno der Dino, FARBE, Grün/Blau/Orange, (Glänzend)", "#21433 Bruno der Dino, FARBE, Grün/Blau/Orange, (Glänzend)",
"#57953 Bruno der Dino, FARBE, Rot/Blau, (Glänzend)", "#57953 Bruno der Dino, FARBE, Rot/Blau, (Glänzend)",
"#90578 Bruno der Dino, FARBE, Gold, (Glänzend)", "#90578 Bruno der Dino, FARBE, Gold, (Glänzend)",
@ -78,7 +79,11 @@
"#23732 Witty der Fuchs, STIL, Standard, Mit Halstuch", "#23732 Witty der Fuchs, STIL, Standard, Mit Halstuch",
"#72175 Paco die Bulldogge, FARBE, Grau, ", "#72175 Paco die Bulldogge, FARBE, Grau, ",
"#55172 Sharky der Hai, FARBE, Grau, ", "#55172 Sharky der Hai, FARBE, Grau, ",
"#10971 Chibi die Ratte, FARBE, Grau, " "#10971 Chibi die Ratte, FARBE, Grau, ",
"#84712 Personalisiertes Namensschild, TYP, Einfarbig, ",
"#17200 Personalisiertes Namensschild, TYP, Zweifarbig, ",
"#97548 Personalisiertes Namensschild, TYP, Dreifarbig, ",
"#68859 Personalisiertes Namensschild mit Hintergrund, , , "
] ]
} }
] ]

View File

@ -34,7 +34,8 @@
"26 Beige, Matte PLA, OVERTURE", "26 Beige, Matte PLA, OVERTURE",
"27 Marineblau, Matte PLA, OVERTURE", "27 Marineblau, Matte PLA, OVERTURE",
"28 Gelb, Matte PLA, OVERTURE", "28 Gelb, Matte PLA, OVERTURE",
"29 Rot/Schwarz, Dual-Color Silk PLA, AMOLEN" "29 Rot/Schwarz, Dual-Color Silk PLA, AMOLEN",
"30 Hellgrün, Matte PLA, OVERTURE"
] ]
} }
] ]

View File

@ -27,6 +27,7 @@
"#15809 Ruby die Schlange, FARBE, Himmelblau, (Fluoreszierend)", "#15809 Ruby die Schlange, FARBE, Himmelblau, (Fluoreszierend)",
"#49461 Ruby die Schlange, FARBE, Rosa, (Matt)", "#49461 Ruby die Schlange, FARBE, Rosa, (Matt)",
"#84491 Ruby die Schlange, FARBE, Rot/Schwarz, (Glänzend)", "#84491 Ruby die Schlange, FARBE, Rot/Schwarz, (Glänzend)",
"#36688 Ruby die Schlange, FARBE, Grün/Blau/Orange, (Glänzend)",
"#21433 Bruno der Dino, FARBE, Grün/Blau/Orange, (Glänzend)", "#21433 Bruno der Dino, FARBE, Grün/Blau/Orange, (Glänzend)",
"#57953 Bruno der Dino, FARBE, Rot/Blau, (Glänzend)", "#57953 Bruno der Dino, FARBE, Rot/Blau, (Glänzend)",
"#90578 Bruno der Dino, FARBE, Gold, (Glänzend)", "#90578 Bruno der Dino, FARBE, Gold, (Glänzend)",
@ -58,7 +59,11 @@
"#23732 Witty der Fuchs, STIL, Standard, Mit Halstuch", "#23732 Witty der Fuchs, STIL, Standard, Mit Halstuch",
"#72175 Paco die Bulldogge, FARBE, Grau, ", "#72175 Paco die Bulldogge, FARBE, Grau, ",
"#55172 Sharky der Hai, FARBE, Grau, ", "#55172 Sharky der Hai, FARBE, Grau, ",
"#10971 Chibi die Ratte, FARBE, Grau, " "#10971 Chibi die Ratte, FARBE, Grau, ",
"#84712 Personalisiertes Namensschild, TYP, Einfarbig, ",
"#17200 Personalisiertes Namensschild, TYP, Zweifarbig, ",
"#97548 Personalisiertes Namensschild, TYP, Dreifarbig, ",
"#68859 Personalisiertes Namensschild mit Hintergrund, , , "
] ]
} }
] ]

View File

@ -1,209 +0,0 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Versandlabel</title>
<style>
:root {
--container-width: 580mm;
--container-height: 102mm;
}
@font-face {
font-family: "Outfit";
src: url("../../groupsData/static/Outfit-VariableFont_wght.ttf");
}
body {
transform: scale(2);
transform-origin: 0 0;
}
body,
html {
margin: 0;
padding: 0;
font-size: 14px;
width: var(--container-width);
height: var(--container-height);
overflow: hidden;
}
p {
font-family: "Outfit";
font-size: 17.5px;
color: black;
margin: 0;
}
.large-container {
width: var(--container-width);
/* Breite des Containers */
height: var(--container-height);
/* Höhe des Containers */
background-color: #80808000;
/* Hintergrundfarbe */
display: flex;
align-items: center;
}
.container {
/* Höhe des Containers */
height: var(--container-height);
}
.background {
width: var(--container-width);
height: var(--container-height);
overflow: hidden;
position: absolute;
background-color: #fff;
display: flex;
justify-content: center;
align-items: center;
gap: 0mm;
z-index: -10;
opacity: 0.25;
}
.bgRotate {
transform: rotate(-15deg) translate(0, 0mm);
}
.social_media {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
width: 100%;
gap: 2mm;
}
.insta_logo,
.tiktok_logo {
width: 8mm;
}
.social_media_area {
display: flex;
justify-content: space-between;
width: 100%;
gap: 15mm;
}
.bgContainer {
display: flex;
justify-content: center;
align-items: center;
gap: 50mm;
flex-direction: column;
width: 80mm;
position: relative;
}
.myCustomText {
font-size: 20px;
max-width: 80mm;
white-space: nowrap;
/* Prevents text wrapping */
overflow: hidden;
/* Optional: hides text that exceeds max-width */
text-overflow: ellipsis;
/* Optional: adds '...' for overflowed text */
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
</style>
</head>
<body>
<div class="background">
<div class="bgRotate">
<div class="bgContainer">
<div class="social_media_area">
<div class="social_media">
<p>Folge uns</p>
<img class="insta_logo" src="../../groupsData/shx-order-package-label/instagram-logo.png" />
<p>shinnex.official</p>
</div>
<div class="social_media">
<p>Folge uns</p>
<img class="tiktok_logo" src="../../groupsData/shx-order-package-label/tiktok-logo.png" />
<p>shinnex.official</p>
</div>
</div>
<p class="myCustomText">Von SHINNEX für dich</p>
<div class="social_media_area">
<div class="social_media">
<p>Folge uns</p>
<img class="tiktok_logo" src="../../groupsData/shx-order-package-label/tiktok-logo.png" />
<p>shinnex.official</p>
</div>
<div class="social_media">
<p>Folge uns</p>
<img class="insta_logo" src="../../groupsData/shx-order-package-label/instagram-logo.png" />
<p>shinnex.official</p>
</div>
</div>
</div>
</div>
</div>
<div class="large-container">
<div class="container" style="width: 20mm; background-color: rgba(255, 166, 0, 0)"></div>
<img src="../../groupsData/shx-order-package-label/scissors.svg" />
<div class="container" style="
width: 240mm;
background-color: rgba(0, 0, 255, 0);
display: flex;
justify-content: center;
align-items: center;
">
<img src="../../groupsData/shx-order-package-label/stempel.png" width="400"
style="filter: drop-shadow(0 0 2mm #fff)" />
</div>
<img src="../../groupsData/shx-order-package-label/scissors.svg" />
<div class="container" style="width: 40mm; background-color: rgba(255, 192, 203, 0)"></div>
<div class="container" style="
width: 240mm;
background-color: rgba(128, 0, 128, 0);
display: flex;
justify-content: center;
align-items: center;
">
<img src="label.png" style="height: 100%; box-shadow: 0 0 15mm 15mm #fff" />
</div>
<div class="container" style="width: 40mm; background-color: rgba(255, 255, 0, 0)"></div>
</div>
<script>
const name = "{{CUSTOMER_FIRST_NAME}}";
document.querySelector(".myCustomText").innerHTML =
`Von SHINNEX für ` + name;
let bg = document.querySelector(".background");
let bgRotate = document.querySelector(".background .bgRotate");
// clone bgRotate often enough to fill the screen with for loop
for (let i = 0; i < 20; i++) {
let clone = bgRotate.cloneNode(true);
bg.appendChild(clone);
}
</script>
</body>
</html>

View File

@ -19,6 +19,13 @@
"parameterName": "customer_first_name", "parameterName": "customer_first_name",
"type": "text", "type": "text",
"displayName": "Vorname des Kunden" "displayName": "Vorname des Kunden"
},
{
"parameterName": "package_size",
"type": "select",
"displayName": "Paketgröße auswählen",
"global": false,
"options": ["#1 Standard Paket", "#2 Großes Paket"]
} }
] ]
} }

View File

@ -0,0 +1,244 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Versandlabel</title>
<style>
:root {
--container-width: 580mm;
--container-height: 102mm;
}
@font-face {
font-family: "Outfit";
src: url("../../groupsData/static/Outfit-VariableFont_wght.ttf");
}
body {
transform: scale(2);
transform-origin: 0 0;
}
body,
html {
margin: 0;
padding: 0;
font-size: 14px;
width: var(--container-width);
height: var(--container-height);
overflow: hidden;
}
p {
font-family: "Outfit";
font-size: 17.5px;
color: black;
margin: 0;
}
.large-container {
width: var(--container-width);
/* Breite des Containers */
height: var(--container-height);
/* Höhe des Containers */
background-color: #80808000;
/* Hintergrundfarbe */
display: flex;
align-items: center;
}
.container {
/* Höhe des Containers */
height: var(--container-height);
}
.background {
width: var(--container-width);
height: var(--container-height);
overflow: hidden;
position: absolute;
background-color: #fff;
display: flex;
justify-content: center;
align-items: center;
gap: 0mm;
z-index: -10;
opacity: 0.25;
}
.bgRotate {
transform: rotate(-15deg) translate(0, 0mm);
}
.social_media {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
width: 100%;
gap: 2mm;
}
.insta_logo,
.tiktok_logo {
width: 8mm;
}
.social_media_area {
display: flex;
justify-content: space-between;
width: 100%;
gap: 15mm;
}
.bgContainer {
display: flex;
justify-content: center;
align-items: center;
gap: 50mm;
flex-direction: column;
width: 80mm;
position: relative;
}
.myCustomText {
font-size: 20px;
max-width: 80mm;
white-space: nowrap;
/* Prevents text wrapping */
overflow: hidden;
/* Optional: hides text that exceeds max-width */
text-overflow: ellipsis;
/* Optional: adds '...' for overflowed text */
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
</style>
</head>
<body>
<div class="background">
<div class="bgRotate">
<div class="bgContainer">
<div class="social_media_area">
<div class="social_media">
<p>Folge uns</p>
<img
class="insta_logo"
src="../../groupsData/shx-order-package-label/instagram-logo.png"
/>
<p>shinnex.official</p>
</div>
<div class="social_media">
<p>Folge uns</p>
<img
class="tiktok_logo"
src="../../groupsData/shx-order-package-label/tiktok-logo.png"
/>
<p>shinnex.official</p>
</div>
</div>
<p class="myCustomText">Von SHINNEX für dich</p>
<div class="social_media_area">
<div class="social_media">
<p>Folge uns</p>
<img
class="tiktok_logo"
src="../../groupsData/shx-order-package-label/tiktok-logo.png"
/>
<p>shinnex.texte</p>
</div>
<div class="social_media">
<p>Folge uns</p>
<img
class="insta_logo"
src="../../groupsData/shx-order-package-label/instagram-logo.png"
/>
<p>shinnex.texte</p>
</div>
</div>
</div>
</div>
</div>
<div class="large-container">
<div
class="container"
style="width: 40mm; background-color: rgba(255, 255, 0, 0)"
></div>
<div
class="container"
style="width: 70mm; background-color: rgba(255, 166, 0, 0)"
></div>
<img src="../../groupsData/shx-order-package-label/scissors.svg" />
<div
class="container"
style="
width: 240mm;
background-color: rgba(128, 0, 128, 0);
display: flex;
justify-content: center;
align-items: center;
"
>
<img
src="label.png"
style="height: 100%; box-shadow: 0 0 15mm 15mm #fff"
/>
</div>
<div
class="container"
style="
width: 110mm;
background-color: rgba(0, 0, 255, 0);
display: flex;
justify-content: center;
align-items: center;
"
>
<img
src="../../groupsData/shx-order-package-label/stempel2.png"
width="400"
style="filter: drop-shadow(0 0 2mm #fff)"
/>
</div>
<img src="../../groupsData/shx-order-package-label/scissors.svg" />
<div
class="container"
style="width: 40mm; background-color: rgba(255, 192, 203, 0)"
></div>
<!--
<div
class="container"
style="width: 40mm; background-color: rgba(255, 255, 0, 0)"
></div> -->
</div>
<script>
const name = "{{CUSTOMER_FIRST_NAME}}";
document.querySelector(".myCustomText").innerHTML =
`Von SHINNEX für ` + name;
let bg = document.querySelector(".background");
let bgRotate = document.querySelector(".background .bgRotate");
// clone bgRotate often enough to fill the screen with for loop
for (let i = 0; i < 20; i++) {
let clone = bgRotate.cloneNode(true);
bg.appendChild(clone);
}
</script>
</body>
</html>

View File

@ -0,0 +1,240 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Versandlabel</title>
<style>
:root {
--container-width: 580mm;
--container-height: 102mm;
}
@font-face {
font-family: "Outfit";
src: url("../../groupsData/static/Outfit-VariableFont_wght.ttf");
}
body {
transform: scale(2);
transform-origin: 0 0;
}
body,
html {
margin: 0;
padding: 0;
font-size: 14px;
width: var(--container-width);
height: var(--container-height);
overflow: hidden;
}
p {
font-family: "Outfit";
font-size: 17.5px;
color: black;
margin: 0;
}
.large-container {
width: var(--container-width);
/* Breite des Containers */
height: var(--container-height);
/* Höhe des Containers */
background-color: #80808000;
/* Hintergrundfarbe */
display: flex;
align-items: center;
}
.container {
/* Höhe des Containers */
height: var(--container-height);
}
.background {
width: var(--container-width);
height: var(--container-height);
overflow: hidden;
position: absolute;
background-color: #fff;
display: flex;
justify-content: center;
align-items: center;
gap: 0mm;
z-index: -10;
opacity: 0.25;
}
.bgRotate {
transform: rotate(-15deg) translate(0, 0mm);
}
.social_media {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
width: 100%;
gap: 2mm;
}
.insta_logo,
.tiktok_logo {
width: 8mm;
}
.social_media_area {
display: flex;
justify-content: space-between;
width: 100%;
gap: 15mm;
}
.bgContainer {
display: flex;
justify-content: center;
align-items: center;
gap: 50mm;
flex-direction: column;
width: 80mm;
position: relative;
}
.myCustomText {
font-size: 20px;
max-width: 80mm;
white-space: nowrap;
/* Prevents text wrapping */
overflow: hidden;
/* Optional: hides text that exceeds max-width */
text-overflow: ellipsis;
/* Optional: adds '...' for overflowed text */
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
</style>
</head>
<body>
<div class="background">
<div class="bgRotate">
<div class="bgContainer">
<div class="social_media_area">
<div class="social_media">
<p>Folge uns</p>
<img
class="insta_logo"
src="../../groupsData/shx-order-package-label/instagram-logo.png"
/>
<p>shinnex.official</p>
</div>
<div class="social_media">
<p>Folge uns</p>
<img
class="tiktok_logo"
src="../../groupsData/shx-order-package-label/tiktok-logo.png"
/>
<p>shinnex.official</p>
</div>
</div>
<p class="myCustomText">Von SHINNEX für dich</p>
<div class="social_media_area">
<div class="social_media">
<p>Folge uns</p>
<img
class="tiktok_logo"
src="../../groupsData/shx-order-package-label/tiktok-logo.png"
/>
<p>shinnex.texte</p>
</div>
<div class="social_media">
<p>Folge uns</p>
<img
class="insta_logo"
src="../../groupsData/shx-order-package-label/instagram-logo.png"
/>
<p>shinnex.texte</p>
</div>
</div>
</div>
</div>
</div>
<div class="large-container">
<div
class="container"
style="width: 20mm; background-color: rgba(255, 166, 0, 0)"
></div>
<img src="../../groupsData/shx-order-package-label/scissors.svg" />
<div
class="container"
style="
width: 240mm;
background-color: rgba(0, 0, 255, 0);
display: flex;
justify-content: center;
align-items: center;
"
>
<img
src="../../groupsData/shx-order-package-label/stempel2.png"
width="400"
style="filter: drop-shadow(0 0 2mm #fff)"
/>
</div>
<img src="../../groupsData/shx-order-package-label/scissors.svg" />
<div
class="container"
style="width: 40mm; background-color: rgba(255, 192, 203, 0)"
></div>
<div
class="container"
style="
width: 240mm;
background-color: rgba(128, 0, 128, 0);
display: flex;
justify-content: center;
align-items: center;
"
>
<img
src="label.png"
style="height: 100%; box-shadow: 0 0 15mm 15mm #fff"
/>
</div>
<div
class="container"
style="width: 40mm; background-color: rgba(255, 255, 0, 0)"
></div>
</div>
<script>
const name = "{{CUSTOMER_FIRST_NAME}}";
document.querySelector(".myCustomText").innerHTML =
`Von SHINNEX für ` + name;
let bg = document.querySelector(".background");
let bgRotate = document.querySelector(".background .bgRotate");
// clone bgRotate often enough to fill the screen with for loop
for (let i = 0; i < 20; i++) {
let clone = bgRotate.cloneNode(true);
bg.appendChild(clone);
}
</script>
</body>
</html>

View File

@ -13,13 +13,22 @@ from libs.utils import utils
json_object = json.loads(sys.argv[1]) json_object = json.loads(sys.argv[1])
shipping_label_url = json_object["shipping_label_url"] shipping_label_url = json_object["shipping_label_url"]
customer_first_name = json_object["customer_first_name"] customer_first_name = json_object["customer_first_name"]
package_size = json_object["package_size"]
if shipping_label_url is None or customer_first_name is None: if shipping_label_url is None or customer_first_name is None or package_size is None:
print("Missing required parameters") print("Missing required parameters")
sys.exit(1) sys.exit(1)
shipping_label_url = shipping_label_url["value"] shipping_label_url = shipping_label_url["value"]
customer_first_name = customer_first_name["value"] customer_first_name = customer_first_name["value"]
package_size = package_size["value"]
# define which html to use
package_label_html = "indexStandardPackage.html"
if package_size.startswith("#2"):
package_label_html = "indexLargePackage.html"
def createHighDpiPng(sourceHtml, outputPng): def createHighDpiPng(sourceHtml, outputPng):
# Calculate scaled dimensions # Calculate scaled dimensions
@ -141,12 +150,12 @@ def downloadFilePDFDHL(url, filename):
def replacePlaceholder(): def replacePlaceholder():
with open("index.html", "r") as file: with open(package_label_html, "r") as file:
index_html = file.read() index_html = file.read()
index_html = index_html.replace("{{CUSTOMER_FIRST_NAME}}", customer_first_name) index_html = index_html.replace("{{CUSTOMER_FIRST_NAME}}", customer_first_name)
with open("index.html", "w") as file: with open(package_label_html, "w") as file:
file.write(index_html) file.write(index_html)
@ -165,6 +174,6 @@ if __name__ == "__main__":
replacePlaceholder() replacePlaceholder()
createHighDpiPng("index.html", "Versandlabel.png") createHighDpiPng(package_label_html, "Versandlabel.png")
utils.clear_workspace(["index.html", "label.png.pdf", "label.png"]) utils.clear_workspace(["indexStandardPackage.html", "indexLargePackage.html", "label.png.pdf", "label.png"])

View File

@ -50,62 +50,7 @@
" "
></div> ></div>
<div> {{TEXTE}}
<span>
Hey, wir haben gerade Dein Paket liebevoll verpackt und konnten es kaum
erwarten, Dir diese kleine Nachricht zu hinterlassen,
</span>
<b>{{CUSTOMER_NAME}}</b><span>.</span>
</div>
<p>
Es ist dieses besondere Gefühl, zu wissen, dass unsere Produkte neue
Zuhause finden, das uns jeden Tag antreibt. Deine Entscheidung, bei uns zu
shoppen, macht uns überglücklich! Wir hoffen, dass Du beim Auspacken
genauso viel Freude empfindest, wie wir beim Verpacken.
</p>
<div>
<span>Um unsere Wertschätzung zu zeigen und Dir für Deine </span>
<b>Treue</b>
<span> zu danken, haben wir ein paar </span>
<b>Gutscheincodes</b>
<span>
für Dich zusammengestellt
<img
style="height: 20px; vertical-align: -4px"
src="../../groupsData/shx-order-voucher-codes/glasses.png"
/>
Mit diesen kannst Du bei Deinen nächsten Einkäufen ordentlich
sparen:</span
>
</div>
<ul>
<li>
<span>Siehe Rückseite</span>
</li>
</ul>
<p>
<span>Jeder Code ist ein kleines Dankeschön von uns an Dich, </span>
<b>{{CUSTOMER_NAME}}</b
><span
>, und wir hoffen, dass sie Dein Shopping-Erlebnis noch besser machen.
Falls Du Fragen hast oder Unterstützung brauchst, zögere nicht, uns zu
kontaktieren.</span
>
</p>
<p>
<span
>Deine Unterstützung ermöglicht es uns, weiter zu wachsen und unsere
Gemeinschaft zu bereichern. Wir freuen uns darauf, Dich bald wieder
begrüßen zu dürfen und wünschen Dir viel
</span>
<b>Freude</b>
<span> mit allem, was Du bestellt hast!</span>
</p>
<span>Liebe Grüße</span> <span>Liebe Grüße</span>
<br /> <br />

View File

@ -240,9 +240,31 @@ def ReplaceHtmlVariables():
# replace variables in html file # replace variables in html file
# read html file and replace variables # read html file and replace variables
with open("../../groupsData/shx-order-voucher-codes/texte.json", 'r', encoding='utf-8') as json_file:
data = json.load(json_file)
randomTextIndex = random.randint(0, len(data["texts"])-1)
htmlParagraphs = ""
i = 0
for paragraph in data["texts"][randomTextIndex]["paragraphs"]:
startTag = "<p>"
endTag = "</p>"
# first paragraph with span because they have no padding
if i == 0:
startTag = "<span>"
endTag = "</span>"
htmlParagraphs += f"{startTag}{paragraph.replace('{{CUSTOMER_NAME}}', customerName)}{endTag}"
i += 1
file = open("frontPage.html", "r") file = open("frontPage.html", "r")
html = file.read() html = file.read()
html = html.replace("{{CUSTOMER_NAME}}", customerName) html = html.replace("{{TEXTE}}", htmlParagraphs)
file.close() file.close()
file = open("frontPage.html", "w") file = open("frontPage.html", "w")

View File

@ -31,6 +31,7 @@
"#15809 Ruby die Schlange, FARBE, Himmelblau, (Fluoreszierend)", "#15809 Ruby die Schlange, FARBE, Himmelblau, (Fluoreszierend)",
"#49461 Ruby die Schlange, FARBE, Rosa, (Matt)", "#49461 Ruby die Schlange, FARBE, Rosa, (Matt)",
"#84491 Ruby die Schlange, FARBE, Rot/Schwarz, (Glänzend)", "#84491 Ruby die Schlange, FARBE, Rot/Schwarz, (Glänzend)",
"#36688 Ruby die Schlange, FARBE, Grün/Blau/Orange, (Glänzend)",
"#21433 Bruno der Dino, FARBE, Grün/Blau/Orange, (Glänzend)", "#21433 Bruno der Dino, FARBE, Grün/Blau/Orange, (Glänzend)",
"#57953 Bruno der Dino, FARBE, Rot/Blau, (Glänzend)", "#57953 Bruno der Dino, FARBE, Rot/Blau, (Glänzend)",
"#90578 Bruno der Dino, FARBE, Gold, (Glänzend)", "#90578 Bruno der Dino, FARBE, Gold, (Glänzend)",
@ -62,7 +63,11 @@
"#23732 Witty der Fuchs, STIL, Standard, Mit Halstuch", "#23732 Witty der Fuchs, STIL, Standard, Mit Halstuch",
"#72175 Paco die Bulldogge, FARBE, Grau, ", "#72175 Paco die Bulldogge, FARBE, Grau, ",
"#55172 Sharky der Hai, FARBE, Grau, ", "#55172 Sharky der Hai, FARBE, Grau, ",
"#10971 Chibi die Ratte, FARBE, Grau, " "#10971 Chibi die Ratte, FARBE, Grau, ",
"#84712 Personalisiertes Namensschild, TYP, Einfarbig, ",
"#17200 Personalisiertes Namensschild, TYP, Zweifarbig, ",
"#97548 Personalisiertes Namensschild, TYP, Dreifarbig, ",
"#68859 Personalisiertes Namensschild mit Hintergrund, , , "
], ],
"global": false "global": false
} }

View File

@ -113,6 +113,12 @@
"name_color": "Rot/Schwarz", "name_color": "Rot/Schwarz",
"material": "Dual-Color Silk PLA", "material": "Dual-Color Silk PLA",
"manufacturer": "AMOLEN" "manufacturer": "AMOLEN"
},
{
"id": "30",
"name_color": "Hellgrün",
"material": "Matte PLA",
"manufacturer": "OVERTURE"
} }
] ]
} }

View File

@ -77,6 +77,13 @@
"product_characteristic_line_1": "Rot/Schwarz", "product_characteristic_line_1": "Rot/Schwarz",
"product_characteristic_line_2": "(Glänzend)" "product_characteristic_line_2": "(Glänzend)"
}, },
{
"id": "36688",
"name": "Ruby_die Schlange",
"product_variant": "FARBE",
"product_characteristic_line_1": "Grün/Blau/Orange",
"product_characteristic_line_2": "(Glänzend)"
},
{ {
"id": "21433", "id": "21433",
"name": "Bruno_der Dino", "name": "Bruno_der Dino",
@ -300,6 +307,34 @@
"product_variant": "FARBE", "product_variant": "FARBE",
"product_characteristic_line_1": "Grau", "product_characteristic_line_1": "Grau",
"product_characteristic_line_2": "" "product_characteristic_line_2": ""
},
{
"id": "84712",
"name": "Personalisiertes_Namensschild",
"product_variant": "TYP",
"product_characteristic_line_1": "Einfarbig",
"product_characteristic_line_2": ""
},
{
"id": "17200",
"name": "Personalisiertes_Namensschild",
"product_variant": "TYP",
"product_characteristic_line_1": "Zweifarbig",
"product_characteristic_line_2": ""
},
{
"id": "97548",
"name": "Personalisiertes_Namensschild",
"product_variant": "TYP",
"product_characteristic_line_1": "Dreifarbig",
"product_characteristic_line_2": ""
},
{
"id": "68859",
"name": "Personalisiertes_Namensschild mit Hintergrund",
"product_variant": "",
"product_characteristic_line_1": "",
"product_characteristic_line_2": ""
} }
] ]
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -0,0 +1,49 @@
{
"texts": [
{
"paragraphs": [
"Hallo <strong>{{CUSTOMER_NAME}}</strong>,",
"wir freuen uns riesig, dass Du Dein Paket erhalten hast und möchten Dir diese kleine Nachricht hinterlassen. Es ist uns eine Herzensangelegenheit, dass unsere Produkte ein neues Zuhause finden, und Deine Entscheidung, bei uns zu shoppen, erfüllt uns mit großer Freude.",
"Beim Auspacken wünschen wir Dir genauso viel Spaß, wie wir ihn beim Verpacken hatten. Als kleines Dankeschön für Deine <strong>Treue</strong> haben wir einige <strong>Gutscheincodes</strong> für Dich zusammengestellt, die Du auf der Rückseite findest. Mit diesen kannst Du bei Deinen nächsten Einkäufen sparen.",
"Jeder dieser Codes ist ein Zeichen unserer Wertschätzung Dir gegenüber. Solltest Du Fragen haben oder Hilfe benötigen, zögere nicht, uns zu kontaktieren. Deine Unterstützung hilft uns, weiter zu wachsen und unsere Gemeinschaft zu bereichern.",
"Wir freuen uns darauf, Dich bald wieder bei uns begrüßen zu dürfen und wünschen Dir viel <strong>Freude</strong> mit Deinen neuen Produkten!"
]
},
{
"paragraphs": [
"Hey <strong>{{CUSTOMER_NAME}}</strong>,",
"wir hoffen, Du hast beim Auspacken Deines Pakets genauso viel Freude wie wir beim Verpacken! Es bedeutet uns sehr viel, dass Du Dich für unsere Produkte entschieden hast. Das gibt uns täglich neuen Antrieb.",
"Um Dir für Deine <strong>Treue</strong> zu danken, haben wir ein paar <strong>Gutscheincodes</strong> für Dich auf der Rückseite vorbereitet. Diese ermöglichen Dir tolle Rabatte bei Deinen nächsten Einkäufen.",
"Diese Codes sind unser kleines Dankeschön an Dich. Solltest Du Fragen haben, stehen wir Dir jederzeit zur Verfügung. Dank Deiner Unterstützung können wir weiter wachsen und unsere Community stärken.",
"Wir freuen uns schon jetzt auf Deinen nächsten Besuch und wünschen Dir viel Spaß mit Deiner Bestellung!"
]
},
{
"paragraphs": [
"Hey <strong>{{CUSTOMER_NAME}}</strong>,",
"wir hoffen, Dein Paket hat Dir ein Lächeln ins Gesicht gezaubert! Es bereitet uns immer wieder Freude zu wissen, dass unsere Produkte ein neues Zuhause finden. Deine Wahl, bei uns einzukaufen, macht uns sehr glücklich.",
"Als kleines Dankeschön für Deine <strong>Treue</strong> haben wir einige <strong>Gutscheincodes</strong> auf der Rückseite beigelegt, mit denen Du bei Deinem nächsten Einkauf sparen kannst.",
"Diese Codes sind unser persönliches Dankeschön an Dich. Bei Fragen oder wenn Du Hilfe benötigst, zögere bitte nicht, uns zu kontaktieren. Deine Unterstützung hilft uns, unsere Ziele zu erreichen und unsere Gemeinschaft zu stärken.",
"Wir freuen uns auf Deinen nächsten Einkauf und wünschen Dir viel Freude mit Deinen neuen Produkten!"
]
},
{
"paragraphs": [
"Hallo <strong>{{CUSTOMER_NAME}}</strong>,",
"wir hoffen, dass Dein Paket sicher angekommen ist und Du viel Freude beim Auspacken hast! Es erfüllt uns mit Stolz, dass unsere Produkte ein neues Zuhause finden, und wir sind dankbar, dass Du bei uns eingekauft hast.",
"Um Dir unsere Wertschätzung zu zeigen, haben wir einige <strong>Gutscheincodes</strong> für Dich zusammengestellt, die Du auf der Rückseite findest. Sie ermöglichen Dir tolle Ersparnisse bei Deinem nächsten Einkauf.",
"Diese Codes sind ein kleines Zeichen unserer Dankbarkeit. Bei Fragen oder wenn Du Hilfe brauchst, kannst Du uns jederzeit kontaktieren. Deine Unterstützung hilft uns, weiter zu wachsen und unsere Community zu bereichern.",
"Wir freuen uns auf Deinen nächsten Besuch und wünschen Dir viel Freude mit Deiner Bestellung!"
]
},
{
"paragraphs": [
"Hey <strong>{{CUSTOMER_NAME}}</strong>,",
"wir hoffen, Du hattest genauso viel Spaß beim Auspacken Deines Pakets, wie wir beim Verpacken hatten! Es bedeutet uns sehr viel, dass Du Dich für unsere Produkte entschieden hast. Das gibt uns täglich neuen Antrieb und Freude.",
"Auf der Rückseite findest Du einige Gutscheincodes, die wir als Dankeschön für Deine <strong>Treue</strong> zusammengestellt haben. Diese ermöglichen Dir tolle Rabatte bei Deinen nächsten Einkäufen.",
"Diese Codes sind unser kleines Dankeschön an Dich. Solltest Du Fragen haben oder Unterstützung benötigen, zögere nicht, uns zu kontaktieren. Deine Unterstützung ermöglicht es uns, weiter zu wachsen und unsere Gemeinschaft zu bereichern.",
"Wir freuen uns darauf, Dich bald wieder bei uns begrüßen zu dürfen und wünschen Dir viel Freude mit Deiner Bestellung!"
]
}
]
}