def processForm(self, REQUEST, RESPONSE): jahr = check_int_not_empty(self.form, 'jahr', "Fehler im Jahr", '') anzeige = h.FieldsetInputTable( legend='Jahr wählen', daten=[[h.SelectItem(label='Ab Jahr', name='jahr', class_='listbox45', tip='Gruppenbeginn ab dem gewählten Jahr', options=self.for_jahre(sel=jahr, erster_eintrag='Alle'), ), h.Button(value="Anzeigen", name='op', tip="Gruppen anzeigen", type='submit', n_col=2, ), ], ], ) mitarbeiter = welche = stelle = None gruppe_list = self.beratungen_gruppe(ab_jahr=jahr, mitarbeiter=mitarbeiter, welche=welche, stelle=stelle) headers=('Gruppennr.', 'Mitarbeiter', 'Name', 'Thema', 'Art', 'Teilnehmer', '-zahl', 'Beginn', 'Ende') daten = self.get_table_daten(gruppe_list, (('gn', 'grkarte?gruppeid=%(id)s'), 'mitarbeiternamen', 'name', 'thema', 'grtyp__name', 'teiln__name', 'tzahl', 'bg', 'e', ), ) report = h.FieldsetDataTable( legend='Gruppenüberblick', headers=headers, daten=daten, ) res = h.FormPage( title='Gruppenüberblick', name='gruppenue',action="abfr8",method="post", breadcrumbs = (('Hauptmenü', 'menu'), ), hidden=(), rows=(self.get_auswertungs_menu(), anzeige, report, ), ) return res.display()
def processForm(self, REQUEST, RESPONSE): jahr = check_int_not_empty(self.form, "jahr", "Fehler im Jahr", "") anzeige = h.FieldsetInputTable( legend="Jahr wählen", daten=[ [ h.SelectItem( label="Ab Jahr", name="jahr", class_="listbox45", tip="Gruppenbeginn ab dem gewählten Jahr", options=self.for_jahre(sel=jahr, erster_eintrag="Alle"), ), h.Button(value="Anzeigen", name="op", tip="Gruppen anzeigen", type="submit", n_col=2), ] ], ) mitarbeiter = welche = stelle = None gruppe_list = self.beratungen_gruppe(ab_jahr=jahr, mitarbeiter=mitarbeiter, welche=welche, stelle=stelle) headers = ("Gruppennr.", "Mitarbeiter", "Name", "Thema", "Art", "Teilnehmer", "-zahl", "Beginn", "Ende") daten = self.get_table_daten( gruppe_list, ( ("gn", "grkarte?gruppeid=%(id)s"), "mitarbeiternamen", "name", "thema", "grtyp__name", "teiln__name", "tzahl", "bg", "e", ), ) report = h.FieldsetDataTable(legend="Gruppenüberblick", headers=headers, daten=daten) res = h.FormPage( title="Gruppenüberblick", name="gruppenue", action="abfr8", method="post", breadcrumbs=(("Hauptmenü", "menu"),), hidden=(), rows=(self.get_auswertungs_menu(), anzeige, report), ) return res.display()
def processForm(self, REQUEST, RESPONSE): jahr = check_int_not_empty(self.form, 'jahr', "Fehler im Jahr", '') if not jahr: jahr = today().year anzeige = h.FieldsetInputTable( legend='Jahr wählen', daten=[[h.SelectItem(label='Jahr', name='jahr', class_='listbox45', tip='Klientenzahl pro Mitarbeiter für das gewählte Jahr', options=self.for_jahre(sel=jahr), ), h.Button(value="Anzeigen", name='op', tip="Klientenanzahl pro Mitarbeiter anzeigen", type='submit', n_col=2, ), ], ], ) mitarbeiter_ergebnisse, gesamt = self.get_mitarbeiter_ergebnisse(jahr) report = h.FieldsetDataTable( legend='Neumeldungen und Abschlüsse pro Mitarbeiter %s' % jahr, headers=('Mitarbeiter', 'Neu', 'davon Fallbeginn', 'Laufend', 'Beendet','davon z.d.A.'), daten=[[h.String(string=m[0]), h.String(string=m[1], tip='Zuständigkeit neu übernommen'), h.String(string=m[2], tip='Zuständigkeit für neuen Fall übernommen'), h.String(string=m[3], tip='Laufende Fälle am Ende des Jahres'), h.String(string=m[4], tip='Zuständigkeit beendet'), h.String(string=m[5], tip='Zuständigkeitsende durch Fallabschluss'), ] for m in mitarbeiter_ergebnisse] + [[h.String(string='Gesamt', class_='tabledatabold'), h.String(string=gesamt[0], class_='tabledatabold', tip='Zuständigkeit neu übernommen'), h.String(string=gesamt[1], class_='tabledatabold', tip='Zuständigkeit für neuen Fall übernommen'), h.String(string=gesamt[2], class_='tabledatabold', tip='Laufende Fälle am Ende des Jahres'), h.String(string=gesamt[3], class_='tabledatabold', tip='Zuständigkeit beendet'), h.String(string=gesamt[4], class_='tabledatabold', tip='Zuständigkeitsende durch Fallabschluss'), ]], ) res = h.FormPage( title='Neumeldungen und Abschlüsse pro Mitarbeiter', name='neumelde',action="abfr5",method="post", breadcrumbs = (('Hauptmenü', 'menu'), ), hidden=(), rows=(self.get_auswertungs_menu(), anzeige, report, ), ) return res.display()
def processForm(self, REQUEST, RESPONSE): jahr = check_int_not_empty(self.form, 'jahr', "Fehler im Jahr", '') if not jahr: jahr = today().year anzeige = h.FieldsetInputTable( legend='Jahr wählen', daten=[[h.SelectItem(label='Jahr', name='jahr', class_='listbox45', tip='Neumeldungen und Abschlüsse für das gewählte Jahr', options=self.for_jahre(sel=jahr), ), h.Button(value="Anzeigen", name='op', tip="Neumeldungen und Abschlüsse anzeigen", type='submit', n_col=2, ), ], ], ) #faelle = ('fn', 'vn', 'na', 'gb', 'fallbeginn', 'fallende', 'mitarbeiter', 'fs', 'jgh') monats_ergebnisse, quartals_ergebnisse, gesamt_ergebnisse = \ self.get_neumelde_abschluss_daten(jahr) report = h.FieldsetDataTable( legend='Neumeldungen und Abschlüsse %s' % jahr, headers=('Monat', 'Laufende am Monatsende', 'Neu', 'davon ASD', 'Hauptfall', 'Geschwisterfall', 'abgeschl. Bundesstatistik'), daten=[[h.String(string=m[0]), h.String(string=m[1]), h.String(string=m[2]), h.String(string=m[3]), h.String(string=m[4]), h.String(string=m[5]), h.String(string=m[6]), ] for m in monats_ergebnisse] + [[h.String(string='Quartal %s' % m[0], class_='tabledatabold'), h.String(string=''), h.String(string=m[1], class_='tabledatabold'), h.String(string=m[2], class_='tabledatabold'), h.String(string=m[3], class_='tabledatabold'), h.String(string=m[4], class_='tabledatabold'), h.String(string=m[5], class_='tabledatabold'), ] for m in quartals_ergebnisse] + [[h.String(string='Gesamt', class_='tabledatabold'), h.String(string=''), h.String(string=gesamt_ergebnisse[0], class_='tabledatabold'), h.String(string=gesamt_ergebnisse[1], class_='tabledatabold'), h.String(string=gesamt_ergebnisse[2], class_='tabledatabold'), h.String(string=gesamt_ergebnisse[3], class_='tabledatabold'), h.String(string=gesamt_ergebnisse[4], class_='tabledatabold'), ]], ) res = h.FormPage( title='Neumelde- und Abschlusszahlen', name='neumelde',action="abfr4",method="post", breadcrumbs = (('Hauptmenü', 'menu'), ), hidden=(), rows=(self.get_auswertungs_menu(), anzeige, report, ), ) return res.display()
def xprocessForm(self, REQUEST, RESPONSE): default_sort = ('bgy', 'fn_count', 'akte__na', 'zuletzt_zustaendig__mit__na', 'has_fachstatistik', 'has_jghstatistik') default_sort_code = '012345' # Indizes in default_sort tmpl = '<option value="%s"%s>%s</option>' # erster Wert ist Index in default_sort sort_options_data = ( (0, 'Jahr des Fallbeginns'), (1, 'Fallnummer'), (2, 'Name des Klienten'), (3, 'Name des Mitarbeiters'), (4, 'Fachstatistik vorhanden'), (5, 'Bundesstatistik vorhanden'), ) welche = check_str_not_empty(self.form, 'w', "Keine Fallart", 'laufend') sel = ' selected="selected"' welche_options = '\n'.join([tmpl % (v, v==welche and sel or '', v.capitalize()) for v in ('laufend', 'abgeschlossen', 'alle')]) title = (welche=='laufend' and 'Laufende' or welche=='abgeschlossen' and 'Abgeschlossene' or welche=='alle' and 'Alle' or '') + ' Beratungen' legend_app = '' jahr = check_int_not_empty(self.form, 'jahr', "Fehler im Jahr", '') fn_count = check_int_not_empty(self.form, 'fnc', "Fehler in laufender Nummer", '') if fn_count and not jahr: raise EE("Laufende Fallnummer nur zusammen mit Jahr") if fn_count: legend_app += ' ab Fallnummer %s-%s%s' % (fn_count, jahr, self.stelle['code']) elif jahr: legend_app += ' ab Jahr %s' % (jahr,) mit_id = check_str_not_empty(self.form, 'mitid', "Kein Mitarbeiter", '') seq = check_str_not_empty(self.form, 'seq', "Keine Sortierung", default_sort_code) seq = [int(x) for x in seq] seq_new = check_str_not_empty(self.form, 'seqn', "Keine Sortierung", '1') if seq_new: seq_new = int(seq_new) assert seq_new in seq, 'Fehler beim Sortieren' if seq_new == 1: seq.remove(1) seq.remove(0) seq = [0,1] + seq else: seq.remove(seq_new) seq = [seq_new] + seq sort_options = '\n'.join([tmpl % (c, c==seq_new and sel or '', n) for c, n in sort_options_data]) sort = tuple([default_sort[i] for i in seq]) mitarbeiter = None if self.mitarbeiter['benr__code'] == 'verw': if mit_id: mitarbeiter = Mitarbeiter(mit_id) mitarbeiter_options = (tmpl % ('', '', 'Alle') + self.for_mitarbeiter(sel=int(mit_id))) else: mitarbeiter_options = (tmpl % ('', 'selected="selected"', 'Alle') + self.for_mitarbeiter(sel=None)) elif self.mitarbeiter['benr__code'] == 'bearb': mitarbeiter = self.mitarbeiter beratungen = self.beratungen(welche=welche, stelle=self.stelle, mitarbeiter=mitarbeiter, ab_jahr=jahr, ab_fallnummer=fn_count, sort=sort) anzeige = h.FieldsetInputTable( legend='Anzuzeigende Beratungen', daten=[[h.SelectItem(label='Welche', name='w', options=welche_options, tip='Nur laufende, nur abgeschlossene, oder alle Fälle zeigen', ), h.SelectItem(label='Fallbeginn ab Jahr', name='jahr', class_='listbox45', tip='Nur Fälle ab dem gewählten Jahr zeigen', options=self.for_jahre(sel=jahr, erster_eintrag='Alle'), ), h.TextItem(label='ab laufender Nummer', name='fnc', class_='textboxmid', value=fn_count, tip='z.B. 9, 23, etc.', ), ], [self.mitarbeiter['benr__code'] == 'verw' and h.SelectItem(label='Mitarbeiter', name='mitid', tip='Nur Fälle des gewählten Mitarbeiters zeigen', options=mitarbeiter_options, ) or h.TextItem(label='Mitarbeiter', name='xxx', value=mitarbeiter['na'], readonly=True, ), h.SelectItem(label='Sortieren nach', name='seqn', tip='Wonach die Fälle sortiert sein sollen', options=sort_options, ), ], [h.Dummy(n_col=8)], [h.Button(value="Anzeigen", name='op', tip="Beratungen anzeigen", type='submit', n_col=8, ), ], ], ) #faelle = ('fn', 'vn', 'na', 'gb', 'fallbeginn', 'fallende', 'mitarbeiter', 'fs', 'jgh') report = h.FieldsetDataTable( legend=title + legend_app, headers=('Fallnr.', 'Vorname', 'Name', 'Geb.', 'Beginn', 'z.d.A', 'Zuständig', 'FS', 'BS'), daten=[[h.Link(string=fall['fn'], url='klkarte?akid=%(akte_id)s' % fall), h.String(string=fall['akte__vn']), h.String(string=fall['akte__na']), h.String(string=fall['akte__gb']), h.Datum(date=fall.getDate('bg')), h.Datum(date=fall.getDate('zda')), h.String(string=fall['zuletzt_zustaendig__mit__na']), h.String(string=fall['has_fachstatistik']), h.String(string=fall['has_jghstatistik']), ] for fall in beratungen], ) res = h.FormPage( title=title, name='beratungen',action="abfr1",method="post", breadcrumbs = (('Hauptmenü', 'menu'), ), hidden=(("seq", ''.join([('%s' % i) for i in seq])), ), rows=(self.get_auswertungs_menu(), anzeige, report, ), ) return res.display()
def fall_auswahl_form(self): default_sort = ('bgy', 'fn_count', 'akte__na', 'zuletzt_zustaendig__mit__na', 'has_fachstatistik', 'has_jghstatistik') default_sort_code = '012345' # Indizes in default_sort tmpl = '<option value="%s"%s>%s</option>' # erster Wert ist Index in default_sort sort_options_data = ( (0, 'Jahr des Fallbeginns'), (1, 'Fallnummer'), (2, 'Name des Klienten'), (3, 'Name des Mitarbeiters'), (4, 'Fachstatistik vorhanden'), (5, 'Bundesstatistik vorhanden'), ) welche = check_str_not_empty(self.form, 'w', "Keine Fallart", 'laufend') jahr = check_int_not_empty(self.form, 'jahr', "Fehler in ab Jahr", '') fn_count = check_int_not_empty(self.form, 'fnc', "Fehler in laufender Nummer", '') bis_jahr = check_int_not_empty(self.form, 'bis_jahr', "Fehler in bis Jahr", '') bis_fn_count = check_int_not_empty(self.form, 'bis_fnc', "Fehler in bis laufender Nummer", '') ab_jahr_zda = check_int_not_empty(self.form, 'ab_jahr_zda', "Fehler in ab Jahr Abschluss", '') bis_jahr_zda = check_int_not_empty(self.form, 'bis_jahr_zda', "Fehler in ab Jahr Abschluss", '') if fn_count and not jahr: raise EE("Ab laufende Fallnummer nur zusammen mit ab Jahr") if bis_fn_count and not bis_jahr: raise EE("Bis laufende Fallnummer nur zusammen mit bis Jahr") if ab_jahr_zda or bis_jahr_zda: # in diesem Fall nur abgeschlossene Fälle welche = 'abgeschlossen' mit_id = check_str_not_empty(self.form, 'mitid', "Kein Mitarbeiter", '') seq = check_str_not_empty(self.form, 'seq', "Keine Sortierung", default_sort_code) seq = [int(x) for x in seq] seq_new = check_str_not_empty(self.form, 'seqn', "Keine Sortierung", '1') if seq_new: seq_new = int(seq_new) assert seq_new in seq, 'Fehler beim Sortieren' if seq_new == 1: seq.remove(1) seq.remove(0) seq = [0,1] + seq else: seq.remove(seq_new) seq = [seq_new] + seq sort = tuple([default_sort[i] for i in seq]) mitarbeiter = None if self.mitarbeiter['benr__code'] == 'verw': if mit_id: mitarbeiter = Mitarbeiter(mit_id) elif self.mitarbeiter['benr__code'] == 'bearb': mitarbeiter = self.mitarbeiter legend='Anzuzeigende Beratungen', return dict(welche=welche, ab_jahr=jahr, ab_fallnummer=fn_count, bis_jahr=bis_jahr, bis_fallnummer=bis_fn_count, ab_jahr_zda=ab_jahr_zda, bis_jahr_zda=bis_jahr_zda, mitarbeiter=mitarbeiter, sort_options_data=sort_options_data, sort_sel=seq_new, # index der auswahl sort_seq=seq, # liste von indices sort=sort, # tuple der sortier-felder )
def processForm(self, REQUEST, RESPONSE): #print 'FORM', self.form welche = self.form.get('w') ohne_bk_raus = self.form.get('ohne_bk_raus') von_jahr = self.form.get('von_jahr') bis_jahr = self.form.get('bis_jahr') if bis_jahr: bis_jahr = check_int_not_empty(self.form, 'bis_jahr', "Jahr fehlt") else: bis_jahr = today().year von_jahr = check_int_not_empty(self.form, 'von_jahr', "Jahr fehlt", bis_jahr) if von_jahr > bis_jahr: von_jahr = bis_jahr stz = check_list(self.form, 'stz', 'Keine Stelle') item_auswahl = check_list(self.form, 'item_auswahl', 'Bitte gewünschte Auszählung ankreuzen.') teilm = self.form.get('teilm') if teilm: abfr = Abfrage(teilm) query = Query(abfr) else: query = Query() fs, jgh, jgh07 = self.check_params(von_jahr, bis_jahr, stz, item_auswahl, query, welche) if fs: fs_ggl = self.get_grundgesamtheit(stz, von_jahr, bis_jahr, welche, FachstatistikList, ohne_bk_raus) if jgh: jgh_ggl = self.get_grundgesamtheit(stz, von_jahr, bis_jahr, welche, JugendhilfestatistikList, ohne_bk_raus) if jgh07: jgh_ggl = self.get_grundgesamtheit(stz, von_jahr, bis_jahr, welche, Jugendhilfestatistik2007List, ohne_bk_raus) if fs and (jgh or jgh07): # beide nötig: erzeugt wird eine Liste von Paaren (fs, jgh) für jeden Fall # für den beide Statistiken vorliegen ggl = self.join_fs_jgh_list(fs_ggl, jgh_ggl) #ggl = ggl*500 # Performance bei längeren Listen? ---> ok, 3sec bei 3000 Fälle #ggl = ggl*5000 # Performance bei längeren Listen? ---> ok, 26sec bei 30000 Fälle elif fs: ggl = fs_ggl else: ggl = jgh_ggl anzeige_gg = self.get_grundgesamtheit_anzeige(stz, von_jahr, bis_jahr, welche, fs, jgh, jgh07, len(ggl), ohne_bk_raus) if not ggl: raise EE("Keine Datensätze für die gewünschte Grundgesamtheit:" "\n\n%s\n und %s" % (anzeige_gg[0], anzeige_gg[1])) if query.always_true(): ggl_teilm = ggl else: def qfilter(el): return query.test(el) #ggl_teilm = ggl.filter(qfilter) ggl_teilm = [el for el in ggl if(qfilter(el))] if not ggl_teilm: raise EE("Keine Datensätze für Teilmenge '%s'" % abfr['name']) return self._display_ergebnis( ggl_teilm, anzeige_gg=anzeige_gg, query=query, item_auswahl=item_auswahl, )
def xprocessForm(self, REQUEST, RESPONSE): default_sort = ( "bgy", "fn_count", "akte__na", "zuletzt_zustaendig__mit__na", "has_fachstatistik", "has_jghstatistik", ) default_sort_code = "012345" # Indizes in default_sort tmpl = '<option value="%s"%s>%s</option>' # erster Wert ist Index in default_sort sort_options_data = ( (0, "Jahr des Fallbeginns"), (1, "Fallnummer"), (2, "Name des Klienten"), (3, "Name des Mitarbeiters"), (4, "Fachstatistik vorhanden"), (5, "Bundesstatistik vorhanden"), ) welche = check_str_not_empty(self.form, "w", "Keine Fallart", "laufend") sel = ' selected="selected"' welche_options = "\n".join( [tmpl % (v, v == welche and sel or "", v.capitalize()) for v in ("laufend", "abgeschlossen", "alle")] ) title = ( welche == "laufend" and "Laufende" or welche == "abgeschlossen" and "Abgeschlossene" or welche == "alle" and "Alle" or "" ) + " Beratungen" legend_app = "" jahr = check_int_not_empty(self.form, "jahr", "Fehler im Jahr", "") fn_count = check_int_not_empty(self.form, "fnc", "Fehler in laufender Nummer", "") if fn_count and not jahr: raise EE("Laufende Fallnummer nur zusammen mit Jahr") if fn_count: legend_app += " ab Fallnummer %s-%s%s" % (fn_count, jahr, self.stelle["code"]) elif jahr: legend_app += " ab Jahr %s" % (jahr,) mit_id = check_str_not_empty(self.form, "mitid", "Kein Mitarbeiter", "") seq = check_str_not_empty(self.form, "seq", "Keine Sortierung", default_sort_code) seq = [int(x) for x in seq] seq_new = check_str_not_empty(self.form, "seqn", "Keine Sortierung", "1") if seq_new: seq_new = int(seq_new) assert seq_new in seq, "Fehler beim Sortieren" if seq_new == 1: seq.remove(1) seq.remove(0) seq = [0, 1] + seq else: seq.remove(seq_new) seq = [seq_new] + seq sort_options = "\n".join([tmpl % (c, c == seq_new and sel or "", n) for c, n in sort_options_data]) sort = tuple([default_sort[i] for i in seq]) mitarbeiter = None if self.mitarbeiter["benr__code"] == "verw": if mit_id: mitarbeiter = Mitarbeiter(mit_id) mitarbeiter_options = tmpl % ("", "", "Alle") + self.for_mitarbeiter(sel=int(mit_id)) else: mitarbeiter_options = tmpl % ("", 'selected="selected"', "Alle") + self.for_mitarbeiter(sel=None) elif self.mitarbeiter["benr__code"] == "bearb": mitarbeiter = self.mitarbeiter beratungen = self.beratungen( welche=welche, stelle=self.stelle, mitarbeiter=mitarbeiter, ab_jahr=jahr, ab_fallnummer=fn_count, sort=sort ) anzeige = h.FieldsetInputTable( legend="Anzuzeigende Beratungen", daten=[ [ h.SelectItem( label="Welche", name="w", options=welche_options, tip="Nur laufende, nur abgeschlossene, oder alle Fälle zeigen", ), h.SelectItem( label="Fallbeginn ab Jahr", name="jahr", class_="listbox45", tip="Nur Fälle ab dem gewählten Jahr zeigen", options=self.for_jahre(sel=jahr, erster_eintrag="Alle"), ), h.TextItem( label="ab laufender Nummer", name="fnc", class_="textboxmid", value=fn_count, tip="z.B. 9, 23, etc.", ), ], [ self.mitarbeiter["benr__code"] == "verw" and h.SelectItem( label="Mitarbeiter", name="mitid", tip="Nur Fälle des gewählten Mitarbeiters zeigen", options=mitarbeiter_options, ) or h.TextItem(label="Mitarbeiter", name="xxx", value=mitarbeiter["na"], readonly=True), h.SelectItem( label="Sortieren nach", name="seqn", tip="Wonach die Fälle sortiert sein sollen", options=sort_options, ), ], [h.Dummy(n_col=8)], [h.Button(value="Anzeigen", name="op", tip="Beratungen anzeigen", type="submit", n_col=8)], ], ) # faelle = ('fn', 'vn', 'na', 'gb', 'fallbeginn', 'fallende', 'mitarbeiter', 'fs', 'jgh') report = h.FieldsetDataTable( legend=title + legend_app, headers=("Fallnr.", "Vorname", "Name", "Geb.", "Beginn", "z.d.A", "Zuständig", "FS", "BS"), daten=[ [ h.Link(string=fall["fn"], url="klkarte?akid=%(akte_id)s" % fall), h.String(string=fall["akte__vn"]), h.String(string=fall["akte__na"]), h.String(string=fall["akte__gb"]), h.Datum(date=fall.getDate("bg")), h.Datum(date=fall.getDate("zda")), h.String(string=fall["zuletzt_zustaendig__mit__na"]), h.String(string=fall["has_fachstatistik"]), h.String(string=fall["has_jghstatistik"]), ] for fall in beratungen ], ) res = h.FormPage( title=title, name="beratungen", action="abfr1", method="post", breadcrumbs=(("Hauptmenü", "menu"),), hidden=(("seq", "".join([("%s" % i) for i in seq])),), rows=(self.get_auswertungs_menu(), anzeige, report), ) return res.display()
def processForm(self, REQUEST, RESPONSE): #print self.form alter = self.form.get('alter') if alter == None: alter = config.LOESCHFRIST else: alter = check_int_not_empty( self.form, 'alter', 'Fehler im Alter in Monaten') if alter < config.LOESCHFRIST: raise EE('Löschfrist beträgt mindestens %s Monate' % config.LOESCHFRIST) aufbew = self.form.get('aufbew') if aufbew == None: aufbew = cc('aufbew', '1') else: aufbew = check_code(self.form, 'aufbew', 'aufbew', 'Fehler in Aufbewahrungskategorie') op = self.form.get('op') rm = check_list(self.form, 'rmak', 'Fehler in markierten Akten', '') if op == 'Endgültig löschen' and rm: hidden = [('rmak', r) for r in rm] + [('op', 'loeschen_confirmed')] return h.SubmitOrBack( legend='Endgültig löschen', action='rmakten2', method='post', hidden=hidden, zeilen=("Sollen die markierten Akten endgültig gelöscht werden?", ) ).display() alter_und_kategorie = h.FieldsetFormInputTable( name="rmaktenanzeigen", action="rmakten", method="post", hidden = (), legend='Alter und Kategorie der zu löschenden Akten wählen', daten=[[h.SelectItem(label='Aufbewahrungskategorie', name='aufbew', options=self.for_kat('aufbew', sel=aufbew or cc('aufbew', '1')), ), h.TextItem(label='Monate seit Abschluss des letzten Falls', name='alter', value=alter or '', class_='textboxsmall', maxlength=3, tip='Mindesanzahl der Monate seit Abschluss des letzten Falls' ), ], [h.Dummy(n_col=4)], [h.Button(value="Anzeigen", name='op', tip="Akten der gewählten Kategorie und des gewählten Alters anzeigen", type='submit', n_col=4, ), ], ], ) if alter and aufbew: rmdatum = today().add_month(-(alter+1)) # damit immer mindestens die Anzahl Monate # dazwischen liegt #print 'LOESCHDATUM', rmdatum alle_faelle = FallList( where = 'zday <= %(year)s and zdam <= %(month)s and zday > 0' % rmdatum) faelle = [f for f in alle_faelle if f == f['akte__letzter_fall'] and aufbew == f['akte__aufbew']] akten = h.FieldsetFormDataTable( name="rmakten", #action="abfragedef", action="rmakten", method="post", hidden = (), legend='Akten zum löschen auswählen (Statistiken bleiben erhalten)', headers=('Name', 'Vorname', 'Geburtsdatum', 'Letzter Fallabschluss', '', 'Löschen'), daten=[[h.String(string=fall['akte__na']), h.String(string=fall['akte__vn']), h.String(string=fall['akte__gb']), h.Datum(date=fall.getDate('zda')), h.CheckItem(label='', name='rmak', value=fall['akte_id'], checked=False, tip='Hier markieren, um die Akte endgültig zu löschen', ), ] for fall in faelle], no_button_if_empty=True, button=h.Button(value="Endgültig löschen", name='op', tip="Markierte endgültig Akten löschen", type='submit', class_='buttonbig', n_col=6, ), empty_msg="Keine Akten gefunden.", ) else: akten = None res = h.Page( title='Akten löschen nach Ablauf der Löschfrist', breadcrumbs = (('Aministratorhauptmenü', 'menu'), ), rows=(self.get_hauptmenu(), alter_und_kategorie, akten, ), ) return res.display()
def processForm(self, REQUEST, RESPONSE): #print 'FORM', self.form von_jahr = self.form.get('von_jahr') bis_jahr = self.form.get('bis_jahr') if bis_jahr: bis_jahr = check_int_not_empty(self.form, 'bis_jahr', "Jahr fehlt") else: bis_jahr = today().year von_jahr = check_int_not_empty(self.form, 'von_jahr', "Jahr fehlt", bis_jahr) if von_jahr > bis_jahr: von_jahr = bis_jahr stellen_ids = [int(id) for id in check_list(self.form, 'stz', 'Keine Stelle', [self.stelle['id']])] quartal = self.form.get('quartal') if quartal: quartal = check_int_not_empty(self.form, 'quartal', 'Fehler im Quartal') if von_jahr != bis_jahr: raise EE('Quartalsauswertungen nur in einem Jahr möglich') else: quartal == None mitarbeiter, res = self.count(stellen_ids, von_jahr, bis_jahr, quartal) aktivitaets_arten = [c['code'] for c in get_codes('fuabs')] def row(name, tupl): netto, brutto = tupl row = [h.String(string=name)] for ka in aktivitaets_arten: row.append(h.String(string="%s / %s" % (netto[ka], brutto[ka]), tip='Netto/Brutto') ) return row mitarbeiter_daten = [row(m['name'], res[m['id']]) for m in mitarbeiter] stellen_row = row(', '.join([Code(s)['name'] for s in stellen_ids]), res['summe']) headers = [''] + [c['name'] for c in get_codes('fuabs')] fuer = '' if von_jahr < bis_jahr: fuer += " für %(von_jahr)s bis %(bis_jahr)s" % locals() else: fuer += " für %(bis_jahr)s" % locals() if quartal: fuer += " Quartal %(quartal)s" % locals() tabelle_mitarbeiter = h.FieldsetDataTable( legend='Zeiten für fallunabhängige Aktivitäten Mitarbeiter' + fuer, headers=headers, daten=mitarbeiter_daten, ) tabelle_stellen = h.FieldsetDataTable( legend='Zeiten für fallunabhängige Aktivitäten summiert für Stellen' + fuer, headers=headers, daten=[stellen_row], ) res = h.FormPage( name="fuaform",action="fuabsabfr",method="post", title='Auswertung fallunabhängige Aktivitäten', breadcrumbs = (('Hauptmenü', 'menu'), ), hidden = (), rows=(self.get_auswertungs_menu(), self.grundgesamtheit(von_jahr=von_jahr, bis_jahr=bis_jahr, quartal=quartal, stellen_ids=stellen_ids, legend='Jahr und Stelle wählen', submit_value='Anzeigen'), tabelle_mitarbeiter, tabelle_stellen, ), ) return res.display()
def processForm(self, REQUEST, RESPONSE): #print self.form alter = self.form.get('alter') if alter == None: alter = config.LOESCHFRIST else: alter = check_int_not_empty( self.form, 'alter', 'Fehler im Alter in Monaten') if alter < config.LOESCHFRIST: raise EE('Löschfrist beträgt mindestens %s Monate' % config.LOESCHFRIST) aufbew = self.form.get('aufbew') if aufbew == None: aufbew = cc('aufbew', '1') else: aufbew = check_code(self.form, 'aufbew', 'aufbew', 'Fehler in Aufbewahrungskategorie') op = self.form.get('op') rm = check_list(self.form, 'rmak', 'Fehler in markierten Akten', '') if op == 'Endgültig löschen' and rm: hidden = [('rmak', r) for r in rm] + [('op', 'loeschen_confirmed')] return h.SubmitOrBack( legend='Endgültig löschen', action='rmakten2', method='post', hidden=hidden, zeilen=("Sollen die markierten Akten endgültig gelöscht werden?", ) ).display() alter_und_kategorie = h.FieldsetFormInputTable( name="rmaktenanzeigen", action="rmakten", method="post", hidden = (), legend='Alter und Kategorie der zu löschenden Akten wählen', daten=[[h.SelectItem(label='Aufbewahrungskategorie', name='aufbew', options=self.for_kat('aufbew', sel=aufbew or cc('aufbew', '1')), ), h.TextItem(label='Monate seit Abschluss des letzten Falls', name='alter', value=alter or '', class_='textboxsmall', maxlength=3, tip='Mindesanzahl der Monate seit Abschluss des letzten Falls' ), ], [h.Dummy(n_col=4)], [h.Button(value="Anzeigen", name='op', tip="Akten der gewählten Kategorie und des gewählten Alters anzeigen", type='submit', n_col=4, ), ], ], ) if alter and aufbew: rmdatum = today().add_month(-(alter+1)) # damit immer mindestens die Anzahl Monate # dazwischen liegt #print 'LOESCHDATUM', rmdatum #alle_faelle = FallList( # where = 'zday <= %(year)s and zdam <= %(month)s and zday > 0' # % rmdatum) alle_faelle = FallList( where = '(zday < %(year)s or (zday = %(year)s and zdam <= %(month)s)) and zday > 0' % rmdatum, order = 'zday, zdam, zdad') # Hier gab es einen Fehler (in Reinickendorf): # AttributeError: Could not resolve field 'akte__letzter_fall' for instance of 'Fall' # Daher wurde nichts zum löschen angezeigt # faelle = [f for f in alle_faelle # if f == f['akte__letzter_fall'] and aufbew == f['akte__aufbew']] faelle = [] for f in alle_faelle: try: if f == f['akte__letzter_fall'] and aufbew == f['akte__aufbew']: faelle.append(f) except Exception, e: t = sys.exc_info()[0] logging.exception("Interner Fehler: %s: %s", t, e) logging.exception(" Falle ohne Akte? fall_id=%s" % f['id']) akten = h.FieldsetFormDataTable( name="rmakten", #action="abfragedef", action="rmakten", method="post", hidden = (), legend='Akten zum löschen auswählen (Statistiken bleiben erhalten)', headers=('Fallnummer', 'Name', 'Vorname', 'Geburtsdatum', 'Letzter Fallabschluss', '', 'Löschen'), daten=[[h.String(string=fall['fn']), h.String(string=fall['akte__na']), h.String(string=fall['akte__vn']), h.String(string=fall['akte__gb']), h.Datum(date=fall.getDate('zda')), h.CheckItem(label='', name='rmak', value=fall['akte_id'], checked=False, tip='Hier markieren, um die Akte endgültig zu löschen', ), ] for fall in faelle], no_button_if_empty=True, button=h.Button(value="Endgültig löschen", name='op', tip="Markierte endgültig Akten löschen", type='submit', class_='buttonbig', n_col=6, ), empty_msg="Keine Akten gefunden.", )
def processForm(self, REQUEST, RESPONSE): jahr = check_int_not_empty(self.form, "jahr", "Fehler im Jahr", "") if not jahr: jahr = today().year anzeige = h.FieldsetInputTable( legend="Jahr wählen", daten=[ [ h.SelectItem( label="Jahr", name="jahr", class_="listbox45", tip="Klientenzahl pro Mitarbeiter für das gewählte Jahr", options=self.for_jahre(sel=jahr), ), h.Button( value="Anzeigen", name="op", tip="Klientenanzahl pro Mitarbeiter anzeigen", type="submit", n_col=2, ), ] ], ) mitarbeiter_ergebnisse, gesamt = self.get_mitarbeiter_ergebnisse(jahr) report = h.FieldsetDataTable( legend="Neumeldungen und Abschlüsse pro Mitarbeiter %s" % jahr, headers=("Mitarbeiter", "Neu", "davon Fallbeginn", "Laufend", "Beendet", "davon z.d.A."), daten=[ [ h.String(string=m[0]), h.String(string=m[1], tip="Zuständigkeit neu übernommen"), h.String(string=m[2], tip="Zuständigkeit für neuen Fall übernommen"), h.String(string=m[3], tip="Laufende Fälle am Ende des Jahres"), h.String(string=m[4], tip="Zuständigkeit beendet"), h.String(string=m[5], tip="Zuständigkeitsende durch Fallabschluss"), ] for m in mitarbeiter_ergebnisse ] + [ [ h.String(string="Gesamt", class_="tabledatabold"), h.String(string=gesamt[0], class_="tabledatabold", tip="Zuständigkeit neu übernommen"), h.String( string=gesamt[1], class_="tabledatabold", tip="Zuständigkeit für neuen Fall übernommen" ), h.String(string=gesamt[2], class_="tabledatabold", tip="Laufende Fälle am Ende des Jahres"), h.String(string=gesamt[3], class_="tabledatabold", tip="Zuständigkeit beendet"), h.String(string=gesamt[4], class_="tabledatabold", tip="Zuständigkeitsende durch Fallabschluss"), ] ], ) res = h.FormPage( title="Neumeldungen und Abschlüsse pro Mitarbeiter", name="neumelde", action="abfr5", method="post", breadcrumbs=(("Hauptmenü", "menu"),), hidden=(), rows=(self.get_auswertungs_menu(), anzeige, report), ) return res.display()
def processForm(self, REQUEST, RESPONSE): jahr = check_int_not_empty(self.form, "jahr", "Fehler im Jahr", "") if not jahr: jahr = today().year anzeige = h.FieldsetInputTable( legend="Jahr wählen", daten=[ [ h.SelectItem( label="Jahr", name="jahr", class_="listbox45", tip="Neumeldungen und Abschlüsse für das gewählte Jahr", options=self.for_jahre(sel=jahr), ), h.Button( value="Anzeigen", name="op", tip="Neumeldungen und Abschlüsse anzeigen", type="submit", n_col=2 ), ] ], ) # faelle = ('fn', 'vn', 'na', 'gb', 'fallbeginn', 'fallende', 'mitarbeiter', 'fs', 'jgh') monats_ergebnisse, quartals_ergebnisse, gesamt_ergebnisse = self.get_neumelde_abschluss_daten(jahr) report = h.FieldsetDataTable( legend="Neumeldungen und Abschlüsse %s" % jahr, headers=( "Monat", "Laufende am Monatsende", "Neu", "davon ASD", "Hauptfall", "Geschwisterfall", "abgeschl. Bundesstatistik", "davon noch ohne z.d.A", ), daten=[ [ h.String(string=m[0]), h.String(string=m[1]), h.String(string=m[2]), h.String(string=m[3]), h.String(string=m[4]), h.String(string=m[5]), h.String(string=m[6]), h.String(string=m[7]), ] for m in monats_ergebnisse ] + [ [ h.String(string="Quartal %s" % m[0], class_="tabledatabold"), h.String(string=""), h.String(string=m[1], class_="tabledatabold"), h.String(string=m[2], class_="tabledatabold"), h.String(string=m[3], class_="tabledatabold"), h.String(string=m[4], class_="tabledatabold"), h.String(string=m[5], class_="tabledatabold"), h.String(string=""), ] for m in quartals_ergebnisse ] + [ [ h.String(string="Gesamt", class_="tabledatabold"), h.String(string=""), h.String(string=gesamt_ergebnisse[0], class_="tabledatabold"), h.String(string=gesamt_ergebnisse[1], class_="tabledatabold"), h.String(string=gesamt_ergebnisse[2], class_="tabledatabold"), h.String(string=gesamt_ergebnisse[3], class_="tabledatabold"), h.String(string=gesamt_ergebnisse[4], class_="tabledatabold"), h.String(string=""), ] ], ) res = h.FormPage( title="Neumelde- und Abschlusszahlen", name="neumelde", action="abfr4", method="post", breadcrumbs=(("Hauptmenü", "menu"),), hidden=(), rows=(self.get_auswertungs_menu(), anzeige, report, self.get_neumelde_nach_region_tabelle(jahr)), ) return res.display()
def fall_auswahl_form(self): default_sort = ( "bgy", "fn_count", "akte__na", "zuletzt_zustaendig__mit__na", "has_fachstatistik", "has_jghstatistik", ) default_sort_code = "012345" # Indizes in default_sort tmpl = '<option value="%s"%s>%s</option>' # erster Wert ist Index in default_sort sort_options_data = ( (0, "Jahr des Fallbeginns"), (1, "Fallnummer"), (2, "Name des Klienten"), (3, "Name des Mitarbeiters"), (4, "Fachstatistik vorhanden"), (5, "Bundesstatistik vorhanden"), ) welche = check_str_not_empty(self.form, "w", "Keine Fallart", "laufend") jahr = check_int_not_empty(self.form, "jahr", "Fehler in ab Jahr", "") fn_count = check_int_not_empty(self.form, "fnc", "Fehler in laufender Nummer", "") bis_jahr = check_int_not_empty(self.form, "bis_jahr", "Fehler in bis Jahr", "") bis_fn_count = check_int_not_empty(self.form, "bis_fnc", "Fehler in bis laufender Nummer", "") ab_jahr_zda = check_int_not_empty(self.form, "ab_jahr_zda", "Fehler in ab Jahr Abschluss", "") bis_jahr_zda = check_int_not_empty(self.form, "bis_jahr_zda", "Fehler in ab Jahr Abschluss", "") if fn_count and not jahr: raise EE("Ab laufende Fallnummer nur zusammen mit ab Jahr") if bis_fn_count and not bis_jahr: raise EE("Bis laufende Fallnummer nur zusammen mit bis Jahr") if ab_jahr_zda or bis_jahr_zda: # in diesem Fall nur abgeschlossene Fälle welche = "abgeschlossen" mit_id = check_str_not_empty(self.form, "mitid", "Kein Mitarbeiter", "") seq = check_str_not_empty(self.form, "seq", "Keine Sortierung", default_sort_code) seq = [int(x) for x in seq] seq_new = check_str_not_empty(self.form, "seqn", "Keine Sortierung", "1") if seq_new: seq_new = int(seq_new) assert seq_new in seq, "Fehler beim Sortieren" if seq_new == 1: seq.remove(1) seq.remove(0) seq = [0, 1] + seq else: seq.remove(seq_new) seq = [seq_new] + seq sort = tuple([default_sort[i] for i in seq]) mitarbeiter = None if self.mitarbeiter["benr__code"] == "verw": if mit_id: mitarbeiter = Mitarbeiter(mit_id) elif self.mitarbeiter["benr__code"] == "bearb": mitarbeiter = self.mitarbeiter legend = ("Anzuzeigende Beratungen",) return dict( welche=welche, ab_jahr=jahr, ab_fallnummer=fn_count, bis_jahr=bis_jahr, bis_fallnummer=bis_fn_count, ab_jahr_zda=ab_jahr_zda, bis_jahr_zda=bis_jahr_zda, mitarbeiter=mitarbeiter, sort_options_data=sort_options_data, sort_sel=seq_new, # index der auswahl sort_seq=seq, # liste von indices sort=sort, # tuple der sortier-felder )
def processForm(self, REQUEST, RESPONSE): #print 'FORM', self.form von_jahr = self.form.get('von_jahr') bis_jahr = self.form.get('bis_jahr') if bis_jahr: bis_jahr = check_int_not_empty(self.form, 'bis_jahr', "Jahr fehlt") else: bis_jahr = today().year von_jahr = check_int_not_empty(self.form, 'von_jahr', "Jahr fehlt", bis_jahr) if von_jahr > bis_jahr: von_jahr = bis_jahr # stellen_ids = [int(id) for id in check_list(self.form, 'stz', 'Keine Stelle', # [self.stelle['id']])] stellen_ids = [self.stelle['id']] quartal = self.form.get('quartal') if quartal: quartal = check_int_not_empty(self.form, 'quartal', 'Fehler im Quartal') if von_jahr != bis_jahr: raise EE('Quartalsauswertungen nur in einem Jahr möglich') else: quartal == None monat = self.form.get('monat') if monat: monat = check_int_not_empty(self.form, 'monat', 'Fehler im Monat') if von_jahr != bis_jahr: raise EE('Monatsauswertungen nur in einem Jahr möglich') else: monat == None if monat and quartal: raise EE('Monats- und Quartalsauswertung nicht gleichzeitig möglich') mitarbeiter, res = self.count(stellen_ids, von_jahr, bis_jahr, quartal, monat) kontakt_arten = [c['code'] for c in get_codes('kabs')] def row(name, tupl): netto, brutto = tupl row = [h.String(string=name)] summe_netto = 0 summe_brutto = 0 for ka in kontakt_arten: summe_netto += netto[ka] summe_brutto += brutto[ka] row.append(h.String(string="%s / %s" % (netto[ka], brutto[ka]), tip='Netto/Brutto') ) row.append(h.String(string="%s / %s" % (summe_netto, summe_brutto), tip='Netto/Brutto') ) return row mitarbeiter_daten = [row(m['name'], res[m['id']]) for m in mitarbeiter] stellen_row = row(', '.join([Code(s)['name'] for s in stellen_ids]), res['summe']) headers = [''] + [c['name'] for c in get_codes('kabs')] + ['Summe'] fuer = '' if von_jahr < bis_jahr: fuer += " für %(von_jahr)s bis %(bis_jahr)s" % locals() else: fuer += " für %(bis_jahr)s" % locals() if quartal: fuer += " Quartal %(quartal)s" % locals() if monat: fuer += " Monat %(monat)s" % locals() tabelle_mitarbeiter = h.FieldsetDataTable( legend='Beratungskontaktzeiten Mitarbeiter' + fuer, headers=headers, daten=mitarbeiter_daten, ) if self.mitarbeiter['benr__code'] == 'bearb': tabelle_stellen = None else: tabelle_stellen = h.FieldsetDataTable( legend='Beratungskontaktzeiten summiert über Mitarbeiter' + fuer, headers=headers, daten=[stellen_row], ) res = h.FormPage( title='Auswertung Beratungskontaktzeiten', name="bkontform",action="bkontbsabfr",method="post", breadcrumbs = (('Hauptmenü', 'menu'), ), hidden = (), rows=(self.get_auswertungs_menu(), self.grundgesamtheit(von_jahr=von_jahr, bis_jahr=bis_jahr, quartal=quartal, monat=monat, show_monat=True, show_stelle = False, stellen_ids=stellen_ids, legend='Zeitraum wählen', submit_value='Anzeigen'), tabelle_mitarbeiter, tabelle_stellen, ), ) return res.display()
def processForm(self, REQUEST, RESPONSE): jahr = check_int_not_empty(self.form, 'jahr', "Fehler im Jahr", '') if not jahr: jahr = today().year anzeige = h.FieldsetInputTable( legend='Jahr wählen', daten=[[h.SelectItem(label='Jahr', name='jahr', class_='listbox45', tip='Wartezeiten für das gewählte Jahr', options=self.for_jahre(sel=jahr), ), h.Button(value="Anzeigen", name='op', tip="Tabelle mit Wartezeiten anzeigen", type='submit', n_col=2, ), ], ], ) # Fälle ermitteln, wo der Leistungsbeginn in dem gewählten # Jahr liegt faelle = self.beratungen(welche='alle', stelle=self.stelle, ab_jahr=jahr-1, # Vorjahr mit einbeziehen bis_jahr=jahr, sort=('bg',)) faelle = faelle.filter(lambda x: x['leistungsbeginn'].year==jahr) auszaehlung = BereichsKategorieAuszaehlung(faelle, 'wartezeit', 'wartez', title='Verteilung der Wartezeiten', ) ausz_res = auszaehlung.get_result() summe_haeufigkeiten = sum([m[1] for m in ausz_res]) summe_prozent = sum([m[2] for m in ausz_res]) haeufigkeiten = h.FieldsetDataTable( legend='Wartezeiten für Fälle mit erster Leistung im Jahr %s' % jahr, headers=('', 'Häufigkeit', 'Prozent',), daten=[[h.String(string=m[0]), h.String(string=m[1], class_="tabledataright",), h.String(string="%.2f" % m[2], class_="tabledataright",), ] for m in ausz_res] + [[h.String(string='Summe', class_='tabledatabold', ), h.String(string=summe_haeufigkeiten, class_='tabledataboldright', align="right", ), h.String(string="%.2f" % summe_prozent, align="right", class_='tabledataboldright', ), ] ] ) faelle.sort('wartezeit') # for f in faelle: # print f['fn'], f['bg'], f['leistungsbeginn'], f['wartezeit'] if len(faelle) > 0: median = faelle[(len(faelle)/2)]['wartezeit'] mittelwert = sum([f['wartezeit'] for f in faelle])/float(len(faelle)) else: median = 'NA' mittelwert = 'NA' mittel = h.FieldsetDataTable( legend='Mittelwert und Median der Wartezeiten in ' 'Kalendertagen für Fälle mit erster Leistung im Jahr %s' % jahr, daten=[[h.String(string='Mittelwert (n=%s)' % len(faelle), class_='tabledatabold', ), h.String(string="%s" % (isinstance(mittelwert, (int,long,float)) and ("%.2f" % mittelwert) or mittelwert,), align="right", class_='tabledataboldright', ), ], [h.String(string='Median (n=%s)' % len(faelle), class_='tabledatabold', ), h.String(string="%s" % median, align="right", class_='tabledataboldright', ), ], ] ) res = h.FormPage( title='Wartezeiten', name='wartezeiten',action="wartezeiten",method="post", breadcrumbs = (('Hauptmenü', 'menu'), ), hidden=(), rows=(self.get_auswertungs_menu(), anzeige, haeufigkeiten, mittel, ), ) return res.display()
def processForm(self, REQUEST, RESPONSE): #print 'FORM', self.form welche = self.form.get('w') von_jahr = self.form.get('von_jahr') bis_jahr = self.form.get('bis_jahr') if bis_jahr: bis_jahr = check_int_not_empty(self.form, 'bis_jahr', "Jahr fehlt") else: bis_jahr = today().year von_jahr = check_int_not_empty(self.form, 'von_jahr', "Jahr fehlt", bis_jahr) if von_jahr > bis_jahr: von_jahr = bis_jahr ## von_jahr = self.form.get('von_jahr') ## bis_jahr = check_int_not_empty(self.form, 'bis_jahr', "Jahr fehlt") ## if not von_jahr or von_jahr > bis_jahr: ## von_jahr = bis_jahr # TODO ## if von_jahr <= 2006 and bis_jahr >= 2007: ## return h.Meldung(legend='Ungültige Jahresangaben', ## zeilen=('Bitte entweder nur Jahre bis 2006 (alte Bundesstatistik)', ## ' oder nur Jahre ab 2007 (neue Bundesstatistik) angeben!', ## ), ## ).display() stz = check_list(self.form, 'stz', 'Keine Stelle') item_auswahl = check_list(self.form, 'item_auswahl', 'Bitte gewünschte Auszählung ankreuzen.') teilm = self.form.get('teilm') if teilm: abfr = Abfrage(teilm) query = Query(abfr) else: query = Query() fs, jgh, jgh07 = self.check_params(von_jahr, bis_jahr, stz, item_auswahl, query) ## # jgh-Liste dabei? ## jgh = 'jgh_gesamt' in item_auswahl or query.jgh ## # fs-Liste dabei? ## fs = 'fs_gesamt' in item_auswahl or query.fs ## ############# ## # Statistik nur für Fälle, wo beide Formulare ausgefüllt sind ## # und wo bei der Bundesstatistik das Endejahr eingetragen ist. ## fs = jgh = True ## ############# ## if not jgh and not fs: ## # Diese Annahme ist falsch für Teilmengenauswertung, weil manche sich ## # auf jgh beziehen können. ## # Bei Regionen problematisch, weil dadurch die GG festgelegt wird. ## fs = True if fs: fs_ggl = self.get_grundgesamtheit(stz, von_jahr, bis_jahr, FachstatistikList) if jgh: jgh_ggl = self.get_grundgesamtheit(stz, von_jahr, bis_jahr, JugendhilfestatistikList) if jgh07: jgh_ggl = self.get_grundgesamtheit(stz, von_jahr, bis_jahr, Jugendhilfestatistik2007List) if fs and (jgh or jgh07): # beide nötig: erzeugt wird eine Liste von Paaren (fs, jgh) für jeden Fall # für den beide Statistiken vorliegen ggl = self.join_fs_jgh_list(fs_ggl, jgh_ggl) #ggl = ggl*500 # Performance bei längeren Listen? ---> ok, 3sec bei 3000 Fälle #ggl = ggl*5000 # Performance bei längeren Listen? ---> ok, 26sec bei 30000 Fälle elif fs: ggl = fs_ggl else: ggl = jgh_ggl anzeige_gg = self.get_grundgesamtheit_anzeige(stz, von_jahr, bis_jahr, fs, jgh, jgh07, len(ggl)) if not ggl: raise EE("Keine Datensätze für die gewünschte Grundgesamtheit:" "\n\n%s\n%s" % anzeige_gg) if query.always_true(): ggl_teilm = ggl else: def qfilter(el): return query.test(el) #ggl_teilm = ggl.filter(qfilter) ggl_teilm = [el for el in ggl if(qfilter(el))] if not ggl_teilm: raise EE("Keine Datensätze für Teilmenge '%s'" % abfr['name']) return self._display_ergebnis( ggl_teilm, anzeige_gg=anzeige_gg, query=query, item_auswahl=item_auswahl, )
def processForm(self, REQUEST, RESPONSE): jahr = check_int_not_empty(self.form, "jahr", "Fehler im Jahr", "") if not jahr: jahr = today().year anzeige = h.FieldsetInputTable( legend="Jahr wählen", daten=[ [ h.SelectItem( label="Jahr", name="jahr", class_="listbox45", tip="Wartezeiten für das gewählte Jahr", options=self.for_jahre(sel=jahr), ), h.Button( value="Anzeigen", name="op", tip="Tabelle mit Wartezeiten anzeigen", type="submit", n_col=2 ), ] ], ) # Fälle ermitteln, wo der Leistungsbeginn in dem gewählten # Jahr liegt faelle = self.beratungen( welche="alle", stelle=self.stelle, ab_jahr=jahr - 1, bis_jahr=jahr, sort=("bg",) # Vorjahr mit einbeziehen ) faelle = faelle.filter(lambda x: x["leistungsbeginn"].year == jahr) auszaehlung = BereichsKategorieAuszaehlung(faelle, "wartezeit", "wartez", title="Verteilung der Wartezeiten") ausz_res = auszaehlung.get_result() summe_haeufigkeiten = sum([m[1] for m in ausz_res]) summe_prozent = sum([m[2] for m in ausz_res]) haeufigkeiten = h.FieldsetDataTable( legend="Wartezeiten für Fälle mit erster Leistung im Jahr %s" % jahr, headers=("", "Häufigkeit", "Prozent"), daten=[ [ h.String(string=m[0]), h.String(string=m[1], class_="tabledataright"), h.String(string="%.2f" % m[2], class_="tabledataright"), ] for m in ausz_res ] + [ [ h.String(string="Summe", class_="tabledatabold"), h.String(string=summe_haeufigkeiten, class_="tabledataboldright", align="right"), h.String(string="%.2f" % summe_prozent, align="right", class_="tabledataboldright"), ] ], ) faelle.sort("wartezeit") # for f in faelle: # print f['fn'], f['bg'], f['leistungsbeginn'], f['wartezeit'] if len(faelle) > 0: median = faelle[(len(faelle) / 2)]["wartezeit"] mittelwert = sum([f["wartezeit"] for f in faelle]) / float(len(faelle)) else: median = "NA" mittelwert = "NA" mittel = h.FieldsetDataTable( legend="Mittelwert und Median der Wartezeiten in " "Kalendertagen für Fälle mit erster Leistung im Jahr %s" % jahr, daten=[ [ h.String(string="Mittelwert (n=%s)" % len(faelle), class_="tabledatabold"), h.String( string="%s" % (isinstance(mittelwert, (int, long, float)) and ("%.2f" % mittelwert) or mittelwert,), align="right", class_="tabledataboldright", ), ], [ h.String(string="Median (n=%s)" % len(faelle), class_="tabledatabold"), h.String(string="%s" % median, align="right", class_="tabledataboldright"), ], ], ) res = h.FormPage( title="Wartezeiten", name="wartezeiten", action="wartezeiten", method="post", breadcrumbs=(("Hauptmenü", "menu"),), hidden=(), rows=(self.get_auswertungs_menu(), anzeige, haeufigkeiten, mittel), ) return res.display()