Skip to content
Snippets Groups Projects
Commit a887dd50 authored by Jonah's avatar Jonah :speech_balloon:
Browse files

Initial commit

parents
Branches main
No related tags found
No related merge requests found
This diff is collapsed.
File added
import jinja2
from pathlib import Path
import gzip
from flask import Flask, render_template, redirect, url_for
from flask_bootstrap import Bootstrap5
from flask_wtf import FlaskForm, CSRFProtect
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired, Length
import secrets
def process_template(template_pdf_path: Path,
template_overlay_path: Path,
variables: dict):
template = jinja2.Template(
gzip.open(template_overlay_path, "rb").read().decode())
with gzip.open("out.xopp", "wb") as out:
out.write(template.render(template_path=template_pdf_path.absolute(),
**variables).encode())
class NameForm(FlaskForm):
requester = StringField('Antragsteller*in', validators=[DataRequired(), Length(1, 100)])
title_1 = StringField('Titel (Zeile 1)', validators=[DataRequired(), Length(1, 100)])
title_2 = StringField("Titel (Zeile 2)")
firstname_lastname = StringField("Name", validators=[DataRequired(), Length(1, 100)])
address = StringField("Addresse", validators=[DataRequired(), Length(1, 100)])
zip_code = StringField("Postleitzahl", validators=[DataRequired(), Length(2, 100)])
place = StringField("Ort", validators=[DataRequired(), Length(1, 100)])
phone_number = StringField("Telefonnummer", validators=[DataRequired(), Length(4, 100)])
description_1 = StringField("Beschreibung (Zeile 1)", validators=[DataRequired(), Length(1, 100)])
description_2 = StringField("Beschreibung (Zeile 2)")
description_3 = StringField("Beschreibung (Zeile 3)")
description_4 = StringField("Beschreibung (Zeile 4)")
reason = StringField("Begründung", validators=[DataRequired(), Length(1, 100)])
item_1 = StringField("Kostenpunkt 1", validators=[DataRequired(), Length(1, 100)])
cost_1 = StringField("Preis")
item_2 = StringField("Kostenpunkt 2")
cost_2 = StringField("Preis")
item_3 = StringField("Kostenpunkt 3")
cost_3 = StringField("Preis")
item_4 = StringField("Kostenpunkt 4")
cost_4 = StringField("Preis")
item_5 = StringField("Kostenpunkt 5")
cost_5 = StringField("Preis")
submit = SubmitField('Submit')
app = Flask(__name__)
app.secret_key = "u3NXUgEzXkpQELzVL9aIcQ"
# Bootstrap-Flask requires this line
bootstrap = Bootstrap5(app)
# Flask-WTF requires this line
csrf = CSRFProtect(app)
@app.route('/', methods=['GET', 'POST'])
def index():
form = NameForm()
message = ""
if form.validate_on_submit():
process_template(Path("Finanzantrag.pdf"),
Path("Finanzantrag.xopp"),
{
"requester": form.requester.data,
"title_1": form.title_1.data,
"title_2": form.title_2.data,
"firstname_lastname": form.firstname_lastname.data,
"address": form.address.data,
"zip_code": form.zip_code.data,
"place": form.place.data,
"phone_number": form.phone_number.data,
"description_1": form.description_1.data,
"description_2": form.description_2.data,
"description_3": form.description_3.data,
"description_4": form.description_4.data,
"reason": form.reason.data,
"item_1": form.item_1.data,
"item_2": form.item_2.data,
"item_3": form.item_3.data,
"item_4": form.item_4.data,
"item_5": form.item_5.data,
"cost_1": form.cost_1.data,
"cost_2": form.cost_2.data,
"cost_3": form.cost_3.data,
"cost_4": form.cost_4.data,
"cost_5": form.cost_5.data
})
return render_template('index.html', form=form)
<html>
<head>
{{ bootstrap.load_css() }}
</head>
{% from 'bootstrap5/form.html' import render_field %}
<body class="p-3 m-0 border-0">
<div class="container" style="max-width: 40rem; margin: 0 auto;">
<div class="card p-4 container justify-content-center">
<h2>Gruppe</h2>
{{ render_field(form.requester) }}
<h2>Titel</h2>
{{ render_field(form.title_1) }}
{{ render_field(form.title_2) }}
<h2>Kontaktperson</h2>
{{ render_field(form.firstname_lastname) }}
{{ render_field(form.address) }}
<div class="input-group">
{{ render_field(form.zip_code) }}
{{ render_field(form.place) }}
</div>
{{ render_field(form.phone_number) }}
<h2>Beschreibung</h2>
{{ render_field(form.description_1) }}
{{ render_field(form.description_2) }}
{{ render_field(form.description_3) }}
{{ render_field(form.description_4) }}
<h2>Begründung</h2>
{{ render_field(form.reason) }}
<h3>Kosten</h2>
<div class="input-group">
{{ render_field(form.item_1) }}
{{ render_field(form.cost_1) }}
</div>
<div class="input-group">
{{ render_field(form.item_2) }}
{{ render_field(form.cost_2) }}
</div>
<div class="input-group">
{{ render_field(form.item_3) }}
{{ render_field(form.cost_3) }}
</div>
<div class="input-group">
{{ render_field(form.item_4) }}
{{ render_field(form.cost_4) }}
</div>
<div class="input-group">
{{ render_field(form.item_5) }}
{{ render_field(form.cost_5) }}
</div>
{{ render_field(form.submit) }}
</div>
</div>
</body>
</html>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment