Files
sternwarte_server/html/sternwarte/intern/anmeld/remove4weeks/main.py
2025-11-02 22:52:08 +01:00

175 lines
4.9 KiB
Python

"""
main.py für remove4weeks
Checked per cron jeden Tag die 'anmeldungen'-Tabelle in der Datenbank.
Prüft für jeden Teilnehmer ob
- entweder die Führung abgesagt wurde
- oder 4 Wochen seit der teilgenommenen Führung vergangen sind.
Ist das der Fall, werden die persönlichen Daten des Teilnehmers mit '-' in der
Datenbank überschrieben.
TODO
- Statistik-Daten behalten: Anzahl der Anfragen, davon zugesagt, davon abgesagt und
ggf. in eine eigenen Tabelle merken
Versions:
V 1.3 2022-12-08 rxf
- 'abgesagte' werden nicht mehgr gelöscht
V 1.2 2022-11-03 rxf
- 'nicht teilgenomme' werden nicht mehr behandelt
- SELECT nun nur noch über fdatum der anmelden-Tabelle
V 1.1 2020-10-14 rxf
- Löschen der reihe nach: erst abgesagt, dann 'nicht teolgenommen' und
dann älter als 4 Wochen
V 1.0 2020-10-10 rxf
- erste live gestellte Version
V 0.0 2020-10-08 rxf
- Start
"""
from datetime import datetime, timedelta, date
import mysql.connector
from mysql.connector import errorcode
import os
# Versionsnummer und Date
VERSION="1.3"
VDATE="2022-12-08"
# Wie viele Tage müssen vergangen sein, damit gelöscht wird?
# default = 28
VTAGE = 28
# $host = 'localhost';
# $user = 'db310927';
# $pass = 'ArktUhr';
# $dbase = 'db310927';
# Definitionen für die Datenbank
unix_socket=" /var/lib/mysql/mysql.sock"
host = 'localhost'
user = 'db310927'
#password = 'ArktUhr'
password = 'vetivene-albarco-earner'
dbase = 'db310927'
if os.environ.get('STWANMELD') == '1':
host = "localhost"
user = "root"
password = "SFluorit"
dbase = "sternwarte"
def updateentry(db, id):
""" Update den Eintrag mit der ID id: es werden alle
persönlichen Daten mit '-' überschreiben"""
mycursor = db.cursor()
dash = '"-"'
sql = "UPDATE anmeldungen SET " + \
"name=" + dash + ", vorname=" + dash + ", email=" + dash + ", telefon=" + dash + ", plz=0, strasse=" + dash + ", stadt=" + dash + \
", remarks = '' WHERE id=\"" + str(id) + "\""
# logit(sql)
mycursor.execute(sql)
db.commit()
return mycursor.rowcount
def removeabgesagte(db):
""" Alle abgesagten Teilnehmer finden und deren IDs übergeben """
abgesagte = []
mycursor = db.cursor()
delcount = 0
sql = "SELECT id FROM anmeldungen WHERE abgesagt=1 AND name != '-'"
mycursor.execute(sql)
myresult = mycursor.fetchall()
logstr = "Abgesagt: "
for x in myresult:
logstr += str(x[0]) + ','
abgesagte.append(x[0])
delcount += updateentry(db, x[0])
logit(logstr)
logit('Anzahl Abgesagte: ' + str(delcount))
return delcount
# def removeNICHTteilgenommene(db):
# """ Alle Teilnehmer holen, die bei der gestrigen Führung
# zwar angemeldet waren aber nicht teilgenommen haben. """
# nichtteilg = []
# mycursor = db.cursor()
# delcount = 0
# sql = "SELECT anmeldungen.id FROM anmeldungen INNER JOIN fdatum ON anmeldungen.fid=fdatum.id WHERE DATE_ADD(DATE(fdatum.datum),INTERVAL 1 DAY)<=DATE(NOW()) AND teilgenommen = 0 AND name != '-'"
# mycursor.execute(sql)
# myresult = mycursor.fetchall()
# logstr = "Nicht teilgenommen: "
# for x in myresult:
# logstr += str(x[0]) + ','
# nichtteilg.append(x[0])
# delcount += updateentry(db, x[0])
# logit(logstr)
# return delcount
def remove4weekold(db):
""" Alle Teilnehmer IDs holen, die vor 4 Wochen bei einer Führung waren
bzw. für eine Führung angemeldet waren"""
mustdelete = []
mycursor = db.cursor()
delcount = 0
sql = "SELECT id FROM anmeldungen WHERE DATE_ADD(DATE(fdatum),INTERVAL " + str(VTAGE) + " DAY)<=DATE(NOW()) AND name != '-'"
mycursor.execute(sql)
myresult = mycursor.fetchall()
logstr = "4 Wochen alt: "
for x in myresult:
logstr += str(x) + ','
mustdelete.append(x[0])
delcount += updateentry(db, x[0])
logit(logstr)
logit('Anazhl 4 Wochen alte: : ' + str(delcount))
return delcount
def logit(arg):
""" Ausgabe der Parameter mit einen Zeitstempel"""
now = datetime.now()
out = now.strftime("%Y-%m-%d %H:%M:%S") + " - " + arg
print(out)
def main():
logit('Start - Version ' + VERSION + " vom " + VDATE)
try:
mydb = mysql.connector.connect(
unix_socket=unix_socket,
# host=host,
user=user,
password=password,
database=dbase
)
# acount = removeabgesagte(mydb)
# count += removeNICHTteilgenommene(mydb)
bcount = remove4weekold(mydb)
logit('Geloescht wurden ' + str(bcount) + ' Eintraege.')
except mysql.connector.Error as err:
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
print("Something is wrong with your user name or password")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
print("Database does not exist")
else:
print(err)
logit("End\n");
if __name__ == "__main__":
main()