initial commit

This commit is contained in:
Eljakim Herrewijnen 2021-11-07 12:56:41 +01:00
commit 2186c273dd
13 changed files with 360 additions and 0 deletions

8
Readme.md Normal file
View File

@ -0,0 +1,8 @@
# Project ????
Build a (simple) webapp that will tell the user when he/she can go to church.
### Workflow:
1. User enters website
2. User enters group number for church
3. User gets reponse where he/she can see at which services he/she is allowed

29
app.py Normal file
View File

@ -0,0 +1,29 @@
from flask import Flask, render_template, request, jsonify
from services import Services
app = Flask("Project Candle")
services = Services()
@app.route('/')
def index():
return render_template("index.html")
@app.route("/GetServices", methods=['GET', 'POST'])
def GetServices():
nummer = (request.json)["nummer"]
if(nummer != None and nummer != ""):
ser=services.GetServices(nummer)
return jsonify(render_template("results.html", services=ser),)
ser = services.GetAllServices()
return render_template("results.html", services=ser)
def RunWeb():
app.run(debug=True)
@app.route('/', methods=['POST'])
def my_form_post():
text = request.form['text']
processed_text = text.upper()
print(f'Inputted text is: {processed_text}')
return processed_text

7
main.py Normal file
View File

@ -0,0 +1,7 @@
from app import *
def main():
RunWeb()
if __name__ == "__main__":
main()

2
requirements.txt Normal file
View File

@ -0,0 +1,2 @@
flask
pandas

71
services.py Normal file
View File

@ -0,0 +1,71 @@
import datetime
from sqlite3 import *
import sqlite3
import locale
import random
locale.setlocale(locale.LC_TIME, "nl_NL.utf-8") # swedish
class Services:
def __init__(self, sqlpath="sqlite.db") -> None:
self.sqlpath = sqlpath
self.db = sqlite3.connect(self.sqlpath, check_same_thread=False)
self.cursor = self.db.cursor()
self.PopulateDB()
def GetAllServices(self):
'''
Get all services. Returns a dictionary with, for each key a tuple with (date, groups)
'''
serv = self.cursor.execute("select * from services").fetchall()
res = {}
for s in serv:
date = datetime.datetime.strptime(s[1], "%Y-%m-%d %H:%M:%S")
groups = s[2].split(":")
res[s[0]] = (date, groups)
return res
def GetServices(self, number):
serv = self.GetAllServices()
res = {}
for i in serv:
if(number in serv[i][1]):
res[i] = serv[i]
return res
def PopulateDB(self):
'''
Populate simple db
'''
query = f"""CREATE TABLE IF NOT EXISTS services
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
date STRING,
groups STRING
);
"""
self.cursor.execute(query)
def AddService(self, date, groups):
query = f"""
INSERT INTO services (date, groups)
VALUES('{date}', '{groups}');
"""
self.cursor.execute(query)
self.db.commit()
if __name__ == "__main__":
#fill db
ser = Services()
for i in range(100):
d = datetime.datetime.now()
d = d.replace(hour=random.randint(1, 23), day = random.randint(1, 28), month = random.randint(1, 12))
d = d.strftime("%Y-%m-%d %H:%M:%S")
g = ""
for j in range(10):
g += str(random.randint(1, 30))
g += ":"
ser.AddService(d, g)
r = ser.GetAllServices()
d = ser.GetServices(str(4))
print(d)

BIN
sqlite.db Normal file

Binary file not shown.

2
static/jquery-3.6.0.min.js vendored Normal file

File diff suppressed because one or more lines are too long

22
static/script.js Normal file
View File

@ -0,0 +1,22 @@
function GetServices(){
$.ajax({
type: "POST",
url: "/GetServices",
data: JSON.stringify({
"nummer": document.getElementById('nummer_input').value,
}),
contentType: "application/json",
dataType: 'text json',
success: function(response) {
document.getElementById('resultblock').innerHTML = response
},
error: function(error){
console.log(error);
}
// success: function(result) {
// console.log("aa");
// console.log(results);
//
// }
});
}

134
static/style.css Normal file
View File

@ -0,0 +1,134 @@
.headerblock{
width: 100%;
height: 5%;
/* background-color: #FFFFFF; */
}
/* --sonic-silver: #7a7978ff;
--turquoise-green: #87cbacff;
--aquamarine: #90ffdcff;
--non-photo-blue: #8de4ffff;
--aero: #8ac4ffff; */
.bodyclass{
background-color: #fffffc;
}
.klanten_logo{
padding: 1%;;
}
.navbarbtn{
float: right;
font-size: 25px;
padding: 2%;
padding-left: 5%;
padding-right: 5%;
margin: 1%;;
/* border: 1px solid black; */
background-color: #fffffe;
/* color: white; */
}
.navbarbtn:hover{
background-color: gray;
cursor: pointer;
}
.requestblock{
position: relative;
/* border: 1px solid black; */
left: 25%;
padding: 5%;
width: 40%;
font-family: "Verdana";
background-color: #ffffff;
}
.resultblock{
position: relative;
background-color: #ffffff;
/* border: 1px solid black; */
left:25%;
top: 50%;
width: 40%;
padding: 5%;
font-family: "Verdana";
}
.resultitem{
padding: .5%;
}
.klanten_logo:active{
-webkit-animation:spin 4s linear infinite;
-moz-animation:spin 4s linear infinite;
animation:spin 4s linear infinite;
}
@-moz-keyframes spin {
100% { -moz-transform: rotate(360deg); }
}
@-webkit-keyframes spin {
100% { -webkit-transform: rotate(360deg); }
}
@keyframes spin {
100% {
-webkit-transform: rotate(360deg);
transform:rotate(360deg);
}
}
.center {
display: block;
margin-left: 40%;
margin-right: 60%;
width: 50%;
}
.nummer_input{
background-color:white;
position: relative;
padding: 2%;
margin: 1%;
width: 39.5%;
left: 30%;
font-size: 20px;
text-align: center;
font-size: 26px;
}
.nummer_button{
position: relative;
background-color: green;
padding: 2%;
margin: 1%;
width: 40%;
left: 30%;
text-align: center;
font-size: 26px;
}
.nummer_button:hover{
background-color: lightgreen;
cursor: pointer;
}
.resultitem{
margin: 1%;
padding: 1;
text-align: center;
}
/* .MainText{
position: fixed;
top: 50%;
left: 50%;
margin-top: -100px;
margin-left: -100px;
font-family: "Verdana";
} */

30
templates/base.html Normal file
View File

@ -0,0 +1,30 @@
<!doctype html>
<title>Rondzes</title>
<link rel="stylesheet" href="{{url_for('static', filename='style.css') }}">
<script src="{{url_for('static', filename='jquery-3.6.0.min.js') }}"></script>
<script src="{{url_for('static', filename='script.js') }}"></script>
<body class="bodyclass">
<header class="headerblock">
<img class="klanten_logo" src="//image.protestantsekerk.net/uploads/klant484/logo.png" title="Rondzes" alt="logo">
<div class="navbarbtn">
<tr>
Contact
</tr>
</div>
<div class="navbarbtn">
<tr>
Aanmelden
</tr>
</div>
<div class="navbarbtn">
<tr>
Wie zijn wij?
</tr>
</div>
</header>
<div id="content">{% block content %}{% endblock %}</div>
</body>
</html>

28
templates/index.html Normal file
View File

@ -0,0 +1,28 @@
{% extends 'base.html' %}
<head>
<div class="headerblock">
</div>
<h1>Mag ik naar de kapel?</h1>
</head>
{% block content %}
<div class="requestblock">
<div class="MainText">
<h1 style="text-align: center;">Wanneer mag ik naar de kapel?</h1>
<h3 style="text-align: center;">In welke groep bent u ingedeeld?</h3>
</div>
<input class="nummer_input" id="nummer_input" name="text" placeholder="Groep">
<div class="nummer_button" onclick="GetServices()">Opvragen</div>
<!-- <form method="POST">
<input name="text">
<input type="submit" value="Verzenden!">
</form> -->
</div>
<div class="resultblock" id="resultblock">
</div>
{% endblock %}

14
templates/results.html Normal file
View File

@ -0,0 +1,14 @@
{% for key, value in services.items() %}
{% if(loop.index % 2 == 0) %}
<div class="resultitem" style="background-color: lightcyan">
Dienst op {{value[0].date().strftime("%A")}} on {{value[0].time().hour}} uur.
</div>
{% else %}
<div class="resultitem" style="background-color: lightblue">
Dienst op {{value[0].date().strftime("%A")}} on {{value[0].time().hour}} uur.
</div>
{% endif %}
{% endfor %}

View File

@ -0,0 +1,13 @@
.center {
display: block;
margin-left: 40%;
margin-right: 60%;
width: 50%;
}
.nummer_button{
width:5%;
height: 3%;
background-color: red;
}