def beratungen_fall(self, mitarbeiter=None, klname=None, klvorname=None, klnachname=None, fn=None, sort=()): join=[('zustaendigkeit', 'zustaendigkeit.fall_id=fall.id'), ('akte', 'fall.akte_id=akte.id'), ('mitarbeiter', 'zustaendigkeit.mit_id=mitarbeiter.id')] # nur die eigene Stelle where = "akte.stzbg=%s" % self.stelle['id'] # nur die letzte Zuständigkeit deren Endedatum gleich dem ZDA-Datum ist where += """ and fall.zday = zustaendigkeit.ey and fall.zdam = zustaendigkeit.em and fall.zdad = zustaendigkeit.ed""" if klname: where += " and (akte.vn like '%%%s%%' or akte.na like '%%%s%%')" % (klname, klname) if klvorname: where += " and (akte.vn like '%%%s%%')" % (klvorname,) if klnachname: where += " and (akte.na like '%%%s%%')" % (klnachname,) if klname or klvorname or klnachname: sort = ('akte__na', 'akte__vn', 'bgy', 'bgm', 'bgd') if fn: where += " and fall.fn like '%%%s%%'" % fn sort = ('bgy', 'fn_count') if mitarbeiter: where += " and mitarbeiter.id = %s" % mitarbeiter['id'] fall_list = FallList( where=where, join=join, ) fall_list.sort(*sort) return fall_list
def beratungen(self, welche, mitarbeiter=None, stelle=None, ab_jahr=None, ab_fallnummer=None, sort=()): assert welche in ('laufend', 'abgeschlossen', 'alle') assert ab_jahr and ab_fallnummer or not ab_fallnummer where = 'fall.zday %s 0' % (welche=='laufend' and '=' or welche=='abgeschlossen' and '>' or welche=='alle' and '>=' ) # nur die letzte Zuständigkeit deren Endedatum gleich dem ZDA-Datum ist where += """ and fall.zday = zustaendigkeit.ey and fall.zdam = zustaendigkeit.em and fall.zdad = zustaendigkeit.ed""" if mitarbeiter: where += ' and mitarbeiter.id=%s' % mitarbeiter['id'] if stelle: where += ' and akte.stzbg=%s' % stelle['id'] if ab_jahr: where += ' and fall.bgy >= %s' % ab_jahr fall_list = FallList( where=where, join=[('zustaendigkeit', 'zustaendigkeit.fall_id=fall.id'), ('akte', 'fall.akte_id=akte.id'), ('mitarbeiter', 'zustaendigkeit.mit_id=mitarbeiter.id')]) if ab_jahr and ab_fallnummer: def ab_fn(fall): j = fall['bgy'] c = fall['fn_count'] # Fallnummerzähler, definiert in ebapi.py return j > ab_jahr or (j == ab_jahr and c >= ab_fallnummer) fall_list = fall_list.filter(ab_fn) fall_list.sort(*sort) return fall_list
def _get_gruppe_address_data_for_one(self, gruppe_id): """Eine dict pro Adresse. Mehrere dicts pro Teilnehmer. Zuerst die dict des Teilnehmers selber, dann der Klient, falls nicht selber Teilnehmer, dann die übrigen Bezugspersonen. """ res = [] gruppe = Gruppe(gruppe_id) # innerhalb einer Gruppe die Adressen eines Falles # nur einmal anzeigen fn2fall = {} teilnehmer = {} kl_teilnehmer = FallGruppeList( where='gruppe_id=%s' % gruppe_id) bp_teilnehmer = BezugspersonGruppeList( where='gruppe_id=%s' % gruppe_id) # alle beteiligte Fälle ermitteln for kl in kl_teilnehmer: fall = kl['fall'] fn = fall['fn'] fn2fall[fn] = fall key = GruppeAddresse(rolle='Klient', fallnummer=fn, vorname=fall['akte__vn'], nachname=fall['akte__na'], ).key teilnehmer[key] = True for bpg in bp_teilnehmer: bp = bpg['bezugsp'] akte = bp['akte'] fall = akte['letzter_fall'] fn = fall['fn'] fn2fall[fn] = fall key = GruppeAddresse(rolle=bp['verw__name'], fallnummer=fn, vorname=bp['vn'], nachname=bp['na'], ).key teilnehmer[key] = True faelle = FallList(fn2fall.values()) faelle.sort('bgy', 'bgm', 'bgd') for fall in faelle: ag = self._get_gruppen_adressen_pro_fall(fall, gruppe) for a in ag: if a.key in teilnehmer: a.teilnehmer = 'ja' res += ag return res