From aa300044f620c943799beb212ebf9b2fffce836c Mon Sep 17 00:00:00 2001 From: darthsandmann Date: Wed, 14 Dec 2016 22:32:35 +0100 Subject: [PATCH] Feature Complete --- Praktikum2/ppm1/doc/documentation.md | 91 +++-- .../app/__pycache__/choice.cpython-35.pyc | Bin 967 -> 1431 bytes Praktikum2/ppm2/app/application.py.old | 332 ------------------ Praktikum2/ppm2/app/choice.py | 34 +- Praktikum2/ppm2/app/view.py.old | 52 --- Praktikum2/ppm2/data/Angebote/27.json | 12 +- Praktikum2/ppm2/data/Angebote/28.json | 13 + Praktikum2/ppm2/data/Angebote/30.json | 18 +- Praktikum2/ppm2/data/Angebote/last.json | 2 +- Praktikum2/ppm2/data/Studenten/last.json | 2 +- Praktikum2/ppm2/doc/PPM2.html | 212 +++++++++++ Praktikum2/ppm2/doc/PPM2.md | 121 +++++++ Praktikum2/ppm2/static/js/ppm.js | 77 +++- Praktikum2/ppm2/templates/detail.tpl | 2 +- Praktikum2/ppm2/templates/detailChoice.tpl | 48 +++ Praktikum2/ppm2/templates/index.tpl | 1 + Praktikum2/ppm2/templates/list.tpl | 6 +- Praktikum2/ppm2/templates/listChoice.tpl | 4 +- 18 files changed, 559 insertions(+), 468 deletions(-) delete mode 100644 Praktikum2/ppm2/app/application.py.old delete mode 100644 Praktikum2/ppm2/app/view.py.old create mode 100644 Praktikum2/ppm2/data/Angebote/28.json create mode 100644 Praktikum2/ppm2/doc/PPM2.html create mode 100644 Praktikum2/ppm2/doc/PPM2.md create mode 100644 Praktikum2/ppm2/templates/detailChoice.tpl diff --git a/Praktikum2/ppm1/doc/documentation.md b/Praktikum2/ppm1/doc/documentation.md index 27141f1..b3d2d51 100644 --- a/Praktikum2/ppm1/doc/documentation.md +++ b/Praktikum2/ppm1/doc/documentation.md @@ -1,36 +1,57 @@ -# Web-Praktikum Gruppe K -## Kai Wansart und Felix Hoster -### 16.11.2016 - -## Beschreibung der Lösung -### Aufgabe der Anwendung: -Die Praktikumsaufgabe war, eine Ünterstützung der Betreuung von Praxisphasen mit einer Web-Anwendung zu erstellen. Praxisphasen werden -von externen Partnern (Firmen) angeboten, Studenten können diese Angebote nutzen, wenn sie einen Lehrenden als Betreuer -finden - - #### Übersicht der fachlichen Funktion - - Datenpflege Studenten: Eine Liste mit allen erstellten Studenten (Name, Vorname, Matrikelnummer) - - Datenpflege Lehrende: Eine Übersicht mit allen Lehrenden (Name, Titel, Lehrgebiet) - - Datenpflege Firmenverzeichniss: Eine Liste mit einer kleinen Übersicht über einzelne Firmen (Schwerpunkt, Sitz, Name, Branche, Mitarbeiteranzahl) - - Datenpflege Praxisphase: Erhält man eine kurze Übersicht über Angebote für die Studenten (Firmenbetreuer, Beschreibung, Name, Voraussetzung, Firma) - - Auswahl Praxisphasen: Dort können die Studenten mit einem Professor sich eine Praxisphase aussuchen - - Auswertung Firma: Hier werden die Firmen bewertet, die ein Angebot für die Praxisphase bewertet - - Auswertung Praxisphasen nach Studenten: Hier sieht man die Bewertung der Studenten über die einzelnen Angebote - - Auswertung Praxisphase nach Betreuern: Hier sieht man die Bewertung der Praxisphasen - Betreuer - - -## Beschreibung des Servers -#### Zweck - -#### Aufbau (Bestandteile der Komponente) - -#### Zusammenwirken mit anderen Komponenten - -#### API (Programmierschnittstellen), die die Leistung der Komponente anbieten - -## Datenablage -Die Daten werden mittels der Kategorie abgespeichert, die als Variable behandelt wird. Mit dieser Variable wird die Datei immer wieder neu gespeichert, wenn etwas gelöscht bzw. geändert wird. Das Format der Datei ist eine JSON-Datei, die im Ordner 'Data' und der darauffolgenden Kategorie abgespeichert wird. - -## Konfiguration - +# Web-Praktikum Gruppe A +## Kai Wansart 921862 und Felix Hoster xxxxxx +### 15.12.2016 + +## Beschreibung der Lösung +### Aufgabe der Anwendung: +- Entwickeln und Umsetzen eines Praxisphasenmanagers (PPM). +- Schnittstelle für Firmen, Dozenten und Studenten +- Verwaltung der Daten, zB. Benutzerverwaltung und Angebotverwaltung + + + + #### Übersicht der fachlichen Funktion + - Datenpflege Studenten: + - Ausgabe Studenten im System + - Verwaltung bestehender Datensätze + - Erstellen neuer Datensätze + - Datenpflege Lehrende: + - Ausgabe Lehrenden im System + - Verwaltung bestehender Datensätze + - Erstellen neuer Datensätze + - Datenpflege Firmenverzeichnis: + - Ausgabe Firmen im System + - Verwaltung bestehender Datensätze + - Erstellen neuer Datensätze + - Datenpflege Praxisphase: + - Ausgabe Angebote Praxiphasenplätze im System + - Verwaltung bestehender Datensätze + - Erstellen neuer Datensätze + - Auswahl Praxisphasen: + - Schnittstelle für Studenten, um sich in Praxisphasenplatz einzuschreiben, mit Angabe von Zeitraum + - Auswertung Firma: + - Ausgabe aller Firmen mit den jeweiligen Studenten, die sich bei Ihnen zu einem Praxisphasenplatz eingeschrieben haben + - Auswertung Praxisphasen nach Studenten: + - Ausgabe aller Studenten mit Informationen, bei welcher Firma sie wann ihre Praxisphase machen / gemacht haben + - Auswertung Praxisphase nach Betreuern: + - Ausgabe aller Betreuer mit den jeweiligen Studenten, die sie betreuen. + +## Beschreibung des Servers +#### Zweck +- Firmen die Möglichkeit geben, Studenten Praxisphasenplätze anzubieten +- Studenten die Möglichkeit geben, Praxisphasenplätze auszuwählen +- Auswertungen anbieten + +#### Aufbau (Bestandteile der Komponente) +- + +#### Zusammenwirken mit anderen Komponenten + +#### API (Programmierschnittstellen), die die Leistung der Komponente anbieten + +## Datenablage +Die Daten werden mittels der Kategorie abgespeichert, die als Variable behandelt wird. Mit dieser Variable wird die Datei immer wieder neu gespeichert, wenn etwas gelöscht bzw. geändert wird. Das Format der Datei ist eine JSON-Datei, die im Ordner 'Data' und der darauffolgenden Kategorie abgespeichert wird. + +## Konfiguration + ## Durchführung und Ergebnis der geforderten Prüfungen \ No newline at end of file diff --git a/Praktikum2/ppm2/app/__pycache__/choice.cpython-35.pyc b/Praktikum2/ppm2/app/__pycache__/choice.cpython-35.pyc index dfc209f76067049e3382eb09940f67d8a330fbab..69bf1c2539893da23486aa776f659d6873ddc4b2 100644 GIT binary patch literal 1431 zcmZ8h&2HO95S}HMKT_nxKoS?a1W1rWc!>g^oxq8m_|QO3BL_}|76eVMV@ec7@2(u% zpn7p0qc6}yd+6irHK$(s06k@9Nf~aJn&Irs?CkKH8Evesb$|Wyr;mU50N>!o;wWz; zsaMD{{4pp1#@8}~F|&FH3I}E`j9p-RnF|?*ujs`=aJWLXM@L7I_cz9YVZ=MEU(tj@09j~FKAA>Q$M`!Z^E?#? zDZ^m2=U_GGZ4RmmSyEMl)aLNCx-elJ=Vh+r_%>ZnH-K|_r^)f@ z$~H_10$Lp;56LF$Vd|LUWR)+=0hTV*2oHm)1M)XOO>Gg{Y8@?B{UwL^x=FPYX91>X$=7^L#PoU@g)%{_G5)U5NnRKy&rD~e7a97C(sbU66Di6}$S9D6u?gOb zBzsvDhErP_FV|wGj91AVFW?h3FO8QiW|fLM5@!SqKg-1zxsIZ|NBhqF_*kI#XJy=} zxG>&XQY?hwC~uB^yVRmt+PHpJ$#6F***Jo*=4uw z6+Cv`($ptpyrO_cu1sbkj!id?XY*`P zklc&o(?wFWmOz|Wb0soK17|alk4d5_zrm4}i? n0>|CO>2Ll={Q1#Dq}ux3h-fdMKqlO3a(hAX74;WYf8G5KctIsw delta 370 zcmX|6%SyvQ6g_t)Gm)60C=|041j(j>x+_I$tJZ~9q)J7s&=;6?QJQp7B%zD?17#Na z0ses>;m(C1ev3PAOL6X;%b9!TFlS!YKWrzP$vB^{7q?$>?o1s4pu~uCbF=S019u8t zjk<5ozaP9pa1-~UI2g3TAnt^{_Asc1Tfh?gdhb)WW2M#QGQVOF<#kNI0WJc_0wgk!W-+ zthlv$#7iWKqdFR+0vhAxbVi`DLZ9uNi};JGX5Ph~`4#y!JJK9G+AxRm$j>r`$dD$7 xHp%01xw3qEaw?C*u+z&`Pp)geHb2$@?U+rqyS=cxQcG7wlButwEpw`_{s3xtL=FG| diff --git a/Praktikum2/ppm2/app/application.py.old b/Praktikum2/ppm2/app/application.py.old deleted file mode 100644 index e22162c..0000000 --- a/Praktikum2/ppm2/app/application.py.old +++ /dev/null @@ -1,332 +0,0 @@ -import json -import cherrypy -from app import database -from app import view - -#---------------------------------------------------------- -class Application_cl(object): -#---------------------------------------------------------- - exposed = True - - #---------------------------------------------------------- - def __init__(self): - #---------------------------------------------------------- - self.db_o = database.Database_cl() - self.view_o = view.View_cl() - - #---------------------------------------------------------- - def GET(self, cat=None, id=None): - #---------------------------------------------------------- - - return json.dumps(retVal) - - #---------------------------------------------------------- - def PUT(self, **data): - #---------------------------------------------------------- - - return json.dumps(retVal) - - #---------------------------------------------------------- - def POST(self, cat, id, **data_opl): - #---------------------------------------------------------- - - return json.dumps(retVal) - - #---------------------------------------------------------- - def DELETE(self, cat, id): - #---------------------------------------------------------- - - return json.dumps(retVal) - - #---------------------------------------------------------- - def default(self, *arguments, **kwargs): - #---------------------------------------------------------- - msg_s = "unbekannte Anforderung: " + \ - str(arguments) + \ - ' ' + \ - str(kwargs) - raise cherrypy.HTTPError(404, msg_s) - -# /* import cherrypy -# from .database import Database_cl -# from .view import View_cl -# import collections -# orderedDict = collections.OrderedDict() -# from collections import OrderedDict - -# #---------------------------------------------------------- -# class Application_cl(object): -# #---------------------------------------------------------- - -# #------------------------------------------------------- -# # Request Processing -# #------------------------------------------------------- - -# #------------------------------------------------------- -# def __init__(self): -# #------------------------------------------------------- -# # spezielle Initialisierung können hier eingetragen werden -# self.db = Database_cl() -# self.view = View_cl() -# @cherrypy.expose - -# #------------------------------------------------------- -# def index(self): -# #------------------------------------------------------- -# print("Index\n") -# return self.GenerateIndex() -# @cherrypy.expose - -# #------------------------------------------------------- -# def category(self, cat=None): -# #------------------------------------------------------- -# print("Category: ", cat, "\n") -# if(cat==None): -# return self.GenerateIndex() -# else: -# return self.GenerateList(cat) -# @cherrypy.expose - -# #------------------------------------------------------- -# def choice(self): -# #------------------------------------------------------- -# print("Choice \n") -# return self.GenerateListChoice() -# @cherrypy.expose - -# #------------------------------------------------------- -# def eval(self, cat): -# #------------------------------------------------------- -# print("Eval \n") -# self.db.CheckDates() -# return self.GenerateListEval(cat) -# @cherrypy.expose - -# #------------------------------------------------------- -# def detail(self, cat=None, id=None): -# #------------------------------------------------------- -# if(cat!=None): -# if(id!=None): -# print("Cat=", cat, " id=", id) -# return self.GenerateDetail(cat, id) -# else: -# print("ID=None Cat=", cat) -# return self.GenerateDetail(cat) -# else: -# return self.GenerateIndex() -# @cherrypy.expose - -# #------------------------------------------------------- -# def detailchoice(self, id): -# #------------------------------------------------------- -# print("id=", id) -# return self.GenerateDetailChoice(id) - -# @cherrypy.expose - -# #------------------------------------------------------- -# def save(self, cat=None, **data): -# #------------------------------------------------------- -# print("Save: ", cat) -# dataTmp = data -# return self.GenerateSave(dataTmp, cat) -# @cherrypy.expose - -# #------------------------------------------------------- -# def saveChoice(self, **data): -# #------------------------------------------------------- -# print("Save: Choice") -# dataTmp = data -# return self.GenerateSaveChoice(dataTmp) -# @cherrypy.expose - -# #------------------------------------------------------- -# def delete(self, cat=None, id=None): -# #------------------------------------------------------- -# print("Delete",cat,id) -# return self.GenerateDelete(cat, id) -# @cherrypy.expose - -# #------------------------------------------------------- -# def default(self, *arguments, **kwargs): -# #------------------------------------------------------- -# msg_s = "unbekannte Anforderung: " + \ -# str(arguments) + \ -# ''+ \ -# str(kwargs) -# raise cherrypy.HTTPError(404, msg_s) -# default.exposed= True - -# #------------------------------------------------------- -# # Functions -# #------------------------------------------------------- - -# #------------------------------------------------------- -# def GenerateIndex(self): -# #------------------------------------------------------- -# return self.view.CreateIndex() - -# #------------------------------------------------------- -# def GenerateList(self, category): -# #------------------------------------------------------- -# self.db.ReadAll() -# data = {} -# data['content'] = {} -# data['headings'] = {} -# data['category'] = category -# data['content'] = self.db.data[category] -# if(len(data['content']) != 0): -# print(len(data['content'])) -# contentFirst = list(data['content'].keys())[0] -# data['headings'] = list(data['content'][contentFirst].keys()) -# print(data) -# return self.view.CreateList(data) - -# #------------------------------------------------------- -# def GenerateListChoice(self): -# #------------------------------------------------------- -# self.db.ReadAll() -# data = {} -# data['content'] = {} -# offerings = self.db.data['Angebote'] -# for key, value in offerings.items(): -# for key2, value2 in value.items(): -# if(key2 == 'Status'): -# if(value2 == 'Angebot'): -# data['content'][key] = value - -# print(data) -# return self.view.CreateListChoice(data) - -# #------------------------------------------------------- -# def GenerateDetail(self, category, id=None): -# #------------------------------------------------------- -# self.db.ReadAll() -# data = {} -# data['category'] = category -# print("Detail",category,id) -# if(id != None): -# data['id'] = id -# data['content'] = self.db.ReadEntry(category, id) -# else: -# data['id'] = None -# data['content'] = self.db.GetDefault(category) -# print(data['content']) -# if(category == 'Angebote'): -# print("Angebote") -# data['Firmen'] = self.db.data['Firmen'] -# print(data, "\n") -# return self.view.CreateDetail(data) - -# #------------------------------------------------------- -# def GenerateDetailChoice(self, id): -# #------------------------------------------------------- -# self.db.ReadAll() -# data = {} -# data['id'] = id -# data = self.db.data['Angebote'][id] -# data['Studenten'] = self.db.data['Studenten'] -# data['Lehrender'] = self.db.data['Lehrender'] -# print(data, "\n") -# return self.view.CreateDetailChoice(data) - -# #------------------------------------------------------- -# def GenerateListEval(self, cat): -# #------------------------------------------------------- -# self.db.ReadAll() -# data = {} -# Studenten = self.db.data['Studenten'] -# Lehrender = self.db.data['Lehrender'] -# Firmen = self.db.data['Firmen'] -# Angebote = self.db.data['Angebote'] - -# data['category'] = cat -# if(cat == 'Firmen'): -# for keyFirma, valueFirma in sorted(Firmen.items()): -# data[valueFirma['Name']] = {} -# data[valueFirma['Name']]['Name'] = valueFirma['Name'] -# data[valueFirma['Name']]['Angebote'] = {} -# data[valueFirma['Name']]['Angebote']['Angebot'] = {} -# data[valueFirma['Name']]['Angebote']['aktuell'] = {} -# data[valueFirma['Name']]['Angebote']['abgeschlossen'] = {} -# for keyAngebote, valueAngebote in Angebote.items(): -# if(valueAngebote['Firma'] == valueFirma['Name']): -# data[valueFirma['Name']]['Angebote'][valueAngebote['Status']][valueAngebote['Name']] = {} -# data[valueFirma['Name']]['Angebote'][valueAngebote['Status']][valueAngebote['Name']]['Name'] = valueAngebote['Name'] -# if(valueAngebote['Student'] != ''): -# data[valueFirma['Name']]['Angebote'][valueAngebote['Status']][valueAngebote['Name']]['Student'] = Studenten[valueAngebote['Student']]['Name'] -# else: -# data[valueFirma['Name']]['Angebote'][valueAngebote['Status']][valueAngebote['Name']]['Student'] = '' -# if(valueAngebote['Lehrender'] != ''): -# data[valueFirma['Name']]['Angebote'][valueAngebote['Status']][valueAngebote['Name']]['Lehrender'] = Lehrender[valueAngebote['Lehrender']]['Name'] -# else: -# data[valueFirma['Name']]['Angebote'][valueAngebote['Status']][valueAngebote['Name']]['Lehrender'] = '' -# data[valueFirma['Name']]['Angebote'][valueAngebote['Status']][valueAngebote['Name']]['ZeitraumVon'] = valueAngebote['ZeitraumVon'] -# data[valueFirma['Name']]['Angebote'][valueAngebote['Status']][valueAngebote['Name']]['ZeitraumBis'] = valueAngebote['ZeitraumBis'] -# print(data) -# return self.view.CreateListEval(data) -# elif(cat == 'Studenten'): -# for keyStudent, valueStudent in Studenten.items(): -# data[valueStudent['Name']] = {} -# data[valueStudent['Name']]['Angebote'] = {} -# data[valueStudent['Name']]['Angebote']['Angebot'] = {} -# data[valueStudent['Name']]['Angebote']['aktuell'] = {} -# data[valueStudent['Name']]['Angebote']['abgeschlossen'] = {} -# for keyAngebot, valueAngebot in Angebote.items(): -# if(valueAngebot['Student'] == valueStudent['id']): -# data[valueStudent['Name']]['Angebote'][valueAngebot['Status']][keyAngebot] = {} -# data[valueStudent['Name']]['Angebote'][valueAngebot['Status']][keyAngebot]['Lehrender'] = Lehrender[valueAngebot['Lehrender']]['Name'] -# data[valueStudent['Name']]['Angebote'][valueAngebot['Status']][keyAngebot]['Status'] = valueAngebot['Status'] -# data[valueStudent['Name']]['Angebote'][valueAngebot['Status']][keyAngebot]['Praxisphase'] = valueAngebot['Name'] -# data[valueStudent['Name']]['Angebote'][valueAngebot['Status']][keyAngebot]['Firma'] = valueAngebot['Firma'] -# data[valueStudent['Name']]['Angebote'][valueAngebot['Status']][keyAngebot]['ZeitraumVon'] = valueAngebot['ZeitraumVon'] -# data[valueStudent['Name']]['Angebote'][valueAngebot['Status']][keyAngebot]['ZeitraumBis'] = valueAngebot['ZeitraumBis'] -# elif(cat == 'Lehrender'): -# for keyLehrende, valueLehrende in Lehrender.items(): -# data[valueLehrende['Name']] = {} -# data[valueLehrende['Name']]['Angebote'] = {} -# data[valueLehrende['Name']]['Angebote']['Angebot'] = {} -# data[valueLehrende['Name']]['Angebote']['aktuell'] = {} -# data[valueLehrende['Name']]['Angebote']['abgeschlossen'] = {} -# for keyAngebot, valueAngebot in Angebote.items(): -# if(valueAngebot['Lehrender'] == valueLehrende['id']): -# data[valueLehrende['Name']]['Angebote'][valueAngebot['Status']][keyAngebot] = {} -# data[valueLehrende['Name']]['Angebote'][valueAngebot['Status']][keyAngebot]['Student'] = Studenten[valueAngebot['Student']]['Name'] -# data[valueLehrende['Name']]['Angebote'][valueAngebot['Status']][keyAngebot]['Status'] = valueAngebot['Status'] -# data[valueLehrende['Name']]['Angebote'][valueAngebot['Status']][keyAngebot]['Praxisphase'] = valueAngebot['Name'] -# data[valueLehrende['Name']]['Angebote'][valueAngebot['Status']][keyAngebot]['Firma'] = valueAngebot['Firma'] -# data[valueLehrende['Name']]['Angebote'][valueAngebot['Status']][keyAngebot]['ZeitraumVon'] = valueAngebot['ZeitraumVon'] -# data[valueLehrende['Name']]['Angebote'][valueAngebot['Status']][keyAngebot]['ZeitraumBis'] = valueAngebot['ZeitraumBis'] - -# return self.view.CreateListEval(data) - - -# #------------------------------------------------------- -# def GenerateSave(self, dataTmp, category): -# #------------------------------------------------------- -# if(category == None): -# return self.view.CreateIndex() -# else: -# self.db.Save(dataTmp, category) -# return self.GenerateList(category) - -# #------------------------------------------------------- -# def GenerateSaveChoice(self, dataTmp): -# #------------------------------------------------------- -# if(dataTmp['Student'] != ''): -# angebote = self.db.CheckOfferings(dataTmp['Student']) -# print(angebote) -# if(angebote == 0): -# print("Save") -# self.db.Save(dataTmp, 'Angebote') -# return self.GenerateListChoice() - -# #------------------------------------------------------- -# def GenerateDelete(self, category, id): -# #------------------------------------------------------- -# if(category == None or id == None): -# return self.view.CreateIndex() -# else: -# self.db.Delete(category, id) -# return self.GenerateList(category) -# #EOF \ No newline at end of file diff --git a/Praktikum2/ppm2/app/choice.py b/Praktikum2/ppm2/app/choice.py index cbe5e65..846d195 100644 --- a/Praktikum2/ppm2/app/choice.py +++ b/Praktikum2/ppm2/app/choice.py @@ -16,16 +16,34 @@ class Choice(object): self.db = database.Database() #------------------------------------------------------- - def GET(self): + def GET(self, view, id=None): #------------------------------------------------------- self.db.ReadAll() data = {} - data['content'] = {} - offerings = self.db.data['Angebote'] - for key, value in offerings.items(): - for key2, value2 in value.items(): - if(key2 == 'Status'): - if(value2 == 'Angebot'): - data['content'][key] = value + if(view == "List"): + data['content'] = {} + offerings = self.db.data['Angebote'] + for key, value in offerings.items(): + for key2, value2 in value.items(): + if(key2 == 'Status'): + if(value2 == 'Angebot'): + data['content'][key] = value + elif(view == "Detail"): + data['id'] = id + data = self.db.data['Angebote'][id] + data['Studenten'] = self.db.data['Studenten'] + data['Lehrender'] = self.db.data['Lehrender'] print(data) return json.dumps(data) + + #------------------------------------------------------- + def POST(self, **data): + #------------------------------------------------------- + if(data['Student'] != ''): + angebote = self.db.CheckOfferings(data['Student']) + print(angebote) + if(angebote == 0): + print("Save") + self.db.Save(data, 'Angebote') + print(data) + return self.GET("List") \ No newline at end of file diff --git a/Praktikum2/ppm2/app/view.py.old b/Praktikum2/ppm2/app/view.py.old deleted file mode 100644 index 636a61f..0000000 --- a/Praktikum2/ppm2/app/view.py.old +++ /dev/null @@ -1,52 +0,0 @@ -# import os.path -# from mako.template import Template -# from mako.lookup import TemplateLookup - -# #---------------------------------------------------------- -# class View_cl(object): -# #---------------------------------------------------------- - -# #------------------------------------------------------- -# def __init__(self): -# #------------------------------------------------------- -# self.path = 'templates' -# self.lookup = TemplateLookup(directories=['/']) - -# #------------------------------------------------------- -# def Create(self, template, data): -# #------------------------------------------------------- -# print("CreateView\n") -# template = Template(filename=os.path.join(self.path, template), output_encoding='utf-8', lookup=self.lookup) -# return template.render(data = data) - -# #------------------------------------------------------- -# def CreateIndex(self): -# #------------------------------------------------------- -# print("CreateIndex\n") -# data = None -# return self.Create('index.tpl', data) - -# #------------------------------------------------------- -# def CreateList(self, data): -# #------------------------------------------------------- -# return self.Create('list.tpl', data) - -# #------------------------------------------------------- -# def CreateListChoice(self, data): -# #------------------------------------------------------- -# return self.Create('listChoice.tpl', data) - -# #------------------------------------------------------- -# def CreateListEval(self, data): -# #------------------------------------------------------- -# return self.Create('listEval.tpl', data) - -# #------------------------------------------------------- -# def CreateDetail(self, data): -# #------------------------------------------------------- -# return self.Create('detail.tpl', data) - -# #------------------------------------------------------- -# def CreateDetailChoice(self, data): -# #------------------------------------------------------- -# return self.Create('detailChoice.tpl', data) \ No newline at end of file diff --git a/Praktikum2/ppm2/data/Angebote/27.json b/Praktikum2/ppm2/data/Angebote/27.json index 8e35063..f4a7add 100644 --- a/Praktikum2/ppm2/data/Angebote/27.json +++ b/Praktikum2/ppm2/data/Angebote/27.json @@ -1,13 +1,13 @@ { "ZeitraumBis": "02.02.2003", - "Firma": "Apple", - "ZeitraumVon": "02.02.2002", - "Lehrender": "5", - "id": "27", "Status": "abgeschlossen", + "Name": "Angebot Apple 2", + "ZeitraumVon": "02.02.2002", "Student": "11", - "Beschreibung": "Praxisphase Apple", + "Lehrender": "5", + "Firma": "Apple", "Firmenbetreuer": "Horst", "Voraussetzungen": "Keine", - "Name": "Angebot Apple 2" + "id": "27", + "Beschreibung": "Praxisphase Apple" } \ No newline at end of file diff --git a/Praktikum2/ppm2/data/Angebote/28.json b/Praktikum2/ppm2/data/Angebote/28.json new file mode 100644 index 0000000..5c850ab --- /dev/null +++ b/Praktikum2/ppm2/data/Angebote/28.json @@ -0,0 +1,13 @@ +{ + "ZeitraumBis": "2.2.2001", + "Status": "abgeschlossen", + "Name": "testa", + "ZeitraumVon": "1.1.2000", + "Student": "13", + "Lehrender": "6", + "Firma": "Apple", + "Firmenbetreuer": "testa", + "Voraussetzungen": "a", + "id": "28", + "Beschreibung": "testa" +} \ No newline at end of file diff --git a/Praktikum2/ppm2/data/Angebote/30.json b/Praktikum2/ppm2/data/Angebote/30.json index 31c0e32..1fae61e 100644 --- a/Praktikum2/ppm2/data/Angebote/30.json +++ b/Praktikum2/ppm2/data/Angebote/30.json @@ -1,13 +1,13 @@ { - "ZeitraumBis": "", - "Firmenbetreuer": "firmenbetreuer", - "id": "30", - "ZeitraumVon": "", + "ZeitraumBis": "02.02.2000", + "Status": "abgeschlossen", "Name": "name", - "Beschreibung": "beschreibung", - "Student": "", - "Lehrender": "", - "Status": "Angebot", + "ZeitraumVon": "01.01.2000", + "Student": "12", + "Lehrender": "6", + "Firma": "IBM", + "Firmenbetreuer": "firmenbetreuer", "Voraussetzungen": "voraussetzungen", - "Firma": "IBM" + "id": "30", + "Beschreibung": "beschreibung" } \ No newline at end of file diff --git a/Praktikum2/ppm2/data/Angebote/last.json b/Praktikum2/ppm2/data/Angebote/last.json index a5c750f..368f89c 100644 --- a/Praktikum2/ppm2/data/Angebote/last.json +++ b/Praktikum2/ppm2/data/Angebote/last.json @@ -1 +1 @@ -27 \ No newline at end of file +28 \ No newline at end of file diff --git a/Praktikum2/ppm2/data/Studenten/last.json b/Praktikum2/ppm2/data/Studenten/last.json index 3f10ffe..8e2afd3 100644 --- a/Praktikum2/ppm2/data/Studenten/last.json +++ b/Praktikum2/ppm2/data/Studenten/last.json @@ -1 +1 @@ -15 \ No newline at end of file +17 \ No newline at end of file diff --git a/Praktikum2/ppm2/doc/PPM2.html b/Praktikum2/ppm2/doc/PPM2.html new file mode 100644 index 0000000..3f352e2 --- /dev/null +++ b/Praktikum2/ppm2/doc/PPM2.html @@ -0,0 +1,212 @@ + + + + + + + + + + + +

Web-Praktikum

+

Termin 3

+
    +
  • Gruppe A +
      +
    • Kai Wansart: 921862
    • +
    • Felix Hoster: xxxxxx
    • +
  • +
  • 15.12.2016
  • +
+

Beschreibung der Lösung

+

Aufgabe der Anwendung

+
    +
  • Entwickeln und Umsetzen eines Praxisphasenmanagers (PPM).
  • +
  • Schnittstelle für Firmen, Dozenten und Studenten
  • +
  • Verwaltung der Daten, zB. Benutzerverwaltung und Angebotverwaltung
  • +
+

Übersicht der fachlichen Funktionen

+
    +
  • Datenpflege Studenten: +
      +
    • Ausgabe Studenten im System
    • +
    • Verwaltung bestehender Datensätze
    • +
    • Erstellen neuer Datensätze
    • +
  • +
  • Datenpflege Lehrende: +
      +
    • Ausgabe Lehrenden im System
    • +
    • Verwaltung bestehender Datensätze
    • +
    • Erstellen neuer Datensätze
    • +
  • +
  • Datenpflege Firmenverzeichnis: +
      +
    • Ausgabe Firmen im System
    • +
    • Verwaltung bestehender Datensätze
    • +
    • Erstellen neuer Datensätze
    • +
  • +
  • Datenpflege Praxisphase: +
      +
    • Ausgabe Angebote Praxiphasenplätze im System
    • +
    • Verwaltung bestehender Datensätze
    • +
    • Erstellen neuer Datensätze
    • +
  • +
  • Auswahl Praxisphasen: +
      +
    • Schnittstelle für Studenten, um sich in Praxisphasenplatz einzuschreiben, mit Angabe von Zeitraum
    • +
  • +
  • Auswertung Firma: +
      +
    • Ausgabe aller Firmen mit den jeweiligen Studenten, die sich bei Ihnen zu einem Praxisphasenplatz eingeschrieben haben
    • +
  • +
  • Auswertung Praxisphasen nach Studenten: +
      +
    • Ausgabe aller Studenten mit Informationen, bei welcher Firma sie wann ihre Praxisphase machen / gemacht haben
    • +
  • +
  • Auswertung Praxisphase nach Betreuern: +
      +
    • Ausgabe aller Betreuer mit den jeweiligen Studenten, die sie betreuen.
    • +
  • +
+

Beschreibung des Client

+
    +
  • Basis: Html Vorlage
  • +
  • Dynamischer Inhalt via Javascript: +
      +
    • Lädt Inhalte im JSON Format von Server
    • +
    • Rendert Inhalte in Templates
    • +
    • Fügt gerenderte Inhalte in HTML (DOM) ein
    • +
  • +
+

Beschreibung der Komponenten des Servers

+
    +
  • Server: Object-Dispatching --> Weiterleitung der Anfragen an jeweilige Funktionen +
      +
    • category +
        +
      • Zweck +
          +
        • Alle Kategorien (Studenten, Lehrende, Firmen, Angebote)
        • +
        • Rückgabe der Inhalte
        • +
        • Verwaltung der Daten
        • +
      • +
      • Zusammenwirken mit anderen Komponenten +
          +
        • Zugriff auf Datenbank um Daten zu verwalten
        • +
      • +
      • Aufbau +
          +
        • GET: Rückgabe
        • +
        • POST: Eingabe
        • +
        • DELETE: Löschen
        • +
      • +
      • API +
          +
        • GET ( Kategorie, Ansicht, ID)
        • +
        • POST ( Kategorie, Daten )
        • +
        • DELETE ( Kategorie, ID )
        • +
      • +
    • +
    • choice +
        +
      • Zweck +
          +
        • Rückgabe der bestehenden Angebote
        • +
        • Verwaltung der Daten +
            +
          • Annahme mit Datum
          • +
        • +
      • +
      • Zusammenwirken mit anderen Komponenten +
          +
        • Zugriff auf Datenbank um Daten zu verwalten
        • +
      • +
      • Aufbau +
          +
        • GET: Rückgabe
        • +
        • POST: Eingabe
        • +
      • +
      • API +
          +
        • GET ( Ansicht, ID )
        • +
        • POST ( Daten )
        • +
      • +
    • +
    • eval +
        +
      • Zweck +
          +
        • Auswertung
        • +
        • Rückgabe der Auswertungen
        • +
      • +
      • Zusammenwirken mit anderen Komponenten +
          +
        • Zugriff auf Datenbank um Daten zu verwalten
        • +
      • +
      • Aufbau +
          +
        • GET: Rückgabe und Auswertung
        • +
      • +
      • API +
          +
        • GET ( Kategorie )
        • +
      • +
    • +
    • database +
        +
      • Zweck -Verwaltung - auslesen - bearbeiten - speichern - löschen
      • +
      • Zusammenwirken mit anderen Komponenten +
          +
        • category, choice, eval greifen auf Datenbank zu
        • +
      • +
    • +
    • template +
        +
      • Zweck +
          +
        • Einlesen aller Templates
        • +
        • Rückgabe aller Templates
        • +
      • +
      • Aufbau +
          +
        • GET: Rückgabe aller Templates
        • +
      • +
      • API +
          +
        • GET ()
        • +
      • +
    • +
  • +
+

Datenablage

+
    +
  • Die Daten werden mittels JSON abgespeichert und ausgelesen
  • +
  • Die Datensätze sind aufgeteilt in die Unterordner: +
      +
    • Angebote
    • +
    • Firmen
    • +
    • Lehrender
    • +
    • Studenten
    • +
  • +
  • Es wird jeweils abgespeichert, welche ID der zuletzt hinzugefügte Eintrag hat, um den nächsten mit inkrementierter ID abspeichern zu können
  • +
+

Konfiguration

+
    +
  • Python +
      +
    • Erweiterungen: +
        +
      • JSON
      • +
      • CherryPy
      • +
    • +
  • +
  • Webbrowser +
      +
    • Javascript fähig
    • +
  • +
+ + diff --git a/Praktikum2/ppm2/doc/PPM2.md b/Praktikum2/ppm2/doc/PPM2.md new file mode 100644 index 0000000..ec0ad65 --- /dev/null +++ b/Praktikum2/ppm2/doc/PPM2.md @@ -0,0 +1,121 @@ +# Web-Praktikum +## Termin 3 +- Gruppe A + - Kai Wansart: 921862 + - Felix Hoster: xxxxxx +- 15.12.2016 + +## Beschreibung der Lösung + +### Aufgabe der Anwendung +- Entwickeln und Umsetzen eines Praxisphasenmanagers (PPM). +- Schnittstelle für Firmen, Dozenten und Studenten +- Verwaltung der Daten, zB. Benutzerverwaltung und Angebotverwaltung + +### Übersicht der fachlichen Funktionen + - Datenpflege Studenten: + - Ausgabe Studenten im System + - Verwaltung bestehender Datensätze + - Erstellen neuer Datensätze + - Datenpflege Lehrende: + - Ausgabe Lehrenden im System + - Verwaltung bestehender Datensätze + - Erstellen neuer Datensätze + - Datenpflege Firmenverzeichnis: + - Ausgabe Firmen im System + - Verwaltung bestehender Datensätze + - Erstellen neuer Datensätze + - Datenpflege Praxisphase: + - Ausgabe Angebote Praxiphasenplätze im System + - Verwaltung bestehender Datensätze + - Erstellen neuer Datensätze + - Auswahl Praxisphasen: + - Schnittstelle für Studenten, um sich in Praxisphasenplatz einzuschreiben, mit Angabe von Zeitraum + - Auswertung Firma: + - Ausgabe aller Firmen mit den jeweiligen Studenten, die sich bei Ihnen zu einem Praxisphasenplatz eingeschrieben haben + - Auswertung Praxisphasen nach Studenten: + - Ausgabe aller Studenten mit Informationen, bei welcher Firma sie wann ihre Praxisphase machen / gemacht haben + - Auswertung Praxisphase nach Betreuern: + - Ausgabe aller Betreuer mit den jeweiligen Studenten, die sie betreuen. + +## Beschreibung des Client +- Basis: Html Vorlage +- Dynamischer Inhalt via Javascript: + - Lädt Inhalte im JSON Format von Server + - Rendert Inhalte in Templates + - Fügt gerenderte Inhalte in HTML (DOM) ein + +## Beschreibung der Komponenten des Servers +- Server: Object-Dispatching --> Weiterleitung der Anfragen an jeweilige Funktionen + - category + - Zweck + - Alle Kategorien (Studenten, Lehrende, Firmen, Angebote) + - Rückgabe der Inhalte + - Verwaltung der Daten + - Zusammenwirken mit anderen Komponenten + - Zugriff auf Datenbank um Daten zu verwalten + - Aufbau + - GET: Rückgabe + - POST: Eingabe + - DELETE: Löschen + - API + - GET ( Kategorie, Ansicht, ID) + - POST ( Kategorie, Daten ) + - DELETE ( Kategorie, ID ) + - choice + - Zweck + - Rückgabe der bestehenden Angebote + - Verwaltung der Daten + - Annahme mit Datum + - Zusammenwirken mit anderen Komponenten + - Zugriff auf Datenbank um Daten zu verwalten + - Aufbau + - GET: Rückgabe + - POST: Eingabe + - API + - GET ( Ansicht, ID ) + - POST ( Daten ) + - eval + - Zweck + - Auswertung + - Rückgabe der Auswertungen + - Zusammenwirken mit anderen Komponenten + - Zugriff auf Datenbank um Daten zu verwalten + - Aufbau + - GET: Rückgabe und Auswertung + - API + - GET ( Kategorie ) + - database + - Zweck + -Verwaltung + - auslesen + - bearbeiten + - speichern + - löschen + - Zusammenwirken mit anderen Komponenten + - category, choice, eval greifen auf Datenbank zu + - template + - Zweck + - Einlesen aller Templates + - Rückgabe aller Templates + - Aufbau + - GET: Rückgabe aller Templates + - API + - GET () + +## Datenablage +- Die Daten werden mittels JSON abgespeichert und ausgelesen +- Die Datensätze sind aufgeteilt in die Unterordner: + - Angebote + - Firmen + - Lehrender + - Studenten +- Es wird jeweils abgespeichert, welche ID der zuletzt hinzugefügte Eintrag hat, um den nächsten mit inkrementierter ID abspeichern zu können + +## Konfiguration +- Python + - Erweiterungen: + - JSON + - CherryPy +- Webbrowser + - Javascript fähig diff --git a/Praktikum2/ppm2/static/js/ppm.js b/Praktikum2/ppm2/static/js/ppm.js index 0049a30..2fc852c 100644 --- a/Praktikum2/ppm2/static/js/ppm.js +++ b/Praktikum2/ppm2/static/js/ppm.js @@ -59,6 +59,11 @@ class PPM this.LoadContent('/category/?cat=Firmen&view=List', 'list.tpl'); break + + case 'categoryAngebote': + + this.LoadContent('/category/?cat=Angebote&view=List', 'list.tpl'); + break case 'choice': @@ -80,60 +85,84 @@ class PPM this.LoadContent('/eval/?cat=Firmen', 'listEval.tpl'); break - case 'NewStudenten': + case 'newStudenten': console.log("NewStudenten"); this.LoadContent('/category/?cat=Studenten&view=Detail', 'detail.tpl'); break - case 'NewLehrender': + case 'newLehrender': console.log("NewLehrender"); - this.LoadContent('/category/?cat=Lehrenden&view=Detail', 'detail.tpl'); + this.LoadContent('/category/?cat=Lehrender&view=Detail', 'detail.tpl'); break - case 'NewFirmen': + case 'newFirmen': console.log("NewFirmen"); this.LoadContent('/category/?cat=Firmen&view=Detail', 'detail.tpl'); break - case 'ModifyStudenten': - console.log("ModifyStudenten: ", selectedId); + case 'newAngebote': + + console.log("NewAngebote"); + this.LoadContent('/category/?cat=Angebote&view=Detail', 'detail.tpl'); + break + + case 'modifyStudenten': + console.log("modifyStudenten: ", selectedId); this.LoadContent('/category/?cat=Studenten&view=Detail&id='+ selectedId, 'detail.tpl'); break - case 'ModifyLehrender': + case 'modifyLehrender': - console.log("ModifyLehrender", selectedId); + console.log("modifyLehrender", selectedId); this.LoadContent('/category/?cat=Lehrender&view=Detail&id='+ selectedId, 'detail.tpl'); break - case 'ModifyFirmen': + case 'modifyFirmen': - console.log("ModifyFirmen", selectedId); + console.log("modifyFirmen", selectedId); this.LoadContent('/category/?cat=Firmen&view=Detail&id='+ selectedId, 'detail.tpl'); break - case 'DeleteStudenten': + case 'modifyAngebote': - console.log("DeleteStudenten", selectedId); + console.log("modifyAngebote", selectedId); + this.LoadContent('/category/?cat=Angebote&view=Detail&id='+ selectedId, 'detail.tpl'); + break + + case 'choiceAnnehmen': + + console.log("choiceAnnehmen", selectedId); + this.LoadContent('/choice/?view=Detail&id='+ selectedId, 'detailChoice.tpl'); + break + + case 'choiceNeu': + + console.log("choiceNeu"); + this.LoadContent('/choice/?view=Detail', 'detailChoice.tpl'); + break + + case 'deleteStudenten': + + console.log("deleteStudenten", selectedId); if (confirm("Soll der Eintrag wirklich geloescht werden?")) { console.log("DELETE"); this.DeleteContent('/category/?cat=Studenten&id='+selectedId, 'categoryStudenten'); } break - case 'DeleteLehrender': + case 'deleteLehrender': - console.log("DeleteLehrender", selectedId); + console.log("deleteLehrender", selectedId); if (confirm("Soll der Eintrag wirklich geloescht werden?")) { console.log("DELETE"); this.DeleteContent('/category/?cat=Lehrender&id='+selectedId, 'categoryLehrender'); } break - case 'DeleteFirmen': + case 'deleteFirmen': console.log("DeleteFirmen", selectedId); if (confirm("Soll der Eintrag wirklich geloescht werden?")) { @@ -142,24 +171,36 @@ class PPM } break - case 'SaveCategoryStudenten': + case 'saveCategoryStudenten': var data = $("#idForm").serialize(); this.SaveContent('/category/?cat=Studenten&'+data, 'categoryStudenten'); break - case 'SaveCategoryLehrende': + case 'saveCategoryLehrende': var data = $("#idForm").serialize(); this.SaveContent('/category/?cat=Lehrender&'+data, 'categoryLehrender'); break - case 'SaveCategoryFirmen': + case 'saveCategoryFirmen': var data = $("#idForm").serialize(); this.SaveContent('/category/?cat=Firmen&'+data, 'categoryFirmen'); break + case 'saveCategoryAngebote': + + var data = $("#idForm").serialize(); + this.SaveContent('/category/?cat=Angebote&'+data, 'categoryAngebote'); + break + + case 'saveChoice': + + var data = $("#idForm").serialize(); + this.SaveContent('/choice/?'+data, 'choice'); + break + default: alert ('[PPM] Unbekannte Anfrage: ' + message); diff --git a/Praktikum2/ppm2/templates/detail.tpl b/Praktikum2/ppm2/templates/detail.tpl index e1cc601..814bc80 100644 --- a/Praktikum2/ppm2/templates/detail.tpl +++ b/Praktikum2/ppm2/templates/detail.tpl @@ -52,7 +52,7 @@ \ No newline at end of file diff --git a/Praktikum2/ppm2/templates/detailChoice.tpl b/Praktikum2/ppm2/templates/detailChoice.tpl new file mode 100644 index 0000000..4fa7ac7 --- /dev/null +++ b/Praktikum2/ppm2/templates/detailChoice.tpl @@ -0,0 +1,48 @@ +
+

+ Praxisphasenangebots Auswahl +

+
+ + + + + + + + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+
\ No newline at end of file diff --git a/Praktikum2/ppm2/templates/index.tpl b/Praktikum2/ppm2/templates/index.tpl index 28084d1..a0ceaff 100644 --- a/Praktikum2/ppm2/templates/index.tpl +++ b/Praktikum2/ppm2/templates/index.tpl @@ -4,6 +4,7 @@
  • Datenpflege: Studenten
  • Datenpflege: Lehrender
  • Datenpflege: Firmenverzeichnis
  • +
  • Datenpflege: Angebote
  • Auswahl: Praxisphasen
  • Auswertung: Studenten
  • Auswertung: Lehrenden
  • diff --git a/Praktikum2/ppm2/templates/list.tpl b/Praktikum2/ppm2/templates/list.tpl index 0e53300..f3d4da4 100644 --- a/Praktikum2/ppm2/templates/list.tpl +++ b/Praktikum2/ppm2/templates/list.tpl @@ -41,7 +41,7 @@ \ No newline at end of file diff --git a/Praktikum2/ppm2/templates/listChoice.tpl b/Praktikum2/ppm2/templates/listChoice.tpl index 2a0020b..9632213 100644 --- a/Praktikum2/ppm2/templates/listChoice.tpl +++ b/Praktikum2/ppm2/templates/listChoice.tpl @@ -13,7 +13,7 @@ @if context['content']!= 'None'@ @for entries in context['content']@ - + #context['content'][entries]['Name']# #context['content'][entries]['Firma']# #context['content'][entries]['Beschreibung']# @@ -29,5 +29,5 @@ \ No newline at end of file