disdiscount
|
@ -0,0 +1,162 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Document</title>
|
||||
<link rel="stylesheet" href="style.css" />
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link
|
||||
href="https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap"
|
||||
rel="stylesheet"
|
||||
/>
|
||||
<style>
|
||||
body {
|
||||
font-family: "Outfit";
|
||||
}
|
||||
|
||||
@page {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
size: A5 landscape;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div
|
||||
style="
|
||||
background-image: url(backPageLogo.svg);
|
||||
height: 80px;
|
||||
background-size: 800px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
"
|
||||
></div>
|
||||
|
||||
<div style="display: flex; justify-content: center; padding-top: 60px">
|
||||
<div style="display: flex">
|
||||
<div class="container">
|
||||
<div class="container-background first-item"></div>
|
||||
|
||||
<div class="container-header">
|
||||
<p><span class="percentage">10 %</span> auf Alles</p>
|
||||
|
||||
<img
|
||||
loading="lazy"
|
||||
height="28px"
|
||||
alt=""
|
||||
src="./icon_lock_open.svg"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="container-action">
|
||||
<div style="height: 102px"></div>
|
||||
|
||||
<div>
|
||||
<div class="status-box">
|
||||
<span class="open">Freigeschaltet</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Bewerte dein gekauftes Produkt in unserem Shop und erhalte einen
|
||||
Gutschein in Höhe von 5 €!
|
||||
</p>
|
||||
<p style="padding-bottom: 22px">
|
||||
Scanne den QR Code, um zu bewerten.
|
||||
</p>
|
||||
|
||||
<div class="code-box first-item">
|
||||
<span>SYfwa2g</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
<div class="container-background second-item"></div>
|
||||
|
||||
<div class="container-header">
|
||||
<p><span class="percentage">5 €</span> auf Alles</p>
|
||||
|
||||
<img
|
||||
loading="lazy"
|
||||
height="28px"
|
||||
alt=""
|
||||
src="./icon_lock_closed.svg"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="container-action">
|
||||
<img class="image-11-icon" alt="" src="./qrcode.png" />
|
||||
|
||||
<div>
|
||||
<div class="status-box">
|
||||
<span class="closed">Freischaltbar</span>
|
||||
</div>
|
||||
<div class="time-needed-box">
|
||||
<span>Dauer: 5 Minuten*</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Bewerte dein gekauftes Produkt in unserem Shop und erhalte einen
|
||||
Gutschein in Höhe von 5 €!
|
||||
</p>
|
||||
<p>Scanne den QR Code, um zu bewerten.</p>
|
||||
|
||||
<div class="minimum-order-value-box">
|
||||
<span>Mindestbestellwert beträgt 20 €</span>
|
||||
</div>
|
||||
|
||||
<div class="code-box second-item">
|
||||
<span>********</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
<div class="container-background third-item"></div>
|
||||
|
||||
<div class="container-header">
|
||||
<p><span class="percentage">10 €</span> auf Alles</p>
|
||||
|
||||
<img
|
||||
loading="lazy"
|
||||
height="28px"
|
||||
alt=""
|
||||
src="./icon_lock_closed.svg"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="container-action">
|
||||
<img class="image-11-icon" alt="" src="./qrcode.png" />
|
||||
|
||||
<div>
|
||||
<div class="status-box">
|
||||
<span class="closed">Freischaltbar</span>
|
||||
</div>
|
||||
<div class="time-needed-box">
|
||||
<span>Dauer: 5 Minuten*</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Bewerte dein gekauftes Produkt in unserem Shop und erhalte einen
|
||||
Gutschein in Höhe von 10 €!
|
||||
</p>
|
||||
<p>Scanne den QR Code, um zu bewerten.</p>
|
||||
|
||||
<div class="minimum-order-value-box">
|
||||
<span>Mindestbestellwert beträgt 20 €</span>
|
||||
</div>
|
||||
|
||||
<div class="code-box third-item">
|
||||
<span>********</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,94 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="initial-scale=1, width=device-width" />
|
||||
|
||||
<link rel="stylesheet" href="./global.css" />
|
||||
<link rel="stylesheet" href="./index.css" />
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;700&display=swap"
|
||||
/>
|
||||
</head>
|
||||
<body>
|
||||
<div class="root-container">
|
||||
<div class="root-container-inner">
|
||||
<div class="redeem-fill1-wght300-grad0-ops-parent">
|
||||
<img
|
||||
class="redeem-fill1-wght300-grad0-ops-icon"
|
||||
loading="lazy"
|
||||
alt=""
|
||||
src="./redeem-fill1-wght300-grad0-opsz20-1.svg"
|
||||
/>
|
||||
|
||||
<div class="receipt-icon">
|
||||
<h1 class="gutscheine">GUTSCHEINE</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<main class="frame-parent">
|
||||
<div class="frame-group">
|
||||
<div class="frame-container">
|
||||
<div class="auf-alles-parent">
|
||||
<h1 class="auf-alles1">
|
||||
<span>
|
||||
<b>5 €</b>
|
||||
<span> auf Alles</span>
|
||||
</span>
|
||||
</h1>
|
||||
<div class="freischaltbar">Freischaltbar</div>
|
||||
<img
|
||||
class="lock-fill1-wght300-grad0-opsz2-icon"
|
||||
loading="lazy"
|
||||
alt=""
|
||||
src="./lock-fill1-wght300-grad0-opsz20-1.svg"
|
||||
/>
|
||||
</div>
|
||||
<div class="frame-div">
|
||||
<div class="dauer-5-minuten-wrapper">
|
||||
<div class="dauer-5-minuten">Dauer: 5 Minuten*</div>
|
||||
</div>
|
||||
<div class="frame-parent1">
|
||||
<div class="group-24-1-parent">
|
||||
<img class="group-24-11" alt="" src="./group-24-1.svg" />
|
||||
|
||||
<div class="frame-item"></div>
|
||||
<img class="image-11-icon" alt="" src="./image-11@2x.png" />
|
||||
</div>
|
||||
<div class="bewerte-dein-gekauftes-container">
|
||||
<p class="bewerte-dein-gekauftes">
|
||||
Bewerte dein gekauftes Produkt in unserem Shop und erhalte
|
||||
einen Gutschein in Höhe von 5 €!
|
||||
</p>
|
||||
<p class="blank-line"> </p>
|
||||
<p class="scanne-den-qr">
|
||||
Scanne den QR Code, um zu bewerten.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="minimum-order-amount">
|
||||
<div class="separator">
|
||||
<div class="mindestbestellwert-betrgt-20">
|
||||
Mindestbestellwert beträgt 20 €
|
||||
</div>
|
||||
<div class="rectangle-group">
|
||||
<div class="frame-inner"></div>
|
||||
<h3 class="h3">********</h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="die-angaben-basieren-jediglich-wrapper">
|
||||
<div class="die-angaben-basieren">
|
||||
*Die Angaben basieren jediglich auf Schätzungen. Die Verifizierung
|
||||
kann bis zu 48 Stunden dauern, bis der Gutschein freigeschaltet
|
||||
wird.
|
||||
</div>
|
||||
</footer>
|
||||
</main>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
After Width: | Height: | Size: 7.4 KiB |
After Width: | Height: | Size: 248 KiB |
After Width: | Height: | Size: 28 KiB |
|
@ -0,0 +1,103 @@
|
|||
import requests
|
||||
import sys
|
||||
import json
|
||||
|
||||
# DEFINITIONS
|
||||
|
||||
endpoint_url = "https://devdash.ex.umbach.dev/api/v1/crm"
|
||||
api_key = "uY1DTUog-Iax7-ydc4-dP9V-NON1xsbTGH1I"
|
||||
|
||||
headers = {
|
||||
"X-Api-Key": api_key,
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
# MAIN
|
||||
|
||||
json_object = json.loads(sys.argv[1])
|
||||
customerEmail = json_object["customerEmail"]
|
||||
orderId = json_object["orderId"]
|
||||
|
||||
if customerEmail is None:
|
||||
print("customerEmail is required")
|
||||
sys.exit(1)
|
||||
|
||||
customerEmail = customerEmail["value"]
|
||||
orderId = orderId["value"]
|
||||
|
||||
|
||||
def CreateCrmCustomer():
|
||||
response = requests.post(
|
||||
url=f"{endpoint_url}/customer/create",
|
||||
headers=headers,
|
||||
json={
|
||||
"FirstName": "Shopify Customer",
|
||||
"Email": customerEmail,
|
||||
"LeadOrigin": "Shopify Customer added by GroupTask",
|
||||
})
|
||||
|
||||
if response.status_code != 200:
|
||||
print(f"CreateCrmCustomer req error {response.status_code}")
|
||||
sys.exit(1)
|
||||
|
||||
print(response.status_code)
|
||||
print(response.json())
|
||||
|
||||
return response.json()["Id"]
|
||||
|
||||
|
||||
def CheckIfCrmCustomerExists():
|
||||
print(f"Checking if customer exists: {customerEmail}")
|
||||
|
||||
response = requests.post(
|
||||
url=f"{endpoint_url}/customer",
|
||||
headers=headers,
|
||||
json={"Email": customerEmail} # Hier json verwenden, um JSON-Daten zu senden
|
||||
)
|
||||
|
||||
print("CheckIfCrmCustomerExists response status code", response.status_code)
|
||||
|
||||
if response.status_code != 200:
|
||||
print(f"CheckIfCrmCustomerExists req error {response.status_code}")
|
||||
sys.exit(1)
|
||||
|
||||
customerId = ""
|
||||
|
||||
if response.json() == []:
|
||||
print("Customer not found")
|
||||
customerId = CreateCrmCustomer()
|
||||
else:
|
||||
if len(response.json()) > 1:
|
||||
print("Multiple customers found. Don't know which one to use")
|
||||
sys.exit(1)
|
||||
|
||||
customerId = response.json()[0]["Id"]
|
||||
|
||||
CreateCrmActivityLink(customerId=customerId)
|
||||
|
||||
|
||||
def CreateCrmActivityLink(customerId):
|
||||
print(f"Creating CRM activity link for customer {customerId}")
|
||||
|
||||
def req(type):
|
||||
response = requests.post(
|
||||
url=f"{endpoint_url}/links",
|
||||
headers=headers,
|
||||
json={
|
||||
"CustomerId": customerId,
|
||||
"Name": f"Shopify Order #{orderId} - {type}",
|
||||
"Url": "https://www.example.com"
|
||||
})
|
||||
|
||||
if response.status_code != 200:
|
||||
print(f"CreateCrmActivityLink req error {response.status_code}")
|
||||
sys.exit(1)
|
||||
|
||||
print(response.status_code)
|
||||
|
||||
req("5 € Gutschein")
|
||||
req("10 € Gutschein")
|
||||
|
||||
|
||||
|
||||
CheckIfCrmCustomerExists()
|
|
@ -0,0 +1,94 @@
|
|||
import os
|
||||
import pdfkit
|
||||
import qrcode
|
||||
import subprocess
|
||||
import PyPDF2
|
||||
|
||||
|
||||
def create_pdf_from_html(html_file, pdf_file):
|
||||
pdfkit.from_file(html_file, pdf_file, options={"page-size": "A5", "orientation": "Landscape", "enable-local-file-access": ""})
|
||||
|
||||
|
||||
def list_files_in_directory(directory):
|
||||
files = os.listdir(directory)
|
||||
for file in files:
|
||||
print(file)
|
||||
|
||||
|
||||
def create_qrcode():
|
||||
data = "https://www.example.com"
|
||||
|
||||
# Generate QR code
|
||||
qr = qrcode.QRCode(
|
||||
version=1,
|
||||
error_correction=qrcode.constants.ERROR_CORRECT_L,
|
||||
box_size=10,
|
||||
border=4,
|
||||
)
|
||||
qr.add_data(data)
|
||||
qr.make(fit=True)
|
||||
|
||||
# Create an image from the QR Code instance
|
||||
img = qr.make_image(fill_color="black", back_color="#fdf8ef")
|
||||
|
||||
# Save image to a file
|
||||
img.save("./example_qr.png")
|
||||
|
||||
# Display the generated QR code image
|
||||
img.show()
|
||||
|
||||
def test(sourceHtml, outputPdf):
|
||||
command = [
|
||||
"google-chrome-stable",
|
||||
"--headless",
|
||||
"--no-sandbox",
|
||||
"--disable-gpu",
|
||||
"--debug=1",
|
||||
"--print-to-pdf=" + outputPdf,
|
||||
"--run-all-compositor-stages-before-draw",
|
||||
"--virtual-time-budget=10000",
|
||||
sourceHtml,
|
||||
]
|
||||
|
||||
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
stdout, stderr = process.communicate()
|
||||
|
||||
print("STDOUT:", stdout)
|
||||
print("STDERR:", stderr)
|
||||
|
||||
def merge_pdfs(pdf1_path, pdf2_path, output_path):
|
||||
# Öffne die beiden PDF-Dateien
|
||||
with open(pdf1_path, 'rb') as file1, open(pdf2_path, 'rb') as file2:
|
||||
# Erstelle PDF-Reader-Objekte
|
||||
pdf1_reader = PyPDF2.PdfReader(file1)
|
||||
pdf2_reader = PyPDF2.PdfReader(file2)
|
||||
|
||||
# Erstelle PDF-Writer-Objekt
|
||||
pdf_writer = PyPDF2.PdfWriter()
|
||||
|
||||
# Füge Seiten aus der ersten PDF hinzu
|
||||
for page_num in range(len(pdf1_reader.pages)):
|
||||
page = pdf1_reader.pages[page_num]
|
||||
pdf_writer.add_page(page)
|
||||
|
||||
# Füge Seiten aus der zweiten PDF hinzu
|
||||
for page_num in range(len(pdf2_reader.pages)):
|
||||
page = pdf2_reader.pages[page_num]
|
||||
pdf_writer.add_page(page)
|
||||
|
||||
# Speichere die kombinierte PDF
|
||||
with open(output_path, 'wb') as output_file:
|
||||
pdf_writer.write(output_file)
|
||||
|
||||
if __name__ == "__main__":
|
||||
directory = "oldFiles/" # Aktuelles Verzeichnis
|
||||
list_files_in_directory(directory)
|
||||
|
||||
create_pdf_from_html("oldFiles/frontPage.html", "outputFront.pdf")
|
||||
create_pdf_from_html("oldFiles/backPage.html", "outputBack.pdf")
|
||||
create_pdf_from_html("oldFiles/backPage3.html", "outputBack3.pdf")
|
||||
create_qrcode()
|
||||
test("oldFiles/frontPage.html", "finalFrontPage.pdf")
|
||||
test("oldFiles/backPage.html", "finalBackPage.pdf")
|
||||
|
||||
merge_pdfs('finalFrontPage.pdf', 'finalBackPage.pdf', 'combined.pdf')
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="36" height="37" viewBox="0 0 36 37" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0 36.52H36V0.52H0V36.52Z" fill="black"/>
|
||||
</svg>
|
After Width: | Height: | Size: 154 B |
After Width: | Height: | Size: 4.1 KiB |
|
@ -0,0 +1,112 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Document</title>
|
||||
<link
|
||||
href="https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap"
|
||||
rel="stylesheet"
|
||||
/>
|
||||
<style>
|
||||
body {
|
||||
font-family: "Outfit";
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
@page {
|
||||
margin: 0 50px 0 50px;
|
||||
padding: 0;
|
||||
size: A5 landscape;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body style="height: 550px; position: relative">
|
||||
<div
|
||||
style="
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 90%;
|
||||
background-image: url(frontPageBackground.svg);
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
background-size: 50%;
|
||||
opacity: 0.1;
|
||||
top: 25px;
|
||||
"
|
||||
></div>
|
||||
|
||||
<div
|
||||
style="
|
||||
background-image: url(frontPageLogo.svg);
|
||||
height: 80px;
|
||||
background-size: 400px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
"
|
||||
></div>
|
||||
|
||||
<div>
|
||||
<span>
|
||||
Hey, wir haben gerade Dein Paket liebevoll verpackt und konnten es kaum
|
||||
erwarten, Dir diese kleine Nachricht zu hinterlassen,
|
||||
</span>
|
||||
<b>[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="./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>[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>
|
||||
<br />
|
||||
<span
|
||||
>dein Jan
|
||||
<img style="height: 20px; vertical-align: -4px" src="./feeling.jpg"
|
||||
/></span>
|
||||
</body>
|
||||
</html>
|
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 2.8 KiB |
|
@ -0,0 +1,56 @@
|
|||
body {
|
||||
margin: 0;
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
:root {
|
||||
/* fonts */
|
||||
--font-outfit: Outfit;
|
||||
|
||||
/* font sizes */
|
||||
--font-size-5xl: 24px;
|
||||
--font-size-lgi: 19px;
|
||||
--font-size-29xl: 48px;
|
||||
--font-size-10xl: 29px;
|
||||
--font-size-19xl: 38px;
|
||||
--font-size-xl: 20px;
|
||||
--font-size-base: 16px;
|
||||
--font-size-13xl: 32px;
|
||||
--font-size-7xl: 26px;
|
||||
--font-size-45xl: 64px;
|
||||
--font-size-32xl: 51px;
|
||||
|
||||
/* Colors */
|
||||
--color-dimgray-100: #616161;
|
||||
--color-floralwhite: #fdf8ef;
|
||||
--color-tan: rgba(175, 147, 99, 0.1);
|
||||
--color-darkslategray: #393939;
|
||||
--color-black: #000;
|
||||
--color-gray: rgba(0, 0, 0, 0.71);
|
||||
--color-firebrick: #a80000;
|
||||
|
||||
/* Gaps */
|
||||
--gap-10xl: 29px;
|
||||
--gap-sm-5: 13.5px;
|
||||
--gap-mini-5: 14.5px;
|
||||
|
||||
/* Paddings */
|
||||
--padding-10xl: 29px;
|
||||
--padding-78xl: 97px;
|
||||
--padding-150xl: 169px;
|
||||
--padding-lgi-5: 19.5px;
|
||||
--padding-xl: 20px;
|
||||
--padding-52xl: 71px;
|
||||
--padding-91xl: 110px;
|
||||
--padding-6xs: 7px;
|
||||
--padding-5xs-5: 7.5px;
|
||||
--padding-11xs: 2px;
|
||||
--padding-mid: 17px;
|
||||
--padding-20xl-5: 39.5px;
|
||||
--padding-9xs: 4px;
|
||||
--padding-5xs: 8px;
|
||||
|
||||
/* Border radiuses */
|
||||
--br-xl: 20px;
|
||||
--br-6xs: 7px;
|
||||
}
|
After Width: | Height: | Size: 29 KiB |
|
@ -0,0 +1,3 @@
|
|||
<svg width="78" height="79" viewBox="0 0 78 79" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M22.427 69.0751C20.9893 69.0751 19.7629 68.5634 18.7478 67.5402C17.7327 66.517 17.2251 65.2869 17.2251 63.85V34.6503C17.2251 33.2134 17.7367 31.9833 18.76 30.9601C19.7832 29.9369 21.0132 29.4252 22.4501 29.4252H25.0251V21.6252C25.0251 17.7468 26.3864 14.448 29.1091 11.729C31.8318 9.00992 35.1348 7.65039 39.0184 7.65039C42.9019 7.65039 46.1989 9.00992 48.9093 11.729C51.6197 14.448 52.9749 17.7468 52.9749 21.6252V29.4252H55.5499C56.9868 29.4252 58.2168 29.9369 59.24 30.9601C60.2633 31.9833 60.7749 33.2134 60.7749 34.6503V63.85C60.7749 65.2869 60.263 66.517 59.2391 67.5402C58.2152 68.5634 56.9844 69.0751 55.5467 69.0751H22.427ZM39.0172 54.2876C40.4224 54.2876 41.6104 53.7964 42.5812 52.8141C43.552 51.8318 44.0374 50.6381 44.0374 49.2329C44.0374 47.8277 43.5463 46.6398 42.564 45.669C41.5817 44.6981 40.3879 44.2127 38.9828 44.2127C37.5776 44.2127 36.3896 44.7039 35.4188 45.6862C34.448 46.6685 33.9626 47.8622 33.9626 49.2674C33.9626 50.6726 34.4538 51.8605 35.4361 52.8313C36.4184 53.8022 37.6121 54.2876 39.0172 54.2876ZM29.25 29.4252H48.75V21.6252C48.75 18.9169 47.8021 16.6148 45.9063 14.719C44.0104 12.8231 41.7084 11.8752 39 11.8752C36.2917 11.8752 33.9896 12.8231 32.0938 14.719C30.1979 16.6148 29.25 18.9169 29.25 21.6252V29.4252Z" fill="black"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
|
@ -0,0 +1,3 @@
|
|||
<svg width="78" height="78" viewBox="0 0 78 78" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M22.4501 28.9252H48.75V21.1252C48.75 18.4169 47.8021 16.1148 45.9063 14.219C44.0104 12.3231 41.7084 11.3752 39 11.3752C36.2917 11.3752 33.9896 12.3231 32.0938 14.219C30.1979 16.1148 29.25 18.4169 29.25 21.1252H25.0251C25.0251 17.2295 26.3864 13.9264 29.1091 11.216C31.8318 8.50559 35.1348 7.15039 39.0184 7.15039C42.9019 7.15039 46.1989 8.50992 48.9093 11.229C51.6197 13.948 52.9749 17.2468 52.9749 21.1252V28.9252H55.5499C56.9868 28.9252 58.2168 29.4369 59.24 30.4601C60.2633 31.4833 60.7749 32.7134 60.7749 34.1503V63.35C60.7749 64.7869 60.263 66.017 59.2391 67.0402C58.2152 68.0634 56.9844 68.5751 55.5467 68.5751H22.427C20.9893 68.5751 19.7629 68.0634 18.7478 67.0402C17.7327 66.017 17.2251 64.7869 17.2251 63.35V34.1503C17.2251 32.7134 17.7367 31.4833 18.76 30.4601C19.7832 29.4369 21.0132 28.9252 22.4501 28.9252ZM39.0172 53.7876C40.4224 53.7876 41.6104 53.2964 42.5812 52.3141C43.552 51.3318 44.0374 50.1381 44.0374 48.7329C44.0374 47.3277 43.5463 46.1398 42.564 45.169C41.5817 44.1981 40.3879 43.7127 38.9828 43.7127C37.5776 43.7127 36.3896 44.2039 35.4188 45.1862C34.448 46.1685 33.9626 47.3622 33.9626 48.7674C33.9626 50.1726 34.4538 51.3605 35.4361 52.3313C36.4184 53.3022 37.6121 53.7876 39.0172 53.7876Z" fill="black"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 3.2 KiB |
|
@ -0,0 +1,861 @@
|
|||
.redeem-fill1-wght300-grad0-ops-icon {
|
||||
height: 142px;
|
||||
width: 142px;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.gutscheine {
|
||||
margin: 0;
|
||||
position: relative;
|
||||
font-size: inherit;
|
||||
letter-spacing: 0.1em;
|
||||
font-weight: 400;
|
||||
font-family: inherit;
|
||||
}
|
||||
.receipt-icon {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
justify-content: flex-start;
|
||||
padding: 10px 0 0;
|
||||
box-sizing: border-box;
|
||||
max-width: 100%;
|
||||
}
|
||||
.redeem-fill1-wght300-grad0-ops-parent,
|
||||
.root-container-inner {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: flex-start;
|
||||
max-width: 100%;
|
||||
}
|
||||
.redeem-fill1-wght300-grad0-ops-parent {
|
||||
justify-content: flex-start;
|
||||
gap: 58px;
|
||||
}
|
||||
.root-container-inner {
|
||||
align-self: stretch;
|
||||
justify-content: center;
|
||||
padding: 0 0 0 var(--padding-9xs);
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.auf-alles {
|
||||
margin: 0;
|
||||
align-self: stretch;
|
||||
height: 209px;
|
||||
position: relative;
|
||||
font-size: inherit;
|
||||
letter-spacing: 0.1em;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-shrink: 0;
|
||||
z-index: 1;
|
||||
font-family: inherit;
|
||||
}
|
||||
.locked-icon-child {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
position: absolute;
|
||||
margin: 0 !important;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
border-radius: var(--br-6xs);
|
||||
background-color: var(--color-tan);
|
||||
}
|
||||
.freigeschaltet {
|
||||
height: 64px;
|
||||
flex: 1;
|
||||
position: relative;
|
||||
letter-spacing: 0.1em;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
z-index: 2;
|
||||
}
|
||||
.locked-icon {
|
||||
width: 277px;
|
||||
margin: 0 !important;
|
||||
position: absolute;
|
||||
top: 149px;
|
||||
left: 266px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: flex-start;
|
||||
justify-content: flex-start;
|
||||
text-align: center;
|
||||
font-size: var(--font-size-13xl);
|
||||
color: #0c620a;
|
||||
}
|
||||
.lock-open-fill1-wght300-grad0-icon {
|
||||
width: 78px;
|
||||
height: 78px;
|
||||
position: absolute;
|
||||
margin: 0 !important;
|
||||
top: 61.5px;
|
||||
right: 29px;
|
||||
overflow: hidden;
|
||||
flex-shrink: 0;
|
||||
z-index: 2;
|
||||
}
|
||||
.product-name {
|
||||
align-self: stretch;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
justify-content: flex-start;
|
||||
padding: 0 0 var(--padding-9xs);
|
||||
position: relative;
|
||||
}
|
||||
.group-24-1 {
|
||||
height: 323px;
|
||||
width: 395px;
|
||||
position: absolute;
|
||||
margin: 0 !important;
|
||||
top: -73.5px;
|
||||
left: 59px;
|
||||
overflow: hidden;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.auf-deinen-nchsten {
|
||||
height: 289px;
|
||||
flex: 1;
|
||||
position: relative;
|
||||
font-weight: 300;
|
||||
display: inline-block;
|
||||
max-width: 100%;
|
||||
z-index: 1;
|
||||
}
|
||||
.next-shopping-step {
|
||||
flex: 1;
|
||||
flex-direction: row;
|
||||
position: relative;
|
||||
max-width: 100%;
|
||||
}
|
||||
.next-shopping-step,
|
||||
.next-shopping-step-wrapper,
|
||||
.shopping-cart-icon {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
.next-shopping-step-wrapper {
|
||||
width: 558px;
|
||||
flex-direction: row;
|
||||
padding: 0 var(--padding-5xs);
|
||||
box-sizing: border-box;
|
||||
max-width: 100%;
|
||||
font-size: var(--font-size-13xl);
|
||||
}
|
||||
.shopping-cart-icon {
|
||||
margin-top: -670px;
|
||||
width: 579px;
|
||||
flex-direction: column;
|
||||
gap: 113.5px;
|
||||
flex-shrink: 0;
|
||||
debug_commit: 1de1738;
|
||||
max-width: 108%;
|
||||
}
|
||||
.frame-child,
|
||||
.syfwa2g {
|
||||
position: relative;
|
||||
max-width: 100%;
|
||||
}
|
||||
.frame-child {
|
||||
height: 104px;
|
||||
width: 527px;
|
||||
border-radius: var(--br-6xs);
|
||||
background-color: var(--color-tan);
|
||||
display: none;
|
||||
}
|
||||
.syfwa2g {
|
||||
margin: 0;
|
||||
height: 100px;
|
||||
flex: 1;
|
||||
font-size: inherit;
|
||||
letter-spacing: 0.29em;
|
||||
font-weight: 300;
|
||||
font-family: inherit;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
z-index: 1;
|
||||
}
|
||||
.frame-wrapper,
|
||||
.rectangle-parent,
|
||||
.shopping-cart-icon-parent {
|
||||
flex-shrink: 0;
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
.rectangle-parent {
|
||||
flex: 1;
|
||||
border-radius: var(--br-6xs);
|
||||
background-color: var(--color-tan);
|
||||
flex-direction: row;
|
||||
padding: var(--padding-11xs) var(--padding-mid);
|
||||
}
|
||||
.frame-wrapper,
|
||||
.shopping-cart-icon-parent {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.frame-wrapper {
|
||||
align-self: stretch;
|
||||
flex-direction: row;
|
||||
padding: 0 0 0 var(--padding-5xs);
|
||||
max-width: 100%;
|
||||
text-align: center;
|
||||
font-size: var(--font-size-29xl);
|
||||
color: var(--color-darkslategray);
|
||||
}
|
||||
.shopping-cart-icon-parent {
|
||||
height: 750px;
|
||||
width: 591px;
|
||||
border-radius: var(--br-xl);
|
||||
background-color: var(--color-floralwhite);
|
||||
overflow: hidden;
|
||||
flex-direction: column;
|
||||
padding: 626px 27px var(--padding-xl) var(--padding-10xl);
|
||||
gap: 54.5px;
|
||||
}
|
||||
.auf-alles1,
|
||||
.freischaltbar {
|
||||
letter-spacing: 0.1em;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.auf-alles1 {
|
||||
margin: 0;
|
||||
align-self: stretch;
|
||||
height: 209px;
|
||||
position: relative;
|
||||
font-size: inherit;
|
||||
flex-shrink: 0;
|
||||
z-index: 1;
|
||||
font-family: inherit;
|
||||
}
|
||||
.freischaltbar {
|
||||
width: 277px;
|
||||
height: 64px;
|
||||
position: absolute;
|
||||
margin: 0 !important;
|
||||
right: 36px;
|
||||
bottom: 0;
|
||||
font-size: var(--font-size-13xl);
|
||||
color: var(--color-firebrick);
|
||||
text-align: center;
|
||||
justify-content: center;
|
||||
z-index: 2;
|
||||
}
|
||||
.lock-fill1-wght300-grad0-opsz2-icon {
|
||||
width: 78px;
|
||||
height: 78px;
|
||||
position: absolute;
|
||||
margin: 0 !important;
|
||||
top: 62px;
|
||||
right: 29px;
|
||||
overflow: hidden;
|
||||
flex-shrink: 0;
|
||||
z-index: 2;
|
||||
}
|
||||
.auf-alles-parent,
|
||||
.dauer-5-minuten {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.auf-alles-parent {
|
||||
margin-top: -213px;
|
||||
width: 579px;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
justify-content: flex-start;
|
||||
padding: 0 0 var(--padding-9xs);
|
||||
box-sizing: border-box;
|
||||
debug_commit: 1de1738;
|
||||
}
|
||||
.dauer-5-minuten {
|
||||
height: 62px;
|
||||
width: 277px;
|
||||
font-weight: 300;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
z-index: 1;
|
||||
}
|
||||
.dauer-5-minuten-wrapper {
|
||||
align-self: stretch;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: flex-start;
|
||||
justify-content: flex-end;
|
||||
padding: 0 0 var(--padding-20xl-5);
|
||||
}
|
||||
.group-24-11 {
|
||||
position: absolute;
|
||||
top: 107px;
|
||||
left: 90.5px;
|
||||
width: 395px;
|
||||
height: 323px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.frame-item {
|
||||
position: absolute;
|
||||
top: 3px;
|
||||
left: 289.5px;
|
||||
border-radius: var(--br-6xs);
|
||||
background-color: var(--color-tan);
|
||||
width: 277px;
|
||||
height: 64px;
|
||||
}
|
||||
.image-11-icon {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 182px;
|
||||
height: 182px;
|
||||
object-fit: cover;
|
||||
mix-blend-mode: multiply;
|
||||
z-index: 2;
|
||||
}
|
||||
.group-24-1-parent {
|
||||
height: 430px;
|
||||
width: 566.5px;
|
||||
position: absolute;
|
||||
margin: 0 !important;
|
||||
top: -182px;
|
||||
left: -24px;
|
||||
}
|
||||
.bewerte-dein-gekauftes,
|
||||
.blank-line,
|
||||
.scanne-den-qr {
|
||||
margin: 0;
|
||||
}
|
||||
.bewerte-dein-gekauftes-container {
|
||||
height: 289px;
|
||||
flex: 1;
|
||||
position: relative;
|
||||
font-weight: 300;
|
||||
display: inline-block;
|
||||
max-width: 100%;
|
||||
z-index: 1;
|
||||
}
|
||||
.frame-parent1 {
|
||||
align-self: stretch;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: flex-start;
|
||||
justify-content: flex-start;
|
||||
position: relative;
|
||||
max-width: 100%;
|
||||
text-align: left;
|
||||
font-size: var(--font-size-13xl);
|
||||
color: var(--color-black);
|
||||
}
|
||||
.mindestbestellwert-betrgt-20 {
|
||||
align-self: stretch;
|
||||
position: relative;
|
||||
font-weight: 300;
|
||||
}
|
||||
.frame-inner {
|
||||
height: 104px;
|
||||
width: 527px;
|
||||
position: relative;
|
||||
border-radius: var(--br-6xs);
|
||||
background-color: var(--color-tan);
|
||||
display: none;
|
||||
max-width: 100%;
|
||||
}
|
||||
.h3,
|
||||
.rectangle-group {
|
||||
display: flex;
|
||||
max-width: 100%;
|
||||
}
|
||||
.h3 {
|
||||
margin: 0;
|
||||
height: 100px;
|
||||
flex: 1;
|
||||
position: relative;
|
||||
font-size: inherit;
|
||||
letter-spacing: 0.29em;
|
||||
font-weight: 300;
|
||||
font-family: inherit;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
z-index: 1;
|
||||
}
|
||||
.rectangle-group {
|
||||
align-self: stretch;
|
||||
border-radius: var(--br-6xs);
|
||||
background-color: var(--color-tan);
|
||||
flex-direction: row;
|
||||
align-items: flex-start;
|
||||
justify-content: flex-start;
|
||||
padding: var(--padding-11xs) var(--padding-mid);
|
||||
box-sizing: border-box;
|
||||
font-size: var(--font-size-29xl);
|
||||
color: var(--color-darkslategray);
|
||||
}
|
||||
.separator {
|
||||
flex: 1;
|
||||
flex-direction: column;
|
||||
gap: var(--gap-mini-5);
|
||||
max-width: 100%;
|
||||
}
|
||||
.frame-container,
|
||||
.frame-div,
|
||||
.minimum-order-amount,
|
||||
.separator {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
.minimum-order-amount {
|
||||
align-self: stretch;
|
||||
flex-direction: row;
|
||||
padding: 0 var(--padding-6xs) 0 var(--padding-5xs-5);
|
||||
box-sizing: border-box;
|
||||
max-width: 100%;
|
||||
font-size: var(--font-size-xl);
|
||||
color: var(--color-dimgray-100);
|
||||
}
|
||||
.frame-container,
|
||||
.frame-div {
|
||||
flex-shrink: 0;
|
||||
flex-direction: column;
|
||||
}
|
||||
.frame-div {
|
||||
align-self: stretch;
|
||||
gap: var(--gap-sm-5);
|
||||
debug_commit: 1de1738;
|
||||
text-align: center;
|
||||
font-size: var(--font-size-5xl);
|
||||
color: var(--color-gray);
|
||||
}
|
||||
.frame-container {
|
||||
height: 750px;
|
||||
width: 591px;
|
||||
border-radius: var(--br-xl);
|
||||
background-color: var(--color-floralwhite);
|
||||
overflow: hidden;
|
||||
padding: var(--padding-150xl) var(--padding-lgi-5) var(--padding-xl)
|
||||
var(--padding-10xl);
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.auf-alles2,
|
||||
.freischaltbar1 {
|
||||
letter-spacing: 0.1em;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.auf-alles2 {
|
||||
margin: 0;
|
||||
align-self: stretch;
|
||||
height: 209px;
|
||||
position: relative;
|
||||
font-size: inherit;
|
||||
flex-shrink: 0;
|
||||
z-index: 1;
|
||||
font-family: inherit;
|
||||
}
|
||||
.freischaltbar1 {
|
||||
width: 277px;
|
||||
height: 64px;
|
||||
position: absolute;
|
||||
margin: 0 !important;
|
||||
right: 36px;
|
||||
bottom: 0;
|
||||
font-size: var(--font-size-13xl);
|
||||
color: var(--color-firebrick);
|
||||
text-align: center;
|
||||
justify-content: center;
|
||||
z-index: 2;
|
||||
}
|
||||
.lock-fill1-wght300-grad0-opsz2-icon1 {
|
||||
width: 78px;
|
||||
height: 78px;
|
||||
position: absolute;
|
||||
margin: 0 !important;
|
||||
top: 62px;
|
||||
right: 29px;
|
||||
overflow: hidden;
|
||||
flex-shrink: 0;
|
||||
z-index: 2;
|
||||
}
|
||||
.auf-alles-group,
|
||||
.dauer-5-minuten1 {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.auf-alles-group {
|
||||
margin-top: -213px;
|
||||
width: 579px;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
justify-content: flex-start;
|
||||
padding: 0 0 var(--padding-9xs);
|
||||
box-sizing: border-box;
|
||||
debug_commit: 1de1738;
|
||||
}
|
||||
.dauer-5-minuten1 {
|
||||
height: 62px;
|
||||
width: 277px;
|
||||
font-weight: 300;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
z-index: 1;
|
||||
}
|
||||
.dauer-5-minuten-container {
|
||||
align-self: stretch;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: flex-start;
|
||||
justify-content: flex-end;
|
||||
padding: 0 0 var(--padding-20xl-5);
|
||||
}
|
||||
.group-24-12 {
|
||||
position: absolute;
|
||||
top: 107px;
|
||||
left: 90.5px;
|
||||
width: 395px;
|
||||
height: 323px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.rectangle-div {
|
||||
position: absolute;
|
||||
top: 3px;
|
||||
left: 289.5px;
|
||||
border-radius: var(--br-6xs);
|
||||
background-color: var(--color-tan);
|
||||
width: 277px;
|
||||
height: 64px;
|
||||
}
|
||||
.image-11-icon1 {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 182px;
|
||||
height: 182px;
|
||||
object-fit: cover;
|
||||
mix-blend-mode: multiply;
|
||||
z-index: 2;
|
||||
}
|
||||
.group-24-1-group {
|
||||
height: 430px;
|
||||
width: 566.5px;
|
||||
position: absolute;
|
||||
margin: 0 !important;
|
||||
top: -182px;
|
||||
left: -24px;
|
||||
}
|
||||
.blank-line1,
|
||||
.erstelle-ein-post,
|
||||
.p,
|
||||
.scanne-den-qr1 {
|
||||
margin: 0;
|
||||
}
|
||||
.erstelle-ein-post-container {
|
||||
height: 289px;
|
||||
flex: 1;
|
||||
position: relative;
|
||||
font-weight: 300;
|
||||
display: inline-block;
|
||||
max-width: 100%;
|
||||
z-index: 1;
|
||||
}
|
||||
.frame-parent4 {
|
||||
align-self: stretch;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: flex-start;
|
||||
justify-content: flex-start;
|
||||
position: relative;
|
||||
max-width: 100%;
|
||||
text-align: left;
|
||||
font-size: var(--font-size-13xl);
|
||||
color: var(--color-black);
|
||||
}
|
||||
.mindestbestellwert-betrgt-201 {
|
||||
align-self: stretch;
|
||||
position: relative;
|
||||
font-weight: 300;
|
||||
}
|
||||
.frame-child1,
|
||||
.h31 {
|
||||
position: relative;
|
||||
max-width: 100%;
|
||||
}
|
||||
.frame-child1 {
|
||||
height: 104px;
|
||||
width: 527px;
|
||||
border-radius: var(--br-6xs);
|
||||
background-color: var(--color-tan);
|
||||
display: none;
|
||||
}
|
||||
.h31 {
|
||||
margin: 0;
|
||||
height: 100px;
|
||||
flex: 1;
|
||||
font-size: inherit;
|
||||
letter-spacing: 0.29em;
|
||||
font-weight: 300;
|
||||
font-family: inherit;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
z-index: 1;
|
||||
}
|
||||
.mindestbestellwert-betrgt-20-parent,
|
||||
.rectangle-container {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: flex-start;
|
||||
max-width: 100%;
|
||||
}
|
||||
.rectangle-container {
|
||||
align-self: stretch;
|
||||
border-radius: var(--br-6xs);
|
||||
background-color: var(--color-tan);
|
||||
flex-direction: row;
|
||||
padding: var(--padding-11xs) var(--padding-mid);
|
||||
box-sizing: border-box;
|
||||
font-size: var(--font-size-29xl);
|
||||
color: var(--color-darkslategray);
|
||||
}
|
||||
.mindestbestellwert-betrgt-20-parent {
|
||||
flex: 1;
|
||||
flex-direction: column;
|
||||
gap: var(--gap-mini-5);
|
||||
}
|
||||
.frame-wrapper1 {
|
||||
align-self: stretch;
|
||||
flex-direction: row;
|
||||
padding: 0 var(--padding-6xs) 0 var(--padding-5xs-5);
|
||||
box-sizing: border-box;
|
||||
max-width: 100%;
|
||||
font-size: var(--font-size-xl);
|
||||
color: var(--color-dimgray-100);
|
||||
}
|
||||
.frame-group,
|
||||
.frame-parent2,
|
||||
.frame-parent3,
|
||||
.frame-wrapper1 {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
.frame-parent3 {
|
||||
align-self: stretch;
|
||||
flex-direction: column;
|
||||
gap: var(--gap-sm-5);
|
||||
flex-shrink: 0;
|
||||
debug_commit: 1de1738;
|
||||
text-align: center;
|
||||
font-size: var(--font-size-5xl);
|
||||
color: var(--color-gray);
|
||||
}
|
||||
.frame-group,
|
||||
.frame-parent2 {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.frame-parent2 {
|
||||
height: 750px;
|
||||
width: 591px;
|
||||
border-radius: var(--br-xl);
|
||||
background-color: var(--color-floralwhite);
|
||||
overflow: hidden;
|
||||
flex-shrink: 0;
|
||||
flex-direction: column;
|
||||
padding: var(--padding-150xl) var(--padding-lgi-5) var(--padding-xl)
|
||||
var(--padding-10xl);
|
||||
}
|
||||
.frame-group {
|
||||
width: 1979px;
|
||||
overflow-x: auto;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
padding: 230.5px 43px;
|
||||
gap: 60px 58px;
|
||||
max-width: 100%;
|
||||
}
|
||||
.die-angaben-basieren {
|
||||
height: 50px;
|
||||
flex: 1;
|
||||
position: relative;
|
||||
font-weight: 300;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
max-width: 100%;
|
||||
}
|
||||
.die-angaben-basieren-jediglich-wrapper,
|
||||
.frame-parent,
|
||||
.root-container {
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
text-align: left;
|
||||
font-family: var(--font-outfit);
|
||||
}
|
||||
.die-angaben-basieren-jediglich-wrapper {
|
||||
width: 1878px;
|
||||
flex-direction: row;
|
||||
align-items: flex-start;
|
||||
padding: 0 30px;
|
||||
box-sizing: border-box;
|
||||
max-width: 100%;
|
||||
font-size: var(--font-size-5xl);
|
||||
color: #666;
|
||||
}
|
||||
.frame-parent,
|
||||
.root-container {
|
||||
flex-direction: column;
|
||||
color: var(--color-black);
|
||||
}
|
||||
.frame-parent {
|
||||
align-items: flex-start;
|
||||
gap: 26px;
|
||||
max-width: 100%;
|
||||
font-size: var(--font-size-45xl);
|
||||
}
|
||||
.root-container {
|
||||
width: 100%;
|
||||
position: relative;
|
||||
background-color: #fff;
|
||||
overflow: hidden;
|
||||
align-items: flex-end;
|
||||
padding: 23px 62px 25px 59px;
|
||||
box-sizing: border-box;
|
||||
gap: 3px;
|
||||
line-height: normal;
|
||||
letter-spacing: normal;
|
||||
font-size: 96px;
|
||||
}
|
||||
@media screen and (max-width: 1200px) {
|
||||
.shopping-cart-icon-parent {
|
||||
padding-top: 407px;
|
||||
padding-bottom: var(--padding-xl);
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.frame-group {
|
||||
padding: 150px 21px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 1050px) {
|
||||
.gutscheine {
|
||||
font-size: var(--font-size-29xl);
|
||||
}
|
||||
.redeem-fill1-wght300-grad0-ops-parent {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.auf-alles {
|
||||
font-size: var(--font-size-32xl);
|
||||
}
|
||||
.auf-deinen-nchsten,
|
||||
.freigeschaltet {
|
||||
font-size: var(--font-size-7xl);
|
||||
}
|
||||
.syfwa2g {
|
||||
font-size: var(--font-size-19xl);
|
||||
}
|
||||
.auf-alles1 {
|
||||
font-size: var(--font-size-32xl);
|
||||
}
|
||||
.bewerte-dein-gekauftes-container,
|
||||
.freischaltbar {
|
||||
font-size: var(--font-size-7xl);
|
||||
}
|
||||
.h3 {
|
||||
font-size: var(--font-size-19xl);
|
||||
}
|
||||
.frame-container {
|
||||
padding-top: var(--padding-91xl);
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.auf-alles2 {
|
||||
font-size: var(--font-size-32xl);
|
||||
}
|
||||
.erstelle-ein-post-container,
|
||||
.freischaltbar1 {
|
||||
font-size: var(--font-size-7xl);
|
||||
}
|
||||
.h31 {
|
||||
font-size: var(--font-size-19xl);
|
||||
}
|
||||
.frame-parent2 {
|
||||
padding-top: var(--padding-91xl);
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.root-container {
|
||||
padding-left: var(--padding-10xl);
|
||||
padding-right: 31px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 750px) {
|
||||
.shopping-cart-icon-parent {
|
||||
padding-top: 265px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.frame-container,
|
||||
.frame-group,
|
||||
.frame-parent2 {
|
||||
padding-top: var(--padding-52xl);
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.frame-group {
|
||||
gap: var(--gap-10xl);
|
||||
padding-top: var(--padding-78xl);
|
||||
padding-bottom: var(--padding-78xl);
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 450px) {
|
||||
.gutscheine {
|
||||
font-size: var(--font-size-10xl);
|
||||
}
|
||||
.redeem-fill1-wght300-grad0-ops-parent {
|
||||
gap: var(--gap-10xl);
|
||||
}
|
||||
.auf-alles {
|
||||
font-size: var(--font-size-19xl);
|
||||
}
|
||||
.auf-deinen-nchsten,
|
||||
.freigeschaltet {
|
||||
font-size: var(--font-size-lgi);
|
||||
}
|
||||
.syfwa2g {
|
||||
font-size: var(--font-size-10xl);
|
||||
}
|
||||
.auf-alles1 {
|
||||
font-size: var(--font-size-19xl);
|
||||
}
|
||||
.bewerte-dein-gekauftes-container,
|
||||
.dauer-5-minuten,
|
||||
.freischaltbar {
|
||||
font-size: var(--font-size-lgi);
|
||||
}
|
||||
.mindestbestellwert-betrgt-20 {
|
||||
font-size: var(--font-size-base);
|
||||
}
|
||||
.h3 {
|
||||
font-size: var(--font-size-10xl);
|
||||
}
|
||||
.auf-alles2 {
|
||||
font-size: var(--font-size-19xl);
|
||||
}
|
||||
.dauer-5-minuten1,
|
||||
.erstelle-ein-post-container,
|
||||
.freischaltbar1 {
|
||||
font-size: var(--font-size-lgi);
|
||||
}
|
||||
.mindestbestellwert-betrgt-201 {
|
||||
font-size: var(--font-size-base);
|
||||
}
|
||||
.h31 {
|
||||
font-size: var(--font-size-10xl);
|
||||
}
|
||||
.die-angaben-basieren {
|
||||
font-size: var(--font-size-lgi);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
{
|
||||
"category": "Shinnex",
|
||||
"name": "Bestellung",
|
||||
"globalInputs": [
|
||||
{
|
||||
"parameterName": "orderId",
|
||||
"type": "text",
|
||||
"displayName": "Bestellnummer"
|
||||
},
|
||||
{
|
||||
"parameterName": "customerEmail",
|
||||
"type": "text",
|
||||
"displayName": "E-Mail vom Kunden"
|
||||
}
|
||||
],
|
||||
"tasks": [
|
||||
{
|
||||
"name": "CRM Customer",
|
||||
"onFinish": "next",
|
||||
"undoPossible": false,
|
||||
"repeatPossible": true,
|
||||
"scriptPath": "crmCustomer.py",
|
||||
"parameters": [
|
||||
{
|
||||
"parameterName": "orderId",
|
||||
"type": "text",
|
||||
"displayName": "Bestellnummer",
|
||||
"global": true
|
||||
},
|
||||
{
|
||||
"parameterName": "customerEmail",
|
||||
"type": "text",
|
||||
"displayName": "E-Mail vom Kunden",
|
||||
"global": true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Gutscheine",
|
||||
"onFinish": "next",
|
||||
"undoPossible": false,
|
||||
"repeatPossible": true,
|
||||
"scriptPath": "discounts.py",
|
||||
"parameters": []
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="78" height="79" viewBox="0 0 78 79" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M22.427 69.0751C20.9893 69.0751 19.7629 68.5634 18.7478 67.5402C17.7327 66.517 17.2251 65.2869 17.2251 63.85V34.6503C17.2251 33.2134 17.7367 31.9833 18.76 30.9601C19.7832 29.9369 21.0132 29.4252 22.4501 29.4252H25.0251V21.6252C25.0251 17.7468 26.3864 14.448 29.1091 11.729C31.8318 9.00992 35.1348 7.65039 39.0184 7.65039C42.9019 7.65039 46.1989 9.00992 48.9093 11.729C51.6197 14.448 52.9749 17.7468 52.9749 21.6252V29.4252H55.5499C56.9868 29.4252 58.2168 29.9369 59.24 30.9601C60.2633 31.9833 60.7749 33.2134 60.7749 34.6503V63.85C60.7749 65.2869 60.263 66.517 59.2391 67.5402C58.2152 68.5634 56.9844 69.0751 55.5467 69.0751H22.427ZM39.0172 54.2876C40.4224 54.2876 41.6104 53.7964 42.5812 52.8141C43.552 51.8318 44.0374 50.6381 44.0374 49.2329C44.0374 47.8277 43.5463 46.6398 42.564 45.669C41.5817 44.6981 40.3879 44.2127 38.9828 44.2127C37.5776 44.2127 36.3896 44.7039 35.4188 45.6862C34.448 46.6685 33.9626 47.8622 33.9626 49.2674C33.9626 50.6726 34.4538 51.8605 35.4361 52.8313C36.4184 53.8022 37.6121 54.2876 39.0172 54.2876ZM29.25 29.4252H48.75V21.6252C48.75 18.9169 47.8021 16.6148 45.9063 14.719C44.0104 12.8231 41.7084 11.8752 39 11.8752C36.2917 11.8752 33.9896 12.8231 32.0938 14.719C30.1979 16.6148 29.25 18.9169 29.25 21.6252V29.4252Z" fill="black"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
|
@ -0,0 +1,3 @@
|
|||
<svg width="78" height="78" viewBox="0 0 78 78" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M22.4501 28.9252H48.75V21.1252C48.75 18.4169 47.8021 16.1148 45.9063 14.219C44.0104 12.3231 41.7084 11.3752 39 11.3752C36.2917 11.3752 33.9896 12.3231 32.0938 14.219C30.1979 16.1148 29.25 18.4169 29.25 21.1252H25.0251C25.0251 17.2295 26.3864 13.9264 29.1091 11.216C31.8318 8.50559 35.1348 7.15039 39.0184 7.15039C42.9019 7.15039 46.1989 8.50992 48.9093 11.229C51.6197 13.948 52.9749 17.2468 52.9749 21.1252V28.9252H55.5499C56.9868 28.9252 58.2168 29.4369 59.24 30.4601C60.2633 31.4833 60.7749 32.7134 60.7749 34.1503V63.35C60.7749 64.7869 60.263 66.017 59.2391 67.0402C58.2152 68.0634 56.9844 68.5751 55.5467 68.5751H22.427C20.9893 68.5751 19.7629 68.0634 18.7478 67.0402C17.7327 66.017 17.2251 64.7869 17.2251 63.35V34.1503C17.2251 32.7134 17.7367 31.4833 18.76 30.4601C19.7832 29.4369 21.0132 28.9252 22.4501 28.9252ZM39.0172 53.7876C40.4224 53.7876 41.6104 53.2964 42.5812 52.3141C43.552 51.3318 44.0374 50.1381 44.0374 48.7329C44.0374 47.3277 43.5463 46.1398 42.564 45.169C41.5817 44.1981 40.3879 43.7127 38.9828 43.7127C37.5776 43.7127 36.3896 44.2039 35.4188 45.1862C34.448 46.1685 33.9626 47.3622 33.9626 48.7674C33.9626 50.1726 34.4538 51.3605 35.4361 52.3313C36.4184 53.3022 37.6121 53.7876 39.0172 53.7876Z" fill="black"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 686 B |
After Width: | Height: | Size: 710 B |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 7.4 KiB |
After Width: | Height: | Size: 1.5 KiB |
|
@ -0,0 +1,3 @@
|
|||
<svg width="142" height="142" viewBox="0 0 142 142" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M24.8502 98.1479V108.229C24.8502 108.684 25.0398 109.101 25.4191 109.481C25.7985 109.86 26.2157 110.05 26.6709 110.05H115.329C115.785 110.05 116.202 109.86 116.581 109.481C116.961 109.101 117.15 108.684 117.15 108.229V98.1479H24.8502ZM26.6709 38.572H45.2632C44.9673 37.6845 44.698 36.797 44.4552 35.9095C44.2124 35.022 44.0911 34.1345 44.0911 33.247C44.0911 29.606 45.3502 26.5263 47.8686 24.008C50.3869 21.4896 53.6145 20.2305 57.5513 20.2305C59.3414 20.2305 61.0688 20.5791 62.7334 21.2764C64.398 21.9737 65.7692 23.0814 66.8472 24.5996L70.8865 30.3456L75.0737 24.7476C76.1887 23.3518 77.5219 22.25 79.0733 21.4422C80.6248 20.6344 82.2956 20.2305 84.0857 20.2305C88.3103 20.2305 91.6324 21.465 94.0521 23.934C96.4719 26.403 97.6817 29.5074 97.6817 33.247C97.6817 34.1345 97.5698 35.022 97.3461 35.9095C97.1223 36.797 96.8436 37.6845 96.5098 38.572H115.329C117.993 38.572 120.244 39.4915 122.083 41.3306C123.922 43.1696 124.842 45.4208 124.842 48.0841V108.229C124.842 110.892 123.922 113.143 122.083 114.982C120.244 116.822 117.993 117.741 115.329 117.741H26.6709C24.0767 117.741 21.8427 116.822 19.9691 114.982C18.0955 113.143 17.1587 110.892 17.1587 108.229V48.0841C17.1587 45.4208 18.0955 43.1696 19.9691 41.3306C21.8427 39.4915 24.0767 38.572 26.6709 38.572ZM24.8502 86.4513H117.15V48.0841C117.15 47.6289 116.961 47.2117 116.581 46.8324C116.202 46.453 115.785 46.2634 115.329 46.2634H82.5488L95.2241 63.5241L89.0345 68.1777L70.9604 43.3506L52.8862 68.1777L46.6966 63.5241L59.3379 46.2634H26.6709C26.2157 46.2634 25.7985 46.453 25.4191 46.8324C25.0398 47.2117 24.8502 47.6289 24.8502 48.0841V86.4513ZM56.9285 38.4241C58.4284 38.4241 59.6961 37.9167 60.7315 36.902C61.767 35.8874 62.2847 34.6301 62.2847 33.1301C62.2847 31.6303 61.7773 30.3626 60.7626 29.3272C59.748 28.2918 58.4907 27.7741 56.9907 27.7741C55.4908 27.7741 54.2232 28.2814 53.1878 29.296C52.1524 30.3107 51.6347 31.568 51.6347 33.0679C51.6347 34.5678 52.142 35.8355 53.1566 36.871C54.1713 37.9064 55.4286 38.4241 56.9285 38.4241ZM84.782 38.4241C86.282 38.4241 87.5497 37.9167 88.5851 36.902C89.6205 35.8874 90.1383 34.6301 90.1383 33.1301C90.1383 31.6303 89.6309 30.3626 88.6162 29.3272C87.6016 28.2918 86.3443 27.7741 84.8443 27.7741C83.3444 27.7741 82.0768 28.2814 81.0414 29.296C80.006 30.3107 79.4883 31.568 79.4883 33.0679C79.4883 34.5678 79.9956 35.8355 81.0102 36.871C82.0248 37.9064 83.2821 38.4241 84.782 38.4241Z" fill="black"/>
|
||||
</svg>
|
After Width: | Height: | Size: 2.5 KiB |
|
@ -0,0 +1,5 @@
|
|||
requests==2.31.0
|
||||
reportlab==4.1.0
|
||||
pdfkit==1.0.0
|
||||
qrcode==7.4.2
|
||||
PyPDF2==3.0.1
|
|
@ -0,0 +1,127 @@
|
|||
.container {
|
||||
background-color: #fdf8ef;
|
||||
width: 250px;
|
||||
padding: 12px;
|
||||
border-radius: 20px;
|
||||
margin-right: 12px;
|
||||
}
|
||||
|
||||
.container:last-child {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.container-background {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
width: 330px;
|
||||
height: 600px;
|
||||
z-index: 2;
|
||||
background-image: url(background.svg);
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
background-size: 50%;
|
||||
opacity: 0.1;
|
||||
top: 25px;
|
||||
}
|
||||
|
||||
.container-background.first-item {
|
||||
left: 35px;
|
||||
}
|
||||
|
||||
.container-background.second-item {
|
||||
left: 325px;
|
||||
}
|
||||
|
||||
.container-background.third-item {
|
||||
left: 610px;
|
||||
}
|
||||
|
||||
.container-header {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-webkit-box-pack: justify;
|
||||
-ms-flex-pack: justify;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.container-header p {
|
||||
font-size: 22px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.container-header .percentage {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.container-header img {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.container-action {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-webkit-box-pack: justify;
|
||||
-ms-flex-pack: justify;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.container-action img {
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
.container-action .status-box {
|
||||
background-color: rgba(185, 147, 99, 0.1);
|
||||
border-radius: 7px;
|
||||
padding: 6px 16px;
|
||||
}
|
||||
|
||||
.container-action .status-box .closed {
|
||||
color: #a80000;
|
||||
}
|
||||
|
||||
.container-action .status-box .open {
|
||||
color: #0c620a;
|
||||
}
|
||||
|
||||
.container-action .time-needed-box {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.container-action .time-needed-box span {
|
||||
color: #5a5a5a;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.minimum-order-value-box {
|
||||
text-align: center;
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
|
||||
.minimum-order-value-box span {
|
||||
color: #616161;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.code-box {
|
||||
background-color: rgba(185, 147, 99, 0.1);
|
||||
border-radius: 7px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.code-box.first-item {
|
||||
padding-top: 1px;
|
||||
padding-bottom: 3px;
|
||||
}
|
||||
|
||||
.code-box.second-item,
|
||||
.code-box.third-item {
|
||||
padding-top: 4px;
|
||||
}
|
||||
|
||||
.code-box span {
|
||||
font-size: 20px;
|
||||
letter-spacing: 0.29em;
|
||||
font-weight: 300;
|
||||
}
|
|
@ -496,7 +496,7 @@ func RunGroupTask(args RunGroupTaskArgs) {
|
|||
return err
|
||||
}
|
||||
|
||||
if !info.IsDir() && filepath.Ext(path) == ".py" {
|
||||
if !info.IsDir() && /* filepath.Ext(path) == ".py" */ info.Name() != "requirements.txt" && info.Name() != "index.json" {
|
||||
bytesRead, err := os.ReadFile(path)
|
||||
|
||||
if err != nil {
|
||||
|
|
|
@ -163,6 +163,45 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"/crm/customer": {
|
||||
"post": {
|
||||
"produces": [
|
||||
"application/json"
|
||||
],
|
||||
"tags": [
|
||||
"crm"
|
||||
],
|
||||
"summary": "Get crm customer",
|
||||
"operationId": "crmGetCrmCustomer",
|
||||
"parameters": [
|
||||
{
|
||||
"description": "Crm customer",
|
||||
"name": "crmCustomer",
|
||||
"in": "body",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/CrmCustomer"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Crm customer",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/CrmTableCustomer"
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Invalid request query"
|
||||
},
|
||||
"401": {
|
||||
"description": "No permissions"
|
||||
},
|
||||
"500": {
|
||||
"description": "Failed to get crm customer"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/crm/customer/create": {
|
||||
"post": {
|
||||
"produces": [
|
||||
|
@ -263,8 +302,8 @@
|
|||
"tags": [
|
||||
"crm"
|
||||
],
|
||||
"summary": "Get crm customer",
|
||||
"operationId": "crmGetCrmCustomer",
|
||||
"summary": "Get crm customer by id",
|
||||
"operationId": "crmGetCrmCustomerById",
|
||||
"parameters": [
|
||||
{
|
||||
"description": "Customer id",
|
||||
|
@ -294,6 +333,32 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"/crm/customers": {
|
||||
"get": {
|
||||
"produces": [
|
||||
"application/json"
|
||||
],
|
||||
"tags": [
|
||||
"crm"
|
||||
],
|
||||
"summary": "Get all crm customers",
|
||||
"operationId": "crmGetAllCustomers",
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Crm customers",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/CrmTableCustomer"
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "No permissions"
|
||||
},
|
||||
"500": {
|
||||
"description": "Failed to get crm customers"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/crm/link/{id}": {
|
||||
"post": {
|
||||
"produces": [
|
||||
|
@ -330,7 +395,7 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"/crm/links/create": {
|
||||
"/crm/links": {
|
||||
"post": {
|
||||
"produces": [
|
||||
"application/json"
|
||||
|
@ -438,48 +503,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"/crm/pipeline/{type}/{dealPhase}": {
|
||||
"get": {
|
||||
"produces": [
|
||||
"application/json"
|
||||
],
|
||||
"tags": [
|
||||
"crm"
|
||||
],
|
||||
"summary": "Get crm customers",
|
||||
"operationId": "crmGetCrmCustomers",
|
||||
"parameters": [
|
||||
{
|
||||
"description": "Page number",
|
||||
"name": "page",
|
||||
"in": "query"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Crm customers",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/CrmTableCustomerResponse"
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Invalid request query"
|
||||
},
|
||||
"401": {
|
||||
"description": "No permissions"
|
||||
},
|
||||
"404": {
|
||||
"description": "Crm type not found"
|
||||
},
|
||||
"422": {
|
||||
"description": "Deal phase not set"
|
||||
},
|
||||
"500": {
|
||||
"description": "Failed to get crm customers"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/equipment/documentation/create": {
|
||||
"post": {
|
||||
"consumes": [
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
package crm
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"jannex/admin-dashboard-backend/modules/crm"
|
||||
"jannex/admin-dashboard-backend/modules/database"
|
||||
"jannex/admin-dashboard-backend/modules/logger"
|
||||
"jannex/admin-dashboard-backend/modules/structs"
|
||||
|
@ -12,15 +10,28 @@ import (
|
|||
"time"
|
||||
|
||||
"git.ex.umbach.dev/Alex/roese-utils/rslogger"
|
||||
"git.ex.umbach.dev/Alex/roese-utils/rspagination"
|
||||
"github.com/go-sql-driver/mysql"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/google/uuid"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// testing
|
||||
func GetAllCustomers(c *fiber.Ctx) error {
|
||||
// swagger:operation GET /crm/customers crm crmGetAllCustomers
|
||||
// ---
|
||||
// summary: Get all crm customers
|
||||
// produces:
|
||||
// - application/json
|
||||
// responses:
|
||||
// '200':
|
||||
// description: Crm customers
|
||||
// schema:
|
||||
// "$ref": "#/definitions/CrmTableCustomer"
|
||||
// '401':
|
||||
// description: No permissions
|
||||
// '500':
|
||||
// description: Failed to get crm customers
|
||||
|
||||
var customers []structs.CrmTableCustomer
|
||||
|
||||
database.DB.Find(&customers)
|
||||
|
@ -32,32 +43,8 @@ func GetAllCustomers(c *fiber.Ctx) error {
|
|||
return c.JSON(customers)
|
||||
}
|
||||
|
||||
/*
|
||||
func GetCrmTypeCustomers(c *fiber.Ctx) error {
|
||||
// swagger:operation GET /crm/pipeline/{type}/{dealPhase} crm crmGetCrmCustomers
|
||||
// ---
|
||||
// summary: Get crm customers
|
||||
// produces:
|
||||
// - application/json
|
||||
// parameters:
|
||||
// - name: page
|
||||
// in: query
|
||||
// description: Page number
|
||||
// responses:
|
||||
// '200':
|
||||
// description: Crm customers
|
||||
// schema:
|
||||
// "$ref": "#/definitions/CrmTableCustomerResponse"
|
||||
// '400':
|
||||
// description: Invalid request query
|
||||
// '401':
|
||||
// description: No permissions
|
||||
// '404':
|
||||
// description: Crm type not found
|
||||
// '422':
|
||||
// description: Deal phase not set
|
||||
// '500':
|
||||
// description: Failed to get crm customers
|
||||
|
||||
var params structs.CrmTypeCustomerRequest
|
||||
|
||||
if err := c.ParamsParser(¶ms); err != nil {
|
||||
|
@ -115,11 +102,58 @@ func GetCrmTypeCustomers(c *fiber.Ctx) error {
|
|||
|
||||
return c.SendStatus(fiber.StatusNotFound)
|
||||
}
|
||||
*/
|
||||
|
||||
// find customer by provided filters in body - used by groupTasks python scripts
|
||||
func GetCrmCustomer(c *fiber.Ctx) error {
|
||||
// swagger:operation GET /crm/customer/view/{id} crm crmGetCrmCustomer
|
||||
// swagger:operation POST /crm/customer crm crmGetCrmCustomer
|
||||
// ---
|
||||
// summary: Get crm customer
|
||||
// summary: Get crm customer by filters
|
||||
// produces:
|
||||
// - application/json
|
||||
// parameters:
|
||||
// - name: crmCustomer
|
||||
// in: body
|
||||
// description: Crm customer
|
||||
// schema:
|
||||
// "$ref": "#/definitions/CrmCustomer"
|
||||
// responses:
|
||||
// '200':
|
||||
// description: Crm customer
|
||||
// schema:
|
||||
// "$ref": "#/definitions/CrmTableCustomer"
|
||||
// '400':
|
||||
// description: Invalid request query
|
||||
// '401':
|
||||
// description: No permissions
|
||||
// '500':
|
||||
// description: Failed to get crm customer
|
||||
|
||||
var body structs.CrmCustomer
|
||||
|
||||
if err := c.BodyParser(&body); err != nil {
|
||||
return c.SendStatus(fiber.StatusBadRequest)
|
||||
}
|
||||
|
||||
if !socketclients.HasPermission(c.Locals("userId").(string), utils.PermissionCrmCustomersView) {
|
||||
return c.SendStatus(fiber.StatusUnauthorized)
|
||||
}
|
||||
|
||||
var customers []structs.CrmTableCustomer
|
||||
|
||||
database.DB.Find(&customers, body)
|
||||
|
||||
sort.Slice(customers, func(i, j int) bool {
|
||||
return customers[i].CreatedAt.After(customers[j].CreatedAt)
|
||||
})
|
||||
|
||||
return c.JSON(customers)
|
||||
}
|
||||
|
||||
func GetCrmCustomerById(c *fiber.Ctx) error {
|
||||
// swagger:operation GET /crm/customer/view/{id} crm crmGetCrmCustomerById
|
||||
// ---
|
||||
// summary: Get crm customer by id
|
||||
// produces:
|
||||
// - application/json
|
||||
// parameters:
|
||||
|
@ -312,8 +346,6 @@ func CreateCrmCustomer(c *fiber.Ctx) error {
|
|||
|
||||
database.DB.Model(&structs.CrmCustomer{}).Where("company = ?", crmCustomer["Company"]).Count(&count)
|
||||
|
||||
fmt.Println("count", count, crmCustomer["Company"])
|
||||
|
||||
if count > 0 {
|
||||
logger.AddCrmLog(rslogger.LogTypeError, "Failed to create crm customer as company name already exists: %v", crmCustomer)
|
||||
return c.SendStatus(fiber.StatusConflict)
|
||||
|
|
|
@ -68,8 +68,9 @@ func SetupRoutes(app *fiber.App) {
|
|||
l.Get("/", requestAccessValidation, logmanagerserverconnections.GetConnectedLogManagerServers)
|
||||
|
||||
c := v1.Group("/crm")
|
||||
c.Get("/pipeline/:type/:dealPhase", requestAccessValidation, crm.GetCrmTypeCustomers)
|
||||
c.Get("/customer/view/:id", requestAccessValidation, crm.GetCrmCustomer)
|
||||
// c.Get("/pipeline/:type/:dealPhase", requestAccessValidation, crm.GetCrmTypeCustomers)
|
||||
c.Post("/customer", requestAccessValidation, crm.GetCrmCustomer)
|
||||
c.Get("/customer/view/:id", requestAccessValidation, crm.GetCrmCustomerById)
|
||||
c.Post("/customer/update/:id", requestAccessValidation, crm.UpdateCrmCustomer)
|
||||
c.Post("/customer/create", requestAccessValidation, crm.CreateCrmCustomer)
|
||||
|
||||
|
|