Skip to content

Commit 588d420

Browse files
committed
Initial commit - Copy from private repository
1 parent 3b85655 commit 588d420

21 files changed

+1862
-53
lines changed

Diff for: ErgebnissDrucker.py

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
from PyQt5.QtCore import QRectF
2+
3+
from LGPdfWriter import LGPdfWriter
4+
from Sportler import Sportler
5+
from ErgebnissListe import getDisziplin
6+
7+
class ErgebnissDrucker():
8+
def __init__(self,sportler:Sportler):
9+
self.dateiName = "Ergebnisse/{}/{}/{}.pdf"
10+
self.dateiName = self.dateiName.format(sportler.Alter,sportler.geschlechtStr,
11+
sportler.Vname+" "+sportler.Name)
12+
self.disziplinen = getDisziplin(sportler.Alter)
13+
14+
try:
15+
with LGPdfWriter(self.dateiName) as p:
16+
17+
#Überschrift
18+
p.text("Kinder - und Jugendzehnkampf", QRectF(1, 40, 765, 30), size=20, bold=True)
19+
p.text("Wettkampfkarte", QRectF(1, 80, 765, 30), size=20, bold=True)
20+
21+
#Wettkampfkarte
22+
p.table(QRectF(60, 140, 650, 100),
23+
["Name", "Vorname", "Alter", "Gruppe",
24+
sportler.Name, sportler.Vname, sportler.jahrgang, sportler.klasseSep], 4, 2)
25+
26+
p.text("Disziplin", QRectF(20, 290, 200, 30), size=20, bold=True)
27+
p.text("Ergebnis", QRectF(210, 290, 400, 30), size=20, bold=True)
28+
p.text("Punkte", QRectF(610, 290, 100, 30), size=20, bold=True)
29+
30+
punkte = sportler.Ranking.prepare4PDF()
31+
tabledata = list()
32+
numrows = 0
33+
for i in range(10):
34+
if punkte[i][0] is "-":
35+
continue
36+
numrows+=1
37+
tabledata.append(punkte[i][0])
38+
if i < 4:
39+
tabledata.append({"text":"{}".format(punkte[i][2][0]),"x":(1,3)})
40+
tabledata.append("{}".format(punkte[i][1]))
41+
else:
42+
tabledata.append("{}".format(punkte[i][2][0]))
43+
tabledata.append("{}".format(punkte[i][2][1]))
44+
tabledata.append("{}".format(punkte[i][2][2]))
45+
tabledata.append("{}".format(punkte[i][1]))
46+
47+
p.table(QRectF(60, 350, 650, 570),tabledata, 5, numrows, w={0: 280, 4: 70})
48+
49+
p.table(QRectF(60, 940, 650, 100),
50+
["Gesammtpunkte", {"text": "{}".format(punkte["Total"][0]), "color": p._sg, "shaded": True},
51+
"Gesammtplatzierung", {"text": "{}".format(punkte["Total"][1]), "color": p._sg, "shaded": True}
52+
], 2, 2, w={1: 70})
53+
except PermissionError:
54+
return

Diff for: ErgebnissListe.py

+197
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
from datetime import date
2+
3+
from PyQt5.QtWidgets import(QWidget,
4+
QGridLayout,
5+
QLabel,
6+
QComboBox,
7+
QPushButton,
8+
QDoubleSpinBox,
9+
QMessageBox)
10+
11+
from QueryTool import QueryTool
12+
13+
einheiten = ("sec", "sec", "sec", "min", "m", "m", "cm,V","m", "m", "m")
14+
felderzahl= (1, 1, 1, 1, 3, 3, 3, 3, 3, 3) #Anzahl
15+
16+
def getDisziplin(alter:int)->str:
17+
if alter < 12:
18+
yield "50m Sprint"
19+
yield "60m Hürdenlauf"
20+
elif alter < 14:
21+
yield "75m Sprint"
22+
yield "80m Hürdenlauf"
23+
else:
24+
yield "100m Sprint"
25+
yield "80m Hürdenlauf"
26+
27+
if alter < 10:
28+
yield "-"
29+
else:
30+
yield "200m Lauf"
31+
32+
if alter < 10:
33+
yield "400m Lauf"
34+
else:
35+
yield "800m Lauf"
36+
37+
yield "Weitsprung"
38+
yield "Stabweitsprung"
39+
if alter < 10:
40+
yield "-"
41+
else:
42+
yield "Hochsprung"
43+
yield "Reifenweitwurf"
44+
yield "Weitwurf"
45+
yield "Kugelstoßen"
46+
47+
class ErgebnissListe(QWidget):
48+
template = "<tr><td>Eintrag von </td><td>{: >20}</td><td>in der Disziplin {:<15} </td><td>{}erfolgreich {}</td></tr>"
49+
def __init__(self,parent=None):
50+
super(ErgebnissListe, self).__init__(parent)
51+
52+
self.auswahlAlter = QComboBox()
53+
self.auswahlAlter.addItem("Bitte auswählen")
54+
for i in range(3,18):
55+
self.auswahlAlter.addItem("{} Jahre / Jahrgang {}".format(i, date.today().year-i))
56+
self.auswahlAlter.activated.connect(self.auswahlKlasse)
57+
self.auswahlAlter.activated.connect(self.waehleDisziplinen)
58+
59+
self.auswahlGeschlecht = QComboBox()
60+
self.auswahlGeschlecht.addItem("Bitte auswählen")
61+
self.auswahlGeschlecht.addItem("Männlich")
62+
self.auswahlGeschlecht.addItem("Weiblich")
63+
self.auswahlGeschlecht.activated.connect(self.auswahlKlasse)
64+
self.auswahlGeschlecht.activated.connect(self.waehleDisziplinen)
65+
66+
self.auswahlDisziplin = QComboBox()
67+
self.auswahlDisziplin.addItem("Bitte auswählen")
68+
for i in getDisziplin(10):
69+
self.auswahlDisziplin.addItem(i)
70+
self.auswahlDisziplin.activated.connect(self.auswahlKlasse)
71+
72+
self.mainLayout = QGridLayout()
73+
self.mainLayout.addWidget(QLabel("Alter:"), 0, 0)
74+
self.mainLayout.addWidget(self.auswahlAlter, 0, 1, 1, 3)
75+
self.mainLayout.addWidget(QLabel("Geschlecht:"), 1, 0)
76+
self.mainLayout.addWidget(self.auswahlGeschlecht, 1, 1, 1, 3)
77+
self.mainLayout.addWidget(QLabel("Disziplin:"), 2, 0)
78+
self.mainLayout.addWidget(self.auswahlDisziplin, 2, 1, 1, 3)
79+
80+
self._speichern = QPushButton("Speichern")
81+
self._speichern.clicked.connect(self.speichern)
82+
83+
self.setLayout(self.mainLayout)
84+
85+
self._sportler = []
86+
87+
self.update()
88+
89+
def waehleDisziplinen(self):
90+
self.auswahlDisziplin.clear()
91+
self.auswahlDisziplin.addItem("Bitte auswählen")
92+
for i in getDisziplin(self.auswahlAlter.currentIndex()+2):
93+
self.auswahlDisziplin.addItem(i)
94+
95+
96+
def auswahlKlasse(self):
97+
if self.auswahlAlter.currentIndex() == 0:
98+
return False
99+
elif self.auswahlGeschlecht.currentIndex() == 0:
100+
return False
101+
elif self.auswahlDisziplin.currentIndex() == 0:
102+
return False
103+
104+
self.clearAuswahl()
105+
106+
disziplin = self.auswahlDisziplin.currentIndex()-1
107+
if self.auswahlDisziplin.currentText() is "-":
108+
return
109+
110+
for sportler in QueryTool().queryAndFetch("SELECT ID, Name, Vorname FROM LG_NGD WHERE WieAlt = ? AND Geschlecht = ?",
111+
self.auswahlAlter.currentIndex()+2,
112+
bool(self.auswahlGeschlecht.currentIndex()-1)):
113+
self._sportler += [sportler[0]]
114+
name = "{} {}".format(sportler[2],sportler[1])
115+
#UID, Name
116+
117+
for werte in reversed(QueryTool().queryAndFetch("SELECT Wert1, Wert2, Wert3 FROM LG_NGD_Ergebnisse WHERE UID = ? "
118+
"AND Typ = ? UNION SELECT 0, 0, 0",
119+
sportler[0],
120+
disziplin)):
121+
122+
row = self.mainLayout.rowCount()
123+
124+
self.mainLayout.addWidget(QLabel(name), row, 0)
125+
for i in range(0,felderzahl[disziplin]):
126+
el = QDoubleSpinBox()
127+
el.setMaximum(99999)
128+
el.setValue(werte[i])
129+
el.setSuffix(" "+einheiten[disziplin])
130+
el.setSingleStep(0.01)
131+
self.mainLayout.addWidget(el, row, i+1, 1, 3/felderzahl[disziplin])
132+
break
133+
self._speichern = QPushButton("Speichern")
134+
self._speichern.clicked.connect(self.speichern)
135+
self.mainLayout.addWidget(self._speichern, self.mainLayout.rowCount(), 0, 1, 4)
136+
137+
def speichern(self):
138+
row = self.mainLayout.rowCount()-len(self._sportler)-1
139+
disziplin = self.auswahlDisziplin.currentIndex()-1
140+
141+
ausgabe = "<table>"
142+
143+
for UID in self._sportler:
144+
werte = ["0","0","0"]
145+
for col in range(1, 1+felderzahl[disziplin]):
146+
item = self.mainLayout.itemAtPosition(row, col)
147+
text = "0"
148+
try:
149+
if type(item.widget()) is not type(QDoubleSpinBox()):
150+
raise TypeError("No LineEdit")
151+
text = item.widget().value()
152+
except TypeError:
153+
text = "0"
154+
except AttributeError:
155+
text = "0"
156+
werte[col-1]=text
157+
158+
data = QueryTool().queryAndFetch("SELECT * FROM LG_NGD_Ergebnisse WHERE UID = ? AND Typ = ?",UID,disziplin)
159+
ergebnisse = None
160+
typ = None
161+
if len(data) is not 0:
162+
ergebniss = QueryTool().update("LG_NGD_Ergebnisse", data[0][0], Wert1=werte[0], Wert2=werte[1], Wert3=werte[2])
163+
typ = "aktualisiert"
164+
else:
165+
ergebniss = QueryTool().insert("LG_NGD_Ergebnisse", UID=UID, Typ=disziplin, Wert1=werte[0], Wert2=werte[1], Wert3=werte[2])
166+
typ = "eingetragen"
167+
168+
username = self.mainLayout.itemAtPosition(row, 0)
169+
170+
if type(username.widget()) is not type(QLabel()):
171+
username = ""
172+
else:
173+
username = username.widget().text()
174+
ausgabe += self.template.format(username, list(getDisziplin(self.auswahlAlter.currentIndex()+2))[disziplin],
175+
"nicht " if ergebniss is None else "", typ)
176+
177+
row += 1
178+
ausgabe += "</table>"
179+
QMessageBox.information(self, "Eintragungsstatus", ausgabe)
180+
181+
def clearAuswahl(self):
182+
for w in self.iterWidgets(True):
183+
w[0].setParent(None)
184+
self._sportler=[]
185+
186+
def iterWidgets(self,allWidgets = False)->QWidget:
187+
for row in range(3, self.mainLayout.rowCount()-(1 if not allWidgets else 0)):
188+
for col in range(self.mainLayout.columnCount()):
189+
item = self.mainLayout.itemAtPosition(row, col)
190+
if item is not None and item.widget() is not None:
191+
yield (item.widget(), row, col)
192+
else:
193+
break
194+
195+
def update(self):
196+
if not self.auswahlKlasse():
197+
return

Diff for: ErgebnissVorlage.py

+69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
from datetime import date
2+
3+
from PyQt5.QtWidgets import (QWidget,
4+
QFormLayout,
5+
QLabel,
6+
QComboBox,
7+
QPushButton,
8+
QProgressBar)
9+
from ErgebnissVorlagenDrucker import ErgebnissVorlagenDrucker
10+
from QueryTool import QueryTool
11+
12+
13+
class ErgebnissVorlage(QWidget):
14+
def __init__(self, parent=None):
15+
super(ErgebnissVorlage, self).__init__(parent)
16+
17+
self.auswahlAlter = QComboBox()
18+
self.auswahlAlter.addItem("Bitte auswählen")
19+
for i in range(3, 18):
20+
self.auswahlAlter.addItem("{} Jahre / Jahrgang {}".format(i, date.today().year - i))
21+
22+
self.auswahlGeschlecht = QComboBox()
23+
self.auswahlGeschlecht.addItem("Bitte auswählen")
24+
self.auswahlGeschlecht.addItem("Männlich")
25+
self.auswahlGeschlecht.addItem("Weiblich")
26+
27+
self.printerProgress = QProgressBar()
28+
self.printerProgress.hide()
29+
30+
self.mainLayout = QFormLayout()
31+
self.mainLayout.addRow(QLabel("Alter:"),self.auswahlAlter)
32+
self.mainLayout.addRow(QLabel("Geschlecht:"),self.auswahlGeschlecht)
33+
self.mainLayout.addRow(self.printerProgress)
34+
35+
self._drucken = QPushButton("Drucken")
36+
self._drucken.clicked.connect(self.drucken)
37+
38+
self.mainLayout.addRow(self._drucken)
39+
40+
self.setLayout(self.mainLayout)
41+
42+
def queryUsers(self,Alter:int, Geschlecht:bool)->list:
43+
return QueryTool().fetchAllByWhere("LG_NGD",WieAlt=Alter,Geschlecht=Geschlecht)
44+
45+
def drucken(self):
46+
self.printerProgress.show()
47+
48+
if (self.auswahlAlter.currentIndex() is 0) and (self.auswahlGeschlecht.currentIndex() is 0):
49+
Alter = range(3,18)
50+
Geschlecht = range(0,2)
51+
else:
52+
Alter = self.auswahlAlter.currentIndex()+2
53+
Alter = range(Alter,Alter+1)
54+
55+
Geschlecht = self.auswahlGeschlecht.currentIndex()-1
56+
Geschlecht = range(Geschlecht,Geschlecht+1)
57+
58+
self.printerProgress.setMaximum(len(Alter)*len(Geschlecht)*10)
59+
self.printerProgress.setValue(0)
60+
61+
prog = 0
62+
63+
for a in Alter:
64+
for g in Geschlecht:
65+
for d in range(10):
66+
ErgebnissVorlagenDrucker(a,g,d)
67+
self.printerProgress.setValue(prog)
68+
prog +=1
69+
self.printerProgress.hide()

Diff for: ErgebnissVorlagenDrucker.py

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
from PyQt5.QtCore import QRectF
2+
from LGPdfWriter import LGPdfWriter
3+
from QueryTool import QueryTool
4+
from ErgebnissListe import getDisziplin
5+
6+
class ErgebnissVorlagenDrucker:
7+
disziplinen = ("Sprint",
8+
"Hürdenlauf",
9+
"200_400m",
10+
"400_800_1000m",
11+
"Weitsprung",
12+
"Stabweitsprung",
13+
"Hochsprung",
14+
"Reifenweitwurf",
15+
"Weitwurf",
16+
"Kugelstoßen")
17+
def __init__(self,Alter:int,Geschlecht:bool,Disziplin:int):
18+
self.disziplinen = list(getDisziplin(Alter))
19+
if self.disziplinen[Disziplin] is "-":
20+
return
21+
self.dateiName = "Vorlagen/{}{}/{}.pdf"
22+
self.dateiName = self.dateiName.format("W" if Geschlecht else "M", Alter, self.disziplinen[Disziplin])
23+
24+
tabledata = list()
25+
tabledata.append({"text":"Name"})
26+
col = 1
27+
if Disziplin >= 4:
28+
col = 3
29+
for i in range(col):
30+
tabledata.append({"text":"Versuch {}".format(i+1)})
31+
32+
users = self.queryUsers(Alter,Geschlecht)
33+
if len(users) == 0:
34+
return
35+
36+
for user in users:
37+
tabledata.append("{}, {}".format(user[1],user[2]))
38+
for i in range(col):
39+
tabledata.append(" ")
40+
41+
self.printer = LGPdfWriter(self.dateiName)
42+
43+
#Überschrift
44+
self.printer.text("Kinder - und Jugendzehnkampf", QRectF(1, 40, 765, 30), size=20, bold=True)
45+
self.printer.text("Wettkampfvorlage {} ({}{})".format(self.disziplinen[Disziplin].replace("_","/"),"W" if Geschlecht else "M", Alter), QRectF(1, 80, 765, 30), size=20, bold=True)
46+
47+
self.printer.table(QRectF(60, 140, 650, 885),tabledata, col+1, min(30,max(20,len(users))), w={0: 280})
48+
self.printer.end()
49+
50+
def queryUsers(self,Alter:int, Geschlecht:bool)->list:
51+
return QueryTool().fetchAllByWhere("LG_NGD",WieAlt=Alter,Geschlecht=Geschlecht)

0 commit comments

Comments
 (0)