Compare commits

4 Commits

Author SHA1 Message Date
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
a872c70e93 add dynamic values to sms.html 2023-10-03 22:03:13 +02:00
6 changed files with 61 additions and 50 deletions

View File

@@ -7,3 +7,4 @@ Web app for tracking current ticket numbers
- keep all ticket numbers and timestamps in SQL table "tickets" - keep all ticket numbers and timestamps in SQL table "tickets"
- display last ticket number - display last ticket number
- don't allow tickets that are out of probable ticket number range - don't allow tickets that are out of probable ticket number range
- if last submited ticket is timestamped more then 90 minutes ago, try to predict the next number

16
freeriders/functions.py Normal file
View File

@@ -0,0 +1,16 @@
import time
def formatprefix2(number):
return "{:02d}".format(number)
def formatprefix10(number):
return "{:010d}".format(number)
def predict(timestamp):
base_ticket = 4339636
base_timestamp = 1694003498
step = 8
ticket = base_ticket + (int(time.time()) - base_timestamp) * step
return ticket

View File

@@ -1,14 +1,28 @@
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
import time import time
PREDICTTIMERANGE = 60 * 80
@app.route('/sms', methods=['GET']) @app.route('/sms', methods=['GET'])
def sms(): def sms():
if request.method == 'GET': if request.method == 'GET':
timenow = time.time()
try: try:
lastticket = Ticket.query.order_by(Ticket.timestamp.desc()).first() lastticket = Tickets.query.order_by(Tickets.timestamp.desc()).first()
return render_template('sms.html', ticket = lastticket)
if lastticket.timestamp < timenow - (90 * 60):
lastticket = formatprefix10(predict(timenow))
else:
lastticket = formatprefix10(lastticket.ticket)
date = datetime.now()
datenow = f'{formatprefix2(date.day)}.{formatprefix2(date.month)}.{date.year}'
timenow = f'{formatprefix2(date.hour)}:{formatprefix2(date.minute)}:formatprefix2{date.second}'
return render_template('sms.html', ticket = lastticket, date = datenow, time = timenow)
except: except:
return 'Error retriving last ticket' return 'Error retriving last ticket'
else: else:
@@ -22,8 +36,11 @@ def submit():
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 ticket_input < predict(timenow + PREDICTTIMERANGE ) and ticket_input > predict(timenow - PREDICTTIMERANGE ) :
ticket = Tickets(ticket = int(ticket_input), timestamp = timenow)
else:
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,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>
@@ -20,35 +20,8 @@
U Beogradu, za broj telefona ste kupili U Beogradu, za broj telefona ste kupili
VREMENSKU KARTU OD 90 MINUTA U ZONI A po VREMENSKU KARTU OD 90 MINUTA U ZONI A po
ceni od 50 din + osnovna cena poruke, ceni od 50 din + osnovna cena poruke,
koja vazi do 03.10.2023, 09:42:54. koja vazi do {{ date }}, {{ time }}.
Karta broj: 0000343232. Karta broj: {{ ticket }}.
Placanjem operateru izmirujete dugovanja
za ovu kartu prema JKP Naplata prevozne
usluge Beograd. Sacuvajte ovu poruku.
</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 Placanjem operateru izmirujete dugovanja
za ovu kartu prema JKP Naplata prevozne za ovu kartu prema JKP Naplata prevozne
usluge Beograd. Sacuvajte ovu poruku. usluge Beograd. Sacuvajte ovu poruku.
@@ -59,4 +32,4 @@
<div>x</div> <div>x</div>
</footer> </footer>
</body> </body>
</html> </html>

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>