[Mpuls-commits] r113 - in waska/trunk: . waskaweb/controllers waskaweb/lib
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Tue Sep 2 12:21:12 CEST 2008
Author: teichmann
Date: 2008-09-02 12:21:11 +0200 (Tue, 02 Sep 2008)
New Revision: 113
Added:
waska/trunk/waskaweb/lib/exportselection.py
Modified:
waska/trunk/ChangeLog.txt
waska/trunk/waskaweb/controllers/agency_overview.py
waska/trunk/waskaweb/controllers/case_overview.py
waska/trunk/waskaweb/lib/xmlexport.py
Log:
Export: out-factorized selection of case parts.
Modified: waska/trunk/ChangeLog.txt
===================================================================
--- waska/trunk/ChangeLog.txt 2008-09-02 09:41:35 UTC (rev 112)
+++ waska/trunk/ChangeLog.txt 2008-09-02 10:21:11 UTC (rev 113)
@@ -1,5 +1,14 @@
2008-09-02 Sascha L. Teichmann <sascha.teichmann at intevation.de>
+ * waskaweb/lib/exportselection.py: New. out-factorized selection of case parts.
+
+ * waskaweb/lib/xmlexport.py: Uses new lib now.
+
+ * waskaweb/controllers/agency_overview.py,
+ waskaweb/controllers/case_overview.py: Adjusted imports.
+
+2008-09-02 Sascha L. Teichmann <sascha.teichmann at intevation.de>
+
* waskaweb/model/case.py: phase is now stored in the master_tbl
2008-09-02 Sascha L. Teichmann <sascha.teichmann at intevation.de>
Modified: waska/trunk/waskaweb/controllers/agency_overview.py
===================================================================
--- waska/trunk/waskaweb/controllers/agency_overview.py 2008-09-02 09:41:35 UTC (rev 112)
+++ waska/trunk/waskaweb/controllers/agency_overview.py 2008-09-02 10:21:11 UTC (rev 113)
@@ -48,7 +48,7 @@
EXPORT_SUCCESS_XML_EXPLAINATION, \
parseSearchOptions
-from waskaweb.lib.xmlexport import CasePartsSelection
+from waskaweb.lib.exportselection import CasePartsSelection
FORM_DEFAULTS = {}
Modified: waska/trunk/waskaweb/controllers/case_overview.py
===================================================================
--- waska/trunk/waskaweb/controllers/case_overview.py 2008-09-02 09:41:35 UTC (rev 112)
+++ waska/trunk/waskaweb/controllers/case_overview.py 2008-09-02 10:21:11 UTC (rev 113)
@@ -42,7 +42,7 @@
from waskaweb.model.user import UserListObject, UserObject, UserGroupList
from waskaweb.controllers.CaseBase import CasebaseController
-from waskaweb.lib.xmlexport import CasePartsSelection
+from waskaweb.lib.exportselection import CasePartsSelection
from datetime import datetime
Added: waska/trunk/waskaweb/lib/exportselection.py
===================================================================
--- waska/trunk/waskaweb/lib/exportselection.py 2008-09-02 09:41:35 UTC (rev 112)
+++ waska/trunk/waskaweb/lib/exportselection.py 2008-09-02 10:21:11 UTC (rev 113)
@@ -0,0 +1,199 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright 2007, 2008 Intevation GmbH, Germany, <info at intevation.de>
+#
+# This file is part of mpuls WASKA (CoMPUter-based case fiLeS -
+# Web-Anwendungs-Server fuer Kompetenzagenturen).
+#
+# mpuls WASKA is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Affero General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or (at your
+# option) any later version.
+#
+# mpuls WASKA is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
+# License for more details.
+#
+# You should have received a copy of the GNU Affero General Public
+# License along with mpuls WASKA. If not, see <http://www.gnu.org/licenses/>.
+#
+# mpuls WASKA has been developed on behalf of the
+# Projekttraeger im Deutschen Zentrum fuer Luft- und Raumfahrt e.V. (PT-DLR)
+# within the programme Kompetenzagenturen (Durchfuehrungsphase) funded by
+# the Bundesministerium fuer Familie, Senioren, Frauen und Jugend and
+# European Social Fund resources.
+#
+# Authors:
+# Sascha L. Teichmann <teichmann at intevation.de>
+#
+
+import re
+import sys
+
+from pylons import g
+
+FORM_SECTION_RE = re.compile(r"^form_section_(\d+)$")
+
+RG_UNTERSTUETZUNG = (
+ "angebote_bildenden_bereich",
+ "angebote_berufsvorbereitung",
+ "angebote_berufliche_qualifizierung",
+ "angebote_lebensbewaeltigung")
+
+SECTION_MAP = {
+ 'form_section_666': 'page_einverstaendnis', # Einverständniserklärung, Phase
+ 'form_section_0' : 'page_0', # Zuständigkeiten, Eingangsdaten
+ 'form_section_1' : 'page_25', # Externe Ansprechpartner
+ 'form_section_2' : 'page_1', # Persönliche Angaben
+ 'form_section_3' : 'page_2', # Familiäre Situation
+ 'form_section_4' : 'page_3', # Gesundheitliche Situation
+ 'form_section_5' : 'page_4', # Soziale Lage
+ 'form_section_6' : 'page_5', # Schule
+ 'form_section_7' : 'page_6', # Ausbildung und Arbeit
+ 'form_section_8' : 'page_7', # Weiterer Verlauf
+ 'form_section_9' : 'rg_kompetenzfestellung', # Kompetenzfeststellung
+ 'form_section_10' : 'page_10', # Förderplanung
+ 'form_section_11' : 'rg_unterstuetzungsangebote', # Unterstützungsangebote
+ 'form_section_12' : 'page_15', # Freie Dokumentation
+ 'form_section_13' : 'page_16', # Angaben zum Verlauf und Beendigung des CM
+ 'form_section_14' : 'page_17', # Berufliche Integration
+ 'form_section_15' : 'page_18', # Soziale Integration
+ 'form_section_16' : 'page_19', # Einschätzung des Case-Managers,
+ 'form_section_17' : 'page_20' # Freie Dokumentation
+}
+
+def form_section_sort(a, b):
+ am = FORM_SECTION_RE.match(a)
+ bm = FORM_SECTION_RE.match(b)
+ if not am and not bm:
+ return cmp(a, b)
+ if not am: return +1
+ if not bm: return -1
+ return cmp(int(am.group(1)), int(bm.group(1)))
+
+class CasePartsSelection:
+
+ def __init__(self):
+ # Remember to change the formular validator if you change this
+ # dictionary
+ #'appointments' : 1,
+ self.selections = {
+ 'documents' : 0, # keine Dokumente
+ 'logbook' : 0, # kein Tagebuch
+ 'form_section_0' : 1,
+ 'form_section_1' : 1,
+ 'form_section_2' : 1,
+ 'form_section_3' : 1,
+ 'form_section_4' : 1,
+ 'form_section_5' : 1,
+ 'form_section_6' : 1,
+ 'form_section_7' : 1,
+ 'form_section_8' : 1,
+ 'form_section_9' : 1,
+ 'form_section_10': 1,
+ 'form_section_11': 1,
+ 'form_section_12': 1,
+ 'form_section_13': 1,
+ 'form_section_14': 1,
+ 'form_section_15': 1,
+ 'form_section_16': 1,
+ 'form_section_17': 1 }
+
+ def numItems(self):
+ return len(self.selections)
+
+ def isChecked(self, item):
+ return self.selections.get(item) == 1
+
+ def setChecked(self, item, value):
+ self.selections[item] = value
+
+ def isAllSelected(self):
+ for v in self.selections.itervalues():
+ if v < 1: return False
+ return True
+
+ def allSelectedSections(self):
+ s = [kv[0] for kv in self.selections.iteritems() if kv[1] > 0]
+ # order form_section_XX to top, XX as int, rest to bottom by alpha
+ s.sort(form_section_sort)
+ return s
+
+ def __str__(self):
+ return ", ".join([str(i) for i in self.selections])
+
+class Selector:
+
+ def __init__(self, anonymize=False):
+ self.views = {}
+ self.exportDocuments = False
+ self.exportLogbook = False
+ self.anonymize = anonymize
+
+ def getSelectStatement(self, view):
+ return self.views.get(view)
+
+ def addRepeatGroup(self, name):
+ relname = (self.anonymize and "rg_%s_tbl_anonym_view" or "rg_%s_tbl_view") % name
+ self.views['rg_%s_tbl_view' % name] = \
+ "SELECT * FROM %s WHERE master_id = %%(id)s" % relname
+
+ def addMasterTable(self, projection):
+ relname = self.anonymize and "master_tbl_anonym_view" or "master_tbl_view"
+ self.views['master_tbl_view'] = "SELECT %s FROM %s WHERE id = %%(id)s" % (
+ ", ".join(projection),
+ relname)
+
+class SelectorFactory:
+
+ def __init__(self, case_parts, anonymize=False):
+ self.case_parts = case_parts
+ self.anonymize = anonymize
+
+ def createSelector(self):
+ selector = Selector(self.anonymize)
+ selected_sections = self.case_parts.allSelectedSections()
+ # always export einverstaendiserklaerung and phase
+ selected_sections.insert(0, 'form_section_666')
+
+ master_tbl_items = ['id']
+
+ if not self.anonymize:
+ master_tbl_items.append('uuid_id')
+
+ for part in selected_sections:
+ try:
+ page = SECTION_MAP[part]
+ except:
+ if not self.anonymize:
+ if part == "documents":
+ selector.exportDocuments = True
+ elif part == "logbook":
+ selector.exportLogbook = True
+ else:
+ print >> sys.stderr, "missing %s" % part
+ continue
+
+ if page.startswith("rg_"):
+ if page == 'rg_kompetenzfestellung':
+ selector.addRepeatGroup('kompetenzfestellung')
+ elif page == 'rg_unterstuetzungsangebote':
+ for rg in RG_UNTERSTUETZUNG:
+ selector.addRepeatGroup(rg)
+ else:
+ print >> sys.stderr, "ignoring repeat group %s" % page
+ continue
+
+ nc = g.formedTree.findByName(page)
+ if nc is None:
+ print >> sys.stderr, "missing page '%s'" % page
+ continue
+
+ master_tbl_items.extend([n.getName() for n in nc.allWidgets()])
+
+ selector.addMasterTable(master_tbl_items)
+
+ return selector
+
+# vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8:
Modified: waska/trunk/waskaweb/lib/xmlexport.py
===================================================================
--- waska/trunk/waskaweb/lib/xmlexport.py 2008-09-02 09:41:35 UTC (rev 112)
+++ waska/trunk/waskaweb/lib/xmlexport.py 2008-09-02 10:21:11 UTC (rev 113)
@@ -40,27 +40,7 @@
import waskaweb.lib.helpers as h
-SECTION_MAP = {
- 'form_section_e' : 'page_einverstaendnis', # Einverständniserklärung, Phase
- 'form_section_0' : 'page_0', # Zuständigkeiten, Eingangsdaten
- 'form_section_1' : 'page_25', # Externe Ansprechpartner
- 'form_section_2' : 'page_1', # Persönliche Angaben
- 'form_section_3' : 'page_2', # Familiäre Situation
- 'form_section_4' : 'page_3', # Gesundheitliche Situation
- 'form_section_5' : 'page_4', # Soziale Lage
- 'form_section_6' : 'page_5', # Schule
- 'form_section_7' : 'page_6', # Ausbildung und Arbeit
- 'form_section_8' : 'page_7', # Weiterer Verlauf
- 'form_section_9' : 'rg_kompetenzfestellung', # Kompetenzfeststellung
- 'form_section_10': 'page_10', # Förderplanung
- 'form_section_11': 'rg_unterstuetzungsangebote', # Unterstützungsangebote
- 'form_section_12': 'page_15', # Freie Dokumentation
- 'form_section_13': 'page_16', # Angaben zum Verlauf und Beendigung des CM
- 'form_section_14': 'page_17', # Berufliche Integration
- 'form_section_15': 'page_18', # Soziale Integration
- 'form_section_16': 'page_19', # Einschätzung des Case-Managers,
- 'form_section_17': 'page_20' # Freie Dokumentation
- }
+from exportselection import RG_UNTERSTUETZUNG, SelectorFactory, CasePartsSelection
FETCH_ALL_IDS = \
"""SELECT id FROM master_tbl_view"""
@@ -79,12 +59,6 @@
WHERE master_id = %(id)s
"""
-RG_UNTERSTUETZUNG = (
- "angebote_bildenden_bereich",
- "angebote_berufsvorbereitung",
- "angebote_berufliche_qualifizierung",
- "angebote_lebensbewaeltigung")
-
RG_VIEWS = ["kompetenzfestellung"]
RG_VIEWS.extend(RG_UNTERSTUETZUNG)
RG_VIEWS = tuple(RG_VIEWS)
@@ -93,146 +67,10 @@
USER_LOGIN = re.compile(r"(?:[^_]*)_(?:[^_]*)_(.+)")
-FORM_SECTION_RE = re.compile(r"^form_section_(\d+)$")
-
-
-def form_section_sort(a, b):
- am = FORM_SECTION_RE.match(a)
- bm = FORM_SECTION_RE.match(b)
- if not am and not bm:
- return cmp(a, b)
- if not am: return +1
- if not bm: return -1
- return cmp(int(am.group(1)), int(bm.group(1)))
-
def login(a):
b = USER_LOGIN.findall(a)
return b and b[0] or a
-class CasePartsSelection:
-
- def __init__(self):
- # Remember to change the formular validator if you change this
- # dictionary
- #'appointments' : 1,
- self.selections = {
- 'documents' : 0, # keine Dokumente
- 'logbook' : 0, # kein Tagebuch
- 'form_section_0' : 1,
- 'form_section_1' : 1,
- 'form_section_2' : 1,
- 'form_section_3' : 1,
- 'form_section_4' : 1,
- 'form_section_5' : 1,
- 'form_section_6' : 1,
- 'form_section_7' : 1,
- 'form_section_8' : 1,
- 'form_section_9' : 1,
- 'form_section_10': 1,
- 'form_section_11': 1,
- 'form_section_12': 1,
- 'form_section_13': 1,
- 'form_section_14': 1,
- 'form_section_15': 1,
- 'form_section_16': 1,
- 'form_section_17': 1 }
-
- def numItems(self):
- return len(self.selections)
-
- def isChecked(self, item):
- return self.selections.get(item) == 1
-
- def setChecked(self, item, value):
- self.selections[item] = value
-
- def isAllSelected(self):
- for v in self.selections.itervalues():
- if v < 1: return False
- return True
-
- def allSelectedSections(self):
- s = [kv[0] for kv in self.selections.iteritems() if kv[1] > 0]
- # order form_section_XX to top, XX as int, rest to bottom by alpha
- s.sort(form_section_sort)
- return s
-
- def __str__(self):
- return ", ".join([str(i) for i in self.selections])
-
-class Selector:
-
- def __init__(self, anonymize=False):
- self.views = {}
- self.exportDocuments = False
- self.exportLogbook = False
- self.anonymize = anonymize
-
- def getSelectStatement(self, view):
- return self.views.get(view)
-
- def addRepeatGroup(self, name):
- relname = (self.anonymize and "rg_%s_tbl_anonym_view" or "rg_%s_tbl_view") % name
- self.views['rg_%s_tbl_view' % name] = \
- "SELECT * FROM %s WHERE master_id = %%(id)s" % relname
-
- def addMasterTable(self, projection):
- relname = self.anonymize and "master_tbl_anonym_view" or "master_tbl_view"
- self.views['master_tbl_view'] = "SELECT %s FROM %s WHERE id = %%(id)s" % (
- ", ".join(projection),
- relname)
-
-class SelectorFactory:
-
- def __init__(self, case_parts, anonymize=False):
- self.case_parts = case_parts
- self.anonymize = anonymize
-
- def createSelector(self):
- selector = Selector(self.anonymize)
- selected_sections = self.case_parts.allSelectedSections()
- # always export einverstaendiserklaerung and phase
- selected_sections.insert(0, 'form_section_e')
-
- master_tbl_items = ['id']
-
- if not self.anonymize:
- master_tbl_items.append('uuid_id')
-
- for part in selected_sections:
- try:
- page = SECTION_MAP[part]
- except:
- if not self.anonymize:
- if part == "documents":
- selector.exportDocuments = True
- elif part == "logbook":
- selector.exportLogbook = True
- else:
- print >> sys.stderr, "missing %s" % part
- continue
-
- if page.startswith("rg_"):
- if page == 'rg_kompetenzfestellung':
- selector.addRepeatGroup('kompetenzfestellung')
- elif page == 'rg_unterstuetzungsangebote':
- for rg in RG_UNTERSTUETZUNG:
- selector.addRepeatGroup(rg)
- else:
- print >> sys.stderr, "ignoring repeat group %s" % page
- continue
-
- nc = g.formedTree.findByName(page)
- if nc is None:
- print >> sys.stderr, "missing page '%s'" % page
- continue
-
- master_tbl_items.extend([n.getName() for n in nc.allWidgets()])
-
- selector.addMasterTable(master_tbl_items)
-
- return selector
-
def cdataWrap(value):
return u"<![CDATA[%s]]>" % value.replace(u"]]>", u"]]><!CDATA[]]]]><![CDATA[>]]><[!CDATA[")
More information about the Mpuls-commits
mailing list