[Mpuls-commits] r269 - in wasko/trunk: . waskaweb/lib waskaweb/model waskaweb/templates waskaweb/templates/casemanagement
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Thu Feb 19 12:00:51 CET 2009
Author: torsten
Date: 2009-02-19 12:00:50 +0100 (Thu, 19 Feb 2009)
New Revision: 269
Modified:
wasko/trunk/ChangeLog.txt
wasko/trunk/waskaweb/lib/adelexml.py
wasko/trunk/waskaweb/lib/evaluation.py
wasko/trunk/waskaweb/lib/evaluation_new.py
wasko/trunk/waskaweb/lib/renderer.py
wasko/trunk/waskaweb/lib/search.py
wasko/trunk/waskaweb/model/appointment.py
wasko/trunk/waskaweb/model/phases_factory.py
wasko/trunk/waskaweb/templates/casemanagement/overview.mako
wasko/trunk/waskaweb/templates/main.mako
Log:
Explicit datecasts. First adoption of adele evaluation. Comented out some
functions.
Modified: wasko/trunk/ChangeLog.txt
===================================================================
--- wasko/trunk/ChangeLog.txt 2009-02-18 10:23:01 UTC (rev 268)
+++ wasko/trunk/ChangeLog.txt 2009-02-19 11:00:50 UTC (rev 269)
@@ -1,3 +1,31 @@
+2009-02-19 Torsten Irlaender <torsten.irlaender at intevation.de>
+
+ First adoption of the adele evaluation for WASKO.
+
+ * waskaweb/lib/adelexml.py: Changed fieldnames. Still missing some
+ evaluations as it is not clear yet how to evaluate all fields.
+
+
+ Added explicit casts in date comparisons
+
+ * waskaweb/model/appointment.py,
+ waskaweb/lib/search.py,
+ waskaweb/lib/security.py,
+ waskaweb/lib/evaluation.py: Postgres 8.3 needs explicit casts when
+ comparing date-strings with dates.
+
+ Conditional cast of dates on checking default values in phase
+
+ * waskaweb/model/phases_factory.py: SQL query is selected depending on
+ type of the checkes field.
+
+ Commented out some functions which will not be functional for the
+ WASKO prototype:
+
+ * waskaweb/templates/casemanagement/overview.mako,
+ waskaweb/templates/main.mako: Commented out options and links
+
+
2009-02-17 Torsten Irlaender <torsten.irlaender at intevation.de>
Use Widgetcollector from offlineclient
Modified: wasko/trunk/waskaweb/lib/adelexml.py
===================================================================
--- wasko/trunk/waskaweb/lib/adelexml.py 2009-02-18 10:23:01 UTC (rev 268)
+++ wasko/trunk/waskaweb/lib/adelexml.py 2009-02-19 11:00:50 UTC (rev 269)
@@ -18,19 +18,75 @@
EXP_TYPE = re.compile('^([0-9]{1,2},?)+$')
EXP_DATE = re.compile('^\d{4}-\d{2}-\d{2}$')
-SQL_TABLE = "master_tbl_view"
+SQL_TABLE = "master_tbl_eval_total_view"
SQL_GENDER_FIELD = 'geschlecht'
SQL_FKZ = """(TRUE)"""
-SQL_CM = """(kompetenzfeststellung = '1' or (kompetenzfeststellung = '-1' and
-phase in (2,3,4,5)))"""
+#SQL_CM = """(kompetenzfeststellung = '1' or (kompetenzfeststellung = '-1' and
+#phase in (2,3,4,5)))"""
+# 2 = CM-Start
+# 3 = CM-Ende
+# 4 = NB-Start
+# 5 = NB-Ende
+SQL_CM = """(phase in (2,3,4,5))"""
-SQL_TIME = """(datum_feststellung <= '%s'::date and coalesce(beendigung_5, now()) >= '%s'::date)"""
+# Reihenfolge der Datumsfelder:
+# begin,ende,begin,begin,begin,ende,begin,ende,ende,begin,begin,begin,ende,begin,ende
+SQL_TIME = """
+(
+ --
+ -- Ausfiltern der Faelle, die definitiv nicht in Frage kommen
+ --
+ -- Status schwebend geloescht
+ not (s.status = 3)
+ -- Status nicht beendet aber schon anonymisiert
+ and not (s.status = 5 and datum_cm_ende is NULL)
+ -- Beendigung vor BZ
+ and not (coalesce(datum_cm_ende, now()) < '%s'::date)
+ -- Begin nach BZ
+ and not (coalesce(datum_cm_start, '1970-01-01'::date) > '%s'::date)
+ -- Begin vor BZ aber auch letzte Aktualisierung vor BZ
+ and not (coalesce(datum_cm_start, '1970-01-01'::date) < '%s'::date
+ and s.zugriff < '%s'::date)
+ -- Kein Begin und Erstgespraech nicht im BZ
+ and not (datum_cm_start IS NULL and (coalesce(erstgespraech,
+ '1970-01-01'::date) < '%s'::date or coalesce(erstgespraech,
+ '1970-01-01'::date) > '%s'::date)
+ )
+)
+and (
+ --
+ -- Nur Faelle die den Kriterien entsprechen
+ --
+ -- Beendigung im BZ
+ (coalesce(datum_cm_ende, now()) >= '%s'::date
+ and coalesce(datum_cm_ende, now()) <= '%s'::date)
+ or (
+ -- Beendigung nach BZ
+ coalesce(datum_cm_ende, now()) >= '%s'::date
+ and (
+ -- Begin vor BZ und Aktualisierung nach Begin BZ
+ (datum_cm_start < '%s'::date and s.zugriff >=
+ '%s'::date)
+ or
+ -- Begin im BZ
+ (datum_cm_start >= '%s'::date
+ and datum_cm_start <= '%s'::date)
+ )
+ -- Erstgespraech innerhalb des BZ
+ or ( erstgespraech >= '%s'::date and erstgespraech <=
+ '%s'::date)
+ )
+)
+"""
-SQL_EINTRITTE_GESAMT = """('%s'::date <= datum_feststellung and '%s'::date >= datum_feststellung)"""
-SQL_AUSTRITTE_GESAMT = """('%s'::date <= beendigung_5 and '%s'::date >= beendigung_5)"""
-SQL_AUSTRITTE_VORZEITIG = """(art_beendigung = 2 and '%s'::date <= beendigung_5 and '%s'::date >= beendigung_5)"""
-SQL_AUSTRITTE_ABBRUCH = """(art_beendigung = 1 and '%s'::date <= beendigung_5 and '%s'::date >= beendigung_5)"""
+#Alte Abfrage
+#SQL_TIME = """(datum_cm_start <= '%s'::date and coalesce(datum_cm_ende, now()) >= '%s'::date)"""
+
+SQL_EINTRITTE_GESAMT = """('%s'::date <= datum_cm_start and '%s'::date >= datum_cm_start)"""
+SQL_AUSTRITTE_GESAMT = """('%s'::date <= datum_cm_ende and '%s'::date >= datum_cm_ende)"""
+SQL_AUSTRITTE_VORZEITIG = """(cm_end_art = 2 and '%s'::date <= datum_cm_ende and '%s'::date >= datum_cm_ende)"""
+SQL_AUSTRITTE_ABBRUCH = """(cm_end_art = 1 and '%s'::date <= datum_cm_ende and '%s'::date >= datum_cm_ende)"""
SQL_CMKUNDEN = """TRUE"""
SQL_ALTER_15_24 = """(date_part('year', age(geburtsdatum)) >= 14 and date_part('year', age(geburtsdatum)) <= 24)"""
SQL_ALTER = """(date_part('year', age(geburtsdatum)) < 15 or date_part('year', age(geburtsdatum)) >= 25 and date_part('year', age(geburtsdatum)) <= 54 or date_part('year', age(geburtsdatum)) > 64)"""
@@ -44,9 +100,9 @@
SQL_ARBEITSLOSIGKEIT_SGBIII = """(arbeitslosigkeit_1 = 1 and bezug_alg1 = 1)"""
SQL_NICHTERWERBSTAETIG = """(erwerbstaetigkeit_job = 0 and arbeitslosigkeit_1 = 0)"""
SQL_NICHTERWERBSTAETIG_SCHULE = """(erwerbstaetigkeit_job = 0 and arbeitslosigkeit_1 = 0 and bei_eintritt_ist_der_jugendliche = 1)"""
-SQL_MIGRATIONSHINTERGRUND = """(muttersprache not in (18,-1) or staatsangehoerigkeit not in (29,-1) or vater not in (1, -1) or mutter not in (1,-1))"""
-SQL_BEHINDERUNG = """(anerkannte_behinderung = 1)"""
-SQL_SONST_BEEINTRAECHTIGUNG = """(physische_beeintraechtigungen = 1 or psychische_beeintraechtigungen = 1)"""
+SQL_MIGRATIONSHINTERGRUND = """(nat_muspra not in (18,-1) or nat_staat not in (29,-1) or vater_land not in (1, -1) or mutter_land not in (1,-1))"""
+SQL_BEHINDERUNG = """(entw_beh = 1)"""
+SQL_SONST_BEEINTRAECHTIGUNG = """(entw_h_1= 1 or entw_j_1= 1)"""
SQL_OHNEABSCHLUSS = """(schulabschluss_1 = 1)"""
SQL_ISCED1_2 = """(schulabschluss_1 in (3,4,5,9,10))"""
SQL_ISCED3 = """(schulabschluss_1 in (6))"""
@@ -79,7 +135,7 @@
'28': SQL_CMKUNDEN
}
-DEFAULT_EVALUATIONS = ['1','2','3','4','7','8','12','13','14','15','16','17','19','22','23','28']
+DEFAULT_EVALUATIONS = ['1','2','3','4','7','8','9','19','20','21','28']
EVAL_NAMES = {'1': u'Eintritte gesamt',
'2': u'Austritte gesamt',
@@ -154,7 +210,10 @@
try:
#out.append(self.sql_fkz % self.agency)
out.append(self.sql_cm)
- out.append(self.sql_time_frame % (self.end_date, self.start_date))
+ # begin,ende,begin,begin,begin,ende,begin,ende,ende,begin,begin,begin,ende,begin,ende
+ begin = self.start_date
+ ende = self.end_date
+ out.append(self.sql_time_frame % (begin,ende,begin,begin,begin,ende,begin,ende,ende,begin,begin,begin,ende,begin,ende))
except StandardError, err:
print err
try:
@@ -163,7 +222,6 @@
out.append(where)
pass # Maybe the where clause does not have any time restrictions
where = " and ".join(out)
- print where
sql = Evaluation._build_sql(self, where)
return sql
Modified: wasko/trunk/waskaweb/lib/evaluation.py
===================================================================
--- wasko/trunk/waskaweb/lib/evaluation.py 2009-02-18 10:23:01 UTC (rev 268)
+++ wasko/trunk/waskaweb/lib/evaluation.py 2009-02-19 11:00:50 UTC (rev 269)
@@ -117,7 +117,7 @@
interval_end_date = options.get('interval_end_date', d.strftime('%Y-%m-%d'))
fields = {'start_field': interval_start_field, 'start_date': interval_start_date, 'end_field': interval_end_field, 'end_date': interval_end_date}
if interval_start_date != '1970-01-01':
- time_interval = "(coalesce(%(start_field)s, '1970-01-01'::date) <= '%(end_date)s'::date \
+ time_interval = "(coalesce(%(start_field)s, '1970-01-01')::date <= '%(end_date)s'::date \
AND (coalesce(%(end_field)s, now()) >= '%(start_date)s'::date))" % fields
#time_interval = "(coalesce(%(start_field)s, '1970-01-01'::date) <= '%(end_date)s'::date AND \
Modified: wasko/trunk/waskaweb/lib/evaluation_new.py
===================================================================
--- wasko/trunk/waskaweb/lib/evaluation_new.py 2009-02-18 10:23:01 UTC (rev 268)
+++ wasko/trunk/waskaweb/lib/evaluation_new.py 2009-02-19 11:00:50 UTC (rev 269)
@@ -172,7 +172,6 @@
out.append('<%inherit file="/main.mako"/>')
out.append('<%! import waskaweb.lib.filters as F %>')
out.append(self.transform(xml))
- print 'generated mako: %s' % "\n".join(out)
try:
return render_with_mako(eval, out)
except StandardError, err:
@@ -259,7 +258,6 @@
def perform(self):
self._set_header()
for eval_id in self.evaluations:
- print 'performing evaluation for %s' % eval_id
try:
sql = self._build_sql(self.evaluation_mapping.get(eval_id))
evaluation = EvaluationQuery(eval_id, sql)
Modified: wasko/trunk/waskaweb/lib/renderer.py
===================================================================
--- wasko/trunk/waskaweb/lib/renderer.py 2009-02-18 10:23:01 UTC (rev 268)
+++ wasko/trunk/waskaweb/lib/renderer.py 2009-02-19 11:00:50 UTC (rev 269)
@@ -85,9 +85,7 @@
if not self.help: return ''
out = []
- print "Suche in Hilfe nach %s" % dataID
if self.help.hasAnnotations(dataID):
- print "Habe Annotation"
out.append(required_url(dataID, self.get_image))
if self.help.hasAnnotations(dataID, ('evaluation',)):
Modified: wasko/trunk/waskaweb/lib/search.py
===================================================================
--- wasko/trunk/waskaweb/lib/search.py 2009-02-18 10:23:01 UTC (rev 268)
+++ wasko/trunk/waskaweb/lib/search.py 2009-02-19 11:00:50 UTC (rev 269)
@@ -204,7 +204,7 @@
interval_end_date = options.get('interval_end_date', d.strftime('%Y-%m-%d'))
fields = {'start_field': interval_start_field, 'start_date': interval_start_date, 'end_field': interval_end_field, 'end_date': interval_end_date}
if interval_start_date != '1970-01-01':
- time_interval = "(coalesce(%(start_field)s, '1970-01-01'::date) <= '%(end_date)s'::date \
+ time_interval = "(coalesce(%(start_field)s, '1970-01-01')::date <= '%(end_date)s'::date \
AND (coalesce(%(end_field)s, now()) >= '%(start_date)s'::date))" % fields
#time_interval = "(coalesce(%(start_field)s, '1970-01-01'::date) <= '%(end_date)s'::date AND \
Modified: wasko/trunk/waskaweb/model/appointment.py
===================================================================
--- wasko/trunk/waskaweb/model/appointment.py 2009-02-18 10:23:01 UTC (rev 268)
+++ wasko/trunk/waskaweb/model/appointment.py 2009-02-19 11:00:50 UTC (rev 269)
@@ -43,27 +43,27 @@
from waskaweb.model.user import UserObject
GET_GLOBAL_APPOINTMENT_SQL = "SELECT id, master_id, sdatum, edatum, name, beschreibung, art FROM ka_global_termine_tbl_view WHERE id = %(id)s"
-GET_GLOBAL_APPOINTMENTLIST_SQL = "SELECT id, master_id, sdatum, edatum, name, beschreibung, art FROM ka_global_termine_tbl_view WHERE coalesce(edatum, sdatum)::date+1 >= %(date)s ORDER BY sdatum"
+GET_GLOBAL_APPOINTMENTLIST_SQL = "SELECT id, master_id, sdatum, edatum, name, beschreibung, art FROM ka_global_termine_tbl_view WHERE coalesce(edatum, sdatum)::date+1 >= %(date)s::date ORDER BY sdatum"
DELETE_GLOBAL_APPOINTMENT_SQL = "select delete_global_termin_ds(%(id)s)"
CREATE_GLOBAL_APPOINTMENT_SQL = "select create_global_termin_ds()"
STORE_GLOBAL_APPOINTMENT_SQL = "UPDATE ka_global_termine_tbl_view SET \
- sdatum = %(start_date)s, \
- edatum = %(end_date)s, \
+ sdatum = %(start_date)s::date, \
+ edatum = %(end_date)s::date, \
name = %(title)s, \
beschreibung = %(description)s, \
art = %(type)s \
WHERE id = %(id)s"
GET_CASE_APPOINTMENT_SQL = "SELECT id, master_id, sdatum, edatum, name, beschreibung, art FROM ka_fall_termine_tbl_view WHERE id = %(id)s"
-GET_CASE_APPOINTMENTLIST_SQL = "SELECT id, master_id, sdatum, edatum, name, beschreibung, art FROM ka_fall_termine_tbl_view WHERE master_id = %(id)s AND coalesce(edatum, sdatum)::date+1 >= %(date)s AND art = 0 ORDER BY sdatum"
+GET_CASE_APPOINTMENTLIST_SQL = "SELECT id, master_id, sdatum, edatum, name, beschreibung, art FROM ka_fall_termine_tbl_view WHERE master_id = %(id)s AND coalesce(edatum, sdatum)::date+1 >= %(date)s::date AND art = 0 ORDER BY sdatum"
GET_CASE_REMINDERLIST_SQL = "SELECT id, master_id, sdatum, edatum, name, beschreibung, art FROM ka_fall_termine_tbl_view WHERE master_id = %(id)s AND art = 1 ORDER BY sdatum"
-GET_ALLCASES_APPOINTMENTLIST_SQL = "SELECT a.id, a.master_id, a.sdatum, a.edatum, a.name, a.beschreibung, a.art FROM ka_fall_termine_tbl_view a JOIN master_tbl_view m ON m.id = a.master_id WHERE coalesce(edatum, sdatum)::date+1 >= %(date)s AND art = 0 AND m.bearbeiter_id = %(editor)s ORDER BY sdatum"
+GET_ALLCASES_APPOINTMENTLIST_SQL = "SELECT a.id, a.master_id, a.sdatum, a.edatum, a.name, a.beschreibung, a.art FROM ka_fall_termine_tbl_view a JOIN master_tbl_view m ON m.id = a.master_id WHERE coalesce(edatum, sdatum)::date+1 >= %(date)s::date AND art = 0 AND m.bearbeiter_id = %(editor)s ORDER BY sdatum"
GET_ALLCASES_REMINDERLIST_SQL = "SELECT a.id, a.master_id, a.sdatum, a.edatum, a.name, a.beschreibung, a.art FROM ka_fall_termine_tbl_view a JOIN master_tbl_view m ON m.id = a.master_id WHERE art = 1 AND m.bearbeiter_id = %(editor)s ORDER BY sdatum"
DELETE_CASE_APPOINTMENT_SQL = "select delete_fall_termin_ds(%(id)s)"
CREATE_CASE_APPOINTMENT_SQL = "select create_fall_termin_ds(%(id)s)"
STORE_CASE_APPOINTMENT_SQL = "UPDATE ka_fall_termine_tbl_view SET \
- sdatum = %(start_date)s, \
- edatum = %(end_date)s, \
+ sdatum = %(start_date)s::date, \
+ edatum = %(end_date)s::date, \
name = %(title)s, \
beschreibung = %(description)s, \
art = %(type)s \
Modified: wasko/trunk/waskaweb/model/phases_factory.py
===================================================================
--- wasko/trunk/waskaweb/model/phases_factory.py 2009-02-18 10:23:01 UTC (rev 268)
+++ wasko/trunk/waskaweb/model/phases_factory.py 2009-02-19 11:00:50 UTC (rev 269)
@@ -31,20 +31,31 @@
from waskaweb.model.phases import *
from waskaweb.model.phase_transition import *
-from waskaweb.model.data import PageNode, WidgetCollector
+from waskaweb.model.data import PageNode, WidgetCollector, DateLeaf
IS_FILLED = \
"""(%(name)s IS NOT NULL
AND (get_default_value('master_tbl', '%(name)s') IS NULL
- OR %(name)s != get_default_value('master_tbl', '%(name)s')))
+ OR %(name)s <> get_default_value('master_tbl', '%(name)s')))
"""
+IS_FILLED_DATE = \
+"""(%(name)s IS NOT NULL
+ AND (get_default_value('master_tbl', '%(name)s') IS NULL
+ OR %(name)s::date <> get_default_value('master_tbl', '%(name)s')::date))
+"""
IS_NOT_FILLED = \
"""(NOT (%(name)s IS NOT NULL
AND (get_default_value('master_tbl', '%(name)s') IS NULL
- OR %(name)s != get_default_value('master_tbl', '%(name)s'))))
+ OR %(name)s <> get_default_value('master_tbl', '%(name)s'))))
"""
+IS_NOT_FILLED_DATE = \
+"""(NOT (%(name)s IS NOT NULL
+ AND (get_default_value('master_tbl', '%(name)s') IS NULL
+ OR %(name)s::date <> get_default_value('master_tbl', '%(name)s')::date)))
+"""
+
SELECT = \
''' SELECT %s FROM master_tbl_view WHERE id = %%(id)s
'''
@@ -82,7 +93,7 @@
def extractRequiredFields(self, document):
- phases, times = {}, {}
+ phases, times, = {}, {}
all, all_times = [], []
@@ -179,7 +190,13 @@
where_parts = []
for s, v in predecessor_phases.iteritems():
try:
- part = " OR ".join([IS_NOT_FILLED % { 'name': name} for name in [i[0].getName() for i in v]])
+ select_terms = []
+ for name in [i[0].getName() for i in v]:
+ if isinstance(i[0], DateLeaf):
+ select_terms.append(IS_NOT_FILLED_DATE % {'name': name})
+ else:
+ select_terms.append(IS_NOT_FILLED % {'name': name})
+ part = " OR ".join(select_terms)
except:
pass
where_parts.append(part)
@@ -189,12 +206,14 @@
def loadFilled(self, ds_id, cur):
fields = {}
+ fields_type = {}
idx = 0
for f in self.phases.itervalues():
for l in f:
name = l[0].getName()
if not fields.has_key(name):
fields[name] = idx
+ fields_type[name] = l[0]
idx += 1
all = fields.items()
@@ -205,7 +224,10 @@
select_terms = []
for a in all:
- select_terms.append(IS_FILLED % { 'name': a[0] })
+ if isinstance(fields_type.get(a[0]), DateLeaf):
+ select_terms.append(IS_FILLED_DATE % { 'name': a[0] })
+ else:
+ select_terms.append(IS_FILLED % { 'name': a[0] })
select = SELECT % ', '.join(select_terms)
cur.execute(select, { 'id': ds_id })
Modified: wasko/trunk/waskaweb/templates/casemanagement/overview.mako
===================================================================
--- wasko/trunk/waskaweb/templates/casemanagement/overview.mako 2009-02-18 10:23:01 UTC (rev 268)
+++ wasko/trunk/waskaweb/templates/casemanagement/overview.mako 2009-02-19 11:00:50 UTC (rev 269)
@@ -36,14 +36,14 @@
<option value="markanonymize">Anonymisieren</option>
% endif
% if h.hasRole(['admin_ka', 'cm_ka']):
- <option value="stand-in">Vertretung zuweisen</option>
- <option value="exportXLS">Als Excel-Tabellen exportieren</option>
- <option value="exportXML">Als XML-Datei exportieren</option>
- <option value="exportCSV">Als CSV-Datei exportieren</option>
- % if not c.hide_evaluation:
- <option value="evaluate">Auswerten</option>
+ <option value="stand-in">Vertretung zuweisen</option>
+ ##<option value="exportXLS">Als Excel-Tabellen exportieren</option>
+ ##<option value="exportXML">Als XML-Datei exportieren</option>
+ ##<option value="exportCSV">Als CSV-Datei exportieren</option>
+ ##% if not c.hide_evaluation:
+ ## <option value="evaluate">Auswerten</option>
+ ##% endif
% endif
- % endif
</select>
</div>
<div class="waska_form_element w50">
Modified: wasko/trunk/waskaweb/templates/main.mako
===================================================================
--- wasko/trunk/waskaweb/templates/main.mako 2009-02-18 10:23:01 UTC (rev 268)
+++ wasko/trunk/waskaweb/templates/main.mako 2009-02-19 11:00:50 UTC (rev 269)
@@ -68,13 +68,13 @@
<li><a href="${h.url_for(controller='/case_overview', action='overview', reset=1)}"> ${_('menu_cm_link_overview')}</a> </li>
% if h.hasRole(['cm_ka']):
<li><a href="${h.url_for(controller='/case', action='new')}"> ${_('menu_cm_link_new')}</a> </li>
- <li><a href="${h.url_for(controller='/case', action='importCase')}"> ${_('menu_cm_link_import')}</a> </li>
+ ##<li><a href="${h.url_for(controller='/case', action='importCase')}"> ${_('menu_cm_link_import')}</a> </li>
% endif
<li><a href="${h.url_for(controller='/evaluate', action='evaluateAdele')}">Zwischenbericht</a></li>
- <li><a href="${h.url_for(controller='/evaluate', action='evaluate', id=1, reset=1)}"> ${_('cm_actions_link_evaluate')}</a></li>
- %if session.get('hascaseerrors'):
- <li><a href="${h.url_for(controller='/case_overview', action='listBadCases')}">Inkonsistente Fallakten</a></li>
- %endif
+ ##<li><a href="${h.url_for(controller='/evaluate', action='evaluate', id=1, reset=1)}"> ${_('cm_actions_link_evaluate')}</a></li>
+ ##%if session.get('hascaseerrors'):
+ ##<li><a href="${h.url_for(controller='/case_overview', action='listBadCases')}">Inkonsistente Fallakten</a></li>
+ ##%endif
</ul>
</div>
</div>
More information about the Mpuls-commits
mailing list