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):
     #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,
         )