Compare commits

8 Commits

Author SHA1 Message Date
10aeabdb83 increase allowed range for prediction 2023-10-05 02:29:39 +02:00
5604fac1b2 readjust step in predict and add dateformating function 2023-10-05 02:19:52 +02:00
89e802aa57 add pycache to gitignore 2023-10-04 00:13:07 +02:00
06af95ce57 fix prediction 2023-10-04 00:11:21 +02:00
ba69c2a97f add functions.py and prediction checks 2023-10-03 23:45:48 +02:00
ff088a6a24 bug fixing 2023-10-03 22:52:40 +02:00
4d0869ddf7 Merge remote-tracking branch 'origin/moreOnStyle' 2023-10-03 22:04:05 +02:00
hugo
20db73836c Style fixes and gitignore 2023-10-03 21:56:20 +02:00
7 changed files with 85 additions and 58 deletions

3
.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
__pycacahe__/*
freeriders/__pycacahe__/*
instance/

21
freeriders/functions.py Normal file
View File

@@ -0,0 +1,21 @@
import time
import datetime
def datetounix(day, month, year, hour, minute, second):
seconds = datetime.datetime(year, month, day, hour, minute, second).timestamp()
return int(seconds)
def formatprefix2(number):
return "{:02d}".format(number)
def formatprefix10(number):
return "{:010d}".format(number)
def predict(timestamp):
base_ticket = 7157662
base_timestamp = 1695887564
step = 0.688
ticket = base_ticket + (timestamp - base_timestamp) * step
return int(ticket)

View File

@@ -1,17 +1,25 @@
from flask import render_template, request, redirect from flask import render_template, request, redirect
from freeriders import app, db from freeriders import app, db
from freeriders.models import Ticket from freeriders.functions import formatprefix2,formatprefix10, predict
from freeriders.models import Tickets
from datetime import datetime from datetime import datetime
import time import time
@app.route('/sms', methods=['GET']) @app.route('/sms', methods=['GET'])
def sms(): def sms():
if request.method == 'GET': if request.method == 'GET':
timenow = int(time.time())
try: try:
lastticket = Ticket.query.order_by(Ticket.timestamp.desc()).first() lastticket = Tickets.query.order_by(Tickets.timestamp.desc()).first()
if lastticket.timestamp < timenow - (90 * 60):
lastticket = formatprefix10(predict(timenow))
else:
lastticket = formatprefix10(lastticket.ticket)
date = datetime.now() date = datetime.now()
datenow = f'{"{:02d}".format(date.day)}.{"{:02d}".format(date.month)}.{date.year}' datenow = f'{formatprefix2(date.day)}.{formatprefix2(date.month)}.{date.year}'
timenow = f'{"{:02d}".format(date.hour)}:{"{:02d}".format(date.minute)}:{date.second}' timenow = f'{formatprefix2(date.hour)}:{formatprefix2(date.minute)}:{formatprefix2(date.second)}'
return render_template('sms.html', ticket = lastticket, date = datenow, time = timenow) return render_template('sms.html', ticket = lastticket, date = datenow, time = timenow)
except: except:
return 'Error retriving last ticket' return 'Error retriving last ticket'
@@ -20,14 +28,22 @@ def sms():
@app.route('/submit', methods=['POST', 'GET']) @app.route('/submit', methods=['POST', 'GET'])
def submit(): def submit():
PREDICTTIMERANGE = 60 * 60 * 24
if request.method == 'GET': if request.method == 'GET':
return render_template('submit.html') return render_template('submit.html')
elif request.method == 'POST': elif request.method == 'POST':
timenow = int(time.time()) timenow = int(time.time())
ticket_input = request.form['ticket'] ticket_input = request.form['ticket']
if ticket_input.isdigit() and len(ticket_input) == 10: if ticket_input.isdigit() and len(ticket_input) == 10 :
ticket = Ticket(ticket = int(ticket_input), timestamp = timenow) if int(ticket_input) < predict(timenow + PREDICTTIMERANGE ) and int(ticket_input) > predict(timenow - PREDICTTIMERANGE ) :
ticket = Tickets(ticket = int(ticket_input), timestamp = timenow)
else:
print(int(ticket_input))
print(predict(timenow - PREDICTTIMERANGE))
print(predict(timenow + PREDICTTIMERANGE))
print(predict(timenow))
return 'Ticket number is in unexpected range.'
else: else:
return 'Ticket format is wrong. Only 10 digits allowed.' return 'Ticket format is wrong. Only 10 digits allowed.'

View File

@@ -1,9 +1,9 @@
:root { :root {
--border-radus: 1rem; --border-radus: 1rem;
--background: #EEE; --background: #F9F9F9;
--header-background: #DDD; --header-background: #EEE;
--header-height: 3rem; --header-height: 3rem;
--input-bar-height: 2rem; --input-bar-height: 3rem;
} }
body{ body{
@@ -14,14 +14,13 @@ body{
} }
main { main {
max-width: 400px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-self: flex-start; align-self: flex-start;
gap: 1rem; gap: 1rem;
margin: 0 auto; margin: 0 auto;
padding: 1rem 0.5rem; padding: 2rem 0.5rem;
height: calc(100vh - 5rem); height: calc(100vh - var(--header-height) - var(--input-bar-height));
overflow-y: scroll; overflow-y: scroll;
box-sizing: border-box; box-sizing: border-box;
} }
@@ -30,22 +29,25 @@ header {
background-color: var(--header-background); background-color: var(--header-background);
display: flex; display: flex;
flex-direction: row; flex-direction: row;
padding: 1rem; align-items: center;
padding: 0 1rem;
gap: 1rem; gap: 1rem;
font-weight: bold; font-weight: bold;
width: 100vw; width: 100vw;
height: var(header-height); height: var(--header-height);
box-sizing: border-box; box-sizing: border-box;
} }
footer { footer {
width: 100vw; width: 100vw;
height: var(input-bar-height); height: var(--input-bar-height);
background-color: #FDD; background-color: var(--background);
display: flex; display: flex;
flex-direction: row; flex-direction: row;
align-items: center;
padding: 0 1rem; padding: 0 1rem;
box-sizing: border-box; box-sizing: border-box;
gap: 1rem;
} }
.request { .request {
@@ -67,4 +69,12 @@ footer {
.date { .date {
align-self: center; align-self: center;
margin-top: 0.5rem; margin-top: 0.5rem;
}
.textbox{
background-color: var(--header-background);
width: 80%;
height: 1rem;
padding: 0.2rem;
border-radius: 2rem;
} }

View File

@@ -1,14 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/styles/style.css">
<link rel="shortcut icon" href="/img/favicon.ico" type="image/x-icon">
<title>Ticket tracking</title>
</head>
<body>
<main>
</main>
</body>
</html>

View File

@@ -4,7 +4,7 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>Karta</title> <title>Karta</title>
<link rel="stylesheet" href="style.css"> <link rel="stylesheet" href="/static/style.css">
</head> </head>
<body> <body>
<header> <header>
@@ -26,33 +26,6 @@
za ovu kartu prema JKP Naplata prevozne za ovu kartu prema JKP Naplata prevozne
usluge Beograd. Sacuvajte ovu poruku. usluge Beograd. Sacuvajte ovu poruku.
</section> </section>
<section class='request'>
A90
</section>
<section class='ticket'>
U Beogradu, za broj telefona ste kupili
VREMENSKU KARTU OD 90 MINUTA U ZONI A po
ceni od 50 din + osnovna cena poruke,
koja vazi do 03.10.2023, 09:42:54.
Karta broj: 0000343232.
Placanjem operateru izmirujete dugovanja
za ovu kartu prema JKP Naplata prevozne
usluge Beograd. Sacuvajte ovu poruku.
</section>
<section class='date'>08:23</section>
<section class='request'>
A90
</section>
<section class='ticket'>
U Beogradu, za broj telefona ste kupili
VREMENSKU KARTU OD 90 MINUTA U ZONI A po
ceni od 50 din + osnovna cena poruke,
koja vazi do 03.10.2023, 09:42:54.
Karta broj: 0000343232.
Placanjem operateru izmirujete dugovanja
za ovu kartu prema JKP Naplata prevozne
usluge Beograd. Sacuvajte ovu poruku.
</section>
</main> </main>
<footer> <footer>
<div class="textbox"></div> <div class="textbox"></div>

View File

@@ -0,0 +1,18 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Submit</title>
<link rel="stylesheet" href="/static/style.css">
</head>
<body>
<main>
<form action="/submit" method="POST">
<label for="ticket">ticket</label>
<input type="text" name="ticket" id="ticket" placeholder="1234567890" required>
<button> Submit </button>
</form>
</main>
</body>
</html>