Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

A number of additions and changes #1

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -87,3 +87,7 @@ ENV/

# Rope project settings
.ropeproject

# manual
grademan/mlo.diff
*.bak
Empty file modified DEBIAN/control
100755 → 100644
Empty file.
2 changes: 1 addition & 1 deletion buildDeb.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ cd build/
rm grademan_$version/usr/share/grademan/*.pyc

# Dateirechte setzen:
chown -R dirk:dirk grademan_$version/
chown -R mlo:mlo grademan_$version/
chmod -R =0755 grademan_$version/
chmod -R =0644 grademan_$version/DEBIAN/*
chmod -R =0644 grademan_$version/usr/share/pixmaps/*
Expand Down
2 changes: 2 additions & 0 deletions grademan/GmHandler.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import _thread
from bottle import route
from GmServer import GmServer
import markdown

class GmHandler():
'''Handler für GradeMan-Bottle-Server'''
Expand Down Expand Up @@ -86,6 +87,7 @@ def __init__(self, config, gmdir):

# Weitere
route('/kursschueler/:kurs/:schueler')(server.kursschueler)
route('/kursschueler/change', method = 'POST')(server.kursschuelerchange)
route('/lernnamen/:kurs')(server.lernnamen)
route('/lernnamen/:kurs/:sch')(server.lernn)
route('/csv/:datentyp')(server.csv)
Expand Down
41 changes: 32 additions & 9 deletions grademan/GmServer.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
'''

import os, datetime, random, threading, webbrowser, csv, zipfile
import markdown
from operator import attrgetter

from bottle import template, route, run, request, response, static_file, abort, redirect
Expand Down Expand Up @@ -110,8 +111,8 @@ def schuelerchange(self):
if bild: # (neues) Bild speichern (TODO: nur bis bottle 0.11 !)
open('%spictures/%s.jpg' % (self.gmdir, num), 'wb').write(bild.file.read())
self.db.save()
redirect('/schueler/all')
redirect('/schueler/%s' % num)

def schuelerview(self, num):
'''gibt einen Schüler zum betrachten zurück'''
if num == 'new':
Expand Down Expand Up @@ -139,11 +140,13 @@ def kurschange(self):
bemerkung = request.forms.get('bemerkung')
csvfile = request.files.get('csvfile')
picfile = request.files.get('picfile')
gewichtSchriftl = request.forms.get('gewichtSchriftl')
if self.db.kurs_in_db(num):
kur = self.db.kurs_in_db(num, True)
kur.name = name
kur.fach = fach
kur.bemerkung = bemerkung
kur.gewichtSchriftl = gewichtSchriftl
else:
oberstufe = bool(request.forms.get('oberstufe'))
kur = Kurs(num, name, fach, oberstufe, bemerkung)
Expand Down Expand Up @@ -261,12 +264,14 @@ def kursleistung(self, num):
pass
teile.append(teil)
leistung = []
schriftl = []
for sch in kur.schueler:
leistung.append(sch.leistung(teile, self.halbjahreswechsel, kur))
schriftl.append(sch.schriftl(teile, self.halbjahreswechsel, kur))
# nur Teilnahmen des Kurses, damit die Berechnungen schneller sinc:
return template('kurs_leistung', num = num, kur = kur,
stunden = stunden, teilntabelle = teilntabelle,
leistung = leistung)
return template('kurs_leistung', num = num, kur = kur,
stunden = stunden, teilntabelle = teilntabelle,
leistung = leistung, schriftl = schriftl)
abort(404, 'Kurs nicht gefunden! (evtl. gelöscht)')

def addschueler(self, num, schname = None):
Expand Down Expand Up @@ -556,9 +561,27 @@ def kursschueler(self, kurs, schueler):
if (teil.stunde.kurs == kurs) and (teil.schueler == schueler) and (teil.deleted == False):
teile.append(teil)
leistung = schueler.leistung(teile, self.halbjahreswechsel, kurs)
return template('kursschueler', teile = teile, schueler = schueler,
kurs = kurs, nsch = nsch, leistung = leistung)

schriftl = schueler.schriftl(teile, self.halbjahreswechsel, kurs)
return template('kursschueler', teile = teile, schueler = schueler,
kurs = kurs, nsch = nsch, leistung = leistung, schriftl = schriftl)

def kursschuelerchange(self):
'''Ändern von Schülerdetails in einem Kurs'''
tnum = request.forms.get('tnum')
schueler = request.forms.get('schueler')
try:
teilnahme = teilnahme = self.db.teilnahme_in_db(tnum, True)
except KeyError:
abort(404, 'Teilnahme nicht gefunden')
teilnahme.anwesenheit = bool(request.forms.get('anwesend'))
teilnahme.entschuldigt = bool(request.forms.get('entschuldigt'))
teilnahme.hausaufgabe = bool(request.forms.get('hausaufgabe'))
teilnahme.mitarbeit = request.forms.get('mitarbeit')
teilnahme.fachlich = request.forms.get('fachlich')
teilnahme.bemerkung = request.forms.get('bemerkung')
self.db.save()
return self.kursschueler(str(teilnahme.stunde.kurs.num),schueler)

def lernnamen(self, kurs):
'''Namen lernen, nach Kurs sortiert oder alle'''
if kurs == 'list':
Expand Down Expand Up @@ -679,7 +702,7 @@ def delstunde(self, num):

def run(self):
try:
run(host='localhost', port=self.port)
run(host='0.0.0.0', port=self.port)
except IOError:
print("ERROR STARTING SERVER: Port probably in use. Maybe GradeMan is already running. I didn't start GradeMan (again).")

Expand Down
2 changes: 1 addition & 1 deletion grademan/GradeMan-Android.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@

import os, webbrowser
from GmHandler import GmHandler
from ConfigParser import ConfigParser
from configparser import ConfigParser

# Bei Aufruf ueber Symlink ins Arbeitsverzeichnis wechseln
path = os.path.dirname(os.path.abspath(__file__))
Expand Down
1 change: 1 addition & 0 deletions grademan/GradeMan.py
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
from tkinter.ttk import *
from GmHandler import GmHandler
from configparser import ConfigParser
import markdown

# Für cxfreeze:
from encodings import aliases
Expand Down
17 changes: 13 additions & 4 deletions grademan/Kurs.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@

class Kurs(object):
'''Schulklasse in einem bestimmtem Fach'''
def __init__(self, num, name, fach, oberstufe = False, bemerkung = '', deleted=False, sitzplanBreite=0, sitzplanHoehe=0, sitzplanNachname=False):
def __init__(self, num, name, fach, oberstufe = False, bemerkung = '', deleted=False, sitzplanBreite=0, sitzplanHoehe=0, sitzplanNachname=False, gewichtSchriftl=0.5):
self.num = num
self.name = name
self.fach = fach
Expand All @@ -36,7 +36,8 @@ def __init__(self, num, name, fach, oberstufe = False, bemerkung = '', deleted=F
self.sitzplanHoehe = sitzplanHoehe
self.sitzplanNachname = sitzplanNachname
self.sitzplan = [['']]

self.gewichtSchriftl = gewichtSchriftl

def addschuler(self, schueler):
if schueler not in self.schueler:
self.schueler.append(schueler)
Expand All @@ -54,6 +55,14 @@ def bez(self):

def anzahl(self):
return len(self.schueler)


def gewS(self):
try:
r = float(self.gewichtSchriftl)
except:
return float(0.5)
else:
return r

def __str__(self):
return str(self.num)
return str(self.num)#+":"+self.name+" "+self.fach
45 changes: 44 additions & 1 deletion grademan/Schueler.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,50 @@ def kurse(self, kur):

def __str__(self):
return str(self.num)


def schriftl(self, teilnahmen, hjwechsel, kurs):
'''Ermittelt die Gesamt(durchschnitts)leistungen der Stunden'''
'''mit Faktor 0 in einem Kurs'''
'''Rückgabe: [hj1, hj2, end]'''
hj1 = hj2 = end = 0
hj1anz = hj2anz = 0
for teil in teilnahmen:
#print str(teil.schueler==self)+" "+str(teil.stunde.kurs==kurs)+" "+" "+str(teil.deleted==False)+" "+str(int(teil.stunde.faktor)==0)
if (teil.schueler == self) and (teil.stunde.kurs == kurs) and (teil.deleted == False) and (teil.stunde.faktor == '0'):
if (teil.fachlich != '-'):
if teil.stunde.datum < hjwechsel:
hj1 += int(teil.fachlich)
if (teil.mitarbeit != '-' and not teil.stunde.kurs.oberstufe):
if (int(teil.mitarbeit) > int(teil.fachlich)):
hj1 += 0.3
elif (int(teil.mitarbeit) < int(teil.fachlich)):
hj1 -= 0.3
hj1anz += 1
else:
hj2 += int(teil.fachlich)
if (teil.mitarbeit != '-' and not teil.stunde.kurs.oberstufe):
if (teil.mitarbeit > teil.fachlich):
hj2+=0.3
elif (teil.mitarbeit < teil.fachlich):
hj2-=0.3
hj2anz += 1
#print str(hj1)+"/"+str(hj1anz)+"="+str(hj1/hj1anz if hj1anz>0 else 1)
try:
hj1schnitt = round(float(hj1) / hj1anz, 1)
except:
hj1schnitt = '-'
try:
hj2schnitt = round(float(hj2) / hj2anz, 1)
except:
hj2schnitt = '-'
try:
end = (hj1schnitt+hj2schnitt)/2
except:
end = '-'
schriftl = [hj1schnitt, hj2schnitt, end]
print(str(hj1)+" "+str(hj1anz)+" "+str(hj2)+" "+str(schriftl))
return schriftl

def leistung(self, teilnahmen, hjwechsel, kurs):
'''Ermittelt die Gesamt(durchschnitts)leistungen in einem Kurs'''
'''Rückgabe: [fach1, mita1, anw1, ue1, ha1, fach2,...]'''
Expand Down
66 changes: 65 additions & 1 deletion grademan/Stunde.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,70 @@ def get_num_faktor():
def bez(self):
'''Gibt einen (nicht eindeutigen) Bezeichner für die Stunde an'''
return '%s %s' % (self.kurs.bez(), self.datum)


# Hilfsfunktion zur Übersetzung von Noten in Mitarbeitsmarker
def trma(self,wert):
try:
note = int(wert)
except ValueError:
note = wert
#print note, type(note), wert, type(wert)
if (self.get_num_faktor() > 0):
nmtab = {}
mntab = {}
if self.kurs.oberstufe:
nmtab = {
0: '---',
1: '--',
2: '--',
3: '--',
4: '-',
5: '-',
6: '-',
7: '*',
8: '*',
9: '*',
10: '+',
11: '+',
12: '+',
13: '++',
14: '++',
15: '+++'
}
mntab = {
'---': 0,
'--': 3,
'-': 6,
'*': 9,
'+': 11,
'++': 14,
'+++': 15
}
else:
nmtab = {
6: '---',
5: '--',
4: '-',
3: '*',
2: '+',
1: '++'
}
mntab = {
'---': 6,
'--': 5,
'-': 4,
'*': 3,
'+': 2,
'++': 1
}
if (type(note)==type(0)):
#print "returning "+nmtab.get(note, "!X!")
return nmtab.get(note, "!X!")
else:
#print "returning "+str(mntab.get(note, "-"))
return str(mntab.get(note,'-'))
else:
return(str(note))

def __str__(self):
return str(self.num)
Loading