[Mpuls-commits] r46 - in trunk: . formed waskaweb/config waskaweb/controllers waskaweb/i18n waskaweb/i18n/de/LC_MESSAGES waskaweb/lib waskaweb/model waskaweb/public/styles waskaweb/templates waskaweb/templates/administration waskaweb/templates/appointments waskaweb/templates/appointments/dialogs waskaweb/templates/casemanagement waskaweb/templates/casemanagement/dialogs waskaweb/templates/casemanagement/evaluation waskaweb/templates/start waskaweb/templates/statement waskaweb/templates/statement/dialogs waskaweb/templates/usersettings

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Wed Aug 13 15:12:55 CEST 2008


Author: thomas
Date: 2008-08-13 15:12:54 +0200 (Wed, 13 Aug 2008)
New Revision: 46

Added:
   trunk/formed/discretion_statement.html
   trunk/waskaweb/lib/excel.py
   trunk/waskaweb/lib/xmlexport.py
   trunk/waskaweb/lib/xmlimport.py
   trunk/waskaweb/model/appointment.py
   trunk/waskaweb/templates/appointments/appointmentlist.mako
   trunk/waskaweb/templates/appointments/dialogs/failed_delete_appointment.mako
   trunk/waskaweb/templates/appointments/dialogs/success_create_appointment.mako
   trunk/waskaweb/templates/appointments/dialogs/success_delete_appointment.mako
   trunk/waskaweb/templates/appointments/dialogs/success_edit_appointment.mako
   trunk/waskaweb/templates/appointments/edit.mako
   trunk/waskaweb/templates/appointments/edit_body.mako
   trunk/waskaweb/templates/appointments/remindlist_body.mako
   trunk/waskaweb/templates/appointments/show_body.mako
   trunk/waskaweb/templates/casemanagement/appointmentlist.mako
   trunk/waskaweb/templates/casemanagement/dialogs/confirm_delete_appointment.mako
   trunk/waskaweb/templates/casemanagement/dialogs/failed_anonymize.mako
   trunk/waskaweb/templates/casemanagement/dialogs/failed_delete_appointment.mako
   trunk/waskaweb/templates/casemanagement/dialogs/failed_xml_import.mako
   trunk/waskaweb/templates/casemanagement/dialogs/success_create_appointment.mako
   trunk/waskaweb/templates/casemanagement/dialogs/success_delete_appointment.mako
   trunk/waskaweb/templates/casemanagement/dialogs/success_edit_appointment.mako
   trunk/waskaweb/templates/casemanagement/dialogs/success_import_anon.mako
   trunk/waskaweb/templates/casemanagement/dialogs/success_xml_import.mako
   trunk/waskaweb/templates/casemanagement/downloadXLS.mako
   trunk/waskaweb/templates/casemanagement/downloadXML.mako
   trunk/waskaweb/templates/casemanagement/editAppointment.mako
   trunk/waskaweb/templates/casemanagement/evaluation/
   trunk/waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako
   trunk/waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako
   trunk/waskaweb/templates/casemanagement/evaluation/evaluation_result_3.mako
   trunk/waskaweb/templates/casemanagement/newAppointment.mako
   trunk/waskaweb/templates/casemanagement/reminderlist.mako
   trunk/waskaweb/templates/casemanagement/showAppointment.mako
   trunk/waskaweb/templates/start/appointmentlist.mako
   trunk/waskaweb/templates/start/remindlist.mako
   trunk/waskaweb/templates/statement/dialogs/missing_statement_body.mako
   trunk/waskaweb/templates/statement/edit.mako.old
   trunk/waskaweb/templates/statement/list_statements.mako
Removed:
   trunk/waskaweb/templates/casemanagement/evaluation_result.mako
Modified:
   trunk/ChangeLog.txt
   trunk/Changes.txt
   trunk/formed/privacy_statement.html
   trunk/waskaweb/config/routing.py
   trunk/waskaweb/controllers/administration.py
   trunk/waskaweb/controllers/appointment.py
   trunk/waskaweb/controllers/case.py
   trunk/waskaweb/controllers/case_overview.py
   trunk/waskaweb/controllers/evaluate.py
   trunk/waskaweb/controllers/statement.py
   trunk/waskaweb/controllers/waska.py
   trunk/waskaweb/i18n/de/LC_MESSAGES/waskaweb.po
   trunk/waskaweb/i18n/waskaweb.pot
   trunk/waskaweb/lib/csv.py
   trunk/waskaweb/lib/evaluation.py
   trunk/waskaweb/lib/filters.py
   trunk/waskaweb/lib/helpers.py
   trunk/waskaweb/lib/validators.py
   trunk/waskaweb/model/agencysettings.py
   trunk/waskaweb/model/case.py
   trunk/waskaweb/model/casedocument.py
   trunk/waskaweb/model/data.py
   trunk/waskaweb/model/navigation.py
   trunk/waskaweb/model/statement.py
   trunk/waskaweb/public/styles/all.css
   trunk/waskaweb/public/styles/screen.css
   trunk/waskaweb/templates/administration/edit_settings.mako
   trunk/waskaweb/templates/administration/show_settings.mako
   trunk/waskaweb/templates/appointments/new.mako
   trunk/waskaweb/templates/appointments/overview.mako
   trunk/waskaweb/templates/appointments/overview_body.mako
   trunk/waskaweb/templates/appointments/show.mako
   trunk/waskaweb/templates/casemanagement/appointments.mako
   trunk/waskaweb/templates/casemanagement/caselist.mako
   trunk/waskaweb/templates/casemanagement/digest.mako
   trunk/waskaweb/templates/casemanagement/downloadCSV.mako
   trunk/waskaweb/templates/casemanagement/main.mako
   trunk/waskaweb/templates/casemanagement/organisation.mako
   trunk/waskaweb/templates/casemanagement/overview.mako
   trunk/waskaweb/templates/casemanagement/upload.mako
   trunk/waskaweb/templates/main.mako
   trunk/waskaweb/templates/start/start.mako
   trunk/waskaweb/templates/statement/dialogs/missing_statement.mako
   trunk/waskaweb/templates/statement/edit.mako
   trunk/waskaweb/templates/usersettings/change_password.mako
Log:
Load f5e6b88112e9 into trunk.


Modified: trunk/ChangeLog.txt
===================================================================
--- trunk/ChangeLog.txt	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/ChangeLog.txt	2008-08-13 13:12:54 UTC (rev 46)
@@ -1,3 +1,653 @@
+2008-04-15 	Torsten Irlaender  <torsten.irlaender at intevation.de>
+
+	issue285: Handle canceled cases
+
+	* waskaweb/controllers/case.py,
+	  waskaweb/model/appointment.py,
+	  waskaweb/model/case.py,
+	  waskaweb/templates/casemanagement/digest.mako: If a case is cancled
+	  it will be handled in the same way like cases with finished
+	  aftercare.
+
+2008-04-14	Sascha L. Teichmann <teichmann at intevation.de>
+
+	* waskaweb/templates/casemanagement/downloadXML.mako: Open XML export
+	  in a separate window.
+
+2008-04-14	Sascha L. Teichmann <teichmann at intevation.de>
+
+	* Changes.txt: Adjusted to splitted evaluation result.
+
+2008-04-14 	Torsten Irlaender  <torsten.irlaender at intevation.de>
+
+	Added missing result of evaluation
+
+	* waskaweb/i18n/de/LC_MESSAGES/waskaweb.po,
+	  waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:
+	  Added missing evaluation. It got lost during restructuring the
+	  evaluation results. 
+
+2008-04-12	Sascha L. Teichmann <teichmann at intevation.de>
+
+	* waskaweb/templates/casemanagement/digest.mako: Fixed typos.
+
+2008-04-10 	Torsten Irlaender  <torsten.irlaender at intevation.de>
+
+	Fixed issue285.
+
+	* waskaweb/controllers/case.py,
+	  waskaweb/model/appointment.py,
+	  waskaweb/model/case.py,
+	  waskaweb/templates/casemanagement/digest.mako: Changed text of the
+	  reminder dialogs.
+
+	Fixed ISE after creating a new case
+
+	* waskaweb/controllers/case.py: Added targeturl for the
+	  missing-statement dialog.
+
+	Changed workflow of declining the statement (anonymisation)
+
+	* waskaweb/controllers/statement.py,
+	  waskaweb/templates/casemanagement/main.mako: Selecting "no" in
+	  confirmation dialog for anonymisation opens the case again.
+	  Depending on the state of the privacy statement the missing
+	  statement will be opend or the case digest.
+
+	Fixed issue288
+
+	* waskaweb/controllers/evaluate.py: Added new param to the evaluation
+	  method. Depending on this param a different resultpage will be
+	  rendered.
+	* waskaweb/i18n/de/LC_MESSAGES/waskaweb.po,
+	  waskaweb/i18n/waskaweb.pot: New Translations for the resultpage.
+	* waskaweb/templates/main.mako: Call evaluation with default for 1
+	  resultpage.
+	* waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako,
+	  waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako,
+	  waskaweb/templates/casemanagement/evaluation/evaluation_result_3.mako:
+	  New resultpages fpr the evaluation.
+	* waskaweb/templates/casemanagement/evaluation_result.mako: Removed.
+	  Old resultpage.
+
+2008-04-11	Sascha L. Teichmann <teichmann at intevation.de>
+
+	* Changes.txt: Summarized changes since last release.
+
+2008-04-10	Sascha L. Teichmann <teichmann at intevation.de>
+
+	* waskaweb/controllers/case_overview.py,
+	  waskaweb/templates/casemanagement/downloadCSV.mako:
+	  Applied plain-csv-export_beta27.patch to server CSV
+	  case exports as plain text.
+
+2008-04-10 	Torsten Irlaender  <torsten.irlaender at intevation.de>
+
+	Changed creating of reminders depening on aftercasestate.
+
+	* waskaweb/controllers/case.py: Added flag to indicate if a the
+	  aftercare of a case is finished. This flag determines about how the
+	  reminders will be displayed.
+	* waskaweb/model/appointment.py: Changed to ReminderOverview
+	  Controller. Depending of the state of aftercare it will look for the
+	  latest date of each case of create a reminder if the date is older
+	  than the max savetime.
+	* waskaweb/model/case.py: The stateobject now have information about
+	  state of aftercare and the latest date of the case.
+	* waskaweb/templates/casemanagement/digest.mako: Modified dialogs in
+	  the digest giving information about last modification and the
+	  maxsavetime.
+
+	Added form validtion to edit agency-settings.
+
+	* waskaweb/controllers/administration.py: Fixed ISE when validation
+	  fails.
+	* waskaweb/lib/validators.py: Added check that maxsavetime must not be
+	  null
+	* waskaweb/templates/administration/edit_settings.mako: Errors in
+	  Formular are now displayed at the top of the page
+
+	Added new validator for Int-values:
+
+	* waskaweb/lib/validators.py: Addded an new Int-validator with the
+	capability to check max and min value. This was actually copied from
+	a newer version of formencode.
+
+	Added date and time check for appointments.
+
+	* waskaweb/lib/validators.py: Beside checking if the date is given in
+	a correct format, we now check if the date is valid (e.g 45.12.2008).
+	Checks for time also included.
+
+	Removed default end-date from appointments
+
+	* waskaweb/controllers/appointment.py,
+	  waskaweb/controllers/case.py,
+	  waskaweb/lib/validators.py,
+	  waskaweb/model/appointment.py: The enddate is not a manditroy field
+	  anymore. The field isn't prefilled in the formular. Default duration
+	  of an appointment with not endate/endtime is 1 day. 
+	  This value will be inserted into the database.
+
+	Reminders do not vanish anymore when start_date or end_date is
+	exceeded.
+
+	* waskaweb/model/appointment.py: Changed SQL statement for fetching
+	reminders. Dates are irrelevant for reminders now! Just fetch all
+	appointments which are classified as reminders
+
+	Show type of appointment when viewing appointments details
+
+	* waskaweb/templates/appointments/show_body.mako: Added type of the
+	appointment to the template
+
+	Do not display link to create a reminder for the admin
+
+	* waskaweb/templates/casemanagement/main.mako: Added rolecheck for the
+	  quicklink to create a reminder for the case.
+
+	Fix for error message on rangetest of int values.
+
+	* waskaweb/lib/validators.py: Changed error messge in
+	  MaxMinInt-Validator
+
+2008-04-08	Frank Koormann <frank at intevation.de>
+
+	Improved fix for issue277
+
+	* waskaweb/model/navigation.py: Include the general checks on item's
+	children into the has* methods.
+
+2008-04-08 	Torsten Irlaender  <torsten.irlaender at intevation.de>
+	
+	Made Fix for issue277 more robust
+
+	* waskaweb/model/navigation.py: Instead of hardcoding the pageid of
+	  the aidoffers to display this item as formular instead of a folder,
+	  we now check if the page has children which are enabled (visible).
+
+2008-04-07	Sascha L. Teichmann <teichmann at intevation.de>
+
+	* waskaweb/lib/excel.py: Fixed encoding problem. Now its
+	  generated in Unicode.
+
+2008-04-07	Sascha L. Teichmann <teichmann at intevation.de>
+
+	* waskaweb/lib/excel.py: Fixed naming in headers.
+
+2008-04-07	Sascha L. Teichmann <teichmann at intevation.de>
+
+	* waskaweb/controllers/case_overview.py,
+	  waskaweb/lib/excel.py: Fixed small ISEs while exporting as XLS.
+
+2008-04-07	Sascha L. Teichmann <teichmann at intevation.de>
+
+	* waskaweb/controllers/case_overview.py: Add code to download as XLS
+
+	* waskaweb/model/case.py: Make case bundle exportable as XLS
+
+	* waskaweb/templates/casemanagement/overview.mako: Added option to
+	  download case bundle as XLS.
+
+	* waskaweb/templates/casemanagement/downloadXLS.mako: Dialog for XLS
+	  download.
+
+2008-04-07	Sascha L. Teichmann <teichmann at intevation.de>
+
+	* waskaweb/lib/csv.py: Fixed minor bug.
+
+	* waskaweb/lib/excel.py: New. exports as cases as Excel-Spreadsheets.
+
+2008-04-07 	Torsten Irlaender  <torsten.irlaender at intevation.de>
+
+	Fixed issue269:
+
+	* formed/privacy_statement.html: Changed text of the privacy
+	  statement bases on a new template from the DLR.
+
+	Added additional information on lastaccesstime and remaining days
+	until maxsavetime is reached to the case digest.
+
+	* waskaweb/controllers/case.py: Load last-accesstime and maxsavetime
+	* waskaweb/model/case.py: Added function which returns the remaining
+	  days until the max-savetime for the case is reached
+	* waskaweb/model/appointment.py: Make use of the new daysToMaxSavetime
+	  function on calculation of the maxsavetime reminders.
+	* waskaweb/public/styles/screen.css, 
+	  waskaweb/templates/casemanagement/digest.mako: Added new box to
+	  display the max savetime an last-accesstime in the digest. 
+	  Changed style for the additional information. 
+	* waskaweb/templates/appointments/edit_body.mako: Only show reminders
+	  for cm-users. (admin can not have any cases anyway) 
+
+	Added new discretion statement. Reorganised privacy statement. There
+	is now a central page where all statements are listed.
+
+	* waskaweb/controllers/statement.py: Added new methods to render the
+	  list of available statements and to print the new descretion
+	  statement.
+	* waskaweb/i18n/de/LC_MESSAGES/waskaweb.po,
+	  waskaweb/i18n/waskaweb.pot: New translation string for the
+	  discretion statement.
+	* waskaweb/model/agencysettings.py: Added new method to get the
+	  discretion statement.
+	* waskaweb/model/case.py: Added new method to get a filled out version
+	  of the discretion statement for a case.
+	* waskaweb/model/statement.py: Added new statement to the model.
+	* waskaweb/templates/casemanagement/main.mako: Removed
+	  printPrivycyStatement-link from the PrivacySection and added new link to
+	  the list of available statements.
+	* formed/discretion_statement.html: New. Default descretion statement.
+	* waskaweb/templates/statement/list_statements.mako: New. Central page
+	  where all available statements are listed.
+
+	Fixed issue277:
+
+	* waskaweb/model/navigation.py: Added special Rule for the aiplan
+	  overview in the navigation tree. It is now displayed with a
+	  page-symbol instead of a folder symbol.
+
+2008-04-06	Frank Koormann <frank at intevation.de>
+
+	* waskaweb/lib/helpers.py (getKAName): We want the OU != WASKA.
+
+2008-04-04 	Torsten Irlaender  <torsten.irlaender at intevation.de>
+
+	Fixes and html escaping for appointments.
+
+	* waskaweb/lib/filters.py: Added optional parameter "lenght" for the
+	  shorten function.
+	* waskaweb/templates/appointments/overview_body.mako,
+	  waskaweb/templates/appointments/remindlist_body.mako: Added
+	  html-escaping.
+	* waskaweb/templates/appointments/show.mako,
+	  waskaweb/templates/casemanagement/showAppointment.mako: The links to
+	  edit an appointment are now only shown for users who are allowed to
+	  edit the appointment (rolecheck).
+	* waskaweb/templates/appointments/show_body.mako: Replace newlines
+	  with html-<br> for description.
+
+	Implemented manual reminders for cases
+
+	* waskaweb/controllers/case.py: Added methods to create a new
+	  reminder. Basically this is a clone of the new appointment controller,
+	  but this fillout some fields (name of the kid).
+	* waskaweb/controllers/waska.py: Combine the remindlist with the
+	  maxsavetime list 
+	* waskaweb/model/appointment.py: Added new classes regarding to the
+	  remindlist. Added new attrubibute type which differs between normal
+	  appointments and reminders. Changed that all appointments which are
+	  after now() are  displayed to a more softer rule that all
+	  appointments of today and in futuer are displayed. 
+	* waskaweb/templates/appointments/edit_body.mako: Added selection
+	  field to choose which kind of appointment will be created. 
+	* waskaweb/templates/casemanagement/main.mako: Added new link to the
+	  main menu which leads directly to the create appointment dialog.
+	* waskaweb/templates/casemanagement/appointments.mako,
+	  waskaweb/templates/start/start.mako,
+	  waskaweb/templates/appointments/remindlist_body.mako,
+	  waskaweb/templates/casemanagement/reminderlist.mako,
+	  waskaweb/templates/start/remindlist.mako: Added new templates for
+	  the listing of appointments. Note, this whole thing is not as nice
+	  as it could be but it works.
+	* waskaweb/i18n/de/LC_MESSAGES/waskaweb.po,
+	  waskaweb/i18n/waskaweb.pot: Added some translations
+
+2008-04-03 	Torsten Irlaender  <torsten.irlaender at intevation.de>
+
+	Implemented appointment list on startpage
+
+	* waskaweb/config/routing.py: Changed route for showAppointment. It
+	  now takes an optional confirmed param (defaults to 1). 
+	* waskaweb/controllers/case.py: Added new decorator
+	  "checkPrivacyStatement" which could be used if some functions of a
+	  case will be calles from somewhere else than in the case (e.g
+	  appointments on startpage). Then we need to bound in the nag screen
+	  handling the privacy-statement.
+	* waskaweb/controllers/waska.py: Load reminders and a united list of
+	  global and caseappointments. 
+	* waskaweb/model/appointment.py: Changed inheritance of the
+	  Appointment overviews. Added methods to set the appointmentslist or
+	  join two overview object to one. Furter added a sorting algorithm
+	  for sorting appointments in the overview.
+	* waskaweb/controllers/appointment.py: Instanciate
+	  GlobalAppointmentOverview instead of AppointmentOverview.
+	* waskaweb/templates/start/start.mako,
+	  waskaweb/templates/start/appointmentlist.mako: Added
+	  appointmentlists to the startpage.
+	* waskaweb/templates/statement/dialogs/missing_statement_body.mako:
+	  Made this dialog a little bit more generic. The URL which will be
+	  called if the user selects that the state of the statement is further
+	  unclear, is now dynamic and provided through the c.targeturl param.
+
+	Restructured loading of cases
+
+	* waskaweb/controllers/case.py: Because loading of cases can now be
+	  triggerd from more places than selecting a case from within the case
+	  overview the code for loading a case is now seperated in a new
+	  function load_case. This function can be calles from other places
+	  (e.g checkprivacy-decorator)
+
+2008-04-02 	Torsten Irlaender  <torsten.irlaender at intevation.de>
+
+	Implemented adding of case-specific appointments
+
+	* waskaweb/controllers/appointment.py: Added default value (htmlfill) for case_id
+	* waskaweb/controllers/case.py: Added controller-functions to add a
+	  new appointment.
+	* waskaweb/model/appointment.py: createNew-method of the factory now
+	  take an optional "case_id" parameter. 
+	* waskaweb/templates/appointments/edit_body.mako: Added hidden field
+	  for the case_id 
+	* waskaweb/templates/casemanagement/appointments.mako: url for adding
+	  new appointments is now dynamically generated (h.url_for)
+	* waskaweb/templates/casemanagement/dialogs/success_create_appointment.mako,
+	  waskaweb/templates/casemanagement/newAppointment.mako: New. Dialogs
+	  for adding a new appointment. Success-dialog after the appointment
+	  was added. 
+
+	Implemented editing of case-specific appointments
+
+	* waskaweb/controllers/case.py: Added new function to edit the
+	  appointment.
+	* waskaweb/i18n/de/LC_MESSAGES/waskaweb.po,
+	  waskaweb/i18n/waskaweb.pot: Changed some strings in the editing
+	  dialogs.
+	* waskaweb/model/appointment.py: ID of an appointment can not be set
+	  in the setData anymore (wasn't needed anyway).  
+	* waskaweb/templates/appointments/edit_body.mako: Added hiddenfield
+	  for the appointmentid (needed only for editing)
+	* waskaweb/templates/casemanagement/dialogs/success_edit_appointment.mako,
+	  waskaweb/templates/appointments/edit.mako,
+	  waskaweb/templates/casemanagement/editAppointment.mako: New. Dialogs
+	  for editing an existing appointment. Success-dialog after editing.
+
+	Changed sorting of appointments
+
+	* waskaweb/model/appointment.py: Only appointments are listed in the
+	  overview page if either the startdate or enddate of the appointment 
+	  is in the future. Otherwise the appointment doesn't get listet
+	  anymore. appointments are ordered ascending by the startdate. 
+	  
+2008-04-01 	Torsten Irlaender  <torsten.irlaender at intevation.de>
+
+	Fixed issue45
+
+	* waskaweb/controllers/case.py,
+	  waskaweb/model/casedocument.py,
+	  waskaweb/model/data.py: Added new Proxy for nodecomponents. It
+	  takes the submitted dicionary of a formular submission. The Proxy
+	  only returns those elements which are also in the provided dicionary.
+	  This proxy is only used when creating a new case with a formular.
+	* waskaweb/i18n/de/LC_MESSAGES/waskaweb.po: Small typo fix.
+
+	Fixed issue252
+
+	* waskaweb/i18n/de/LC_MESSAGES/waskaweb.po: Shorten text
+
+	Fixed issue259
+
+	* waskaweb/lib/evaluation.py: Added commentline to the exportfiles of
+	  each evaluation containing some additional information. 
+
+2008-03-31	Sascha L. Teichmann <teichmann at intevation.de>
+
+	* waskaweb/controllers/case.py: Call XML import.
+
+	* waskaweb/templates/casemanagement/upload.mako: Modified to show
+	  XML import dialog too.
+
+	* waskaweb/templates/casemanagement/dialogs/failed_xml_import.mako,
+	  waskaweb/templates/casemanagement/dialogs/success_xml_import.mako: New.
+	  Shown after XML import.
+
+2008-03-31	Sascha L. Teichmann <teichmann at intevation.de>
+
+	* waskaweb/lib/xmlimport.py: New. XML import.
+
+2008-03-31	Sascha L. Teichmann <teichmann at intevation.de>
+
+	* waskaweb/model/case.py: Use new import.
+
+	* waskaweb/lib/xmlimport.py -> xmlexport.py: Was named incorrectly.
+
+2008-03-31	Sascha L. Teichmann <teichmann at intevation.de>
+
+	* waskaweb/controllers/case_overview.py: Use correct dialog now.
+
+	* waskaweb/lib/xmlimport.py: Don't use the anon views.
+
+2008-03-31	Sascha L. Teichmann <teichmann at intevation.de>
+
+	* waskaweb/lib/xml.py -> xmlimport.py: To avoid problems with xml.* imports.
+
+	* waskaweb/model/case.py: use new import.
+
+2008-03-31	Sascha L. Teichmann <teichmann at intevation.de>
+
+	* waskaweb/controllers/case_overview.py: call XML import.
+
+	* waskaweb/templates/casemanagement/overview.mako: Added option
+	  to export cases as XML.
+
+	* waskaweb/templates/casemanagement/downloadXML.mako: New.
+	  Confirmation dialog for XML download.
+
+2008-03-31	Sascha L. Teichmann <teichmann at intevation.de>
+
+	* waskaweb/controllers/case_overview.py: Added code to call
+	  XML export.
+
+2008-03-31	Sascha L. Teichmann <teichmann at intevation.de>
+
+	* waskaweb/lib/xml.py: New. Contains XML export.
+
+2008-03-31 Torsten Irlaender  <torsten.irlaender at intevation.de>
+
+	Fixed issue255
+	
+	* waskaweb/i18n/de/LC_MESSAGES/waskaweb.po,
+	  waskaweb/i18n/waskaweb.pot,
+	  waskaweb/templates/casemanagement/evaluation_result.mako: Added
+	  small note to the migration evaluation telling the user which
+	  criteria is important for the evalutation.
+
+	Partially fixed issue258
+
+	* waskaweb/controllers/case.py,
+	  waskaweb/templates/casemanagement/upload.mako: Added checkbox to
+	  enable direct anonymisation of an imported pdf-file.
+	* waskaweb/templates/casemanagement/dialogs/failed_anonymize.mako,
+	  waskaweb/templates/casemanagement/dialogs/success_import_anon.mako:
+	  New. Added success dialog which is show after a case was imported
+	  and anonymized. Further added failed dialogs, which is generally
+	  showm if something goes wrong while importing pdf file 
+
+	Further Fixes for issue258
+
+	* waskaweb/templates/statement/dialogs/missing_statement.mako,
+	  waskaweb/templates/statement/dialogs/missing_statement_body.mako:
+	  This dialog now has 3 options to choose from: 1) The statement is
+	  accecpted, statement is declined, statement is still unclear.
+	  Separated the body of the dialog, so it can be used in other places.
+	* waskaweb/controllers/case.py, 
+	  waskaweb/templates/statement/edit.mako.old,
+	  waskaweb/templates/statement/edit.mako: Changed the dialog for
+	  setting the privacy statement after the case was already opend. This
+	  dialog is now the same as it the dialog shown when opening a case
+	  with missing statement.
+	* waskaweb/controllers/statement.py: Changed headers in the statement
+	  dialog.
+	* waskaweb/i18n/de/LC_MESSAGES/waskaweb.po,
+	  waskaweb/i18n/waskaweb.pot: Changed text in statement dialog
+
+	  
+2008-03-28 Torsten Irlaender  <torsten.irlaender at intevation.de>
+
+	Fixed issue128
+
+	* waskaweb/lib/helpers.py: Iterate over SSL_CLIENT_S_DN in
+	  HTTP-Headers. string and take the second OU for the kaname.
+
+	Partially Fixed issue259
+
+	* waskaweb/lib/evaluation.py,
+ 	  waskaweb/templates/casemanagement/evaluation_result.mako:
+	  Fixed CVS export of migration evalauation. Furter changed naming of
+	  the xported files. The filenames now fits to the numbering of the
+	  evaluations.
+
+	Partially Fixed issue255
+
+	* waskaweb/lib/evaluation.py: Mothertounge is now the only criteria
+	for migration background in evaluation.
+
+	Fixed issue274
+
+	* waskaweb/i18n/de/LC_MESSAGES/waskaweb.po,
+	  waskaweb/templates/casemanagement/organisation.mako:
+	  Gendermainstreamed the namings on this page.
+
+	Implemented editing of global appointments
+
+	* waskaweb/controllers/appointment.py,
+	  waskaweb/templates/appointments/dialogs/success_edit_appointment.mako,
+	  waskaweb/templates/appointments/edit.mako: Added method to edit a global
+	  appointment. New successdialog.
+
+	* waskaweb/i18n/de/LC_MESSAGES/waskaweb.po,
+	  waskaweb/i18n/waskaweb.pot,
+	  waskaweb/templates/appointments/show.mako,
+	  waskaweb/templates/casemanagement/showAppointment.mako: Fixed some
+	  translation issues
+
+	Implemented adding of new global appointments 
+
+	* waskaweb/controllers/appointment.py: Added methods to create global
+	  appointments.
+	* waskaweb/lib/validators.py: Added new validator which checks if the
+	  given datestring is in a valid format. TODO: Check if the data and
+	  time is valid e.g 31.02.2008 or 25:78.
+	* waskaweb/model/appointment.py: Some restructure of the inheritence
+	  of the appointment classes. Added SQL statements for creating and
+	  storing appointments.
+	* waskaweb/templates/appointments/dialogs/success_create_appointment.mako:
+	  New. Successdialog for creating global appointments. 
+	* waskaweb/i18n/de/LC_MESSAGES/waskaweb.po,
+	  waskaweb/i18n/waskaweb.pot,
+	  waskaweb/templates/appointments/new.mako,
+	  waskaweb/templates/appointments/edit_body.mako: The formular is in
+	  the same design like the rest. Error messages are displayed above
+	  the form and fields are hightlighted red in case of an error. Added
+	  translation string.
+	  
+2008-03-27 Torsten Irlaender  <torsten.irlaender at intevation.de>
+
+	Partially fixed Issue268
+
+	* waskaweb/templates/administration/show_settings.mako: Show
+	  maxsavetime for cases in agency setting. Should this setting be
+	  editable?  
+
+	Fixed issue270
+
+	* waskaweb/controllers/case.py: Choosing "No" in confirmation dialog
+	  of the anonymisation of a case now opens the digest of a case.
+	  Additionally added the navigation to the confirmation dialog of
+	  open/close case and anonymisation.
+
+	Fixed issue269
+
+	* formed/privacy_statement.html,
+	  waskaweb/model/statement.py: Changed text of the EE handling the
+	  maxsavetime of a case from months to days, as the savetime is
+	  entered in days in the agencysettings.
+
+2008-03-26 Torsten Irlaender  <torsten.irlaender at intevation.de>
+	
+	Listing of appointments now basically works
+
+	* waskaweb/model/appointment.py: AppointmentOverview now works for
+	  global and case appointments. Appointments now have a getStart-
+	  getEndDate function which optionally takes a format string.
+	* waskaweb/public/styles/all.css, 
+	  waskaweb/templates/appointments/overview_body.mako: Worked on the
+	  layout of the appointment listing.
+	* waskaweb/templates/casemanagement/appointmentlist.mako,
+	  waskaweb/templates/appointments/appointmentlist.mako: Call the
+	  correct controller methods.
+
+	Implemented viewing of appointments
+
+	* waskaweb/controllers/appointment.py
+	  waskaweb/controllers/case.py: Implemented loading an appointment.
+	* waskaweb/i18n/de/LC_MESSAGES/waskaweb.po,
+	  waskaweb/i18n/waskaweb.pot: Added new translation strings.
+	* waskaweb/model/appointment.py: Added Global- and
+	  CaseAppointmentFactory. 
+	* waskaweb/templates/appointments/show.mako,
+	  waskaweb/templates/appointments/show_body.mako,
+	  waskaweb/templates/casemanagement/showAppointment.mako: New
+	  templates for viewing a appointment.
+
+	Implemented deleting of appointments
+
+	* waskaweb/templates/appointments/dialogs/failed_delete_appointment.mako,
+	  waskaweb/templates/appointments/dialogs/success_delete_appointment.mako,
+	  waskaweb/templates/casemanagement/dialogs/confirm_delete_appointment.mako,
+	  waskaweb/templates/casemanagement/dialogs/failed_delete_appointment.mako,
+	  waskaweb/templates/casemanagement/dialogs/success_delete_appointment.mako:
+	  New. Added new confirmation and notification dialogs for deleting
+	  appointments.
+	* waskaweb/config/routing.py: Added new route for deleting case 
+	  appointments.
+	* waskaweb/controllers/appointment.py
+	  waskaweb/controllers/case.py: Added new delete controller method.
+	* waskaweb/model/appointment.py: Some changes on the
+	  AppointmentFactorys. Added delete method.
+	* waskaweb/templates/appointments/appointmentlist.mako,
+	  waskaweb/templates/casemanagement/appointmentlist.mako: Only show the
+	  delete link if the user is allowed to delete appointments.
+	  
+2008-03-25 Torsten Irlaender  <torsten.irlaender at intevation.de>
+
+	Remindlist for cases with expired max savetime
+
+	* waskaweb/controllers/waska.py: Load MaxSaveTimeReminders.
+	* waskaweb/model/case.py,
+	  waskaweb/templates/casemanagement/caselist.mako: Default return
+	  value of getAccessTime is the timestamp-object. Optionally a format
+	  string can be provided. Then the time is returned as string.
+	* waskaweb/public/styles/all.css: Added new style for appointment
+	  listings.
+	* waskaweb/templates/start/start.mako: Added reminder listing for
+	  cases with expired max savetime to the startpage. 
+	* waskaweb/model/appointment.py: New. Model for Appointment and
+	  Reminders. 
+
+	Preparation for the listing of appointments	
+
+	* waskaweb/controllers/appointment.py,	  
+	  waskaweb/controllers/case.py: Load appointment overview.
+	* waskaweb/model/appointment.py: AppointmentOverview can now setup for
+	  the global appointments or if a caseid is provided for the case
+	  appointments.
+	* waskaweb/templates/appointments/overview.mako,
+	  waskaweb/templates/appointments/overview_body.mako,
+	  waskaweb/templates/casemanagement/appointments.mako: Cleanup of the
+	  listing of appointments. overview_body can now be used to be
+	  inherited in other files.
+	* waskaweb/templates/casemanagement/main.mako, 
+	  waskaweb/templates/main.mako: Reenabled appointments.
+	* waskaweb/templates/appointments/appointmentlist.mako,
+	  waskaweb/templates/casemanagement/appointmentlist.mako: New.
+	  These files are inherited from the appointments/overview_body and
+	  include module specific (appointments, case) functionionality.
+
+2008-03-20 Torsten Irlaender  <torsten.irlaender at intevation.de>
+
+	* Changes.txt: Added missing feature of saving the last access time.
+
 2008-03-17 Torsten Irlaender  <torsten.irlaender at intevation.de>
 
 	* waskaweb/model/case.py: Small fix for casesearch. Display cases if
@@ -24,6 +674,11 @@
 
 2008-03-17  Sascha L. Teichmann <teichmann at intevation.de>
 
+	* waskaweb/templates/casemanagement/evaluation_result.mako,
+	  waskaweb/templates/usersettings/change_password.mako: Fixed HTML
+
+2008-03-17  Sascha L. Teichmann <teichmann at intevation.de>
+
 	* waskaweb/templates/administration/overview_user.mako: Fixed HTML
 	  titel -> title.
 

Modified: trunk/Changes.txt
===================================================================
--- trunk/Changes.txt	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/Changes.txt	2008-08-13 13:12:54 UTC (rev 46)
@@ -1,7 +1,93 @@
-Next Beta:
+Beta 28:
 
+    Neu:
+        * Die 
+        * Maximale Aufbewahrungsdauer von Fallakten in Tagen ist nun auf
+          das Intervall zwischen 7 und 180 beschränkt.
+
+        * Neuer Unterpunkt "Datenschutz" -> "Verfügbare Erklärungen"
+
+          - Einwilligungserklärung
+          - Förderplan
+          - Neue Druckvorlage zur Entbindung von der Schweigepflicht.
+
+        Der Name der KA wird nun korrekt aus dem Zertikat entnommen.
+
+        * Termine und Wiedervorlagen:
+
+            Termine und Wiedervorlagen werden auf dem Schwarzen Brett gelistet. 
+
+            Wiedervorlagen:
+
+            - verschwinden, wenn das zugehörigen Datum
+              verstrichen ist.
+
+	    - In der Fallübersicht wird die verbleibenden Restzeit bis zur
+	      nächsten Wiedervorlage angezeigt (ab 14 Tage).
+
+            - können auch manuell angelegt werden.
+
+            Termine: 
+
+            - werden bis zu ihren Verstreichen angezeigt.
+
+            - Agenturweite Termine können von Admins angelegt werden.
+
+            - Fallakten spezifische Termine können vom BerarbeiterIn 
+              und den VertreterIn angelegt werden.
+
+            - Werden auf dem Schwarzen Brett angezeigt.
+
+            - Termine werden auf Gültigkeit hin überprüft.
+
+            - Termine, bei denen kein End-Datum angeben wurde
+              werden auf eine Laufzeit von einem Tag gesetzt.
+
+            - können manuell angelegt, bearbeitet und gelöscht werden.
+
+        * Fallakten können nun auch als Excel-Spreadsheets (XLS-Dateien) exportiert
+          werden.
+
+        * XML-Export und Import von Fallakten-Bündeln
+
+        * CSV-Export wird nun als einfacher Text von WASKA zur Verfügung
+          gestellt. Es traten vorher Problem mit installierten Browser-Plug-Ins
+          von Microsoft Excel auf.
+
+        * Das Ergebnis der Auswertung sind jetzt auf drei Seiten verteilt.
+          1. Auswertungen über alle Jugendlichen
+          2. Auswertung über Jugendliche im Case-Management
+          3. Auswertung über Jugendliche, die das CM abgeschlossen haben
+
+    Verbessert:
+
+        issue269: Löschfrist in Einverständniserklärung
+        issue277: Ordnersymbol vor Unterstützungsangebote ohne Funktion
+        issue45:  Fehlende Vorbelegung der Werte beim Anlegen von neuen Fällen
+        issue252: Dialog fehlende Einverständniserklärung.
+        issue259: CSV-Ausgabe/ interne Auswerung unvollständig)
+        issue255: Problem Migrationshintergrund - Auswertung -> Nur noch die Muttersprache ist relevant.
+        issue128: Login-Dialog: OU 2 Anzeigen
+        issue274: Organisation - Liste der Vertreter mit Spaltenbezeichner "Bearbeiter"
+        issue268: Agentureinstellungen: Löschfrist fehlt und Darstellungsfehler
+        issue270: Abbruch Fallakte anonymisieren führt auf Fallaktenübersicht
+        issue288: Interne Auswertung - Fachliche Verbesserung der Ausgabe
+        issue285: Wiedervorlage von Fallakten (maximale Aufbewahrungsdauer)
+
+Beta 27:
+
 	Neu: 
+		Speicherung der letzten Zugriffszeit
+		====================================
 
+		* Bei einer Bearbeitung der Fallakte wird nun das das letzte
+		  Bearbeitungsdatum gespeichert und in der Fallaktenübersicht
+		  angezeigt.
+
+		  Bitte beachten Sie, dass bis zur ersten Bearbeitung der Fallakte das
+		  Datum des Erstellens der Fallakte in WASKA angezeigt wird. Bei der
+		  nächsten Bearbeitung wird dieses Datum dann aktualisiert.
+
 		Anonymisierung der Fallakte:
 		============================
 
@@ -25,6 +111,11 @@
 		  	
 			http://waska-anwender.intevation.de/download/WASKA-Erlaeuterungen_Anonymisierung.pdf
 
+		* Anonymisierte Fallakten können in der Fallaktenübersicht
+		  eingeblendet werden. Dies dient in der Hauptsache zur Steigerung der
+		  Transparenz des Aktenbestandes. Auf diese Weise ist ersichtlich
+		  wieviele Fälle anonymisiert wurden.
+
 		Zurückziehen Einwilligungserklärung:
 		====================================
 

Added: trunk/formed/discretion_statement.html
===================================================================
--- trunk/formed/discretion_statement.html	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/formed/discretion_statement.html	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,213 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+<title>Einverständniserklärung</title>
+<meta name="generator" content="Bluefish 1.0.7">
+<meta name="date" content="2007-11-15T22:22:38+0100">
+<meta name="copyright" content="Intevation GmbH">
+<meta name="keywords" content="">
+<meta name="description" content="">
+<meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8">
+<meta http-equiv="content-style-type" content="text/css">
+<meta http-equiv="expires" content="0">
+<link href="/styles/all.css" media="all" rel="stylesheet" type="text/css">
+<link href="/styles/print.css'" media="screen" rel="stylesheet" type="text/css">
+<link href="/styles/print.css}" media="print" rel="stylesheet" type="text/css">
+<style type="text/css">
+.statement_content {
+        width: 90%;
+        font-size: 0.90em;
+	margin-bottom: 5em;
+}
+.statement_signs {
+        width: 90%;
+        font-size: 0.90em;
+	margin: 4em 0;
+}
+.statement_highlight {
+        background: #D9D9D9;
+        padding: 0.25em 0;
+        margin: 1em 0;
+}
+.table_a {
+        text-align: left;
+        border: 0;
+}
+.table_b {
+        text-align: left;
+        border: 0;
+        height: 1em;
+        vertical-align: bottom;
+}
+</style>
+<body>
+<h1>Einwilligung zur Übermittlung personenbezogener Daten an die
+Kompetenzagentur $KA_NAME 
+</h1>
+<div class="statement_content">
+<p style="font-size:0.8em;">
+zur Verwendung gegenüber (bitte markieren und Person sowie Organisation mit Sitz/Ort angeben)
+<div class="statement_highlight">Vertrauenspersonen mit Schweigepflicht gem. §203 StGB (Schweigepflichtentbindung beachten!):</div>
+</p>
+<table cellspacing=5 cellpadding=0 width="100%" border=0>
+  <tbody>
+  <tr>
+    <td class="table_a">
+    ( ) Arzt oder sonst. Angehörige v. Heilberufen:
+    </td>
+  </tr>
+  <tr>
+    <td class="table_b">
+    ______________________________
+    </td>
+  </tr>
+  <tr>
+    <td class="table_a">
+    ( ) Berufspsychologen, Sozialarbeiter bzw. Sozialpädagoge 
+    </td>
+  </tr>
+  <tr>
+    <td class="table_b">
+    ______________________________
+    </td>
+  </tr>
+  <tr>
+    <td class="table_a">
+    ( ) Ehe-, Familien-, Jugend-, Schwangerschaftsberater 
+    </td>
+  </tr>
+  <tr>
+    <td class="table_b">
+    ______________________________
+    </td>
+  </tr>
+  <tr>
+    <td class="table_a">
+    ( ) Amtsträger bzw. für den Öffentlichen Dienst Verpflichtete 
+    </td>
+  </tr>
+  <tr>
+    <td class="table_b">
+    ______________________________
+    </td>
+  </tr>
+  <tr>
+    <td class="table_a">
+    ( ) Sonstige (z.B. Rechtsanwalt)
+    </td>
+  </tr>
+  <tr>
+    <td class="table_b">
+    ______________________________
+    </td>
+  </tr>
+  </tbody>
+</table>
+<div class="statement_highlight">
+Sonstige Dritte:
+</div>
+<table cellspacing=5 cellpadding=0 width="100%" border=0>
+  <tbody>
+  <tr>
+    <td class="table_a">
+    ( ) Schule: 
+    </td>
+  </tr>
+  <tr>
+    <td class="table_b">
+    ______________________________
+    </td>
+  </tr>
+  <tr>
+    <td class="table_a">
+    ( ) Sonstige verantwortliche Stelle 
+    </td>
+  </tr>
+  <tr>
+    <td class="table_b">
+    ______________________________
+    </td>
+  </tr>
+  </tbody>
+</table>
+<p>
+Hiermit willige ich darin ein, dass die o.g. Person bzw. verantwortliche Stelle folgende Arten personenbezogener
+Daten über mich an die Kompetenzagentur $KA_NAME übermittelt, soweit es nicht Daten Dritter sind:
+</p>
+<table cellspacing=5 cellpadding=0 width="100%" border=0>
+  <tbody>
+  <tr>
+    <td class="table_a">
+    ( ) Stammdaten (z.B Name, Adresse etc.): 
+    </td>
+  </tr>
+  <tr>
+    <td class="table_a">
+    ( ) Angaben zu schulischen Leistungen / (voraussichtlichem) Schulabschluss 
+    </td>
+  </tr>
+  <tr>
+    <td class="table_a">
+    ( ) Angaben über besondere Fähigkeiten oder Kenntnisse  
+    </td>
+  </tr>
+  <tr>
+    <td class="table_a">
+    ( ) Angaben über beantragte/gewährte/verweigerte Leistungen nach dem Sozialgesetzbuch
+    </td>
+  </tr>
+  <tr>
+    <td class="table_a">
+    ( ) Ärztliche Angaben/Diagnosen/Befunde 
+    </td>
+  </tr>
+  <tr>
+    <td class="table_a">
+    ( ) Sonstige:  ______________________________
+    </td>
+  </tr>
+  </tbody>
+</table>
+<p>
+Die Angaben dienen dazu, die Kompetenzagentur $KA_NAME bei meiner beruflichen und/oder sozialen
+Eingliederung zu unterstützen. Diese Unterstützungsleistungen werden von mir freiwillig in Anspruch genommen,
+ich kann diese jederzeit beenden. Die Kompetenzagentur ist in diesem Fall verpflichtet, sämtliche Daten über
+mich - auch die auf Grundlage dieser Einwilligungserklärung - zu löschen. Auch diese Einwilligung zur
+Übermittlung kann ich jederzeit mit Wirkung für die Zukunft widerrufen.
+</p>
+<div style="font-size:1.2em;">
+<strong>( ) Schweigepflichtentbindung</strong> (bitte markieren, soweit erforderlich)
+</div>
+<p>
+Soweit die Übermittlung der Angaben durch einen Geheimnisträger nach §203 StGB erfolgen soll (Arzt,
+Jugendberater, Sozialarbeiter u.a.) entbinde ich diesen hiermit zu dem vorgenannten Zweck von seiner
+Schweigepflicht.
+</p>
+</div>
+<div class="statement_signs">
+<table cellspacing=5 cellpadding=0 width="100%" border=0>
+  <tbody>
+  <tr>
+    <td width="33%"class="table_a">
+    $VORNAME, $NACHNAME
+    </td>
+    <td widht="33%"style="text-align: center; border:0">
+    </td>
+    <td style="text-align: right; border:0">
+    </td>
+  </tr>
+  <tr>
+    <td class="table_a" style="border-top-color:#000; border-width:1px; border-top-style:solid">
+    Vorname, Nachname</td>
+    <td style="text-align: center; border:0; border-top-color:#000; border-width:1px; border-top-style:solid">
+    Datum</td>
+    <td style="text-align: right; border:0; border-top-color:#000; border-width:1px; border-top-style:solid">
+    Unterschrift</td>
+  </tr>
+  </tbody>
+</table>
+</div>
+</body>
+</html>

Modified: trunk/formed/privacy_statement.html
===================================================================
--- trunk/formed/privacy_statement.html	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/formed/privacy_statement.html	2008-08-13 13:12:54 UTC (rev 46)
@@ -17,73 +17,93 @@
 <link href="/styles/print.css}" media="print" rel="stylesheet" type="text/css">
 <style type="text/css">
 .statement_content {
-	margin-bottom: 10em;
+        width: 90%;
+        font-size: 0.95em;
+	margin-bottom: 5em;
 }
 .statement_signs {
+        width: 90%;
+        font-size: 0.95em;
 	margin: 4em 0;
 }
 </style>
-<script type="text/javascript">
-<!--
-
-// -->
-</script>
 <body>
 <h1>Einwilligungserklärung</h1>
 <div class="statement_content">
 <p><strong>gemäß den Bestimmungen des §4a Bundesdatenschutzgesetz</strong></p>
-<p>Hiermit willige ich, <strong>$VORNAME $NACHNAME</strong>
-wohnhaft in, <strong>$PLZ $ORT</strong></p>
+<p>Hiermit willige ich,<br>
+<br>
+<strong>Vorname:</strong> $VORNAME <strong>Nachname:</strong> $NACHNAME<br>
+<br>
+wohnhaft in<br>
+<br>
+<strong>Straße:</strong> $STRASSE <strong>PLZ/Ort:</strong>$PLZ / $ORT</p>
 <p>
-ein, dass die Kompetenzagentur $KA_NAME im Rahmen ihrer Aufgabe, mich bei meiner beruflichen und
-sozialen Eingliederung zu unterstützen, alle dazu erforderlichen Daten, die meine Person betreffen,
-erheben, verarbeiten und nutzen kann. Diese Daten werden grundsätzlich bei mir erhoben.
+ein, dass mich die Kompetenzagentur $KA_NAME im Rahmen ihrer Aufgabe bei meiner
+beruflichen und sozialen Eingliederung unterstützen, alle dazu erforderlichen
+Daten, die meine Person betreffen, erheben, verarbeiten und nutzen kann. Diese
+Daten werden grundsätzlich bei mir erhoben. Daten über mich können im
+Einzelfall auch bei Dritten erhoben werden, hierfür ist ggfls. eine weitere
+Einwilligung erforderlich.
 </p>
 <p>
-Aus den Daten erstellt die Kompetenzagentur $KA_NAME im Rahmen ihrer Begleitung (Case-Management)
-einen Förder- und Entwicklungsplan, der die wichtigsten Angaben zu meiner persönlichen,
-beruflichen und sozialen Integration enthält. Aus diesem Grund werden auch Daten erhoben, die
-meine Gesundheit betreffen, so fern sie ärztlich attestiert sind. Sie werden verwendet um ein
-vollständiges Förderprofil zu erstellen, das alle Beeinträchtigungen berücksichtigt.
+Aus den Daten erstellt die Kompetenzagentur $KA_NAME im Rahmen ihrer Begleitung
+(Case-Management) einen Förder- und Entwicklungsplan, der die wichtigsten
+Angaben zu meiner persönlichen, berufliche und sozialen Integration enthält.
+Aus diesem Grund werden unter Beachtung der Schweigepflicht ggfl auch Daten
+erhoben, die meine Gesundheit betreffen, so fern sie ärztlich attestiert sind.
+Sie werden verwendet, um ein vollständiges Förderprofil zu erstellen, das alle
+Beeinträchtigungen berücksichtigt.
 </p>
 <p>
-Zum Zweck der wissenschaftlichen Begleitung und Auswertung sowie für die Erfassung von
-statistischen Angaben werden die von mir bei der Kompetenzagentur $KA_NAME erhobenen Daten
-anonymisiert und an den Projektträger im DLR für das Bundesministerium für Familie, Senioren,
-Frauen und Jugend (PT-DLR, Bonn) weitergeleitet. Anonymisiert heißt, dass alle Daten zu Namen
-und Adresse unkenntlich gemacht werden und die weiteren Daten somit nicht mehr mit meiner
-Person in Zusammenhang gebracht werden können. Mit diesen Daten wird PT-DLR ermitteln, ob und
-wie die Ziele des Programms ,,Kompetenzagenturen " erreicht wurden.
+Zum Zweck der wissenschaftlichen Begleitung und Auswertung sowie für die
+Erfassung von statistischen Angaben werden die von mir bei der Kompetenzagentur
+$KA_NAME erhobenen Daten nur anonymisiert an den Projektträger im DLR für das
+Bundesministerium für Familie, Senioren, Frauen und Jugend (PT-DLR, Bonn)
+weitergeleitet. Anonymisiert heißt, dass sowohl mein Name, meine Adresse und
+mein Geburtsdatum aus dem Datensatz entfernt werden, so dass die Angaben über
+mich nicht mehr mit meiner Person in Zusammenhang gebracht werden können. Mit
+diesen Daten wird PT-DLR statistisch ermitteln, ob und wie die Ziele des
+Programms "Kompetenzagenturen" erreicht wurden.
 </p>
 <p>
-Diese Einwilligung kann ich jederzeit widerrufen. Mir ist bewusst, dass dadurch unter Umständen eine
-Begleitung durch die Kompetenzagentur $KA_NAME nicht mehr in dem geplanten oder erforderlichen Umfang
-gewährleistet werden kann.
-Ziehe ich meinen Auftrag, mich von der Kompetenzagentur $KA_NAME bei der beruflichen und sozialen
-Integration begleiten zu lassen zurück, sind alle über mich gespeicherten Daten sofort zu löschen.
-Eine automatische Löschung meiner Daten bei der Kompetenzagentur $KA_NAME findet in jedem Fall Z
-Monate nach Abschluss der Begleitung statt.
-Ausgeschlossen von dieser Löschung bleiben die Angaben auf der Teilnehmerliste (z. B. Name,
-Anschrift, Datum Erstkontakt etc.) Die Angaben auf der Teilnehmerliste werden elektronisch nicht
-verarbeitet und dienen der Kompetenzagentur $KA_NAME und dem PT-DLR zu abrechnungstechnischen
-Zwecken.
+Diese Einwilligung kann ich jederzeit widerrufen. Mir ist bewusst, dass dadurch
+unter Umständen eine Begleitung durch die Kompetenzagentur $KA_NAME nicht mehr oder
+nicht mehr in dem geplanten oder erforderlichen Umfang gewährleistet werden
+kann.<br> Ziehe ich meinen Auftrag, mich von der Kompetenzagentur $KA_NAME bei der
+beruflichen und sozialen Integration begleiten zu lassen zurück, werden alle
+über mich gespeicherten Daten sofort gelöscht. Wenn die Begleitung nach einem
+Zeitraum von $KA_SPEICHERDAUER Tagen nach Abschluss nicht weitergeführt wird, werden meine
+Daten bei der Kompetenzagentur $KA_NAME gelöscht.<br> Ausgeschlossen von dieser
+Löschung bleiben die Angaben auf der Teilnehmerliste (z. B. Name, Anschrift,
+Datum Erstkontakt etc.) Die Angaben auf der Teilnehmerliste werden elektronisch
+nicht verarbeitet und dienen der Kompetenzagentur $KA_NAME und dem PT-DLR zu
+abrechnungstechnischen Zwecken.
 </p>
 <p>
-Ich habe jederzeit die Möglichkeit meine Fallakte bei der Kompetenzagentur $KA_NAME einzusehen.
+Ich habe jederzeit die Möglichkeit, meine Fallakte bei der Kompetenzagentur $KA_NAME
+einzusehen bzw. einen Auszug daraus zu erhalten.
 </p>
 </div>
 <div class="statement_signs">
 <table cellspacing=5 cellpadding=0 width="100%" border=0>
   <tbody>
   <tr>
-    <td style="text-align: left; border:0">_________________, den __.__.____</td>
-    <td style="text-align: right; border:0">________________, den __.__.____</td>
+    <td style="text-align: left; border:0">
+    ______________________________<br>
+    Ort, Datum</td>
+    <td style="text-align: right; border:0">
+    ______________________________<br>
+    Unterschrift des Jugendlichen</td>
   </tr>
   <tr>
-    <td style="height: 5em; vertical-align: bottom;  text-align: left; border:0">(
-    $VORNAME $NACHNAME )</td>
-    <td style="height: 5em; vertical-align: bottom; text-align: right; border:0">( MitarbeiterIn der KA )</td>
-   </tr>
+    <td style="height: 7em; vertical-align: bottom;  text-align: left; border:0">
+    ______________________________<br>
+    Ort, Datum</td>
+    <td style="height: 7em; vertical-align: bottom; text-align: right; border:0">
+    ______________________________<br>
+    Unterschrift Case-ManagerIn</td>
+  </tr>
   </tbody>
 </table>
 </div>

Modified: trunk/waskaweb/config/routing.py
===================================================================
--- trunk/waskaweb/config/routing.py	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/config/routing.py	2008-08-13 13:12:54 UTC (rev 46)
@@ -21,11 +21,13 @@
     map.connect('document/caseDelete/:id/:case/:confirmed', action="caseDelete", controller="document") 
     map.connect('rg_aid/delete/:rg_id/:ds_type/:confirmed', action="delete", controller="rg_aid") 
     map.connect('case/markForDelete/:id/:confirmed', controller="case", action="markForDelete")
+    map.connect('case/deleteAppointment/:id/:confirmed', controller="case", action="deleteAppointment")
     map.connect('case/delete/:id/:confirmed', controller="case", action="delete")
     map.connect('case/restore/:id/:confirmed', controller="case", action="restore")
     map.connect('case/open/:id/:confirmed', controller="case", action="open")
     map.connect('case/close/:id/:confirmed', controller="case", action="close")
     map.connect('case/select/:id/:confirmed', controller="case", action="select")
+    map.connect('case/showAppointment/:id/:confirmed', controller="case", action="showAppointment", confirmed=1)
     map.connect('case/anonymize/:id/:confirmed', controller="case", action="anonymize")
     map.connect('case/:action/:ds_id/:page_id/:form', controller="case") 
     map.connect('case/:action/:ds_id/:page_id', controller="case")

Modified: trunk/waskaweb/controllers/administration.py
===================================================================
--- trunk/waskaweb/controllers/administration.py	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/controllers/administration.py	2008-08-13 13:12:54 UTC (rev 46)
@@ -263,6 +263,7 @@
     @checkRole('admin_ka')
     def editSettingsAction(self):
         validator = EditSettingsForm()
+        c.agency        = Agency()
         try:
             c.form_result = validator.to_python(request.params)
         except formencode.Invalid, error:
@@ -270,7 +271,6 @@
             c.form_errors = error.error_dict or {}
             return render('/administration/edit_settings.mako')
 
-        c.agency        = Agency()
         c.agency.store(c.form_result)
         c.success_for   = EDIT_AGENCY_SUCCESS_HEADER 
         c.success_text  = EDIT_AGENCY_SUCCESS_TEXT

Modified: trunk/waskaweb/controllers/appointment.py
===================================================================
--- trunk/waskaweb/controllers/appointment.py	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/controllers/appointment.py	2008-08-13 13:12:54 UTC (rev 46)
@@ -6,16 +6,31 @@
 # Sascha L. Teichmann <teichmann at intevation.de>
 #
 import logging
+import formencode
+from datetime import datetime
 
 from waskaweb.lib.base import *
 
 from waskaweb.lib.security import checkRole
+from waskaweb.lib.validators import CreateAppointmentForm
+from waskaweb.model.appointment import GlobalAppointmentOverview, GlobalAppointmentFactory
 
 log = logging.getLogger(__name__)
 
-DELETE_APPOINT_NOTIFICATION = u'L&ouml;schen Termin'
-DELETE_APPOINT_NOTIFICATION_TEXT = u'Leider ist die von Ihnen aufgerufene Funktion in der BETA Version dieser Anwendung noch nicht enthalten.' 
+DELETE_APPOINT_CONFIRM = u'Löschen Termin'
+DELETE_APPOINT_CONFIRM_TEXT = u'Wollen Sie wirklich den Termin löschen und die Daten unwiederbringlich verlieren?' 
+DELETE_APPOINT_NOTIFICATION_SUCCESS = u'Termin gelöscht'
+DELETE_APPOINT_NOTIFICATION_TEXT_SUCCESS = u'''Der Termin wurde erfolgreich gelöscht. Klicken Sie auf 'OK', um zur Terminübersicht zu gelangen.''' 
 
+DELETE_APPOINT_NOTIFICATION_FAILED = u'Termin nicht gelöscht'
+DELETE_APPOINT_NOTIFICATION_TEXT_FAILED = u'''Bei dem Löschen des Termins ist einer Fehler aufgetreten. Der Termin wurde nicht gelöscht. Klicken Sie auf 'OK', um zur Terminübersicht zu gelangen.''' 
+
+CREATE_APPOINT_NOTIFICATION_SUCCESS = u'''Termin erstellt'''
+CREATE_APPOINT_NOTIFICATION_TEXT_SUCCESS = u'''Der Termin wurde erfolgreich erstellt. Klicken Sie auf 'OK', um zur Terminübersicht zu gelangen.'''
+
+EDIT_APPOINT_NOTIFICATION_SUCCESS = u'''Termin bearbeitet'''
+EDIT_APPOINT_NOTIFICATION_TEXT_SUCCESS = u'''Der Termin wurde erfolgreich bearbeitet. Klicken Sie auf 'OK', um zur Terminübersicht zu gelanden.'''
+
 class AppointmentController(BaseController):
 
     @checkRole(('admin_ka', 'cm_ka', 'pt_dlr'))
@@ -24,32 +39,125 @@
 
     @checkRole(('admin_ka', 'cm_ka', 'pt_dlr'))
     def overview(self):
+        c.appointmentlist = GlobalAppointmentOverview()
         return render('/appointments/overview.mako')
 
-    @checkRole(('admin_ka', 'cm_ka', 'pt_dlr'))
+    @checkRole(('admin_ka'))
     def create(self):
-        return render('/appointments/new.mako')
+        c.form_errors = {}
+        c.form_result = {}
+        cd = datetime.now()
+        c.form_defaults = {'start_date': cd.strftime('%d.%m.%Y'), \
+                        'start_time': cd.strftime('%H:%M'), \
+                        'case_id': None}
+        form = render('/appointments/new.mako')
+        return formencode.htmlfill.render(unicode(form, 'utf-8'),defaults=c.form_defaults)
 
+    @checkRole(('admin_ka'))
+    def createAction(self):
+        validator = CreateAppointmentForm()
+        factory = GlobalAppointmentFactory()
+        c.form_errors = {}
+        c.form_result = {}
+        try:
+            try:
+                form_result = validator.to_python(request.params)
+                # Create appointment
+                appointment = factory.createNew()
+                appointment.setData(form_result)
+                appointment.store()
+                c.success_for   = CREATE_APPOINT_NOTIFICATION_SUCCESS
+                c.success_text  = CREATE_APPOINT_NOTIFICATION_TEXT_SUCCESS
+                c.url_ok        = "/appointment/overview"
+                return render('/appointments/dialogs/success_create_appointment.mako')
+            except formencode.Invalid, error:
+                c.form_result = error.value
+                c.form_errors = error.error_dict or {}
+                form = render('/appointments/new.mako')
+                return formencode.htmlfill.render(unicode(form, 'utf-8'), \
+                            defaults=c.form_result, \
+                            auto_insert_errors=False, \
+                            errors=c.form_errors)
+        except:
+            return render('/tests/trace.mako')
+
     @checkRole(('admin_ka', 'cm_ka', 'pt_dlr'))
     def show(self, id):
-        return render('/appointments/beta/show_%s.mako' % id)
+        factory = GlobalAppointmentFactory()
+        c.appointment = factory.loadById(id)
+        return render('/appointments/show.mako')
 
-    @checkRole(('admin_ka', 'cm_ka', 'pt_dlr'))
+    @checkRole(('admin_ka'))
     def edit(self, id):
-        return self.show(id) 
+        id = self._checkInt(id)
+        factory = GlobalAppointmentFactory()
+        app = factory.loadById(id)
 
-    @checkRole(('admin_ka', 'cm_ka', 'pt_dlr'))
+        c.form_result = {'start_date'  : app.start_date.strftime('%d.%m.%Y'), \
+                         'start_time'  : app.start_date.strftime('%H:%M'), \
+                         'end_date'    : app.end_date.strftime('%d.%m.%Y'), \
+                         'end_time'    : app.end_date.strftime('%H:%M'), \
+                         'title'       : app.title, \
+                         'id'          : app.id, \
+                         'description' : app.description}
+
+        c.form_errors = {}
+        form = render('/appointments/edit.mako')
+        return formencode.htmlfill.render(unicode(form, 'utf-8'), \
+                defaults=c.form_result, \
+                auto_insert_errors=False, \
+                errors=c.form_errors)
+
+    @checkRole(('admin_ka'))
+    def editAction(self):
+        validator = CreateAppointmentForm()
+        factory = GlobalAppointmentFactory()
+        c.form_errors = {}
+        c.form_result = {}
+        try:
+            try:
+                form_result = validator.to_python(request.params)
+                # Load appointment and set data
+                appointment = factory.loadById(form_result.get('id'))
+                appointment.setData(form_result)
+                appointment.store()
+                c.success_for   = EDIT_APPOINT_NOTIFICATION_SUCCESS
+                c.success_text  = EDIT_APPOINT_NOTIFICATION_TEXT_SUCCESS
+                c.url_ok        = "/appointment/overview"
+                return render('/appointments/dialogs/success_edit_appointment.mako')
+            except formencode.Invalid, error:
+                c.form_result = error.value
+                c.form_errors = error.error_dict or {}
+                form = render('/appointments/edit.mako')
+                return formencode.htmlfill.render(unicode(form, 'utf-8'), \
+                            defaults=c.form_result, \
+                            auto_insert_errors=False, \
+                            errors=c.form_errors)
+        except:
+            return render('/tests/trace.mako')
+
+    @checkRole(('admin_ka'))
     def delete(self, id, confirmed=False):
-        if confirmed:
-            c.notification_for  = DELETE_APPOINT_NOTIFICATION 
-            c.notification_text = DELETE_APPOINT_NOTIFICATION_TEXT 
-            c.url_ok            = "/appointment/overview"
-            return render('/appointments/dialogs/notificate_delete_appointment.mako')
+        id = self._checkInt(id)
+        confirmed = self._checkBool(confirmed)
+        factory = GlobalAppointmentFactory()
+        if confirmed == 1:
+            appointment = factory.loadById(id)
+            if appointment.delete():
+                c.success_for  = DELETE_APPOINT_NOTIFICATION_SUCCESS
+                c.success_text = DELETE_APPOINT_NOTIFICATION_TEXT_SUCCESS
+                c.url_ok       = "/appointment/overview"
+                return render('/appointments/dialogs/success_delete_appointment.mako')
+            else:
+                c.failed_for  = DELETE_APPOINT_NOTIFICATION_FAILED
+                c.failed_text = DELETE_APPOINT_NOTIFICATION_TEXT_FAILED
+                c.url_ok      = "/appointment/overview"
+                return render('/appointments/dialogs/failed_delete_appointment.mako')
         else:
             c.context     = "../main.mako" 
-            c.confirm_for = 'L&ouml;schen Termin'
-            c.question    = 'Wollen Sie wirklich den Termin l&ouml;schen und die Daten unwiederbringlich verlieren?' 
-            c.url_yes     = "/appointment/delete/1/1"
+            c.confirm_for = DELETE_APPOINT_CONFIRM
+            c.question    = DELETE_APPOINT_CONFIRM_TEXT
+            c.url_yes     = "/appointment/delete/%s/1" % id
             c.url_no      = "/appointment/overview/"
             return render('/appointments/dialogs/confirm.mako')
 

Modified: trunk/waskaweb/controllers/case.py
===================================================================
--- trunk/waskaweb/controllers/case.py	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/controllers/case.py	2008-08-13 13:12:54 UTC (rev 46)
@@ -10,27 +10,47 @@
 import logging
 import paste
 import formencode
+from decorator                   import decorator
 
 from pylons import config
 
-from paste.httpexceptions    import HTTPNotFound
-from waskaweb.lib.base       import *
-from waskaweb.lib.evaluation import *
-from waskaweb.lib.validators import \
-    NewCaseForm, \
-    SetStandinForm, \
-    SetEditorForm
+from paste.httpexceptions        import HTTPNotFound
+from waskaweb.lib.base           import *
+from waskaweb.lib.evaluation     import *
+from waskaweb.lib.validators     import NewCaseForm, \
+                                        SetStandinForm, \
+                                        SetEditorForm, \
+                                        CreateAppointmentForm
 
 from waskaweb.model.repeatgroup    import AidObject, AidList 
 from waskaweb.model.user           import *
-from waskaweb.model.statement      import * 
-from waskaweb.model.case           import * 
-from waskaweb.controllers.CaseBase import CasebaseController 
-from waskaweb.model.semantic       import * 
+from waskaweb.model.statement      import *
+from waskaweb.model.case           import *
+from waskaweb.model.appointment    import CaseAppointmentOverview, \
+                                          CaseAppointmentFactory, \
+                                          CaseReminderOverview
+
+from waskaweb.controllers.CaseBase import CasebaseController
+from waskaweb.model.semantic       import *
 from waskaweb.model.navigation     import NavigationTree
 from waskaweb.lib.security         import checkRole
 from waskaweb.model.document       import listDocuments
+from waskaweb.model.data           import FilteredNodeComponentProxy
 
+from waskaweb.lib.db        import db
+from waskaweb.lib.xmlimport import importFromXML
+
+from waskaweb.controllers.appointment import DELETE_APPOINT_NOTIFICATION_SUCCESS, \
+                                             DELETE_APPOINT_NOTIFICATION_FAILED, \
+                                             DELETE_APPOINT_NOTIFICATION_TEXT_SUCCESS, \
+                                             DELETE_APPOINT_NOTIFICATION_TEXT_FAILED, \
+                                             DELETE_APPOINT_CONFIRM, \
+                                             DELETE_APPOINT_CONFIRM_TEXT, \
+                                             CREATE_APPOINT_NOTIFICATION_SUCCESS, \
+                                             CREATE_APPOINT_NOTIFICATION_TEXT_SUCCESS, \
+                                             EDIT_APPOINT_NOTIFICATION_SUCCESS, \
+                                             EDIT_APPOINT_NOTIFICATION_TEXT_SUCCESS
+
 log = logging.getLogger(__name__)
 
 
@@ -51,6 +71,21 @@
 ANONYMIZE_CONFIRM = u"""Fallakte anonymisieren?"""
 ANONYMIZE_CONFIRM_TEXT = u"""Wollen Sie wirklich die Fallakte anonymisieren und die personenbezogenen Daten unwiederbringlich verlieren?. Die Fallakte steht Ihnen danach nicht mehr zur Bearbeitung zur Verfügung. Die anonymisierte Fallakte wird weiterhin in der Auswertung berücksichtigt werden."""
 
+ANONYMIZE_SUCCESS = u"""Fallakte anonymisiert!"""
+ANONYMIZE_SUCCESS_TEXT = u"""Bitte klicken Sie auf "OK", um zur Fallaktenübersicht fortzufahren."""
+
+IMPORT_FAILED = u"""Fallakte wurde nicht importiert!"""
+IMPORT_FAILED_TEXT = u"""Bei dem Importieren der Datei ist ein Fehler aufgetreten. Es konnten keine Daten der Fallakte importiert werden. Klicken Sie auf "OK", um zum Import-Dialog fortzufahren."""
+
+IMPORTS_FAILED = u"""Fallakten wurden nicht importiert!"""
+IMPORTS_FAILED_TEXT = u"""Bei dem Importieren der Datei sind Fehler aufgetreten. Es konnten ggf. nur einzelne Fallakten importiert werden. Klicken Sie auf "OK", um zum Import-Dialog fortzufahren."""
+
+IMPORT_XML_SUCCESS = u"""Fallakten erfolgreich importiert!"""
+IMPORT_XML_SUCCESS_TEXT = u"""Die Fallakten wurde erfolgreich importiert. Bitte klicken Sie auf "OK", um zur Fallaktenübersicht fortzufahren."""
+
+IMPORT_ANON_SUCCESS = u"""Fallakte importiert und anonymisiert!"""
+IMPORT_ANON_SUCCESS_TEXT = u"""Die Fallakte wurde erfolgreich importiert und anonymisiert. Bitte klicken Sie auf "OK", um zur Fallaktenübersicht fortzufahren."""
+
 RESTORE_CONFIRM = u"""Fallakte wiederherstellen?"""
 RESTORE_CONFIRM_TEXT = u"""Wollen Sie wirklich die Fallakte wiederherstellen? Die Fallakte ist danach wieder für die Nutzer bearbeitbar."""
 
@@ -60,6 +95,58 @@
 OPEN_CONFIRM = u"""Geschlossene Fallakte öffnen?"""
 OPEN_CONFIRM_TEXT = u"""Wollen Sie wirklich die Fallakte wieder öffnen?"""
 
+def load_case(id):
+        '''Return a case object'''
+        factory   = CaseFactory()
+        case = factory.loadById(id)
+
+        # New session code
+        session_case = case.getSessionCase()
+        session['case'] = session_case
+
+        navigation = NavigationTree(case)
+        session['navigation.tree'] = navigation
+        session.save()
+        return case
+
+def checkPrivacyStatement(context=None):
+    '''Decorator for the methods in the case controller'''
+    def validate(func, self, *args, **kwargs):
+        #load case and check if the statement is signed
+        if context == "showAppointment":
+            try:
+                app_id = int(args[0])
+                confirmed = int(args[1])
+            except:
+                raise HTTPNotFound()
+            app_factory = CaseAppointmentFactory()
+            app = app_factory.loadById(app_id)
+            case_id = app.case_id
+            c.targeturl = h.url_for(controller="/case", \
+                                    action="showAppointment", \
+                                    id=app_id, \
+                                    confirmed=1)
+        else:
+            try:
+                case_id = int(args[0])
+                confirmed = int(args[1])
+            except:
+                raise HTTPNotFound()
+            c.targeturl = h.url_for(controller="/case", \
+                                    action="select", \
+                                    id=case_id, \
+                                    confirmed=1)
+
+        case = load_case(case_id)
+        statement = case.getPrivacyStatement()
+        # Check if there is a "Einverstaendniserklaerung" None if it is not either signed or declined
+        if (not statement.isSigned() is None) or (confirmed == 1):
+            return func(self, *args, **kwargs)
+        else:
+            c.ds_id = case_id
+            return render('/statement/dialogs/missing_statement.mako')
+    return decorator(validate)
+
 class CaseController(CasebaseController):
 
     def __before__(self):
@@ -71,35 +158,15 @@
 
     def __init_case(self, id):
         '''Return a case object'''
-        id = self._checkInt(id)
-        case = self._loadCase(id)
-        c.digest = case.getDigest() 
-        c.ds_id = id
-
-        # New session code
-        session_case = case.getSessionCase()
-        session['case'] = session_case
-
-        self.navigation = NavigationTree(case)
-        session['navigation.tree'] = self.navigation
-        session.save()
+        case = load_case(id)
+        self.navigation = session.get('navigation.tree')
         return case
 
     @checkRole(('admin_ka', 'cm_ka', 'pt_dlr'))
-    def select(self, id, confirmed):
-        id = self._checkInt(id)
-        confirmed = self._checkBool(confirmed)
+    @checkPrivacyStatement()
+    def select(self, id, confirmed=0):
         case = self.__init_case(id)
-        statement = case.getPrivacyStatement()
-        c.ds_id = case.id
-        # Check if there is a "Einverstaendniserklaerung" None if it is not either signed or declined
-        if (not statement.isSigned() is None) or (confirmed == 1):
-            return self.digest(id)
-        else:
-            # TODO: What todo when the statement has been declined? -> False
-            # Render Nagscreen to inform the user that he is about to open a
-            # case which does not have a signed statement
-            return render('statement/dialogs/missing_statement.mako')
+        return self.digest(id)
 
     @checkRole(('admin_ka', 'cm_ka', 'pt_dlr'))
     def digest(self, id):
@@ -107,10 +174,15 @@
         case = self._loadCase(id)
         c.digest = case.getDigest()
         c.ds_id = id
+        c.last_access = case.getState().getAccessTime('%d.%m.%y %H:%M')
+        c.daysToMaxSavetime = case.getState().daysToMaxSavetime()
+        c.maxsavetime = case.getState().getMaxSavetime()
+        c.finished = case.getState().isCmFinished()
+        c.canceled = case.getState().isCmCanceled()
         #ti = self.navigation.getTreeItem('0')
         #if not ti: return '404'
         c.form_navigation = self._getFormNavigation()
-        c.print_form = "digest" # Which page to open in popup on printing?           
+        c.print_form = "digest" # Which page to open in popup on printing?
         return render('/casemanagement/digest.mako')
 
     @checkRole(('admin_ka', 'cm_ka', 'pt_dlr'))
@@ -203,8 +275,13 @@
                 # 3. Get Page from case and store the data 
                 # TODO: Enable this is the future
 
+                # This filter fixes issue45. The proxy returns only elements
+                # which are in the params. This way only those values get
+                # modified and no other values will be set to NULL.
+                filter = FilteredNodeComponentProxy(request.params.dict_of_lists())
+
                 document = g.formedTree
-                page = document.getPageStore("page_1")
+                page = document.getPageStore("page_1", proxy=filter)
                 page.setId(case.id)
 
                 new_errors = page.save(
@@ -230,6 +307,7 @@
                 # Render Nagscreen to inform the user that he is about to open a
                 # case which does not have a signed statement
                 c.ds_id = case.id
+                c.targeturl = h.url_for(controller="/case", action="select", id=c.ds_id, confirmed=1)
                 return render('statement/dialogs/missing_statement.mako')
 
     @checkRole('cm_ka')
@@ -279,7 +357,7 @@
         c.ds_id      = ds_id
         real_id      = ti.realId(ds_id)
         c.page_id    = page_id
-        c.print_form = "show" # Which page to open in popup on printing?           
+        c.print_form = "show" # Which page to open in popup on printing?
         case_session = session.get('case')
         case_session.setPageId(page_id)
         case_session.setMode("show")
@@ -371,17 +449,52 @@
             pdf = request.POST['pdffile']
             case = factory.importPdf(pdf)
             pdf.file.close()
+            # Check if the file should be anonymized directly after the import
+            if request.POST.get('anonymize'):
+                if case.anonymize():
+                    c.success_for  = IMPORT_ANON_SUCCESS
+                    c.success_text = IMPORT_ANON_SUCCESS_TEXT
+                    c.url_ok       = h.url_for(controller="/case_overview")
+                    # TODO: Initialisation must be done :( maybe we coud change
+                    # this?)
+                    case = self.__init_case(case.id)
+                    return render('/casemanagement/dialogs/success_import_anon.mako')
+            else:
+                return self.select(str(case.id), "0")
         except ImportCaseExistsError, err:
             c.failed_for  = PDF_DUB_NOTIFICATION 
             c.failed_text = PDF_DUB_NOTIFICATION_TEXT % err.value 
             c.url_ok = "/case/importCase"
             return render('/casemanagement/dialogs/notificate_import_dub.mako')
-        except StandardError, err:
-            return self.importCase()
         except:
-            return self.importCase()
-        return self.select(str(case.id), "0")
+            c.failed_for  = IMPORT_FAILED
+            c.failed_text = IMPORT_FAILED_TEXT
+            c.url_ok = "/case/importCase"
+            return render('/casemanagement/dialogs/failed_anonymize.mako')
 
+    @checkRole('cm_ka')
+    def importXMLAction(self):
+        factory = CaseFactory()
+        try:
+            xml = request.POST['xmlfile']
+            conn = None
+            try:
+                conn = db.getConnection()
+                importFromXML(xml.file, conn)
+            finally:
+                db.recycleConnection(conn)
+
+            xml.file.close()
+            c.success_for  = IMPORT_XML_SUCCESS
+            c.success_text = IMPORT_XML_SUCCESS_TEXT
+            c.url_ok       = h.url_for(controller="/case_overview")
+            return render('/casemanagement/dialogs/success_xml_import.mako')
+        except:
+            c.failed_for  = IMPORTS_FAILED
+            c.failed_text = IMPORTS_FAILED_TEXT
+            c.url_ok = "/case/importCase"
+            return render('/casemanagement/dialogs/failed_xml_import.mako')
+
     @checkRole(('admin_ka', 'cm_ka', 'pt_dlr'))
     def export(self):
         return render('/casemanagement/export.mako')
@@ -441,20 +554,173 @@
 
     @checkRole(('admin_ka', 'cm_ka'))
     def appointments(self, id):
+        id                 = self._checkInt(id)
+        case               = self._loadCase(id)
+        c.ds_id            = id
+        c.form_navigation  = self._getFormNavigation()
+        c.remindlist       = CaseReminderOverview(id)
+        c.appointmentlist  = CaseAppointmentOverview(id)
+        return render('/casemanagement/appointments.mako')
+
+    @checkRole(('admin_ka', 'cm_ka'))
+    @checkPrivacyStatement('showAppointment')
+    def showAppointment(self, id, confirmed):
+        factory           = CaseAppointmentFactory()
         id                = self._checkInt(id)
+        app               = factory.loadById(id)
+        c.appointment     = app
+        c.form_navigation = self._getFormNavigation()
+        return render('/casemanagement/showAppointment.mako')
+
+    @checkRole(('cm_ka'))
+    def editAppointment(self, id):
+        id = self._checkInt(id)
+        factory = CaseAppointmentFactory()
+        app = factory.loadById(id)
+
+        c.form_result = {'start_date'  : app.start_date.strftime('%d.%m.%Y'), \
+                         'start_time'  : app.start_date.strftime('%H:%M'), \
+                         'end_date'    : app.end_date.strftime('%d.%m.%Y'), \
+                         'end_time'    : app.end_time.strftime('%H:%M'), \
+                         'title'       : app.title, \
+                         'id'          : app.id, \
+                         'case_id'     : app.case_id, \
+                         'type'        : app.type, \
+                         'description' : app.description}
+
+        c.form_errors = {}
+        c.appointment = app
+        c.form_navigation = self._getFormNavigation()
+        form = render('/casemanagement/editAppointment.mako')
+        return formencode.htmlfill.render(unicode(form, 'utf-8'), \
+                defaults=c.form_result, \
+                auto_insert_errors=False, \
+                errors=c.form_errors)
+
+    @checkRole(('cm_ka'))
+    def editAppointmentAction(self):
+        validator = CreateAppointmentForm()
+        factory = CaseAppointmentFactory()
+        c.form_errors = {}
+        c.form_result = {}
+        try:
+            try:
+                form_result = validator.to_python(request.params)
+                # Load appointment and set data
+                appointment = factory.loadById(form_result.get('id'))
+                appointment.setData(form_result)
+                appointment.store()
+                c.success_for   = EDIT_APPOINT_NOTIFICATION_SUCCESS
+                c.success_text  = EDIT_APPOINT_NOTIFICATION_TEXT_SUCCESS
+                c.url_ok        = h.url_for(controller='/case', \
+                                            action='appointments', \
+                                            id=appointment.case_id)
+
+                c.form_navigation = self._getFormNavigation()
+                return render('/casemanagement/dialogs/success_edit_appointment.mako')
+            except formencode.Invalid, error:
+                c.form_result = error.value
+                c.form_errors = error.error_dict or {}
+                form = render('/casemanagement/editAppointment.mako')
+                return formencode.htmlfill.render(unicode(form, 'utf-8'), \
+                            defaults=c.form_result, \
+                            auto_insert_errors=False, \
+                            errors=c.form_errors)
+        except:
+            return render('/tests/trace.mako')
+
+    @checkRole(('cm_ka'))
+    def deleteAppointment(self, id, confirmed=False):
+        id = self._checkInt(id)
+        confirmed = self._checkBool(confirmed)
+        factory = CaseAppointmentFactory()
+        appointment = factory.loadById(id)
+        c.form_navigation = self._getFormNavigation()
+        if confirmed == 1:
+            if appointment.delete():
+                c.success_for  = DELETE_APPOINT_NOTIFICATION_SUCCESS
+                c.success_text = DELETE_APPOINT_NOTIFICATION_TEXT_SUCCESS
+                c.url_ok       = "/case/appointments/%s" % appointment.case_id
+                return render('/casemanagement/dialogs/success_delete_appointment.mako')
+            else:
+                c.failed_for  = DELETE_APPOINT_NOTIFICATION_FAILED
+                c.failed_text = DELETE_APPOINT_NOTIFICATION_TEXT_FAILED
+                c.url_ok       = "/case/appointments/%s" % appointment.case_id
+                return render('/casemanagement/dialogs/failed_delete_appointment.mako')
+        else:
+            c.context     = "../main.mako" 
+            c.confirm_for = DELETE_APPOINT_CONFIRM
+            c.question    = DELETE_APPOINT_CONFIRM_TEXT
+            c.url_yes     = "/case/deleteAppointment/%s/1" % id
+            c.url_no      = "/case/appointments/%s" % appointment.case_id
+            return render('/casemanagement/dialogs/confirm_delete_appointment.mako')
+
+    @checkRole('cm_ka')
+    def newAppointment(self, id):
+        id                = self._checkInt(id)
         case              = self._loadCase(id)
         c.ds_id           = id
         c.form_navigation = self._getFormNavigation()
-        return render('/casemanagement/appointments.mako')
+        c.form_errors = {}
+        c.form_result = {}
+        cd = datetime.now()
+        c.form_defaults = {'start_date': cd.strftime('%d.%m.%Y'), \
+                        'start_time': cd.strftime('%H:%M'), \
+                        'case_id': id, \
+                        'type': 0}
+        form = render('/casemanagement/newAppointment.mako')
+        return formencode.htmlfill.render(unicode(form, 'utf-8'),defaults=c.form_defaults)
 
     @checkRole('cm_ka')
-    def newAppointment(self, id):
+    def newReminder(self, id):
         id                = self._checkInt(id)
         case              = self._loadCase(id)
         c.ds_id           = id
         c.form_navigation = self._getFormNavigation()
-        return render('/casemanagement/new_appointment.mako')
+        c.form_errors = {}
+        c.form_result = {}
+        cd = datetime.now()
+        c.form_defaults = {'start_date': cd.strftime('%d.%m.%Y'), \
+                        'start_time': cd.strftime('%H:%M'), \
+                        'case_id': id, \
+                        'title': u"%s, %s" % (case.last_name, case.first_name), \
+                        'description': u"Bitte geben Sie den Grund für die Wiedervorlage ein", \
+                        'type': 1}
+        form = render('/casemanagement/newAppointment.mako')
+        return formencode.htmlfill.render(unicode(form, 'utf-8'),defaults=c.form_defaults)
 
+    @checkRole(('cm_ka'))
+    def newAppointmentAction(self):
+        validator = CreateAppointmentForm()
+        factory = CaseAppointmentFactory()
+        c.form_errors = {}
+        c.form_result = {}
+        try:
+            try:
+                form_result = validator.to_python(request.params)
+                # Create appointment
+                appointment = factory.createNew(form_result.get('case_id'))
+                appointment.setData(form_result)
+                appointment.store()
+                c.success_for   = CREATE_APPOINT_NOTIFICATION_SUCCESS
+                c.success_text  = CREATE_APPOINT_NOTIFICATION_TEXT_SUCCESS
+                c.url_ok        = h.url_for(controller='/case', \
+                                            action='appointments', \
+                                            id=appointment.case_id)
+                c.form_navigation = self._getFormNavigation()
+
+                return render('/casemanagement/dialogs/success_create_appointment.mako')
+            except formencode.Invalid, error:
+                c.form_result = error.value
+                c.form_errors = error.error_dict or {}
+                form = render('/casemanagement/newAppointment.mako')
+                return formencode.htmlfill.render(unicode(form, 'utf-8'), \
+                            defaults=c.form_result, \
+                            auto_insert_errors=False, \
+                            errors=c.form_errors)
+        except:
+            return render('/tests/trace.mako')
+
     @checkRole(('admin_ka', 'cm_ka'))
     def documents(self, id):
         id = self._checkInt(id)
@@ -545,6 +811,7 @@
         id        = self._checkInt(id)
         confirmed = self._checkBool(confirmed)
         c.ds_id   = id
+        c.form_navigation = self._getFormNavigation()
         if confirmed == 1:
             case = self._setState(id, 1)
             c.url_ok    = h.url_for(controller="/case", action="organisation", id=id)
@@ -564,6 +831,7 @@
         id        = self._checkInt(id)
         confirmed = self._checkBool(confirmed)
         c.ds_id   = id
+        c.form_navigation = self._getFormNavigation()
         if confirmed == 1:
             case = self._setState(id, 2)
             c.url_ok    = h.url_for(controller="/case", action="organisation", id=id)
@@ -583,12 +851,13 @@
         id        = self._checkInt(id)
         confirmed = self._checkBool(confirmed)
         c.ds_id   = id
+        c.form_navigation = self._getFormNavigation()
         if confirmed == 1:
             case = self._loadCase(id)
             if case.anonymize():
-                c.success_for   =   u'Fallakte anonymisiert!' 
-                c.success_text  =   u'Bitte klicken Sie "OK", um fortzufahren.' 
-                c.url_ok        =   h.url_for(controller="/case_overview")
+                c.success_for   =  ANONYMIZE_SUCCESS
+                c.success_text  =  ANONYMIZE_SUCCESS_TEXT
+                c.url_ok        =  h.url_for(controller="/case_overview")
                 return render('/casemanagement/dialogs/success_anonymize.mako')
             # TODO: Create Errorpage
             return "Error! Could not anonymize ds."
@@ -597,7 +866,7 @@
             c.confirm_for = ANONYMIZE_CONFIRM
             c.question = ANONYMIZE_CONFIRM_TEXT
             c.url_yes = "/case/anonymize/%s/1" % id
-            c.url_no  = "/case_overview/"
+            c.url_no  = "/case/digest/%s" % id
             return render('/casemanagement/dialogs/confirm_anonymize.mako')
 
 # vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8:

Modified: trunk/waskaweb/controllers/case_overview.py
===================================================================
--- trunk/waskaweb/controllers/case_overview.py	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/controllers/case_overview.py	2008-08-13 13:12:54 UTC (rev 46)
@@ -35,6 +35,12 @@
 SETSTANDIN_NOTIFICATION_ERROR_HEADER = u"""Keine Fallakte zugewiesen!""" 
 SETSTANDIN_NOTIFICATION_ERROR = u"""Bei dem Zuweisen der Vertretung für die Fallakten ist ein Fehler aufgetreten. Bitte klicken Sie auf "OK", um fortzufahren."""
 
+EXPORT_SUCCESS_XLS = u'''Export erfolgreich - XLS-Datei erstellt!''' 
+EXPORT_SUCCESS_XLS_EXPLAINATION = u'''Die Fallakten wurden erfolgreich als XLS-Datei exportiert und stehen zum herunterladen bereit. ''' 
+
+EXPORT_SUCCESS_XML = u'''Export erfolgreich - XML-Datei erstellt!''' 
+EXPORT_SUCCESS_XML_EXPLAINATION = u'''Die Fallakten wurden erfolgreich als XML-Datei exportiert und stehen zum herunterladen bereit. ''' 
+
 EXPORT_SUCCESS = u'''Export erfolgreich - CSV-Datei erstellt!''' 
 EXPORT_SUCCESS_EXPLAINATION = u'''Die Fallakten wurden erfolgreich als CSV-Datei exportiert und stehen zum herunterladen bereit. ''' 
 
@@ -194,6 +200,20 @@
                 session.save()
                 return self.exportCSV(1)
 
+            elif action == 'exportXLS':
+                # Fiter out case which are not open(1) or inavtice (2)
+                if case_bundle.isEmpty(): return self._emptyListError()
+                session['casebundle'] = case_bundle
+                session.save()
+                return self.exportXLS(1)
+
+            elif action == 'exportXML':
+                # Fiter out case which are not open(1) or inavtice (2)
+                if case_bundle.isEmpty(): return self._emptyListError()
+                session['casebundle'] = case_bundle
+                session.save()
+                return self.exportXML(1)
+
             elif action == 'evaluate':
                 return u"Auswerten"
             else:
@@ -329,30 +349,65 @@
         confirmed           = self._checkBool(confirmed)
         case_bundle         = session.get('casebundle')
         c.context           = "../main.mako"
-        if confirmed == 1:
-            try:
-                c.success_for  = EXPORT_SUCCESS
-                c.success_text = EXPORT_SUCCESS_EXPLAINATION
-                return self.downloadCSV()
-            except StandardError, err:
-                c.failed_for  = EXPORT_ERROR
-                c.failed_test = EXPORT_ERROR_EXPLAINATION
-                c.url_ok      = "/agency_overview/"
-                return render('/casemanagement/dialogs/failed_export_agency.mako')
-        else:
-            c.confirm_for = DIALOG_CONFIRM_EXPORT
-            c.question    = DIALOG_CONFIRM_EXPORT_EXPLAINATION % "\n".join(self._buildAgencyList(agency_bundle))
-            c.url_yes     = "/case_overview/exportCSV/1"
-            c.url_no      = "/case_overview/"
-            return render('/casemanagement/dialogs/confirm.mako')
+        try:
+            c.success_for  = EXPORT_SUCCESS
+            c.success_text = EXPORT_SUCCESS_EXPLAINATION
+            return self.downloadCSV()
+        except StandardError, err:
+            c.failed_for  = EXPORT_ERROR
+            c.failed_test = EXPORT_ERROR_EXPLAINATION
+            c.url_ok      = "/agency_overview/"
+            return render('/casemanagement/dialogs/failed_export_agency.mako')
 
     @checkRole(('cm_ka', 'admin_ka'))
+    def exportXML(self, confirmed):
+        confirmed           = self._checkBool(confirmed)
+        case_bundle         = session.get('casebundle')
+        c.context           = "../main.mako"
+        try:
+            c.success_for  = EXPORT_SUCCESS_XML
+            c.success_text = EXPORT_SUCCESS_XML_EXPLAINATION
+            return self.downloadXML()
+        except StandardError, err:
+            c.failed_for  = EXPORT_ERROR
+            c.failed_test = EXPORT_ERROR_EXPLAINATION
+            c.url_ok      = "/agency_overview/"
+            return render('/casemanagement/dialogs/failed_export_agency.mako')
+
+    @checkRole(('cm_ka', 'admin_ka'))
+    def exportXLS(self, confirmed):
+        confirmed           = self._checkBool(confirmed)
+        case_bundle         = session.get('casebundle')
+        c.context           = "../main.mako"
+        try:
+            c.success_for  = EXPORT_SUCCESS_XLS
+            c.success_text = EXPORT_SUCCESS_XLS_EXPLAINATION
+            return self.downloadXLS()
+        except StandardError, err:
+            c.failed_for  = EXPORT_ERROR
+            c.failed_test = EXPORT_ERROR_EXPLAINATION
+            c.url_ok      = "/agency_overview/"
+            return render('/casemanagement/dialogs/failed_export_agency.mako')
+
+    @checkRole(('cm_ka', 'admin_ka'))
     def downloadCSV(self):
         c.download_link = h.url_for(action="downloadCSVAction")
         c.overview_link = h.url_for(action="overview")
         return render('casemanagement/downloadCSV.mako')
 
     @checkRole(('cm_ka', 'admin_ka'))
+    def downloadXML(self):
+        c.download_link = h.url_for(action="downloadXMLAction")
+        c.overview_link = h.url_for(action="overview")
+        return render('casemanagement/downloadXML.mako')
+
+    @checkRole(('cm_ka', 'admin_ka'))
+    def downloadXLS(self):
+        c.download_link = h.url_for(action="downloadXLSAction")
+        c.overview_link = h.url_for(action="overview")
+        return render('casemanagement/downloadXLS.mako')
+
+    @checkRole(('cm_ka', 'admin_ka'))
     def downloadCSVAction(self):
         case_bundle = session.get('casebundle')
         case_ids = case_bundle.listDatasetIds()
@@ -362,7 +417,7 @@
                 csv = case_bundle.exportAsCSV()
                 data = paste.fileapp.DataApp(
                     csv,
-                    content_type='text/comma-separated-values',
+                    content_type='text/plain',
                     content_encoding='Latin-1',
                     cache_control='must-revalidate',
                     pragma='public')
@@ -370,4 +425,39 @@
         except:
             return render('/tests/trace.mako')
 
+    @checkRole(('cm_ka', 'admin_ka'))
+    def downloadXMLAction(self):
+        case_bundle = session.get('casebundle')
+        case_ids = case_bundle.listDatasetIds()
+        try:
+            if case_ids:
+                case_bundle = CaseBundle(case_ids)
+                xml = case_bundle.exportAsXML()
+                data = paste.fileapp.DataApp(
+                    xml,
+                    content_type     = 'application/xml',
+                    content_encoding = 'UTF-8',
+                    cache_control    = 'must-revalidate',
+                    pragma           = 'public')
+                return data(request.environ, self.start_response)
+        except:
+            return render('/tests/trace.mako')
+
+    @checkRole(('cm_ka', 'admin_ka'))
+    def downloadXLSAction(self):
+        case_bundle = session.get('casebundle')
+        case_ids = case_bundle.listDatasetIds()
+        try:
+            if case_ids:
+                case_bundle = CaseBundle(case_ids)
+                xls = case_bundle.exportAsXLS()
+                data = paste.fileapp.DataApp(
+                    xls,
+                    content_type     = 'application/msexcel',
+                    cache_control    = 'must-revalidate',
+                    pragma           = 'public')
+                return data(request.environ, self.start_response)
+        except:
+            return render('/tests/trace.mako')
+
 # vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8:

Modified: trunk/waskaweb/controllers/evaluate.py
===================================================================
--- trunk/waskaweb/controllers/evaluate.py	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/controllers/evaluate.py	2008-08-13 13:12:54 UTC (rev 46)
@@ -26,40 +26,46 @@
         raise HTTPNotFound()
 
     @checkRole(('admin_ka', 'cm_ka', 'pt_dlr', 'pb_ka'))
-    def evaluate(self):
+    def evaluate(self, id):
         try:
-            e1 = Evaluation_1()
-            c.eval_1_total, c.eval_1_cm, c.eval_1_percent = e1.perform()
-
-            e2 = Evaluation_2()
-            c.eval_2_t, c.eval_2_m, c.eval_2_w, c.eval_2_i, c.eval_2_u = e2.perform()
-
-            e3 = Evaluation_3()
-            c.eval_3 = e3.perform()
-
-            e4 = Evaluation_4()
-            c.eval_4 = e4.perform()
-
-            e5 = Evaluation_5()
-            c.eval_5 = e5.perform()
-
-            e6 = Evaluation_6()
-            c.eval_6 = e6.perform()
-
-            e7 = Evaluation_7()
-            c.eval_7 = e7.perform()
-
-            e8 = Evaluation_8() 
-            c.eval_8 = e8.perform()
-
-            e9 = Evaluation_9()
-            c.eval_9 = e9.perform()
-
-            e10 = Evaluation_10()
-            c.eval_10 = e10.perform()
+            if id == '1':
+                # Verhältnis Beratungskunden
+                e1 = Evaluation_1()
+                c.eval_1_total, c.eval_1_cm, c.eval_1_percent = e1.perform()
+                # Zugang zur KA
+                e4 = Evaluation_4()
+                c.eval_4 = e4.perform()
+                # Rechtskreis Zugang
+                e5 = Evaluation_5()
+                c.eval_5 = e5.perform()
+                return render('casemanagement/evaluation/evaluation_result_1.mako')
+            elif id == '2':
+                # Verweildauer CM
+                e10 = Evaluation_10()
+                c.eval_10 = e10.perform()
+                # Altersverteilung 
+                e8 = Evaluation_8() 
+                c.eval_8 = e8.perform()
+                # Migration
+                e3 = Evaluation_3()
+                c.eval_3 = e3.perform()
+                # Verteilung Förderangebote
+                e9 = Evaluation_9()
+                c.eval_9 = e9.perform()
+                # Geschlecht
+                e2 = Evaluation_2()
+                c.eval_2_t, c.eval_2_m, c.eval_2_w, c.eval_2_i, c.eval_2_u = e2.perform()
+                return render('casemanagement/evaluation/evaluation_result_2.mako')
+            elif id == '3':
+                # Vermittlung
+                e6 = Evaluation_6()
+                c.eval_6 = e6.perform()
+                # Rechtskreis nach Vermittlung
+                e7 = Evaluation_7()
+                c.eval_7 = e7.perform()
+                return render('casemanagement/evaluation/evaluation_result_3.mako')
         except:
             return render('/tests/trace.mako')
-        return render('casemanagement/evaluation_result.mako')
 
     def _export(self, evaluation):
         content = evaluation.export()

Modified: trunk/waskaweb/controllers/statement.py
===================================================================
--- trunk/waskaweb/controllers/statement.py	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/controllers/statement.py	2008-08-13 13:12:54 UTC (rev 46)
@@ -15,6 +15,9 @@
 from waskaweb.model.statement               import * 
 from waskaweb.lib.security                  import checkRole
 
+from waskaweb.controllers.case              import ANONYMIZE_CONFIRM, \
+                                                   ANONYMIZE_CONFIRM_TEXT
+
 log = logging.getLogger(__name__)
 
 HEADER           = u"""Einverständniserklärung setzen?""" 
@@ -38,6 +41,11 @@
         redirect_to(controller="waska", action="start")
 
     @checkRole('cm_ka')
+    def listStatements(self, id):
+        c.form_navigation = self._getFormNavigation()
+        return render('statement/list_statements.mako')
+
+    @checkRole('cm_ka')
     def printAidPlanStatement(self, id):
         id        = self._checkInt(id)
         case      = self._loadCase(id)
@@ -54,6 +62,14 @@
         return render('statement/default_statement.mako')
 
     @checkRole('cm_ka')
+    def printDiscretionStatement(self, id):
+        id        = self._checkInt(id)
+        case      = self._loadCase(id)
+        statement = case.getDiscretionStatement() 
+        c.content = statement.getContent()
+        return render('statement/default_statement.mako')
+
+    @checkRole('cm_ka')
     def setPrivacyStatement(self, id):
         id                = self._checkInt(id)
         case              = self._loadCase(id)
@@ -61,15 +77,6 @@
         c.ds_id           = id
         return render('statement/edit.mako')
 
-    @checkRole('cm_ka')
-    def setPrivacyStatementAction(self):
-        if request.params.get('statement_signed') == "1": 
-            return self.acceptPrivacyStatement(request.params.get('case_id'), "0")
-        elif request.params.get('statement_signed') == "0" or request.params.get('statement_revoked') == "1":
-            return self.declinePrivacyStatement(request.params.get('case_id'), "0")
-        else:
-            session_case = session.get('case')
-            redirect_to(controller="/statement", action="setPrivacyStatement", id=session_case.id)
 
     @checkRole('cm_ka')
     def acceptPrivacyStatement(self, id, confirmed):
@@ -103,7 +110,10 @@
                 action="acceptPrivacyStatement", \
                 id=id, \
                 confirmed="1")
-            c.url_no = h.url_for('digest', id=id)
+            c.url_no = h.url_for(controller="/case", \
+                action="select", \
+                id=id,
+                confirmed=0)
             return render('statement/dialogs/confirm.mako')
 
     @checkRole('cm_ka')
@@ -134,16 +144,17 @@
                 c.url_ok       = h.url_for ('/case_overview')
                 return render('/statement/dialogs/ee_decline_failed.mako')
         else:
-            c.confirm_for = HEADER 
-            c.question = DECLINE_QUESTION
+            c.confirm_for = ANONYMIZE_CONFIRM
+            c.question = ANONYMIZE_CONFIRM_TEXT
             c.url_yes = h.url_for(
                 controller="statement", \
                 action="declinePrivacyStatement", \
                 id=id, \
                 confirmed="1")
-            c.url_no = h.url_for(controller="statement", \
-                action="setPrivacyStatement", \
-                id=id)
+            c.url_no = h.url_for(controller="/case", \
+                action="select", \
+                id=id,
+                confirmed=0)
             return render('statement/dialogs/confirm.mako')
 
 # vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8:

Modified: trunk/waskaweb/controllers/waska.py
===================================================================
--- trunk/waskaweb/controllers/waska.py	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/controllers/waska.py	2008-08-13 13:12:54 UTC (rev 46)
@@ -10,7 +10,11 @@
 
 from waskaweb.lib.base     import *
 from waskaweb.lib.security import checkLogin, userIdentity, generateID
-from waskaweb.model.user   import UserObject 
+from waskaweb.model.user   import UserObject
+from waskaweb.model.appointment import MaxSaveTimeReminderOverview, \
+                                       CaseAppointmentOverview, \
+                                       GlobalAppointmentOverview, \
+                                       CaseReminderOverview
 
 import md5
 
@@ -21,8 +25,29 @@
     def index(self):
         redirect_to(action='start')
 
-    def start(self): 
-        return render('/start/start.mako') 
+    def start(self):
+        # Get list of cases which were not edited longer than the allowed max
+        # savetime
+        maxsavetimelist   = MaxSaveTimeReminderOverview()
+        remindlist        = CaseReminderOverview()
+        if h.hasRole(['cm_ka']):
+            remindlist.join(maxsavetimelist)
+            remindlist.sort()
+            c.remindlist  = remindlist
+        else:
+            c.remindlist  = maxsavetimelist 
+        # Load case and global appointments
+        caseapp           = CaseAppointmentOverview()
+        globalapp         = GlobalAppointmentOverview()
+        # As we want to display both kind of app. we need to join the lists and
+        # sort them
+        if h.hasRole(['cm_ka']):
+            caseapp.join(globalapp)
+            caseapp.sort()
+            c.appointmentlist = caseapp
+        else:
+            c.appointmentlist = globalapp
+        return render('/start/start.mako')
 
     def help(self):
         return render('/start/help.mako') 

Modified: trunk/waskaweb/i18n/de/LC_MESSAGES/waskaweb.po
===================================================================
--- trunk/waskaweb/i18n/de/LC_MESSAGES/waskaweb.po	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/i18n/de/LC_MESSAGES/waskaweb.po	2008-08-13 13:12:54 UTC (rev 46)
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: waskaweb 0.0.0\n"
 "Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
-"POT-Creation-Date: 2008-03-12 15:39+0100\n"
+"POT-Creation-Date: 2008-04-11 16:13+0200\n"
 "PO-Revision-Date: 2007-10-14 20:33+0200\n"
 "Last-Translator: Torsten Irländer<torsten.irlaender at intevation.de>\n"
 "Language-Team: de <LL at li.org>\n"
@@ -187,27 +187,27 @@
 msgid "cm_rg_aid_overview_legend_new_offer"
 msgstr "Neues Angebot hinzufügen"
 
-#: waskaweb/model/case.py:931
+#: waskaweb/model/case.py:995
 #: waskaweb/templates/casemanagement/caselist.mako:41
 #: waskaweb/templates/casemanagement/caselist.mako:88
 msgid "case_state_label_open"
 msgstr "Offen"
 
-#: waskaweb/model/case.py:932
+#: waskaweb/model/case.py:996
 #: waskaweb/templates/casemanagement/caselist.mako:43
 #: waskaweb/templates/casemanagement/caselist.mako:90
 msgid "case_state_label_closed"
 msgstr "Geschlossen"
 
-#: waskaweb/model/case.py:933
+#: waskaweb/model/case.py:997
 msgid "case_state_label_outstanding_delete"
 msgstr "Schwebend gelöscht"
 
-#: waskaweb/model/case.py:934
+#: waskaweb/model/case.py:998
 msgid "case_state_label_outstanding_anon"
 msgstr "Schwebend anonymisiert"
 
-#: waskaweb/model/case.py:935
+#: waskaweb/model/case.py:999
 msgid "case_state_label_anon"
 msgstr "Anonymisiert"
 
@@ -251,84 +251,88 @@
 msgid "logout_p_login_again"
 msgstr ", um sich erneut in WASKA anzumelden."
 
-#: waskaweb/templates/main.mako:68
+#: waskaweb/templates/main.mako:70
 msgid "statusbar_logininfo"
 msgstr "Angemeldet als"
 
-#: waskaweb/templates/main.mako:75 waskaweb/templates/main.mako:105
+#: waskaweb/templates/main.mako:77 waskaweb/templates/main.mako:107
 msgid "sm_menu_link_home"
 msgstr "Schwarzes Brett"
 
-#: waskaweb/templates/main.mako:76
+#: waskaweb/templates/main.mako:78
 msgid "sm_menu_link_help"
 msgstr "Hilfe"
 
-#: waskaweb/templates/main.mako:77
+#: waskaweb/templates/main.mako:79
 msgid "sm_menu_link_settings"
 msgstr "Mein Konto"
 
-#: waskaweb/templates/main.mako:79
+#: waskaweb/templates/main.mako:81
 msgid "sm_menu_link_logout"
 msgstr "Abmelden"
 
-#: waskaweb/templates/main.mako:85 waskaweb/templates/main.mako:103
+#: waskaweb/templates/main.mako:87 waskaweb/templates/main.mako:105
 msgid "np_root"
 msgstr "Waska Start"
 
-#: waskaweb/templates/main.mako:106
+#: waskaweb/templates/main.mako:108
 #: waskaweb/templates/appointments/dialogs/confirm.mako:4
 #: waskaweb/templates/appointments/dialogs/notificate_delete_appointment.mako:5
+#: waskaweb/templates/appointments/dialogs/success_delete_appointment.mako:5
+#: waskaweb/templates/casemanagement/dialogs/confirm_delete_appointment.mako:5
+#: waskaweb/templates/casemanagement/dialogs/failed_delete_appointment.mako:6
+#: waskaweb/templates/casemanagement/dialogs/success_delete_appointment.mako:6
 msgid "menu_app_link_overview"
 msgstr "Termine"
 
-#: waskaweb/templates/main.mako:107
+#: waskaweb/templates/main.mako:109
 msgid "menu_doc_link_overview"
 msgstr "Dokumente"
 
-#: waskaweb/templates/main.mako:115 waskaweb/templates/main.mako:125
+#: waskaweb/templates/main.mako:117 waskaweb/templates/main.mako:127
 msgid "menu_header_cm"
 msgstr "Case-Management"
 
-#: waskaweb/templates/main.mako:117 waskaweb/templates/main.mako:127
+#: waskaweb/templates/main.mako:119 waskaweb/templates/main.mako:129
 msgid "menu_cm_link_overview"
 msgstr "Fallakten\t"
 
-#: waskaweb/templates/main.mako:118 waskaweb/templates/main.mako:132
+#: waskaweb/templates/main.mako:120 waskaweb/templates/main.mako:134
 #: waskaweb/templates/casemanagement/evaluation.mako:8
 msgid "cm_actions_link_evaluate"
 msgstr "Auswertung"
 
-#: waskaweb/templates/main.mako:129
+#: waskaweb/templates/main.mako:131
 msgid "menu_cm_link_new"
 msgstr "Fallakte anlegen"
 
-#: waskaweb/templates/main.mako:130
+#: waskaweb/templates/main.mako:132
 msgid "menu_cm_link_import"
 msgstr "Fallakte importieren"
 
-#: waskaweb/templates/main.mako:145
+#: waskaweb/templates/main.mako:147
 msgid "menu_header_adm"
 msgstr "Administration"
 
-#: waskaweb/templates/main.mako:147
+#: waskaweb/templates/main.mako:149
 msgid "menu_adm_link_useroverview"
 msgstr "Benutzer"
 
-#: waskaweb/templates/main.mako:150
+#: waskaweb/templates/main.mako:152
 msgid "menu_adm_link_showsettings"
 msgstr "Agentur"
 
-#: waskaweb/templates/main.mako:163
+#: waskaweb/templates/main.mako:165
 msgid "main_formular_input_error"
 msgstr "Fehlerhafte Formulareingabe"
 
-#: waskaweb/templates/main.mako:175
+#: waskaweb/templates/main.mako:177
 msgid "footer_title"
 msgstr "WASKA"
 
-#: waskaweb/templates/main.mako:175
+#: waskaweb/templates/main.mako:177
 msgid "footer_version"
-msgstr "14.03.2008 | Beta 26"
+msgstr "17.03.2008 | Beta 27"
 
 #: waskaweb/templates/main_login.mako:38
 #: waskaweb/templates/start/responsible.mako:71
@@ -357,7 +361,7 @@
 "Verbindung"
 
 #: waskaweb/templates/administration/delete_user_helper.mako:6
-#: waskaweb/templates/administration/edit_settings.mako:5
+#: waskaweb/templates/administration/edit_settings.mako:11
 #: waskaweb/templates/administration/edit_user.mako:13
 #: waskaweb/templates/administration/new_user.mako:13
 #: waskaweb/templates/administration/new_user_result.mako:6
@@ -376,6 +380,7 @@
 #: waskaweb/templates/administration/dialogs/success_delete_user.mako:5
 #: waskaweb/templates/administration/dialogs/success_edit_agency.mako:5
 #: waskaweb/templates/administration/dialogs/success_edit_user.mako:5
+#: waskaweb/templates/appointments/dialogs/failed_delete_appointment.mako:5
 msgid "adm_np_root"
 msgstr "Administration"
 
@@ -395,6 +400,7 @@
 #: waskaweb/templates/administration/dialogs/notificate_deleteuser.mako:6
 #: waskaweb/templates/administration/dialogs/success_delete_user.mako:6
 #: waskaweb/templates/administration/dialogs/success_edit_user.mako:6
+#: waskaweb/templates/appointments/dialogs/failed_delete_appointment.mako:6
 msgid "adm_np_overview"
 msgstr "Benutzerübersicht"
 
@@ -428,49 +434,53 @@
 msgid "cm_form_editor_submit"
 msgstr "Fallakte übertragen"
 
+#: waskaweb/templates/administration/edit_settings.mako:4
+#: waskaweb/templates/administration/edit_settings.mako:36
+#: waskaweb/templates/administration/show_settings.mako:26
+msgid "adm_form_settings_kaname"
+msgstr "Name der Kompetenzagentur"
+
+#: waskaweb/templates/administration/edit_settings.mako:5
+#: waskaweb/templates/administration/edit_settings.mako:44
+#: waskaweb/templates/administration/show_settings.mako:30
+msgid "adm_form_settings_fkz"
+msgstr "FKZ der Kompetenzagentur"
+
 #: waskaweb/templates/administration/edit_settings.mako:6
+#: waskaweb/templates/administration/edit_settings.mako:55
+#: waskaweb/templates/administration/show_settings.mako:34
+msgid "adm_form_settings_max_savetime"
+msgstr "Maximale Aufbewahrungsdauer von Fallakten in Tagen"
+
+#: waskaweb/templates/administration/edit_settings.mako:12
 #: waskaweb/templates/administration/show_settings.mako:7
 #: waskaweb/templates/administration/dialogs/success_edit_agency.mako:6
 msgid "adm_np_showsettings"
 msgstr "Agentureinstellungen"
 
-#: waskaweb/templates/administration/edit_settings.mako:7
+#: waskaweb/templates/administration/edit_settings.mako:13
 #: waskaweb/templates/administration/dialogs/success_edit_agency.mako:7
 msgid "adm_np_editsettings"
 msgstr "Einstellungen bearbeiten"
 
-#: waskaweb/templates/administration/edit_settings.mako:12
+#: waskaweb/templates/administration/edit_settings.mako:18
 msgid "adm_header_editsettings"
 msgstr "Einstellungen bearbeiten"
 
-#: waskaweb/templates/administration/edit_settings.mako:17
+#: waskaweb/templates/administration/edit_settings.mako:23
 msgid "adm_actions_link_showsettings"
 msgstr "Zurück zu: Agentureinstellungen"
 
-#: waskaweb/templates/administration/edit_settings.mako:23
+#: waskaweb/templates/administration/edit_settings.mako:30
 msgid "adm_con_es_editsettings"
 msgstr "Hier können Sie die agenturweiten Einstellungen bearbeiten."
 
-#: waskaweb/templates/administration/edit_settings.mako:29
-#: waskaweb/templates/administration/show_settings.mako:26
-msgid "adm_form_settings_kaname"
-msgstr "Name der Kompetenzagentur"
-
-#: waskaweb/templates/administration/edit_settings.mako:36
-#: waskaweb/templates/administration/show_settings.mako:30
-msgid "adm_form_settings_fkz"
-msgstr "FKZ der Kompetenzagentur"
-
-#: waskaweb/templates/administration/edit_settings.mako:46
-msgid "adm_form_settings_max_savetime"
-msgstr "Maximale Aufbewahrungsdauer von Fallakten in Tagen"
-
-#: waskaweb/templates/administration/edit_settings.mako:62
+#: waskaweb/templates/administration/edit_settings.mako:72
 #: waskaweb/templates/administration/show_settings.mako:38
 msgid "adm_form_settings_anontransfer"
 msgstr "Fallakten übermitteln"
 
-#: waskaweb/templates/administration/edit_settings.mako:81
+#: waskaweb/templates/administration/edit_settings.mako:91
 msgid "adm_form_settings_save"
 msgstr "Einstellungen speichern"
 
@@ -686,25 +696,37 @@
 
 #: waskaweb/templates/administration/overview_user.mako:43
 #: waskaweb/templates/administration/overview_user.mako:60
+#: waskaweb/templates/appointments/appointmentlist.mako:4
+#: waskaweb/templates/appointments/appointmentlist.mako:7
+#: waskaweb/templates/casemanagement/appointmentlist.mako:4
+#: waskaweb/templates/casemanagement/appointmentlist.mako:7
 #: waskaweb/templates/casemanagement/caselist.mako:52
 #: waskaweb/templates/casemanagement/caselist.mako:99
+#: waskaweb/templates/casemanagement/reminderlist.mako:4
+#: waskaweb/templates/casemanagement/reminderlist.mako:7
 #: waskaweb/templates/documents/case_overview.mako:42
 #: waskaweb/templates/documents/case_overview.mako:53
 #: waskaweb/templates/documents/global_overview.mako:39
 #: waskaweb/templates/documents/global_overview.mako:40
 #: waskaweb/templates/documents/global_overview.mako:51
 #: waskaweb/templates/documents/global_overview.mako:52
+#: waskaweb/templates/start/appointmentlist.mako:5
+#: waskaweb/templates/start/appointmentlist.mako:8
+#: waskaweb/templates/start/remindlist.mako:4
 msgid "cm_overview_a_show"
 msgstr "Anzeigen"
 
 #: waskaweb/templates/administration/overview_user.mako:45
 #: waskaweb/templates/administration/overview_user.mako:62
+#: waskaweb/templates/appointments/appointmentlist.mako:7
 #: waskaweb/templates/casemanagement/agencylist.mako:20
 #: waskaweb/templates/casemanagement/agencylist.mako:30
+#: waskaweb/templates/casemanagement/appointmentlist.mako:7
 #: waskaweb/templates/casemanagement/caselist.mako:56
 #: waskaweb/templates/casemanagement/caselist.mako:62
 #: waskaweb/templates/casemanagement/caselist.mako:103
 #: waskaweb/templates/casemanagement/caselist.mako:109
+#: waskaweb/templates/casemanagement/reminderlist.mako:7
 #: waskaweb/templates/documents/case_overview.mako:44
 #: waskaweb/templates/documents/case_overview.mako:55
 #: waskaweb/templates/documents/global_overview.mako:42
@@ -870,6 +892,7 @@
 
 #: waskaweb/templates/administration/dialogs/notificate_deleteuser.mako:7
 #: waskaweb/templates/administration/dialogs/success_delete_user.mako:7
+#: waskaweb/templates/appointments/dialogs/failed_delete_appointment.mako:7
 msgid "adm_np_success_deleteuser"
 msgstr "Benutzer gelöscht!"
 
@@ -921,7 +944,8 @@
 msgid "app_form_new_submit"
 msgstr "Termin eintragen"
 
-#: waskaweb/templates/appointments/new.mako:4
+#: waskaweb/templates/appointments/edit.mako:12
+#: waskaweb/templates/appointments/new.mako:12
 #: waskaweb/templates/appointments/overview.mako:4
 #: waskaweb/templates/appointments/show.mako:4
 #: waskaweb/templates/appointments/beta/show_1.mako:4
@@ -933,75 +957,137 @@
 #: waskaweb/templates/appointments/beta/show_7.mako:4
 #: waskaweb/templates/appointments/dialogs/confirm.mako:5
 #: waskaweb/templates/appointments/dialogs/notificate_delete_appointment.mako:6
+#: waskaweb/templates/appointments/dialogs/success_create_appointment.mako:5
+#: waskaweb/templates/appointments/dialogs/success_delete_appointment.mako:6
+#: waskaweb/templates/appointments/dialogs/success_edit_appointment.mako:5
 #: waskaweb/templates/casemanagement/appointments.mako:5
+#: waskaweb/templates/casemanagement/editAppointment.mako:13
+#: waskaweb/templates/casemanagement/newAppointment.mako:13
+#: waskaweb/templates/casemanagement/showAppointment.mako:5
+#: waskaweb/templates/casemanagement/dialogs/success_create_appointment.mako:6
+#: waskaweb/templates/casemanagement/dialogs/success_edit_appointment.mako:6
 msgid "app_np_list"
 msgstr "Terminübersicht"
 
-#: waskaweb/templates/appointments/new.mako:5
+#: waskaweb/templates/appointments/edit.mako:13
+#: waskaweb/templates/appointments/dialogs/success_edit_appointment.mako:6
+#: waskaweb/templates/casemanagement/editAppointment.mako:14
+#: waskaweb/templates/casemanagement/dialogs/success_edit_appointment.mako:7
+msgid "app_np_edit"
+msgstr "Termin bearbeiten"
+
+#: waskaweb/templates/appointments/edit.mako:17
+msgid "cm_app_header_edit"
+msgstr "Termin bearbeiten"
+
+#: waskaweb/templates/appointments/edit.mako:23
+#: waskaweb/templates/casemanagement/editAppointment.mako:24
+msgid "menu_app_link_show_back"
+msgstr "Zurück zu: Terminansicht"
+
+#: waskaweb/templates/appointments/edit_body.mako:4
+msgid "app_form_legend_datetime"
+msgstr "Start und Endzeitpunkt"
+
+#: waskaweb/templates/appointments/edit_body.mako:7
+#: waskaweb/templates/appointments/edit_body.mako:10
+msgid "app_form_startdate"
+msgstr "Startdatum"
+
+#: waskaweb/templates/appointments/edit_body.mako:16
+#: waskaweb/templates/appointments/edit_body.mako:19
+msgid "app_form_starttime"
+msgstr "Startzeit"
+
+#: waskaweb/templates/appointments/edit_body.mako:25
+#: waskaweb/templates/appointments/edit_body.mako:28
+msgid "app_form_enddate"
+msgstr "Enddatum"
+
+#: waskaweb/templates/appointments/edit_body.mako:34
+#: waskaweb/templates/appointments/edit_body.mako:37
+msgid "app_form_endtime"
+msgstr "Endzeit"
+
+#: waskaweb/templates/appointments/edit_body.mako:43
+msgid "app_form_legend_appdate"
+msgstr "Termindaten"
+
+#: waskaweb/templates/appointments/edit_body.mako:47
+#: waskaweb/templates/appointments/show_body.mako:17
+msgid "app_form_type"
+msgstr "Art des Termins"
+
+#: waskaweb/templates/appointments/edit_body.mako:59
+#: waskaweb/templates/appointments/edit_body.mako:62
+msgid "app_form_title"
+msgstr "Titel"
+
+#: waskaweb/templates/appointments/edit_body.mako:68
+#: waskaweb/templates/appointments/edit_body.mako:71
+msgid "app_form_description"
+msgstr "Beschreibung"
+
+#: waskaweb/templates/appointments/edit_body.mako:76
+msgid "app_form_submit"
+msgstr "Termin speichern"
+
+#: waskaweb/templates/appointments/new.mako:13
+#: waskaweb/templates/appointments/dialogs/success_create_appointment.mako:6
+#: waskaweb/templates/casemanagement/newAppointment.mako:14
 #: waskaweb/templates/casemanagement/new_appointment.mako:7
+#: waskaweb/templates/casemanagement/dialogs/success_create_appointment.mako:7
 msgid "app_np_new"
 msgstr "Neuen Termin anlegen"
 
-#: waskaweb/templates/appointments/new.mako:9
+#: waskaweb/templates/appointments/new.mako:17
+#: waskaweb/templates/casemanagement/newAppointment.mako:18
 #: waskaweb/templates/casemanagement/new_appointment.mako:11
 msgid "cm_app_header_new"
 msgstr "Neuen Termin anlegen"
 
-#: waskaweb/templates/appointments/new.mako:14
+#: waskaweb/templates/appointments/new.mako:23
+#: waskaweb/templates/appointments/show.mako:20
 #: waskaweb/templates/appointments/beta/show_10.mako:15
 #: waskaweb/templates/appointments/beta/show_5.mako:15
 #: waskaweb/templates/appointments/beta/show_6.mako:15
 #: waskaweb/templates/appointments/beta/show_7.mako:14
 #: waskaweb/templates/appointments/beta/show_8.mako:15
 #: waskaweb/templates/appointments/beta/show_9.mako:15
+#: waskaweb/templates/casemanagement/newAppointment.mako:24
+#: waskaweb/templates/casemanagement/showAppointment.mako:23
 msgid "menu_app_link_overview_back"
 msgstr "Zurück zu: Terminübersicht"
 
-#: waskaweb/templates/appointments/overview.mako:9
-#: waskaweb/templates/appointments/overview.mako:23
+#: waskaweb/templates/appointments/overview.mako:8
 #: waskaweb/templates/casemanagement/appointments.mako:10
 msgid "app_header_overview"
 msgstr "Terminübersicht"
 
 #: waskaweb/templates/appointments/overview.mako:14
-#: waskaweb/templates/casemanagement/appointments.mako:17
+#: waskaweb/templates/casemanagement/appointments.mako:16
 msgid "app_actions_link_newappointment"
 msgstr "Neuen Termin anlegen"
 
-#: waskaweb/templates/appointments/overview.mako:26
+#: waskaweb/templates/appointments/overview.mako:20
 msgid "app_con_list_all_appointments"
 msgstr "Hier wird eine Auflistung aller Termine angezeigt"
 
-#: waskaweb/templates/appointments/overview_body.mako:4
-#: waskaweb/templates/appointments/overview_body.mako:59
+#: waskaweb/templates/appointments/overview_body.mako:5
+#: waskaweb/templates/appointments/remindlist_body.mako:5
 msgid "app_overview_tbl_header_date"
 msgstr "Datum"
 
-#: waskaweb/templates/appointments/overview_body.mako:5
-#: waskaweb/templates/appointments/overview_body.mako:60
+#: waskaweb/templates/appointments/overview_body.mako:6
+#: waskaweb/templates/appointments/remindlist_body.mako:6
 msgid "app_overview_tbl_header_desc"
 msgstr "Beschreibung"
 
-#: waskaweb/templates/appointments/overview_body.mako:6
-#: waskaweb/templates/appointments/overview_body.mako:61
+#: waskaweb/templates/appointments/overview_body.mako:7
+#: waskaweb/templates/appointments/remindlist_body.mako:7
 msgid "app_overview_tbl_header_actions"
 msgstr "Aktionen"
 
-#: waskaweb/templates/appointments/overview_body.mako:14
-#: waskaweb/templates/appointments/overview_body.mako:22
-#: waskaweb/templates/appointments/overview_body.mako:30
-#: waskaweb/templates/appointments/overview_body.mako:37
-#: waskaweb/templates/appointments/overview_body.mako:48
-msgid "app_overview_body_table_show"
-msgstr "Anzeigen"
-
-#: waskaweb/templates/appointments/overview_body.mako:15
-#: waskaweb/templates/appointments/overview_body.mako:23
-#: waskaweb/templates/appointments/overview_body.mako:38
-#: waskaweb/templates/appointments/overview_body.mako:49
-msgid "app_overview_body_table_delete"
-msgstr "Löschen"
-
 #: waskaweb/templates/appointments/show.mako:5
 #: waskaweb/templates/appointments/beta/show_1.mako:5
 #: waskaweb/templates/appointments/beta/show_10.mako:5
@@ -1013,6 +1099,7 @@
 #: waskaweb/templates/appointments/beta/show_7.mako:5
 #: waskaweb/templates/appointments/beta/show_8.mako:5
 #: waskaweb/templates/appointments/beta/show_9.mako:5
+#: waskaweb/templates/casemanagement/showAppointment.mako:6
 msgid "app_np_show"
 msgstr "Terminansicht"
 
@@ -1027,29 +1114,42 @@
 #: waskaweb/templates/appointments/beta/show_7.mako:9
 #: waskaweb/templates/appointments/beta/show_8.mako:10
 #: waskaweb/templates/appointments/beta/show_9.mako:10
+#: waskaweb/templates/casemanagement/editAppointment.mako:18
+#: waskaweb/templates/casemanagement/showAppointment.mako:10
 msgid "app_header_show"
 msgstr "Terminansicht"
 
-#: waskaweb/templates/appointments/show.mako:14
-#: waskaweb/templates/appointments/beta/show_1.mako:15
-#: waskaweb/templates/appointments/beta/show_2.mako:15
-#: waskaweb/templates/appointments/beta/show_3.mako:14
-#: waskaweb/templates/appointments/beta/show_4.mako:15
-msgid "sm_menu_link_home_back"
-msgstr "Zurück zu: Schwarzes Brett"
+#: waskaweb/templates/appointments/show.mako:16
+msgid "sm_menu_link_appointment_edit"
+msgstr "In Bearbeitung nehmen"
 
-#: waskaweb/templates/appointments/show.mako:25
-msgid "app_table_date"
-msgstr "Datum"
+#: waskaweb/templates/appointments/show_body.mako:5
+msgid "app_table_startdate"
+msgstr "Beginn"
 
-#: waskaweb/templates/appointments/show.mako:29
+#: waskaweb/templates/appointments/show_body.mako:9
+msgid "app_table_enddate"
+msgstr "Ende"
+
+#: waskaweb/templates/appointments/show_body.mako:13
+msgid "app_table_duration"
+msgstr "Dauer"
+
+#: waskaweb/templates/appointments/show_body.mako:25
 msgid "app_table_title"
 msgstr "Titel"
 
-#: waskaweb/templates/appointments/show.mako:33
+#: waskaweb/templates/appointments/show_body.mako:29
 msgid "app_table_description"
 msgstr "Beschreibung"
 
+#: waskaweb/templates/appointments/beta/show_1.mako:15
+#: waskaweb/templates/appointments/beta/show_2.mako:15
+#: waskaweb/templates/appointments/beta/show_3.mako:14
+#: waskaweb/templates/appointments/beta/show_4.mako:15
+msgid "sm_menu_link_home_back"
+msgstr "Zurück zu: Schwarzes Brett"
+
 #: waskaweb/templates/appointments/beta/show_10.mako:4
 #: waskaweb/templates/appointments/beta/show_8.mako:4
 #: waskaweb/templates/appointments/beta/show_9.mako:4
@@ -1059,13 +1159,19 @@
 
 #: waskaweb/templates/appointments/dialogs/confirm.mako:6
 #: waskaweb/templates/appointments/dialogs/notificate_delete_appointment.mako:7
+#: waskaweb/templates/appointments/dialogs/success_delete_appointment.mako:7
+#: waskaweb/templates/casemanagement/dialogs/confirm_delete_appointment.mako:6
+#: waskaweb/templates/casemanagement/dialogs/failed_delete_appointment.mako:7
+#: waskaweb/templates/casemanagement/dialogs/success_delete_appointment.mako:7
 msgid "app_np_delete"
-msgstr "Termin lösschen"
+msgstr "Termin löschen"
 
 #: waskaweb/templates/casemanagement/agency_overview.mako:6
 #: waskaweb/templates/casemanagement/bundle_editor.mako:6
 #: waskaweb/templates/casemanagement/bundle_standin.mako:6
 #: waskaweb/templates/casemanagement/downloadCSV.mako:6
+#: waskaweb/templates/casemanagement/downloadXLS.mako:6
+#: waskaweb/templates/casemanagement/downloadXML.mako:6
 #: waskaweb/templates/casemanagement/evaluation.mako:4
 #: waskaweb/templates/casemanagement/evaluation_result.mako:6
 #: waskaweb/templates/casemanagement/main.mako:10
@@ -1087,6 +1193,8 @@
 #: waskaweb/templates/casemanagement/dialogs/success_delete_cm.mako:5
 #: waskaweb/templates/casemanagement/dialogs/success_markdelete.mako:5
 #: waskaweb/templates/casemanagement/dialogs/success_restore.mako:5
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:6
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:6
 #: waskaweb/templates/casemanagement/static_form/statement.mako:5
 #: waskaweb/templates/casemanagement/static_form/statement_print.mako:5
 #: waskaweb/templates/statement/dialogs/missing_statement.mako:5
@@ -1095,6 +1203,8 @@
 
 #: waskaweb/templates/casemanagement/agency_overview.mako:7
 #: waskaweb/templates/casemanagement/downloadCSV.mako:7
+#: waskaweb/templates/casemanagement/downloadXLS.mako:7
+#: waskaweb/templates/casemanagement/downloadXML.mako:7
 #: waskaweb/templates/casemanagement/main.mako:11
 #: waskaweb/templates/casemanagement/overview.mako:7
 #: waskaweb/templates/casemanagement/dialogs/delete_attachment_success.mako:5
@@ -1130,24 +1240,33 @@
 msgstr "Es wurden keine Datensätze gefunden."
 
 #: waskaweb/templates/casemanagement/appointments.mako:4
-#: waskaweb/templates/casemanagement/digest.mako:5
+#: waskaweb/templates/casemanagement/digest.mako:6
+#: waskaweb/templates/casemanagement/editAppointment.mako:12
 #: waskaweb/templates/casemanagement/formular.mako:34
+#: waskaweb/templates/casemanagement/newAppointment.mako:12
 #: waskaweb/templates/casemanagement/new_appointment.mako:5
 #: waskaweb/templates/casemanagement/organisation.mako:6
+#: waskaweb/templates/casemanagement/showAppointment.mako:4
 #: waskaweb/templates/casemanagement/dialogs/confirm_anonymize.mako:5
 #: waskaweb/templates/casemanagement/dialogs/confirm_close.mako:5
 #: waskaweb/templates/casemanagement/dialogs/confirm_delete_aid.mako:5
+#: waskaweb/templates/casemanagement/dialogs/confirm_delete_appointment.mako:4
 #: waskaweb/templates/casemanagement/dialogs/confirm_delete_attachment.mako:4
 #: waskaweb/templates/casemanagement/dialogs/confirm_open.mako:5
 #: waskaweb/templates/casemanagement/dialogs/delete_attachment_success.mako:6
+#: waskaweb/templates/casemanagement/dialogs/failed_delete_appointment.mako:5
 #: waskaweb/templates/casemanagement/dialogs/success_anonymize.mako:5
 #: waskaweb/templates/casemanagement/dialogs/success_case_close.mako:5
+#: waskaweb/templates/casemanagement/dialogs/success_create_appointment.mako:5
 #: waskaweb/templates/casemanagement/dialogs/success_delete_aid.mako:5
+#: waskaweb/templates/casemanagement/dialogs/success_delete_appointment.mako:5
+#: waskaweb/templates/casemanagement/dialogs/success_edit_appointment.mako:5
 #: waskaweb/templates/documents/case_new.mako:5
 #: waskaweb/templates/documents/case_overview.mako:5
 #: waskaweb/templates/documents/dialogs/delete_attachment_success.mako:4
 #: waskaweb/templates/documents/dialogs/failed_attachment.mako:4
 #: waskaweb/templates/statement/edit.mako:5
+#: waskaweb/templates/statement/list_statements.mako:6
 #: waskaweb/templates/statement/dialogs/confirm.mako:5
 #: waskaweb/templates/statement/dialogs/ee_accept_failed.mako:5
 #: waskaweb/templates/statement/dialogs/ee_accept_success.mako:5
@@ -1258,80 +1377,75 @@
 "Hier werden Sie festlegen können welche Teile der Akte exportiert werden "
 "sollen."
 
-#: waskaweb/templates/casemanagement/digest.mako:6
+#: waskaweb/templates/casemanagement/digest.mako:7
 msgid "cm_np_digest"
 msgstr "Zusammenfassung der Fallakte"
 
-#: waskaweb/templates/casemanagement/digest.mako:11
+#: waskaweb/templates/casemanagement/digest.mako:12
 msgid "cm_header_digest"
 msgstr "Zusammenfassung der Fallakte"
 
-#: waskaweb/templates/casemanagement/digest.mako:16
-msgid "cm_digest_con_digest_dossier"
-msgstr ""
-"Hier wird eine Zusammenfassung der Fallakte angezeigt. Diese Zusammenfassung "
-"besteht aus einer Zusammenstellung verschiedener Felder aus dem "
-"Fallaktenformular"
-
-#: waskaweb/templates/casemanagement/digest.mako:18
+#: waskaweb/templates/casemanagement/digest.mako:45
 msgid "cm_header_digest_youth"
 msgstr "Angaben zum Jugendlichen"
 
-#: waskaweb/templates/casemanagement/digest.mako:21
-#: waskaweb/templates/casemanagement/digest.mako:75
+#: waskaweb/templates/casemanagement/digest.mako:48
+#: waskaweb/templates/casemanagement/digest.mako:102
 msgid "cm_digest_tbl_label_lastname"
 msgstr "Name"
 
-#: waskaweb/templates/casemanagement/digest.mako:25
-#: waskaweb/templates/casemanagement/digest.mako:79
+#: waskaweb/templates/casemanagement/digest.mako:52
+#: waskaweb/templates/casemanagement/digest.mako:106
 msgid "cm_digest_tbl_label_firstname"
 msgstr "Vorname"
 
-#: waskaweb/templates/casemanagement/digest.mako:29
+#: waskaweb/templates/casemanagement/digest.mako:56
 msgid "cm_digest_tbl_label_caseid"
 msgstr "Kundennummer"
 
-#: waskaweb/templates/casemanagement/digest.mako:33
+#: waskaweb/templates/casemanagement/digest.mako:60
 msgid "cm_digest_tbl_label_age"
 msgstr "Alter"
 
-#: waskaweb/templates/casemanagement/digest.mako:37
-#: waskaweb/templates/casemanagement/digest.mako:83
+#: waskaweb/templates/casemanagement/digest.mako:64
+#: waskaweb/templates/casemanagement/digest.mako:110
 msgid "cm_digest_tbl_label_email"
 msgstr "E-Mail"
 
-#: waskaweb/templates/casemanagement/digest.mako:47
+#: waskaweb/templates/casemanagement/digest.mako:74
 msgid "cm_digest_tbl_label_street"
 msgstr "Straße"
 
-#: waskaweb/templates/casemanagement/digest.mako:51
+#: waskaweb/templates/casemanagement/digest.mako:78
 msgid "cm_digest_tbl_label_plz"
 msgstr "PLZ"
 
-#: waskaweb/templates/casemanagement/digest.mako:55
+#: waskaweb/templates/casemanagement/digest.mako:82
 msgid "cm_digest_tbl_label_city"
 msgstr "Ort"
 
-#: waskaweb/templates/casemanagement/digest.mako:59
-#: waskaweb/templates/casemanagement/digest.mako:93
+#: waskaweb/templates/casemanagement/digest.mako:86
+#: waskaweb/templates/casemanagement/digest.mako:120
 msgid "cm_digest_tbl_label_telephone"
 msgstr "Festnetz"
 
-#: waskaweb/templates/casemanagement/digest.mako:63
-#: waskaweb/templates/casemanagement/digest.mako:97
+#: waskaweb/templates/casemanagement/digest.mako:90
+#: waskaweb/templates/casemanagement/digest.mako:124
 msgid "cm_digest_tbl_label_mobiletelephone"
 msgstr "Mobil"
 
-#: waskaweb/templates/casemanagement/digest.mako:67
+#: waskaweb/templates/casemanagement/digest.mako:94
 msgid "cm_digest_tbl_label_telephone_more"
 msgstr "Weitere Telefonnummern"
 
-#: waskaweb/templates/casemanagement/digest.mako:72
+#: waskaweb/templates/casemanagement/digest.mako:99
 msgid "cm_header_digest_parent"
 msgstr "Angaben zum Erziehungsberechtigten"
 
 #: waskaweb/templates/casemanagement/evaluation.mako:5
 #: waskaweb/templates/casemanagement/evaluation_result.mako:7
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:7
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:7
 msgid "cm_np_evaluate"
 msgstr "Auswertung"
 
@@ -1340,40 +1454,58 @@
 msgstr "Auswertung"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:8
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:8
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:8
 msgid "cm_np_evaluate_result"
 msgstr "Ergebnis der Auswertung"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:10
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:10
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:10
 msgid "cm_header_evaluate_result"
 msgstr "Ergebnis der Auswertung"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:12
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:13
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:13
 msgid "cm_eval_summary_header_1"
-msgstr "1. Verhältnis Beratungskunden/Aufnahmen in das Case-Management (CM)"
+msgstr "1.1. Verhältnis Beratungskunden/Aufnahmen in das Case-Management (CM)"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:13
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:14
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:14
 msgid "cm_eval_summary_header_2"
-msgstr "2. Zugang zur Kompetenzagentur"
+msgstr "1.2. Zugang zur Kompetenzagentur"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:14
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:18
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:18
 msgid "cm_eval_summary_header_3"
-msgstr "3. Verweildauer im CM"
+msgstr "2.1. Verweildauer im CM"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:15
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:19
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:19
 msgid "cm_eval_summary_header_4"
-msgstr "4. Alters- und Geschlechterstruktur in %"
+msgstr "2.2. Alters- und Geschlechterstruktur in %"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:16
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:20
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:20
 msgid "cm_eval_summary_header_5"
-msgstr "5. Migrationshintergrund"
+msgstr "2.3. Migrationshintergrund"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:17
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:21
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:21
 msgid "cm_eval_summary_header_6"
-msgstr "6. Förderbedarf"
+msgstr "2.4. Förderbedarf"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:18
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:25
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:25
 msgid "cm_eval_summary_header_7"
-msgstr "7. Vermittlung"
+msgstr "3.1. Vermittlung"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:23
 #: waskaweb/templates/casemanagement/evaluation_result.mako:24
@@ -1392,6 +1524,8 @@
 msgstr "Erklärung"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:40
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:29
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:29
 msgid "eval_group_note_all"
 msgstr ""
 "Diese Auswertung wird über alle gespeicherten Jugendlichen geführt.  Dies "
@@ -1417,12 +1551,16 @@
 "als auch bei Abbruch als abgeschlossen gewertet."
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:61
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:31
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:31
 msgid "cm_eval_header_1"
 msgstr ""
-"1. Anzahl der Beratungskunden, davon % in das Case-Management (CM) "
+"1.1 Anzahl der Beratungskunden, davon % in das Case-Management (CM) "
 "aufgenommen"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:64
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:34
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:34
 msgid "cm_eval_table_adolescent"
 msgstr "Jugendliche"
 
@@ -1432,9 +1570,27 @@
 #: waskaweb/templates/casemanagement/evaluation_result.mako:198
 #: waskaweb/templates/casemanagement/evaluation_result.mako:232
 #: waskaweb/templates/casemanagement/evaluation_result.mako:268
-#: waskaweb/templates/casemanagement/evaluation_result.mako:302
-#: waskaweb/templates/casemanagement/evaluation_result.mako:341
-#: waskaweb/templates/casemanagement/evaluation_result.mako:371
+#: waskaweb/templates/casemanagement/evaluation_result.mako:305
+#: waskaweb/templates/casemanagement/evaluation_result.mako:344
+#: waskaweb/templates/casemanagement/evaluation_result.mako:374
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:35
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:60
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:90
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:155
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:189
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:221
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:254
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:288
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:318
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:35
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:60
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:90
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:155
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:189
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:221
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:254
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:288
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:318
 msgid "cm_eval_table_number"
 msgstr "Anzahl"
 
@@ -1444,17 +1600,39 @@
 #: waskaweb/templates/casemanagement/evaluation_result.mako:199
 #: waskaweb/templates/casemanagement/evaluation_result.mako:233
 #: waskaweb/templates/casemanagement/evaluation_result.mako:269
-#: waskaweb/templates/casemanagement/evaluation_result.mako:303
-#: waskaweb/templates/casemanagement/evaluation_result.mako:342
-#: waskaweb/templates/casemanagement/evaluation_result.mako:372
+#: waskaweb/templates/casemanagement/evaluation_result.mako:306
+#: waskaweb/templates/casemanagement/evaluation_result.mako:345
+#: waskaweb/templates/casemanagement/evaluation_result.mako:375
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:36
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:61
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:91
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:156
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:190
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:222
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:255
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:289
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:319
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:36
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:61
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:91
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:156
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:190
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:222
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:255
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:289
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:319
 msgid "cm_eval_table_percent"
 msgstr "Prozent"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:70
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:40
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:40
 msgid "cm_eval_table_consult_customer"
 msgstr "Beratungskunden"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:76
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:46
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:46
 msgid "cm_eval_table_taken_over_to_cm"
 msgstr "Davon in das CM übernommen"
 
@@ -1464,10 +1642,30 @@
 #: waskaweb/templates/casemanagement/evaluation_result.mako:186
 #: waskaweb/templates/casemanagement/evaluation_result.mako:227
 #: waskaweb/templates/casemanagement/evaluation_result.mako:257
-#: waskaweb/templates/casemanagement/evaluation_result.mako:291
-#: waskaweb/templates/casemanagement/evaluation_result.mako:328
-#: waskaweb/templates/casemanagement/evaluation_result.mako:366
-#: waskaweb/templates/casemanagement/evaluation_result.mako:396
+#: waskaweb/templates/casemanagement/evaluation_result.mako:294
+#: waskaweb/templates/casemanagement/evaluation_result.mako:331
+#: waskaweb/templates/casemanagement/evaluation_result.mako:369
+#: waskaweb/templates/casemanagement/evaluation_result.mako:399
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:52
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:85
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:115
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:147
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:184
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:214
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:247
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:280
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:313
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:343
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:52
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:85
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:115
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:147
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:184
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:214
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:247
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:280
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:313
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:343
 msgid "cm_eval_table_to_overview"
 msgstr "Zur Übersicht"
 
@@ -1477,141 +1675,229 @@
 #: waskaweb/templates/casemanagement/evaluation_result.mako:186
 #: waskaweb/templates/casemanagement/evaluation_result.mako:227
 #: waskaweb/templates/casemanagement/evaluation_result.mako:257
-#: waskaweb/templates/casemanagement/evaluation_result.mako:291
-#: waskaweb/templates/casemanagement/evaluation_result.mako:328
-#: waskaweb/templates/casemanagement/evaluation_result.mako:366
-#: waskaweb/templates/casemanagement/evaluation_result.mako:396
+#: waskaweb/templates/casemanagement/evaluation_result.mako:294
+#: waskaweb/templates/casemanagement/evaluation_result.mako:331
+#: waskaweb/templates/casemanagement/evaluation_result.mako:369
+#: waskaweb/templates/casemanagement/evaluation_result.mako:399
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:52
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:85
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:115
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:147
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:184
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:214
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:247
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:280
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:313
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:343
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:52
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:85
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:115
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:147
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:184
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:214
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:247
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:280
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:313
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:343
 msgid "cm_eval_table_export_analysis"
 msgstr "Auswertung exportieren"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:89
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:55
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:55
 msgid "cm_eval_header_2"
 msgstr "2. Angaben zum Zugang des Jugendlichen zur Kompetenzagentur in %"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:90
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:56
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:56
 msgid "cm_eval_header_access_youngster_to_agency"
-msgstr "Zugang des Jugendlichen zur Kompetenzagentur in %"
+msgstr "1.2.1. Zugang des Jugendlichen zur Kompetenzagentur"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:93
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:59
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:59
 msgid "cm_eval_table_access"
 msgstr "Zugang"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:120
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:86
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:86
 msgid "cm_eval_head_law_access_agency"
-msgstr "Rechtskreis der Jugendlichen beim Zugang zur Kompetenzagentur in %"
+msgstr "1.2.2. Angaben zum Rechtskreis beim Zugang zur Kompetenzagentur"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:123
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:89
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:89
 msgid "cm_eval_table_law"
 msgstr "Rechtkreis"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:157
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:118
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:118
 msgid "cm_eval_header_3"
 msgstr ""
 "3. Anzahl der Jugendlichen im CM, davon % abgeschlossen nach "
-"durchschnittlich x Monaten"
+"durchschnittlich x Wochen"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:160
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:121
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:121
 msgid "cm_eval_table_month"
-msgstr "Monat"
+msgstr "Woche"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:161
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:122
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:122
 msgid "cm_eval_table_completed"
 msgstr "Abgeschlossen"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:162
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:123
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:123
 msgid "cm_eval_table_aborted"
 msgstr "Abgebrochen"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:193
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:150
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:150
 msgid "cm_eval_header_4"
 msgstr "4. Alters- und Geschlechterstruktur in %"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:194
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:151
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:151
 msgid "cm_eval_header_on_gender"
-msgstr "Angaben zur Geschlechtsstruktur"
+msgstr "2.2.1. Angaben zur Geschlechtsstruktur"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:197
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:154
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:154
 msgid "cm_eval_table_gender"
 msgstr "Geschlecht"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:203
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:160
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:160
 msgid "cm_eval_label_male"
 msgstr "männlich"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:209
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:166
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:166
 msgid "cm_eval_label_female"
 msgstr "weiblich"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:215
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:172
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:172
 msgid "cm_eval_label_intersexual"
 msgstr "intersexuell"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:221
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:178
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:178
 msgid "cm_eval_label_unknown"
 msgstr "Keine Angabe"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:228
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:185
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:185
 msgid "cm_eval_header_on_age"
-msgstr "Angaben zur Altersverteilung"
+msgstr "2.2.2. Angaben zur Altersverteilung"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:231
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:188
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:188
 msgid "cm_eval_table_age"
 msgstr "Alter"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:264
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:217
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:217
 msgid "cm_eval_header_5"
-msgstr ""
-"5. Migrationshintergrund in % (Staatsangehörigkeit nicht Deutsch oder Mutter/"
-"Vater nicht in Deutschland geboren)"
+msgstr "5. Migrationshintergrund in %"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:267
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:220
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:220
 msgid "cm_eval_table_category"
 msgstr "Kategorie"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:273
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:226
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:226
 msgid "cm_eval_label_migration_background"
 msgstr "Migrationshintergrund"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:279
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:232
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:232
 msgid "cm_eval_label_no_migration_background"
 msgstr "Kein Migrationshintergrund"
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:285
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:238
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:238
 msgid "cm_eval_label_ka_migration_background"
 msgstr "Keine Angabe"
 
-#: waskaweb/templates/casemanagement/evaluation_result.mako:298
+#: waskaweb/templates/casemanagement/evaluation_result.mako:292
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:245
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:245
+msgid "cm_eval_note_ka_migration_background"
+msgstr ""
+"(Hinweis: Der Migrationshintergrund der Jugendlichen wird an der "
+"Muttersprache festgehalten.)"
+
+#: waskaweb/templates/casemanagement/evaluation_result.mako:301
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:250
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:250
 msgid "cm_eval_header_6"
 msgstr "6. Verteilung Förderbedarf in %"
 
-#: waskaweb/templates/casemanagement/evaluation_result.mako:301
+#: waskaweb/templates/casemanagement/evaluation_result.mako:304
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:253
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:253
 msgid "cm_eval_table_offer"
 msgstr "Angebot"
 
-#: waskaweb/templates/casemanagement/evaluation_result.mako:327
+#: waskaweb/templates/casemanagement/evaluation_result.mako:330
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:279
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:279
 msgid "eval6_note"
 msgstr ""
 "(Hinweis: Diese Auswertung wird nur über die Angaben des Förderbedarfs in "
 "der Förderplanung geführt. Die tatsächliche Anzahl der eingetragenen "
 "Unterstützungsangebote wird nicht berücksichtigt.)"
 
-#: waskaweb/templates/casemanagement/evaluation_result.mako:336
+#: waskaweb/templates/casemanagement/evaluation_result.mako:339
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:283
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:283
 msgid "cm_eval_header_7"
 msgstr "7. Angaben zur Vermittlung der Jugendlichen"
 
-#: waskaweb/templates/casemanagement/evaluation_result.mako:337
+#: waskaweb/templates/casemanagement/evaluation_result.mako:340
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:284
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:284
 msgid "cm_eval_head_where_to_place_youngster"
-msgstr "Wohin wurden die Jugendlichen vermittlelt?"
+msgstr "3.1.1. Wohin wurden die Jugendlichen vermittlelt?"
 
-#: waskaweb/templates/casemanagement/evaluation_result.mako:340
+#: waskaweb/templates/casemanagement/evaluation_result.mako:343
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:287
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:287
 msgid "cm_eval_table_place"
 msgstr "Vermittlung"
 
-#: waskaweb/templates/casemanagement/evaluation_result.mako:367
+#: waskaweb/templates/casemanagement/evaluation_result.mako:370
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:314
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:314
 msgid "cm_eval_header_law_changed_after_place"
-msgstr "Angaben zur Veränderung des Rechtskreises nach der Vermittlung"
+msgstr "3.1.2. Angaben zum Rechtskreis nach der Vermittlung"
 
-#: waskaweb/templates/casemanagement/evaluation_result.mako:370
+#: waskaweb/templates/casemanagement/evaluation_result.mako:373
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:317
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:317
 msgid "cm_eval_table_law_change"
 msgstr "Rechtskreis"
 
@@ -1688,21 +1974,21 @@
 msgstr "Datenschutz"
 
 #: waskaweb/templates/casemanagement/main.mako:34
-msgid "cm_main_print_statement"
-msgstr "Erklärung drucken"
-
-#: waskaweb/templates/casemanagement/main.mako:35
 msgid "cm_main_set_statement"
-msgstr "Erklärung setzen"
+msgstr "Erklärung Status setzen"
 
-#: waskaweb/templates/casemanagement/main.mako:37
+#: waskaweb/templates/casemanagement/main.mako:36
 msgid "cm_main_revoke_statement"
 msgstr "Erklärung zurückziehen"
 
-#: waskaweb/templates/casemanagement/main.mako:40
+#: waskaweb/templates/casemanagement/main.mako:39
 msgid "cm_main_anonymize_case"
 msgstr "Fallakte anonymisieren"
 
+#: waskaweb/templates/casemanagement/main.mako:40
+msgid "statement_list_statement"
+msgstr "Verfügbare Erklärungen"
+
 #: waskaweb/templates/casemanagement/main.mako:50
 msgid "cm_menu_header_cases"
 msgstr "Fallakte"
@@ -1715,27 +2001,31 @@
 msgid "cm_menu_link_print"
 msgstr "Gesamte Akte drucken"
 
-#: waskaweb/templates/casemanagement/main.mako:63
+#: waskaweb/templates/casemanagement/main.mako:58
+msgid "cm_menu_link_create_reminder"
+msgstr "Wiedervorlage anlegen"
+
+#: waskaweb/templates/casemanagement/main.mako:65
 msgid "cm_menu_header_seperator"
 msgstr "Überblick"
 
-#: waskaweb/templates/casemanagement/main.mako:66
+#: waskaweb/templates/casemanagement/main.mako:68
 msgid "cm_menu_link_digest"
 msgstr "Zusammenfassung"
 
-#: waskaweb/templates/casemanagement/main.mako:68
+#: waskaweb/templates/casemanagement/main.mako:70
 msgid "cm_menu_link_organisation"
 msgstr "Organisation"
 
-#: waskaweb/templates/casemanagement/main.mako:69
+#: waskaweb/templates/casemanagement/main.mako:71
 msgid "cm_menu_link_appointment"
 msgstr "Termine"
 
-#: waskaweb/templates/casemanagement/main.mako:70
+#: waskaweb/templates/casemanagement/main.mako:72
 msgid "cm_menu_link_documents"
 msgstr "Anlagen"
 
-#: waskaweb/templates/casemanagement/main.mako:76
+#: waskaweb/templates/casemanagement/main.mako:78
 msgid "cm_menu_header_structure"
 msgstr "Gliederung"
 
@@ -1771,12 +2061,12 @@
 #: waskaweb/templates/casemanagement/organisation.mako:15
 msgid "cm_organisation_con_whois_cm_replace"
 msgstr ""
-"Diese Seite zeigt an, wer der Mitarbeiter dieser Fallakte ist und wer die "
-"Vertretung für die Bearbeitung übernimmt."
+"Diese Seite zeigt an, wer Hauptbearbeiterin / Hauptbearbeiter dieser "
+"Fallakte ist und wer die Vertretung für die Bearbeitung übernimmt."
 
 #: waskaweb/templates/casemanagement/organisation.mako:16
 msgid "cm_header_organisation_editor"
-msgstr "Bearbeiter"
+msgstr "Bearbeiterin / Bearbeiter"
 
 #: waskaweb/templates/casemanagement/organisation.mako:19
 msgid "cm_organisation_tbl_label_lastname"
@@ -1817,8 +2107,14 @@
 msgid "cm_form_overview_search_submit"
 msgstr "Suchen"
 
+#: waskaweb/templates/casemanagement/showAppointment.mako:18
+msgid "sm_menu_link_edit_appointment"
+msgstr "In Bearbeitung nehmen"
+
 #: waskaweb/templates/casemanagement/upload.mako:7
 #: waskaweb/templates/casemanagement/dialogs/notificate_import_dub.mako:6
+#: waskaweb/templates/casemanagement/dialogs/success_import_anon.mako:5
+#: waskaweb/templates/casemanagement/dialogs/success_xml_import.mako:5
 msgid "cm_np_import"
 msgstr "Fallakte importieren"
 
@@ -1826,7 +2122,8 @@
 msgid "cm_header_import"
 msgstr "Fallakte importieren"
 
-#: waskaweb/templates/casemanagement/upload.mako:20
+#: waskaweb/templates/casemanagement/upload.mako:22
+#: waskaweb/templates/casemanagement/upload.mako:34
 msgid "cm_from_import_submit"
 msgstr "Importieren"
 
@@ -1836,6 +2133,8 @@
 msgstr "Fallakte löschen?"
 
 #: waskaweb/templates/casemanagement/dialogs/confirm_anonymize.mako:6
+#: waskaweb/templates/casemanagement/dialogs/failed_anonymize.mako:5
+#: waskaweb/templates/casemanagement/dialogs/failed_xml_import.mako:5
 #: waskaweb/templates/casemanagement/dialogs/success_anonymize.mako:6
 msgid "cm_np_anonymize"
 msgstr "Fallakte anonymisieren"
@@ -1943,6 +2242,23 @@
 msgid "cm_np_restore_success"
 msgstr "Wiederherstellen erfolgreich!"
 
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:11
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:28
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:11
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:28
+msgid "eval_group_header_all"
+msgstr "1. Auswertungen über alle Jugendlichen"
+
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:16
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:16
+msgid "eval_group_header_incm"
+msgstr "2. Auswertung über Jugendliche im Case-Management"
+
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:23
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:23
+msgid "eval_group_header_finished"
+msgstr "3. Auswertung über Jugendliche, die das CM abgeschlossen haben"
+
 #: waskaweb/templates/casemanagement/static_form/statement_print.mako:6
 msgid "cm_np_statement"
 msgstr "Einwilligungserklärung"
@@ -2109,107 +2425,107 @@
 msgid "statement_np_edit"
 msgstr "Einverständniserklärung setzen"
 
-#: waskaweb/templates/statement/edit.mako:8
-msgid "statement_edit_header_statement"
-msgstr "Einverständniserklärung"
+#: waskaweb/templates/statement/list_statements.mako:7
+msgid "statement_np_list_statements"
+msgstr "Verfügbare Erklärungen"
 
-#: waskaweb/templates/statement/edit.mako:11
-msgid "statement_edit_p_no_statement"
-msgstr ""
-"Für die gewählte Fallakte liegt aktuell noch keine Einverständniserklärung "
-"zur Erfassung, Verarbeitung und Nutzung personenbezogener Daten seitens des "
-"Jugendlichen vor."
+#: waskaweb/templates/statement/list_statements.mako:12
+msgid "statement_header_list_statements"
+msgstr "Verfügbare Erklärungen"
 
-#: waskaweb/templates/statement/edit.mako:12
-msgid "statement_edit_p_statement_decision"
+#: waskaweb/templates/statement/list_statements.mako:15
+msgid "statement_header_ee"
 msgstr ""
-"Sie können in diesem Dialog bestätigen, dass die Einverständniserklärung nun "
-"vorliegt. Alternativ können Sie angeben, dass die Erklärung sicher nicht vom "
-"Jugendlichen abgegeben wird. In diesem Fall wird die gewählte Fallakte "
-"anonymisiert und ist nicht mehr bearbeitbar."
+"Einwilligungserklärung für die Erfassung, Verarbeitung und Nutzung "
+"personenbezogener Daten"
 
-#: waskaweb/templates/statement/edit.mako:13
-msgid "statement_edit_p_statement_form"
+#: waskaweb/templates/statement/list_statements.mako:17
+msgid "statement_explaination_ee"
 msgstr ""
-"Bitte beachten Sie, dass die Einverständniserklärung der schriftlichen Form "
-"bedarf. Dazu steht Ihnen eine"
+"Diese Einwilligungserklärung ist die Grundlage zur Erfassung und Speicherung "
+"von personenbezogenen Daten."
 
-#: waskaweb/templates/statement/edit.mako:13
-msgid "statement_edit_a_statement_form_printversion"
-msgstr " Druckversion dieser Erklärung"
+#: waskaweb/templates/statement/list_statements.mako:24
+msgid "statement_header_fp"
+msgstr "Vereinbarung Förderplan"
 
-#: waskaweb/templates/statement/edit.mako:13
-msgid "statement_edit_p_statement_form_end"
-msgstr "zur Verfügung."
+#: waskaweb/templates/statement/list_statements.mako:26
+msgid "statement_explaination_fp"
+msgstr ""
+"Vereinbarung zwischen dem Jugendlichen und der Kompetenzagentur über einen "
+"gemeinsam ausgearbeiteten Förderplan im Rahmen des Case-Managements."
 
-#: waskaweb/templates/statement/edit.mako:18
-msgid "statement_label_statement_yes"
-msgstr "Die Einwilligungserklärung liegt vor."
+#: waskaweb/templates/statement/list_statements.mako:33
+msgid "statement_header_ud"
+msgstr ""
+"Einwilligungserklärung zur Übermittlung von personenbezogenen Daten an die "
+"Kompetenzagentur"
 
-#: waskaweb/templates/statement/edit.mako:22
-msgid "statement_label_statement_no"
-msgstr "Die Einwilligungserklärung liegt nicht vor."
-
-#: waskaweb/templates/statement/edit.mako:33
-msgid "statement_revoke_p_statement"
+#: waskaweb/templates/statement/list_statements.mako:35
+msgid "statement_explaination_ud"
 msgstr ""
-"<p>Für diese Fallakte liegt aktuell eine Einverständniserklärung Seitens des "
-"Jugendlichen vor. Sie können diese Erklärung nun zurückziehen.</p><p>Das "
-"Zurückziehen der Einverständniserklärung führt zu einer Anonymisierung der "
-"personenbezogenen Daten der Fallakte. Die Fallakte steht danach nicht mehr "
-"für eine Bearbeitung zur Verfügung und wird aus der Fallakenübersicht "
-"entfernt. Beachten Sie, das dieser Vorgang nicht umkehrbar ist!</p>"
+"Erklärung zur Schweigeplfichtsentbindung von Vertrauenspersonen mit "
+"Schweigeplficht gemäß § 203 StGB gegenüber der Kompetentzagentur."
 
-#: waskaweb/templates/statement/edit.mako:39
-msgid "statement_label_statement_revoked"
-msgstr "Die Einwilligungserklärung zurückziehen"
-
 #: waskaweb/templates/statement/dialogs/missing_statement.mako:7
 msgid "cm_np_show"
 msgstr "Fallakte anzeigen"
 
-#: waskaweb/templates/statement/dialogs/missing_statement.mako:10
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:3
 msgid "statement_dialog_header_statement_no"
-msgstr "Fehlende Einverständniserklärung"
+msgstr "Fehlende Angabe zur Einverständniserklärung"
 
-#: waskaweb/templates/statement/dialogs/missing_statement.mako:11
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:4
 msgid "statement_dialog_p_statement_no_explanation"
 msgstr ""
-"Für die gewählte Fallakte liegt noch keine Einverständniserklärung seitens "
-"des Jugendlichen vor. Die Fallakte darf daher keine personenbezogenen Daten "
-"enthalten. Die entsprechende Einhaltung der gesetzlichen Bestimmungen liegt "
-"in Ihrer Verantwortung."
+"Für die Fallakte liegt noch keine Einverständniserklärung des Jugendlichen "
+"zur Erfassung, Verarbeitung und Nutzung personenbezogener Daten seitens des "
+"Jugendlichen vor. Die entsprechende Einhaltung der gesetzlichen Bestimmungen "
+"liegt in Ihrer Verantwortung."
 
-#: waskaweb/templates/statement/dialogs/missing_statement.mako:13
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:6
 msgid "statement_dialog_p_options"
-msgstr "Sie haben nun folgende Möglichkeiten:"
+msgstr ""
+"Bitte beachten Sie, dass die Einverständniserklärung der schriftlichen Form "
+"bedarf. Dazu steht Ihnen eine %s zur Verfügung.<br>Sie haben nun die "
+"Möglichkeit eine Angabe zur Einverständniserlärung zu geben. Wählen Sie:"
 
-#: waskaweb/templates/statement/dialogs/missing_statement.mako:15
-msgid "statement_dialog_li_statement_set"
-msgstr "Erklärung jetzt setzen"
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:6
+msgid "statement_edit_a_statement_form_printversion"
+msgstr " Druckversion dieser Erklärung"
 
-#: waskaweb/templates/statement/dialogs/missing_statement.mako:15
-msgid "statement_dialog_li_statement_set_explanation"
-msgstr ""
-", wenn der Status zur Einverständniserklärung inzwischen geklärt wurde."
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:9
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:14
+msgid "statement_dialog_li_statement_accepted"
+msgstr "Eine Erklärung liegt vor"
 
-#: waskaweb/templates/statement/dialogs/missing_statement.mako:16
-msgid "statement_dialog_li_statement_not_set"
-msgstr "Erklärung weiterhin unklar"
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:9
+msgid "statement_dialog_li_statement_accepted_explanation"
+msgstr ", wenn eine Einverständniserklärung des Jugendlichen vorliegt."
 
-#: waskaweb/templates/statement/dialogs/missing_statement.mako:16
-msgid "statement_dialog_li_statement_not_set_explanation"
-msgstr ", wenn die Einverständniserklärung noch eingeholt werden soll."
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:10
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:15
+msgid "statement_dialog_li_statement_unclear"
+msgstr "Erklärung noch unklar"
 
-#: waskaweb/templates/statement/dialogs/missing_statement.mako:19
-msgid "statement_dialog_a_statement_set"
-msgstr "Erklärung jetzt setzen"
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:10
+msgid "statement_dialog_li_statement_unclear_explanation"
+msgstr ""
+", wenn zum jetzigen Zeitpunkt noch keine Erklärung vorliegt, aber noch "
+"eingeholt werden soll."
 
-#: waskaweb/templates/statement/dialogs/missing_statement.mako:20
-msgid "statement_dialog_a_statement_not_set"
-msgstr "Erklärung weiterhin unklar"
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:11
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:16
+msgid "statement_dialog_li_statement_declined"
+msgstr "Eine Erklärung liegt nicht vor"
 
-#: waskaweb/templates/statement/dialogs/missing_statement.mako:24
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:11
+msgid "statement_dialog_li_statement_declined_explanation"
+msgstr ""
+", wenn keine Erklärung des Jugendlichen vorliegt und sicher nicht vorliegen "
+"wird. Die Fallakte wird dann anonymisiert!"
+
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:20
 msgid "statement_dialog_a_ok"
 msgstr "OK"
 
@@ -2305,167 +2621,54 @@
 msgid "adm_np_changepassword"
 msgstr "Benutzerpasswort geändert!"
 
-#~ msgid "np_adm_statement_declined"
-#~ msgstr "Daten gelöscht!"
-
-#~ msgid "cm_header_downloadcsv"
-#~ msgstr "CSV Herunterladen"
-
-#~ msgid "cm_bundle_standin_explain_cm_ka"
+#~ msgid "cm_digest_con_digest_dossier"
 #~ msgstr ""
-#~ "Beachten Sie, dass aus der folgenden Liste nur für die Fälle die "
-#~ "Vertretung gesetzt werden wird, für die Sie der Hauptbearbeiter sind"
+#~ "Hier wird eine Zusammenfassung der Fallakte angezeigt. Diese "
+#~ "Zusammenfassung besteht aus einer Zusammenstellung verschiedener Felder "
+#~ "aus dem Fallaktenformular"
 
-#~ msgid "cm_from_import_label_file"
-#~ msgstr "PDF-Formular wählen:"
+#~ msgid "cm_main_print_statement"
+#~ msgstr "Erklärung drucken"
 
-#~ msgid "cm_header_digest_personal"
-#~ msgstr "Angaben zum Jugendlichen"
+#~ msgid "statement_edit_header_statement"
+#~ msgstr "Einverständniserklärung"
 
-#~ msgid "cm_digest_header_address"
-#~ msgstr "Kontaktdaten"
+#~ msgid "statement_edit_p_no_statement"
+#~ msgstr ""
+#~ "Für die gewählte Fallakte liegt aktuell noch keine "
+#~ "Einverständniserklärung zur Erfassung, Verarbeitung und Nutzung "
+#~ "personenbezogener Daten seitens des Jugendlichen vor."
 
-#~ msgid "cm_np_condfirm_aid_delete"
-#~ msgstr "Unterstützungsangebot löschen?"
+#~ msgid "statement_edit_p_statement_decision"
+#~ msgstr ""
+#~ "Sie können in diesem Dialog bestätigen, dass die Einverständniserklärung "
+#~ "nun vorliegt. Alternativ können Sie angeben, dass die Erklärung sicher "
+#~ "nicht vom Jugendlichen abgegeben wird. In diesem Fall wird die gewählte "
+#~ "Fallakte anonymisiert und ist nicht mehr bearbeitbar."
 
-#~ msgid "att_np_delete"
-#~ msgstr "Anlage löschen"
+#~ msgid "statement_edit_p_statement_form"
+#~ msgstr ""
+#~ "Bitte beachten Sie, dass die Einverständniserklärung der schriftlichen "
+#~ "Form bedarf. Dazu steht Ihnen eine"
 
-#~ msgid "att_np_overview"
-#~ msgstr "Anlagenübersicht"
+#~ msgid "statement_edit_p_statement_form_end"
+#~ msgstr "zur Verfügung."
 
-#~ msgid "cm_rg_aid_overview_table_show"
-#~ msgstr "Anzeigen"
+#~ msgid "statement_label_statement_yes"
+#~ msgstr "Die Einwilligungserklärung liegt vor."
 
-#~ msgid "cm_rg_aid_overview_table_"
-#~ msgstr "Löschen"
+#~ msgid "statement_label_statement_no"
+#~ msgstr "Die Einwilligungserklärung liegt nicht vor."
 
-#~ msgid "cm_header_search"
-#~ msgstr "Suche"
-
-#~ msgid "dialog_header_notification"
-#~ msgstr "Hinweis"
-
-#~ msgid "dialog_header_confirm"
-#~ msgstr "Bestätigung erforderlich"
-
-#~ msgid "adm_reset_user_password_question_part1"
+#~ msgid "statement_revoke_p_statement"
 #~ msgstr ""
-#~ "Wollen Sie wirklich das Passwort für folgenden Benutzer zurücksetzen:"
+#~ "<p>Für diese Fallakte liegt aktuell eine Einverständniserklärung Seitens "
+#~ "des Jugendlichen vor. Sie können diese Erklärung nun zurückziehen.</"
+#~ "p><p>Das Zurückziehen der Einverständniserklärung führt zu einer "
+#~ "Anonymisierung der personenbezogenen Daten der Fallakte. Die Fallakte "
+#~ "steht danach nicht mehr für eine Bearbeitung zur Verfügung und wird aus "
+#~ "der Fallakenübersicht entfernt. Beachten Sie, das dieser Vorgang nicht "
+#~ "umkehrbar ist!</p>"
 
-#~ msgid "adm_reset_user_password_question_part2"
-#~ msgstr "zurücksetzen?"
-
-#~ msgid "doc_overview_tbl_show"
-#~ msgstr "Anzeigen"
-
-#~ msgid "doc_overview_tbl_delete"
-#~ msgstr "Löschen"
-
-#~ msgid "cm_menu_link_hide"
-#~ msgstr "Akte ausblenden"
-
-#~ msgid "cm_menu_link_delete"
-#~ msgstr "Akte löschen"
-
-#~ msgid "cm_menu_link_show"
-#~ msgstr "Akte einblenden"
-
-#~ msgid "cm_menu_link_restore"
-#~ msgstr "Akte wiederherstellen"
-
-#~ msgid "cm_menu_link_anonymise"
-#~ msgstr "Anonymisieren"
-
-#~ msgid "cm_rg_aid_overview_header_overview_support_offer"
-#~ msgstr "Übersicht Unterstützungsangebote"
-
-#~ msgid "cm_rg_aid_overview_option_common_educational_area"
-#~ msgstr "allg. bildender Bereich (BB)"
-
-#~ msgid "cm_rg_aid_overview_option_vocational_preparation"
-#~ msgstr "Berufsvorbereitung (BV)"
-
-#~ msgid "cm_rg_aid_overview_option_qualifications"
-#~ msgstr "berufl. Qualifizierung (BQ)"
-
-#~ msgid "cm_rg_aid_overview_option_life_skills"
-#~ msgstr "Lebensbewältigung (LB)"
-
-#~ msgid "start_header_remind"
-#~ msgstr "Erinnerungen"
-
-#~ msgid "doc_np_root"
-#~ msgstr "Dokumente"
-
-#~ msgid "np_text"
-#~ msgstr "Sie sind hier: "
-
-#~ msgid "start_header_appointments_period"
-#~ msgstr "Termine"
-
-#~ msgid "adm_form_settings_ee_statement"
-#~ msgstr "Vorlage Einverständniserklärung"
-
-#~ msgid "adm_form_settings_ap_statement"
-#~ msgstr "Vorlage Förderplan"
-
-#~ msgid "adm_form_settings_privacystatement"
-#~ msgstr "Vorlage Einverständniserklärung"
-
-#~ msgid "adm_form_settings_view_privacystatement"
-#~ msgstr "Vorlage anzeigen"
-
-#~ msgid "adm_form_settings_aidplanstatement"
-#~ msgstr "Vorlage Förderplan"
-
-#~ msgid "adm_form_settings_view_aidplanstatement"
-#~ msgstr "Vorlage anzeigen"
-
-#~ msgid "start_header_help"
-#~ msgstr "Waska Hilfe"
-
-#~ msgid "app_actions_link_edit"
-#~ msgstr "Termin bearbeiten"
-
-#~ msgid "menu_adm_link_settings"
-#~ msgstr "Einstellungen"
-
-#~ msgid "cm_menu_link_back"
-#~ msgstr "<< Vorheriger Fallaktenpunkt"
-
-#~ msgid "cm_menu_link_forward"
-#~ msgstr "Nächster Fallaktenpunkt >>"
-
-#~ msgid "menu_header_app"
-#~ msgstr "Termine"
-
-#~ msgid "menu_header_doc"
-#~ msgstr "Dokumente"
-
-#~ msgid "cm_info_selected"
-#~ msgstr "Ausgewählte Fallakte"
-
-#~ msgid "adm_form_newuser_firstname"
-#~ msgstr "Vorname"
-
-#~ msgid "adm_form_newuser_lastname"
-#~ msgstr "Nachname"
-
-#~ msgid "adm_form_newuser_telephone"
-#~ msgstr "Telefon"
-
-#~ msgid "adm_form_newuser_disabled"
-#~ msgstr "Benutzer ist gesperrt/deaktiviert"
-
-#~ msgid "adm_form_newuser_login"
-#~ msgstr "Anmeldekennung"
-
-#~ msgid "adm_form_newuser_submit"
-#~ msgstr "Benutzer speichern"
-
-#~ msgid "cm_actions_link_printview"
-#~ msgstr "Druckansicht"
-
-#~ msgid "cm_actions_link_new"
-#~ msgstr "Neue Fallakte anlegen"
+#~ msgid "statement_label_statement_revoked"
+#~ msgstr "Die Einwilligungserklärung zurückziehen"

Modified: trunk/waskaweb/i18n/waskaweb.pot
===================================================================
--- trunk/waskaweb/i18n/waskaweb.pot	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/i18n/waskaweb.pot	2008-08-13 13:12:54 UTC (rev 46)
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: waskaweb 0.0.0\n"
 "Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
-"POT-Creation-Date: 2008-03-12 15:39+0100\n"
+"POT-Creation-Date: 2008-04-11 16:13+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -171,25 +171,25 @@
 msgid "cm_rg_aid_overview_legend_new_offer"
 msgstr ""
 
-#: waskaweb/model/case.py:931 waskaweb/templates/casemanagement/caselist.mako:41
+#: waskaweb/model/case.py:995 waskaweb/templates/casemanagement/caselist.mako:41
 #: waskaweb/templates/casemanagement/caselist.mako:88
 msgid "case_state_label_open"
 msgstr ""
 
-#: waskaweb/model/case.py:932 waskaweb/templates/casemanagement/caselist.mako:43
+#: waskaweb/model/case.py:996 waskaweb/templates/casemanagement/caselist.mako:43
 #: waskaweb/templates/casemanagement/caselist.mako:90
 msgid "case_state_label_closed"
 msgstr ""
 
-#: waskaweb/model/case.py:933
+#: waskaweb/model/case.py:997
 msgid "case_state_label_outstanding_delete"
 msgstr ""
 
-#: waskaweb/model/case.py:934
+#: waskaweb/model/case.py:998
 msgid "case_state_label_outstanding_anon"
 msgstr ""
 
-#: waskaweb/model/case.py:935
+#: waskaweb/model/case.py:999
 msgid "case_state_label_anon"
 msgstr ""
 
@@ -233,82 +233,86 @@
 msgid "logout_p_login_again"
 msgstr ""
 
-#: waskaweb/templates/main.mako:68
+#: waskaweb/templates/main.mako:70
 msgid "statusbar_logininfo"
 msgstr ""
 
-#: waskaweb/templates/main.mako:75 waskaweb/templates/main.mako:105
+#: waskaweb/templates/main.mako:77 waskaweb/templates/main.mako:107
 msgid "sm_menu_link_home"
 msgstr ""
 
-#: waskaweb/templates/main.mako:76
+#: waskaweb/templates/main.mako:78
 msgid "sm_menu_link_help"
 msgstr ""
 
-#: waskaweb/templates/main.mako:77
+#: waskaweb/templates/main.mako:79
 msgid "sm_menu_link_settings"
 msgstr ""
 
-#: waskaweb/templates/main.mako:79
+#: waskaweb/templates/main.mako:81
 msgid "sm_menu_link_logout"
 msgstr ""
 
-#: waskaweb/templates/main.mako:85 waskaweb/templates/main.mako:103
+#: waskaweb/templates/main.mako:87 waskaweb/templates/main.mako:105
 msgid "np_root"
 msgstr ""
 
-#: waskaweb/templates/main.mako:106
+#: waskaweb/templates/main.mako:108
 #: waskaweb/templates/appointments/dialogs/confirm.mako:4
 #: waskaweb/templates/appointments/dialogs/notificate_delete_appointment.mako:5
+#: waskaweb/templates/appointments/dialogs/success_delete_appointment.mako:5
+#: waskaweb/templates/casemanagement/dialogs/confirm_delete_appointment.mako:5
+#: waskaweb/templates/casemanagement/dialogs/failed_delete_appointment.mako:6
+#: waskaweb/templates/casemanagement/dialogs/success_delete_appointment.mako:6
 msgid "menu_app_link_overview"
 msgstr ""
 
-#: waskaweb/templates/main.mako:107
+#: waskaweb/templates/main.mako:109
 msgid "menu_doc_link_overview"
 msgstr ""
 
-#: waskaweb/templates/main.mako:115 waskaweb/templates/main.mako:125
+#: waskaweb/templates/main.mako:117 waskaweb/templates/main.mako:127
 msgid "menu_header_cm"
 msgstr ""
 
-#: waskaweb/templates/main.mako:117 waskaweb/templates/main.mako:127
+#: waskaweb/templates/main.mako:119 waskaweb/templates/main.mako:129
 msgid "menu_cm_link_overview"
 msgstr ""
 
-#: waskaweb/templates/main.mako:118 waskaweb/templates/main.mako:132
+#: waskaweb/templates/main.mako:120 waskaweb/templates/main.mako:134
 #: waskaweb/templates/casemanagement/evaluation.mako:8
 msgid "cm_actions_link_evaluate"
 msgstr ""
 
-#: waskaweb/templates/main.mako:129
+#: waskaweb/templates/main.mako:131
 msgid "menu_cm_link_new"
 msgstr ""
 
-#: waskaweb/templates/main.mako:130
+#: waskaweb/templates/main.mako:132
 msgid "menu_cm_link_import"
 msgstr ""
 
-#: waskaweb/templates/main.mako:145
+#: waskaweb/templates/main.mako:147
 msgid "menu_header_adm"
 msgstr ""
 
-#: waskaweb/templates/main.mako:147
+#: waskaweb/templates/main.mako:149
 msgid "menu_adm_link_useroverview"
 msgstr ""
 
-#: waskaweb/templates/main.mako:150
+#: waskaweb/templates/main.mako:152
 msgid "menu_adm_link_showsettings"
 msgstr ""
 
-#: waskaweb/templates/main.mako:163
+#: waskaweb/templates/main.mako:165
 msgid "main_formular_input_error"
 msgstr ""
 
-#: waskaweb/templates/main.mako:175
+#: waskaweb/templates/main.mako:177
 msgid "footer_title"
 msgstr ""
 
-#: waskaweb/templates/main.mako:175
+#: waskaweb/templates/main.mako:177
 msgid "footer_version"
 msgstr ""
 
@@ -334,7 +338,7 @@
 msgstr ""
 
 #: waskaweb/templates/administration/delete_user_helper.mako:6
-#: waskaweb/templates/administration/edit_settings.mako:5
+#: waskaweb/templates/administration/edit_settings.mako:11
 #: waskaweb/templates/administration/edit_user.mako:13
 #: waskaweb/templates/administration/new_user.mako:13
 #: waskaweb/templates/administration/new_user_result.mako:6
@@ -353,6 +357,7 @@
 #: waskaweb/templates/administration/dialogs/success_delete_user.mako:5
 #: waskaweb/templates/administration/dialogs/success_edit_agency.mako:5
 #: waskaweb/templates/administration/dialogs/success_edit_user.mako:5
+#: waskaweb/templates/appointments/dialogs/failed_delete_appointment.mako:5
 msgid "adm_np_root"
 msgstr ""
 
@@ -372,6 +377,7 @@
 #: waskaweb/templates/administration/dialogs/notificate_deleteuser.mako:6
 #: waskaweb/templates/administration/dialogs/success_delete_user.mako:6
 #: waskaweb/templates/administration/dialogs/success_edit_user.mako:6
+#: waskaweb/templates/appointments/dialogs/failed_delete_appointment.mako:6
 msgid "adm_np_overview"
 msgstr ""
 
@@ -401,49 +407,53 @@
 msgid "cm_form_editor_submit"
 msgstr ""
 
+#: waskaweb/templates/administration/edit_settings.mako:4
+#: waskaweb/templates/administration/edit_settings.mako:36
+#: waskaweb/templates/administration/show_settings.mako:26
+msgid "adm_form_settings_kaname"
+msgstr ""
+
+#: waskaweb/templates/administration/edit_settings.mako:5
+#: waskaweb/templates/administration/edit_settings.mako:44
+#: waskaweb/templates/administration/show_settings.mako:30
+msgid "adm_form_settings_fkz"
+msgstr ""
+
 #: waskaweb/templates/administration/edit_settings.mako:6
+#: waskaweb/templates/administration/edit_settings.mako:55
+#: waskaweb/templates/administration/show_settings.mako:34
+msgid "adm_form_settings_max_savetime"
+msgstr ""
+
+#: waskaweb/templates/administration/edit_settings.mako:12
 #: waskaweb/templates/administration/show_settings.mako:7
 #: waskaweb/templates/administration/dialogs/success_edit_agency.mako:6
 msgid "adm_np_showsettings"
 msgstr ""
 
-#: waskaweb/templates/administration/edit_settings.mako:7
+#: waskaweb/templates/administration/edit_settings.mako:13
 #: waskaweb/templates/administration/dialogs/success_edit_agency.mako:7
 msgid "adm_np_editsettings"
 msgstr ""
 
-#: waskaweb/templates/administration/edit_settings.mako:12
+#: waskaweb/templates/administration/edit_settings.mako:18
 msgid "adm_header_editsettings"
 msgstr ""
 
-#: waskaweb/templates/administration/edit_settings.mako:17
+#: waskaweb/templates/administration/edit_settings.mako:23
 msgid "adm_actions_link_showsettings"
 msgstr ""
 
-#: waskaweb/templates/administration/edit_settings.mako:23
+#: waskaweb/templates/administration/edit_settings.mako:30
 msgid "adm_con_es_editsettings"
 msgstr ""
 
-#: waskaweb/templates/administration/edit_settings.mako:29
-#: waskaweb/templates/administration/show_settings.mako:26
-msgid "adm_form_settings_kaname"
-msgstr ""
-
-#: waskaweb/templates/administration/edit_settings.mako:36
-#: waskaweb/templates/administration/show_settings.mako:30
-msgid "adm_form_settings_fkz"
-msgstr ""
-
-#: waskaweb/templates/administration/edit_settings.mako:46
-msgid "adm_form_settings_max_savetime"
-msgstr ""
-
-#: waskaweb/templates/administration/edit_settings.mako:62
+#: waskaweb/templates/administration/edit_settings.mako:72
 #: waskaweb/templates/administration/show_settings.mako:38
 msgid "adm_form_settings_anontransfer"
 msgstr ""
 
-#: waskaweb/templates/administration/edit_settings.mako:81
+#: waskaweb/templates/administration/edit_settings.mako:91
 msgid "adm_form_settings_save"
 msgstr ""
 
@@ -658,25 +668,37 @@
 
 #: waskaweb/templates/administration/overview_user.mako:43
 #: waskaweb/templates/administration/overview_user.mako:60
+#: waskaweb/templates/appointments/appointmentlist.mako:4
+#: waskaweb/templates/appointments/appointmentlist.mako:7
+#: waskaweb/templates/casemanagement/appointmentlist.mako:4
+#: waskaweb/templates/casemanagement/appointmentlist.mako:7
 #: waskaweb/templates/casemanagement/caselist.mako:52
 #: waskaweb/templates/casemanagement/caselist.mako:99
+#: waskaweb/templates/casemanagement/reminderlist.mako:4
+#: waskaweb/templates/casemanagement/reminderlist.mako:7
 #: waskaweb/templates/documents/case_overview.mako:42
 #: waskaweb/templates/documents/case_overview.mako:53
 #: waskaweb/templates/documents/global_overview.mako:39
 #: waskaweb/templates/documents/global_overview.mako:40
 #: waskaweb/templates/documents/global_overview.mako:51
 #: waskaweb/templates/documents/global_overview.mako:52
+#: waskaweb/templates/start/appointmentlist.mako:5
+#: waskaweb/templates/start/appointmentlist.mako:8
+#: waskaweb/templates/start/remindlist.mako:4
 msgid "cm_overview_a_show"
 msgstr ""
 
 #: waskaweb/templates/administration/overview_user.mako:45
 #: waskaweb/templates/administration/overview_user.mako:62
+#: waskaweb/templates/appointments/appointmentlist.mako:7
 #: waskaweb/templates/casemanagement/agencylist.mako:20
 #: waskaweb/templates/casemanagement/agencylist.mako:30
+#: waskaweb/templates/casemanagement/appointmentlist.mako:7
 #: waskaweb/templates/casemanagement/caselist.mako:56
 #: waskaweb/templates/casemanagement/caselist.mako:62
 #: waskaweb/templates/casemanagement/caselist.mako:103
 #: waskaweb/templates/casemanagement/caselist.mako:109
+#: waskaweb/templates/casemanagement/reminderlist.mako:7
 #: waskaweb/templates/documents/case_overview.mako:44
 #: waskaweb/templates/documents/case_overview.mako:55
 #: waskaweb/templates/documents/global_overview.mako:42
@@ -842,6 +864,7 @@
 
 #: waskaweb/templates/administration/dialogs/notificate_deleteuser.mako:7
 #: waskaweb/templates/administration/dialogs/success_delete_user.mako:7
+#: waskaweb/templates/appointments/dialogs/failed_delete_appointment.mako:7
 msgid "adm_np_success_deleteuser"
 msgstr ""
 
@@ -893,7 +916,8 @@
 msgid "app_form_new_submit"
 msgstr ""
 
-#: waskaweb/templates/appointments/new.mako:4
+#: waskaweb/templates/appointments/edit.mako:12
+#: waskaweb/templates/appointments/new.mako:12
 #: waskaweb/templates/appointments/overview.mako:4
 #: waskaweb/templates/appointments/show.mako:4
 #: waskaweb/templates/appointments/beta/show_1.mako:4
@@ -905,75 +929,137 @@
 #: waskaweb/templates/appointments/beta/show_7.mako:4
 #: waskaweb/templates/appointments/dialogs/confirm.mako:5
 #: waskaweb/templates/appointments/dialogs/notificate_delete_appointment.mako:6
+#: waskaweb/templates/appointments/dialogs/success_create_appointment.mako:5
+#: waskaweb/templates/appointments/dialogs/success_delete_appointment.mako:6
+#: waskaweb/templates/appointments/dialogs/success_edit_appointment.mako:5
 #: waskaweb/templates/casemanagement/appointments.mako:5
+#: waskaweb/templates/casemanagement/editAppointment.mako:13
+#: waskaweb/templates/casemanagement/newAppointment.mako:13
+#: waskaweb/templates/casemanagement/showAppointment.mako:5
+#: waskaweb/templates/casemanagement/dialogs/success_create_appointment.mako:6
+#: waskaweb/templates/casemanagement/dialogs/success_edit_appointment.mako:6
 msgid "app_np_list"
 msgstr ""
 
-#: waskaweb/templates/appointments/new.mako:5
+#: waskaweb/templates/appointments/edit.mako:13
+#: waskaweb/templates/appointments/dialogs/success_edit_appointment.mako:6
+#: waskaweb/templates/casemanagement/editAppointment.mako:14
+#: waskaweb/templates/casemanagement/dialogs/success_edit_appointment.mako:7
+msgid "app_np_edit"
+msgstr ""
+
+#: waskaweb/templates/appointments/edit.mako:17
+msgid "cm_app_header_edit"
+msgstr ""
+
+#: waskaweb/templates/appointments/edit.mako:23
+#: waskaweb/templates/casemanagement/editAppointment.mako:24
+msgid "menu_app_link_show_back"
+msgstr ""
+
+#: waskaweb/templates/appointments/edit_body.mako:4
+msgid "app_form_legend_datetime"
+msgstr ""
+
+#: waskaweb/templates/appointments/edit_body.mako:7
+#: waskaweb/templates/appointments/edit_body.mako:10
+msgid "app_form_startdate"
+msgstr ""
+
+#: waskaweb/templates/appointments/edit_body.mako:16
+#: waskaweb/templates/appointments/edit_body.mako:19
+msgid "app_form_starttime"
+msgstr ""
+
+#: waskaweb/templates/appointments/edit_body.mako:25
+#: waskaweb/templates/appointments/edit_body.mako:28
+msgid "app_form_enddate"
+msgstr ""
+
+#: waskaweb/templates/appointments/edit_body.mako:34
+#: waskaweb/templates/appointments/edit_body.mako:37
+msgid "app_form_endtime"
+msgstr ""
+
+#: waskaweb/templates/appointments/edit_body.mako:43
+msgid "app_form_legend_appdate"
+msgstr ""
+
+#: waskaweb/templates/appointments/edit_body.mako:47
+#: waskaweb/templates/appointments/show_body.mako:17
+msgid "app_form_type"
+msgstr ""
+
+#: waskaweb/templates/appointments/edit_body.mako:59
+#: waskaweb/templates/appointments/edit_body.mako:62
+msgid "app_form_title"
+msgstr ""
+
+#: waskaweb/templates/appointments/edit_body.mako:68
+#: waskaweb/templates/appointments/edit_body.mako:71
+msgid "app_form_description"
+msgstr ""
+
+#: waskaweb/templates/appointments/edit_body.mako:76
+msgid "app_form_submit"
+msgstr ""
+
+#: waskaweb/templates/appointments/new.mako:13
+#: waskaweb/templates/appointments/dialogs/success_create_appointment.mako:6
+#: waskaweb/templates/casemanagement/newAppointment.mako:14
 #: waskaweb/templates/casemanagement/new_appointment.mako:7
+#: waskaweb/templates/casemanagement/dialogs/success_create_appointment.mako:7
 msgid "app_np_new"
 msgstr ""
 
-#: waskaweb/templates/appointments/new.mako:9
+#: waskaweb/templates/appointments/new.mako:17
+#: waskaweb/templates/casemanagement/newAppointment.mako:18
 #: waskaweb/templates/casemanagement/new_appointment.mako:11
 msgid "cm_app_header_new"
 msgstr ""
 
-#: waskaweb/templates/appointments/new.mako:14
+#: waskaweb/templates/appointments/new.mako:23
+#: waskaweb/templates/appointments/show.mako:20
 #: waskaweb/templates/appointments/beta/show_10.mako:15
 #: waskaweb/templates/appointments/beta/show_5.mako:15
 #: waskaweb/templates/appointments/beta/show_6.mako:15
 #: waskaweb/templates/appointments/beta/show_7.mako:14
 #: waskaweb/templates/appointments/beta/show_8.mako:15
 #: waskaweb/templates/appointments/beta/show_9.mako:15
+#: waskaweb/templates/casemanagement/newAppointment.mako:24
+#: waskaweb/templates/casemanagement/showAppointment.mako:23
 msgid "menu_app_link_overview_back"
 msgstr ""
 
-#: waskaweb/templates/appointments/overview.mako:9
-#: waskaweb/templates/appointments/overview.mako:23
+#: waskaweb/templates/appointments/overview.mako:8
 #: waskaweb/templates/casemanagement/appointments.mako:10
 msgid "app_header_overview"
 msgstr ""
 
 #: waskaweb/templates/appointments/overview.mako:14
-#: waskaweb/templates/casemanagement/appointments.mako:17
+#: waskaweb/templates/casemanagement/appointments.mako:16
 msgid "app_actions_link_newappointment"
 msgstr ""
 
-#: waskaweb/templates/appointments/overview.mako:26
+#: waskaweb/templates/appointments/overview.mako:20
 msgid "app_con_list_all_appointments"
 msgstr ""
 
-#: waskaweb/templates/appointments/overview_body.mako:4
-#: waskaweb/templates/appointments/overview_body.mako:59
+#: waskaweb/templates/appointments/overview_body.mako:5
+#: waskaweb/templates/appointments/remindlist_body.mako:5
 msgid "app_overview_tbl_header_date"
 msgstr ""
 
-#: waskaweb/templates/appointments/overview_body.mako:5
-#: waskaweb/templates/appointments/overview_body.mako:60
+#: waskaweb/templates/appointments/overview_body.mako:6
+#: waskaweb/templates/appointments/remindlist_body.mako:6
 msgid "app_overview_tbl_header_desc"
 msgstr ""
 
-#: waskaweb/templates/appointments/overview_body.mako:6
-#: waskaweb/templates/appointments/overview_body.mako:61
+#: waskaweb/templates/appointments/overview_body.mako:7
+#: waskaweb/templates/appointments/remindlist_body.mako:7
 msgid "app_overview_tbl_header_actions"
 msgstr ""
 
-#: waskaweb/templates/appointments/overview_body.mako:14
-#: waskaweb/templates/appointments/overview_body.mako:22
-#: waskaweb/templates/appointments/overview_body.mako:30
-#: waskaweb/templates/appointments/overview_body.mako:37
-#: waskaweb/templates/appointments/overview_body.mako:48
-msgid "app_overview_body_table_show"
-msgstr ""
-
-#: waskaweb/templates/appointments/overview_body.mako:15
-#: waskaweb/templates/appointments/overview_body.mako:23
-#: waskaweb/templates/appointments/overview_body.mako:38
-#: waskaweb/templates/appointments/overview_body.mako:49
-msgid "app_overview_body_table_delete"
-msgstr ""
-
 #: waskaweb/templates/appointments/show.mako:5
 #: waskaweb/templates/appointments/beta/show_1.mako:5
 #: waskaweb/templates/appointments/beta/show_10.mako:5
@@ -985,6 +1071,7 @@
 #: waskaweb/templates/appointments/beta/show_7.mako:5
 #: waskaweb/templates/appointments/beta/show_8.mako:5
 #: waskaweb/templates/appointments/beta/show_9.mako:5
+#: waskaweb/templates/casemanagement/showAppointment.mako:6
 msgid "app_np_show"
 msgstr ""
 
@@ -999,29 +1086,42 @@
 #: waskaweb/templates/appointments/beta/show_7.mako:9
 #: waskaweb/templates/appointments/beta/show_8.mako:10
 #: waskaweb/templates/appointments/beta/show_9.mako:10
+#: waskaweb/templates/casemanagement/editAppointment.mako:18
+#: waskaweb/templates/casemanagement/showAppointment.mako:10
 msgid "app_header_show"
 msgstr ""
 
-#: waskaweb/templates/appointments/show.mako:14
-#: waskaweb/templates/appointments/beta/show_1.mako:15
-#: waskaweb/templates/appointments/beta/show_2.mako:15
-#: waskaweb/templates/appointments/beta/show_3.mako:14
-#: waskaweb/templates/appointments/beta/show_4.mako:15
-msgid "sm_menu_link_home_back"
+#: waskaweb/templates/appointments/show.mako:16
+msgid "sm_menu_link_appointment_edit"
 msgstr ""
 
-#: waskaweb/templates/appointments/show.mako:25
-msgid "app_table_date"
+#: waskaweb/templates/appointments/show_body.mako:5
+msgid "app_table_startdate"
 msgstr ""
 
-#: waskaweb/templates/appointments/show.mako:29
+#: waskaweb/templates/appointments/show_body.mako:9
+msgid "app_table_enddate"
+msgstr ""
+
+#: waskaweb/templates/appointments/show_body.mako:13
+msgid "app_table_duration"
+msgstr ""
+
+#: waskaweb/templates/appointments/show_body.mako:25
 msgid "app_table_title"
 msgstr ""
 
-#: waskaweb/templates/appointments/show.mako:33
+#: waskaweb/templates/appointments/show_body.mako:29
 msgid "app_table_description"
 msgstr ""
 
+#: waskaweb/templates/appointments/beta/show_1.mako:15
+#: waskaweb/templates/appointments/beta/show_2.mako:15
+#: waskaweb/templates/appointments/beta/show_3.mako:14
+#: waskaweb/templates/appointments/beta/show_4.mako:15
+msgid "sm_menu_link_home_back"
+msgstr ""
+
 #: waskaweb/templates/appointments/beta/show_10.mako:4
 #: waskaweb/templates/appointments/beta/show_8.mako:4
 #: waskaweb/templates/appointments/beta/show_9.mako:4
@@ -1031,6 +1131,10 @@
 
 #: waskaweb/templates/appointments/dialogs/confirm.mako:6
 #: waskaweb/templates/appointments/dialogs/notificate_delete_appointment.mako:7
+#: waskaweb/templates/appointments/dialogs/success_delete_appointment.mako:7
+#: waskaweb/templates/casemanagement/dialogs/confirm_delete_appointment.mako:6
+#: waskaweb/templates/casemanagement/dialogs/failed_delete_appointment.mako:7
+#: waskaweb/templates/casemanagement/dialogs/success_delete_appointment.mako:7
 msgid "app_np_delete"
 msgstr ""
 
@@ -1038,6 +1142,8 @@
 #: waskaweb/templates/casemanagement/bundle_editor.mako:6
 #: waskaweb/templates/casemanagement/bundle_standin.mako:6
 #: waskaweb/templates/casemanagement/downloadCSV.mako:6
+#: waskaweb/templates/casemanagement/downloadXLS.mako:6
+#: waskaweb/templates/casemanagement/downloadXML.mako:6
 #: waskaweb/templates/casemanagement/evaluation.mako:4
 #: waskaweb/templates/casemanagement/evaluation_result.mako:6
 #: waskaweb/templates/casemanagement/main.mako:10
@@ -1059,6 +1165,8 @@
 #: waskaweb/templates/casemanagement/dialogs/success_delete_cm.mako:5
 #: waskaweb/templates/casemanagement/dialogs/success_markdelete.mako:5
 #: waskaweb/templates/casemanagement/dialogs/success_restore.mako:5
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:6
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:6
 #: waskaweb/templates/casemanagement/static_form/statement.mako:5
 #: waskaweb/templates/casemanagement/static_form/statement_print.mako:5
 #: waskaweb/templates/statement/dialogs/missing_statement.mako:5
@@ -1067,6 +1175,8 @@
 
 #: waskaweb/templates/casemanagement/agency_overview.mako:7
 #: waskaweb/templates/casemanagement/downloadCSV.mako:7
+#: waskaweb/templates/casemanagement/downloadXLS.mako:7
+#: waskaweb/templates/casemanagement/downloadXML.mako:7
 #: waskaweb/templates/casemanagement/main.mako:11
 #: waskaweb/templates/casemanagement/overview.mako:7
 #: waskaweb/templates/casemanagement/dialogs/delete_attachment_success.mako:5
@@ -1102,24 +1212,33 @@
 msgstr ""
 
 #: waskaweb/templates/casemanagement/appointments.mako:4
-#: waskaweb/templates/casemanagement/digest.mako:5
+#: waskaweb/templates/casemanagement/digest.mako:6
+#: waskaweb/templates/casemanagement/editAppointment.mako:12
 #: waskaweb/templates/casemanagement/formular.mako:34
+#: waskaweb/templates/casemanagement/newAppointment.mako:12
 #: waskaweb/templates/casemanagement/new_appointment.mako:5
 #: waskaweb/templates/casemanagement/organisation.mako:6
+#: waskaweb/templates/casemanagement/showAppointment.mako:4
 #: waskaweb/templates/casemanagement/dialogs/confirm_anonymize.mako:5
 #: waskaweb/templates/casemanagement/dialogs/confirm_close.mako:5
 #: waskaweb/templates/casemanagement/dialogs/confirm_delete_aid.mako:5
+#: waskaweb/templates/casemanagement/dialogs/confirm_delete_appointment.mako:4
 #: waskaweb/templates/casemanagement/dialogs/confirm_delete_attachment.mako:4
 #: waskaweb/templates/casemanagement/dialogs/confirm_open.mako:5
 #: waskaweb/templates/casemanagement/dialogs/delete_attachment_success.mako:6
+#: waskaweb/templates/casemanagement/dialogs/failed_delete_appointment.mako:5
 #: waskaweb/templates/casemanagement/dialogs/success_anonymize.mako:5
 #: waskaweb/templates/casemanagement/dialogs/success_case_close.mako:5
+#: waskaweb/templates/casemanagement/dialogs/success_create_appointment.mako:5
 #: waskaweb/templates/casemanagement/dialogs/success_delete_aid.mako:5
+#: waskaweb/templates/casemanagement/dialogs/success_delete_appointment.mako:5
+#: waskaweb/templates/casemanagement/dialogs/success_edit_appointment.mako:5
 #: waskaweb/templates/documents/case_new.mako:5
 #: waskaweb/templates/documents/case_overview.mako:5
 #: waskaweb/templates/documents/dialogs/delete_attachment_success.mako:4
 #: waskaweb/templates/documents/dialogs/failed_attachment.mako:4
 #: waskaweb/templates/statement/edit.mako:5
+#: waskaweb/templates/statement/list_statements.mako:6
 #: waskaweb/templates/statement/dialogs/confirm.mako:5
 #: waskaweb/templates/statement/dialogs/ee_accept_failed.mako:5
 #: waskaweb/templates/statement/dialogs/ee_accept_success.mako:5
@@ -1228,77 +1347,75 @@
 msgid "cm_cn_ec_decide_which_part_to_export"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/digest.mako:6
+#: waskaweb/templates/casemanagement/digest.mako:7
 msgid "cm_np_digest"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/digest.mako:11
+#: waskaweb/templates/casemanagement/digest.mako:12
 msgid "cm_header_digest"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/digest.mako:16
-msgid "cm_digest_con_digest_dossier"
-msgstr ""
-
-#: waskaweb/templates/casemanagement/digest.mako:18
+#: waskaweb/templates/casemanagement/digest.mako:45
 msgid "cm_header_digest_youth"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/digest.mako:21
-#: waskaweb/templates/casemanagement/digest.mako:75
+#: waskaweb/templates/casemanagement/digest.mako:48
+#: waskaweb/templates/casemanagement/digest.mako:102
 msgid "cm_digest_tbl_label_lastname"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/digest.mako:25
-#: waskaweb/templates/casemanagement/digest.mako:79
+#: waskaweb/templates/casemanagement/digest.mako:52
+#: waskaweb/templates/casemanagement/digest.mako:106
 msgid "cm_digest_tbl_label_firstname"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/digest.mako:29
+#: waskaweb/templates/casemanagement/digest.mako:56
 msgid "cm_digest_tbl_label_caseid"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/digest.mako:33
+#: waskaweb/templates/casemanagement/digest.mako:60
 msgid "cm_digest_tbl_label_age"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/digest.mako:37
-#: waskaweb/templates/casemanagement/digest.mako:83
+#: waskaweb/templates/casemanagement/digest.mako:64
+#: waskaweb/templates/casemanagement/digest.mako:110
 msgid "cm_digest_tbl_label_email"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/digest.mako:47
+#: waskaweb/templates/casemanagement/digest.mako:74
 msgid "cm_digest_tbl_label_street"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/digest.mako:51
+#: waskaweb/templates/casemanagement/digest.mako:78
 msgid "cm_digest_tbl_label_plz"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/digest.mako:55
+#: waskaweb/templates/casemanagement/digest.mako:82
 msgid "cm_digest_tbl_label_city"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/digest.mako:59
-#: waskaweb/templates/casemanagement/digest.mako:93
+#: waskaweb/templates/casemanagement/digest.mako:86
+#: waskaweb/templates/casemanagement/digest.mako:120
 msgid "cm_digest_tbl_label_telephone"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/digest.mako:63
-#: waskaweb/templates/casemanagement/digest.mako:97
+#: waskaweb/templates/casemanagement/digest.mako:90
+#: waskaweb/templates/casemanagement/digest.mako:124
 msgid "cm_digest_tbl_label_mobiletelephone"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/digest.mako:67
+#: waskaweb/templates/casemanagement/digest.mako:94
 msgid "cm_digest_tbl_label_telephone_more"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/digest.mako:72
+#: waskaweb/templates/casemanagement/digest.mako:99
 msgid "cm_header_digest_parent"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation.mako:5
 #: waskaweb/templates/casemanagement/evaluation_result.mako:7
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:7
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:7
 msgid "cm_np_evaluate"
 msgstr ""
 
@@ -1307,38 +1424,56 @@
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:8
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:8
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:8
 msgid "cm_np_evaluate_result"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:10
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:10
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:10
 msgid "cm_header_evaluate_result"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:12
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:13
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:13
 msgid "cm_eval_summary_header_1"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:13
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:14
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:14
 msgid "cm_eval_summary_header_2"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:14
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:18
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:18
 msgid "cm_eval_summary_header_3"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:15
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:19
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:19
 msgid "cm_eval_summary_header_4"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:16
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:20
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:20
 msgid "cm_eval_summary_header_5"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:17
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:21
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:21
 msgid "cm_eval_summary_header_6"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:18
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:25
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:25
 msgid "cm_eval_summary_header_7"
 msgstr ""
 
@@ -1359,6 +1494,8 @@
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:40
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:29
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:29
 msgid "eval_group_note_all"
 msgstr ""
 
@@ -1371,10 +1508,14 @@
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:61
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:31
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:31
 msgid "cm_eval_header_1"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:64
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:34
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:34
 msgid "cm_eval_table_adolescent"
 msgstr ""
 
@@ -1384,9 +1525,27 @@
 #: waskaweb/templates/casemanagement/evaluation_result.mako:198
 #: waskaweb/templates/casemanagement/evaluation_result.mako:232
 #: waskaweb/templates/casemanagement/evaluation_result.mako:268
-#: waskaweb/templates/casemanagement/evaluation_result.mako:302
-#: waskaweb/templates/casemanagement/evaluation_result.mako:341
-#: waskaweb/templates/casemanagement/evaluation_result.mako:371
+#: waskaweb/templates/casemanagement/evaluation_result.mako:305
+#: waskaweb/templates/casemanagement/evaluation_result.mako:344
+#: waskaweb/templates/casemanagement/evaluation_result.mako:374
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:35
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:60
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:90
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:155
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:189
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:221
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:254
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:288
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:318
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:35
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:60
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:90
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:155
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:189
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:221
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:254
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:288
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:318
 msgid "cm_eval_table_number"
 msgstr ""
 
@@ -1396,17 +1555,39 @@
 #: waskaweb/templates/casemanagement/evaluation_result.mako:199
 #: waskaweb/templates/casemanagement/evaluation_result.mako:233
 #: waskaweb/templates/casemanagement/evaluation_result.mako:269
-#: waskaweb/templates/casemanagement/evaluation_result.mako:303
-#: waskaweb/templates/casemanagement/evaluation_result.mako:342
-#: waskaweb/templates/casemanagement/evaluation_result.mako:372
+#: waskaweb/templates/casemanagement/evaluation_result.mako:306
+#: waskaweb/templates/casemanagement/evaluation_result.mako:345
+#: waskaweb/templates/casemanagement/evaluation_result.mako:375
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:36
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:61
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:91
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:156
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:190
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:222
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:255
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:289
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:319
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:36
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:61
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:91
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:156
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:190
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:222
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:255
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:289
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:319
 msgid "cm_eval_table_percent"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:70
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:40
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:40
 msgid "cm_eval_table_consult_customer"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:76
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:46
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:46
 msgid "cm_eval_table_taken_over_to_cm"
 msgstr ""
 
@@ -1416,10 +1597,30 @@
 #: waskaweb/templates/casemanagement/evaluation_result.mako:186
 #: waskaweb/templates/casemanagement/evaluation_result.mako:227
 #: waskaweb/templates/casemanagement/evaluation_result.mako:257
-#: waskaweb/templates/casemanagement/evaluation_result.mako:291
-#: waskaweb/templates/casemanagement/evaluation_result.mako:328
-#: waskaweb/templates/casemanagement/evaluation_result.mako:366
-#: waskaweb/templates/casemanagement/evaluation_result.mako:396
+#: waskaweb/templates/casemanagement/evaluation_result.mako:294
+#: waskaweb/templates/casemanagement/evaluation_result.mako:331
+#: waskaweb/templates/casemanagement/evaluation_result.mako:369
+#: waskaweb/templates/casemanagement/evaluation_result.mako:399
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:52
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:85
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:115
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:147
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:184
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:214
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:247
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:280
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:313
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:343
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:52
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:85
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:115
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:147
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:184
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:214
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:247
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:280
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:313
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:343
 msgid "cm_eval_table_to_overview"
 msgstr ""
 
@@ -1429,134 +1630,222 @@
 #: waskaweb/templates/casemanagement/evaluation_result.mako:186
 #: waskaweb/templates/casemanagement/evaluation_result.mako:227
 #: waskaweb/templates/casemanagement/evaluation_result.mako:257
-#: waskaweb/templates/casemanagement/evaluation_result.mako:291
-#: waskaweb/templates/casemanagement/evaluation_result.mako:328
-#: waskaweb/templates/casemanagement/evaluation_result.mako:366
-#: waskaweb/templates/casemanagement/evaluation_result.mako:396
+#: waskaweb/templates/casemanagement/evaluation_result.mako:294
+#: waskaweb/templates/casemanagement/evaluation_result.mako:331
+#: waskaweb/templates/casemanagement/evaluation_result.mako:369
+#: waskaweb/templates/casemanagement/evaluation_result.mako:399
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:52
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:85
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:115
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:147
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:184
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:214
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:247
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:280
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:313
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:343
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:52
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:85
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:115
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:147
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:184
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:214
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:247
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:280
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:313
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:343
 msgid "cm_eval_table_export_analysis"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:89
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:55
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:55
 msgid "cm_eval_header_2"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:90
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:56
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:56
 msgid "cm_eval_header_access_youngster_to_agency"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:93
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:59
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:59
 msgid "cm_eval_table_access"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:120
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:86
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:86
 msgid "cm_eval_head_law_access_agency"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:123
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:89
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:89
 msgid "cm_eval_table_law"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:157
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:118
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:118
 msgid "cm_eval_header_3"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:160
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:121
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:121
 msgid "cm_eval_table_month"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:161
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:122
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:122
 msgid "cm_eval_table_completed"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:162
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:123
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:123
 msgid "cm_eval_table_aborted"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:193
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:150
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:150
 msgid "cm_eval_header_4"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:194
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:151
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:151
 msgid "cm_eval_header_on_gender"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:197
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:154
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:154
 msgid "cm_eval_table_gender"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:203
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:160
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:160
 msgid "cm_eval_label_male"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:209
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:166
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:166
 msgid "cm_eval_label_female"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:215
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:172
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:172
 msgid "cm_eval_label_intersexual"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:221
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:178
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:178
 msgid "cm_eval_label_unknown"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:228
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:185
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:185
 msgid "cm_eval_header_on_age"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:231
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:188
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:188
 msgid "cm_eval_table_age"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:264
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:217
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:217
 msgid "cm_eval_header_5"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:267
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:220
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:220
 msgid "cm_eval_table_category"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:273
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:226
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:226
 msgid "cm_eval_label_migration_background"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:279
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:232
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:232
 msgid "cm_eval_label_no_migration_background"
 msgstr ""
 
 #: waskaweb/templates/casemanagement/evaluation_result.mako:285
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:238
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:238
 msgid "cm_eval_label_ka_migration_background"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/evaluation_result.mako:298
+#: waskaweb/templates/casemanagement/evaluation_result.mako:292
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:245
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:245
+msgid "cm_eval_note_ka_migration_background"
+msgstr ""
+
+#: waskaweb/templates/casemanagement/evaluation_result.mako:301
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:250
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:250
 msgid "cm_eval_header_6"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/evaluation_result.mako:301
+#: waskaweb/templates/casemanagement/evaluation_result.mako:304
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:253
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:253
 msgid "cm_eval_table_offer"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/evaluation_result.mako:327
+#: waskaweb/templates/casemanagement/evaluation_result.mako:330
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:279
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:279
 msgid "eval6_note"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/evaluation_result.mako:336
+#: waskaweb/templates/casemanagement/evaluation_result.mako:339
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:283
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:283
 msgid "cm_eval_header_7"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/evaluation_result.mako:337
+#: waskaweb/templates/casemanagement/evaluation_result.mako:340
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:284
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:284
 msgid "cm_eval_head_where_to_place_youngster"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/evaluation_result.mako:340
+#: waskaweb/templates/casemanagement/evaluation_result.mako:343
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:287
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:287
 msgid "cm_eval_table_place"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/evaluation_result.mako:367
+#: waskaweb/templates/casemanagement/evaluation_result.mako:370
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:314
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:314
 msgid "cm_eval_header_law_changed_after_place"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/evaluation_result.mako:370
+#: waskaweb/templates/casemanagement/evaluation_result.mako:373
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:317
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:317
 msgid "cm_eval_table_law_change"
 msgstr ""
 
@@ -1633,21 +1922,21 @@
 msgstr ""
 
 #: waskaweb/templates/casemanagement/main.mako:34
-msgid "cm_main_print_statement"
-msgstr ""
-
-#: waskaweb/templates/casemanagement/main.mako:35
 msgid "cm_main_set_statement"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/main.mako:37
+#: waskaweb/templates/casemanagement/main.mako:36
 msgid "cm_main_revoke_statement"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/main.mako:40
+#: waskaweb/templates/casemanagement/main.mako:39
 msgid "cm_main_anonymize_case"
 msgstr ""
 
+#: waskaweb/templates/casemanagement/main.mako:40
+msgid "statement_list_statement"
+msgstr ""
+
 #: waskaweb/templates/casemanagement/main.mako:50
 msgid "cm_menu_header_cases"
 msgstr ""
@@ -1660,27 +1949,31 @@
 msgid "cm_menu_link_print"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/main.mako:63
+#: waskaweb/templates/casemanagement/main.mako:58
+msgid "cm_menu_link_create_reminder"
+msgstr ""
+
+#: waskaweb/templates/casemanagement/main.mako:65
 msgid "cm_menu_header_seperator"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/main.mako:66
+#: waskaweb/templates/casemanagement/main.mako:68
 msgid "cm_menu_link_digest"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/main.mako:68
+#: waskaweb/templates/casemanagement/main.mako:70
 msgid "cm_menu_link_organisation"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/main.mako:69
+#: waskaweb/templates/casemanagement/main.mako:71
 msgid "cm_menu_link_appointment"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/main.mako:70
+#: waskaweb/templates/casemanagement/main.mako:72
 msgid "cm_menu_link_documents"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/main.mako:76
+#: waskaweb/templates/casemanagement/main.mako:78
 msgid "cm_menu_header_structure"
 msgstr ""
 
@@ -1750,8 +2043,14 @@
 msgid "cm_form_overview_search_submit"
 msgstr ""
 
+#: waskaweb/templates/casemanagement/showAppointment.mako:18
+msgid "sm_menu_link_edit_appointment"
+msgstr ""
+
 #: waskaweb/templates/casemanagement/upload.mako:7
 #: waskaweb/templates/casemanagement/dialogs/notificate_import_dub.mako:6
+#: waskaweb/templates/casemanagement/dialogs/success_import_anon.mako:5
+#: waskaweb/templates/casemanagement/dialogs/success_xml_import.mako:5
 msgid "cm_np_import"
 msgstr ""
 
@@ -1759,7 +2058,8 @@
 msgid "cm_header_import"
 msgstr ""
 
-#: waskaweb/templates/casemanagement/upload.mako:20
+#: waskaweb/templates/casemanagement/upload.mako:22
+#: waskaweb/templates/casemanagement/upload.mako:34
 msgid "cm_from_import_submit"
 msgstr ""
 
@@ -1769,6 +2069,8 @@
 msgstr ""
 
 #: waskaweb/templates/casemanagement/dialogs/confirm_anonymize.mako:6
+#: waskaweb/templates/casemanagement/dialogs/failed_anonymize.mako:5
+#: waskaweb/templates/casemanagement/dialogs/failed_xml_import.mako:5
 #: waskaweb/templates/casemanagement/dialogs/success_anonymize.mako:6
 msgid "cm_np_anonymize"
 msgstr ""
@@ -1876,6 +2178,23 @@
 msgid "cm_np_restore_success"
 msgstr ""
 
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:11
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:28
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:11
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:28
+msgid "eval_group_header_all"
+msgstr ""
+
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:16
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:16
+msgid "eval_group_header_incm"
+msgstr ""
+
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako:23
+#: waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako:23
+msgid "eval_group_header_finished"
+msgstr ""
+
 #: waskaweb/templates/casemanagement/static_form/statement_print.mako:6
 msgid "cm_np_statement"
 msgstr ""
@@ -2041,87 +2360,86 @@
 msgid "statement_np_edit"
 msgstr ""
 
-#: waskaweb/templates/statement/edit.mako:8
-msgid "statement_edit_header_statement"
+#: waskaweb/templates/statement/list_statements.mako:7
+msgid "statement_np_list_statements"
 msgstr ""
 
-#: waskaweb/templates/statement/edit.mako:11
-msgid "statement_edit_p_no_statement"
+#: waskaweb/templates/statement/list_statements.mako:12
+msgid "statement_header_list_statements"
 msgstr ""
 
-#: waskaweb/templates/statement/edit.mako:12
-msgid "statement_edit_p_statement_decision"
+#: waskaweb/templates/statement/list_statements.mako:15
+msgid "statement_header_ee"
 msgstr ""
 
-#: waskaweb/templates/statement/edit.mako:13
-msgid "statement_edit_p_statement_form"
+#: waskaweb/templates/statement/list_statements.mako:17
+msgid "statement_explaination_ee"
 msgstr ""
 
-#: waskaweb/templates/statement/edit.mako:13
-msgid "statement_edit_a_statement_form_printversion"
+#: waskaweb/templates/statement/list_statements.mako:24
+msgid "statement_header_fp"
 msgstr ""
 
-#: waskaweb/templates/statement/edit.mako:13
-msgid "statement_edit_p_statement_form_end"
+#: waskaweb/templates/statement/list_statements.mako:26
+msgid "statement_explaination_fp"
 msgstr ""
 
-#: waskaweb/templates/statement/edit.mako:18
-msgid "statement_label_statement_yes"
+#: waskaweb/templates/statement/list_statements.mako:33
+msgid "statement_header_ud"
 msgstr ""
 
-#: waskaweb/templates/statement/edit.mako:22
-msgid "statement_label_statement_no"
+#: waskaweb/templates/statement/list_statements.mako:35
+msgid "statement_explaination_ud"
 msgstr ""
 
-#: waskaweb/templates/statement/edit.mako:33
-msgid "statement_revoke_p_statement"
-msgstr ""
-
-#: waskaweb/templates/statement/edit.mako:39
-msgid "statement_label_statement_revoked"
-msgstr ""
-
 #: waskaweb/templates/statement/dialogs/missing_statement.mako:7
 msgid "cm_np_show"
 msgstr ""
 
-#: waskaweb/templates/statement/dialogs/missing_statement.mako:10
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:3
 msgid "statement_dialog_header_statement_no"
 msgstr ""
 
-#: waskaweb/templates/statement/dialogs/missing_statement.mako:11
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:4
 msgid "statement_dialog_p_statement_no_explanation"
 msgstr ""
 
-#: waskaweb/templates/statement/dialogs/missing_statement.mako:13
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:6
 msgid "statement_dialog_p_options"
 msgstr ""
 
-#: waskaweb/templates/statement/dialogs/missing_statement.mako:15
-msgid "statement_dialog_li_statement_set"
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:6
+msgid "statement_edit_a_statement_form_printversion"
 msgstr ""
 
-#: waskaweb/templates/statement/dialogs/missing_statement.mako:15
-msgid "statement_dialog_li_statement_set_explanation"
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:9
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:14
+msgid "statement_dialog_li_statement_accepted"
 msgstr ""
 
-#: waskaweb/templates/statement/dialogs/missing_statement.mako:16
-msgid "statement_dialog_li_statement_not_set"
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:9
+msgid "statement_dialog_li_statement_accepted_explanation"
 msgstr ""
 
-#: waskaweb/templates/statement/dialogs/missing_statement.mako:16
-msgid "statement_dialog_li_statement_not_set_explanation"
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:10
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:15
+msgid "statement_dialog_li_statement_unclear"
 msgstr ""
 
-#: waskaweb/templates/statement/dialogs/missing_statement.mako:19
-msgid "statement_dialog_a_statement_set"
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:10
+msgid "statement_dialog_li_statement_unclear_explanation"
 msgstr ""
 
-#: waskaweb/templates/statement/dialogs/missing_statement.mako:20
-msgid "statement_dialog_a_statement_not_set"
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:11
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:16
+msgid "statement_dialog_li_statement_declined"
 msgstr ""
 
-#: waskaweb/templates/statement/dialogs/missing_statement.mako:24
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:11
+msgid "statement_dialog_li_statement_declined_explanation"
+msgstr ""
+
+#: waskaweb/templates/statement/dialogs/missing_statement_body.mako:20
 msgid "statement_dialog_a_ok"
 msgstr ""
 

Modified: trunk/waskaweb/lib/csv.py
===================================================================
--- trunk/waskaweb/lib/csv.py	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/lib/csv.py	2008-08-13 13:12:54 UTC (rev 46)
@@ -84,7 +84,7 @@
         for mid in ids:
             param['id'] = mid
             cur.execute(SELECT_MASTER_TBL, param)
-            row = cur.next()
+            row = cur.fetchone()
             if not row: continue
             columns = row._index.items() # XXX: hackish!
             columns.sort(lambda a, b: cmp(a[1], b[1]))
@@ -152,6 +152,7 @@
         ids = []
         while True:
             row = cur.fetchone()
+            if row is None: break
             ids.append(int(row[0]))
     cases = Cases()
     cases.fetchCases(cur, ids)

Modified: trunk/waskaweb/lib/evaluation.py
===================================================================
--- trunk/waskaweb/lib/evaluation.py	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/lib/evaluation.py	2008-08-13 13:12:54 UTC (rev 46)
@@ -70,6 +70,7 @@
 
     def doExport(self, f):
         self.perform()
+        f.write(u"#Verhältnis Beratungskunden/Aufnahmen in das Case-Management (Auswertung: alle Jugendliche)\r\n")
         f.write(u"Jugendliche;Anzahl;Prozent\r\n")
         f.write(u"Erstgespräche;%s;100%%\r\n" % (self.total))
         f.write(u"Davon in das CM übernommen;%s;%s%%\r\n" %(self.total_cm, self.percent))
@@ -123,6 +124,7 @@
 
     def doExport(self, f):
         self.perform()
+        f.write(u"#Geschlechtsstruktur in % (Auswertung: Jugendliche im CM)\r\n")
         f.write(u"Geschlecht;Anzahl;Prozent\r\n")
         f.write(u"Männlich;%s;%s%%\r\n" % (self.m[0], self.m[1]))
         f.write(u"Weiblich;%s;%s%%\r\n" %(self.w[0], self.w[1]))
@@ -141,16 +143,16 @@
                 conn = db.getConnection()
                 c1 = conn.cursor()
                 r = [[0,0],[0,0],[0,0]]
-                sql = """select geburtsland, vater, mutter from master_tbl_eval_incm_view""" 
+                sql = """select coalesce(muttersprache, -1) from master_tbl_eval_incm_view""" 
                 c1.execute(sql)
                 for case in c1.fetchall():
-                    geburtsland, vater, mutter = case
-                    if geburtsland not in (29, -1) or vater == 0 or mutter == 0:
+                    muttersprache = case[0]
+                    if muttersprache == 18:
+                        r[1][0] += 1
+                    elif muttersprache not in (18, -1):
                         r[0][0] += 1
-                    elif geburtsland == -1 or vater == -1 or mutter == -1:
+                    else:
                         r[2][0] += 1
-                    else:
-                        r[1][0] += 1
 
                 r[0][1] = "%s" % h.formatNumber(float(r[0][0])/float(self.total_cm)*100)
                 r[1][1] = "%s" % h.formatNumber(float(r[1][0])/float(self.total_cm)*100)
@@ -164,8 +166,11 @@
 
     def doExport(self, f):
         p = self.perform()
+        f.write(u"#Migrationshintergrund in % (Auswertung: Jugendliche im CM)\r\n")
         f.write(u"Kategorie;Anzahl;Prozent\r\n")
-        f.write(u"Migrationshintergrund;%s;%s%%\r\n" % (p[0], p[1]))
+        f.write(u"Migrationshintergrund;%s;%s%%\r\n" % (p[0][0], p[0][1]))
+        f.write(u"Kein Migrationshintergrund;%s;%s%%\r\n" % (p[1][0], p[1][1]))
+        f.write(u"Keine Angabe;%s;%s%%\r\n" % (p[2][0], p[2][1]))
 
 class Evaluation_4(Evaluation):
     """ Zugang der der Jugendichen zu KA"""
@@ -210,6 +215,7 @@
 
     def doExport(self, f):
         p = self.perform()
+        f.write(u"#Angaben zum Zugang des Jugendlichen zur Kompetenzagentur (Auswertung: alle Jugendliche)\r\n")
         f.write(u"Zugang;Anzahl;Prozent\r\n")
         for v in p.itervalues():
             f.write("%s;%s;%s%%\r\n" % (v[0], v[1], v[2]))
@@ -253,6 +259,7 @@
 
     def doExport(self, f):
         p = self.perform()
+        f.write(u"#Angaben zum Rechtskreis des Jugendlichen beim Zugang zur Kompetenzagentur (Auswertung: alle Jugendliche)\r\n")
         f.write(u"Rechtskreis;Anzahl;Prozent\r\n")
         for v in p.itervalues():
             f.write(u"%s;%s;%s%%\r\n" % (v[0], v[1], v[2]))
@@ -301,6 +308,7 @@
 
     def doExport(self, f):
         p = self.perform()
+        f.write(u"#Angaben zur Vermittlung (Auswertung: abgeschlossene CM-Fälle)\r\n")
         f.write("Vermittlung;Anzahl;Prozent\r\n")
         for v in p.itervalues():
             f.write(u"%s;%s;%s%%\r\n" % (v[0], v[1], v[2]))
@@ -350,6 +358,7 @@
 
     def doExport(self, f):
         p = self.perform()
+        f.write(u"#Angaben zum Rechstkreis nach Vermittlung (Auswertung: abgeschlossene CM-Fälle)\r\n")
         f.write(u"Rechtskreis;Anzahl;Prozent\r\n")
         for v in p.itervalues():
             f.write(u"%s;%s;%s%%\r\n" % (v[0], v[1], v[2]))
@@ -420,6 +429,7 @@
 
     def doExport(self, f):
         p = self.perform()
+        f.write(u"#Altersstruktur in % (Auswertung: Jugendliche im CM)\r\n")
         f.write("Altersgruppe;Anzahl;Prozent\r\n")
         for v in p:
             f.write("%s;%s;%s%%\r\n" % (v[0], v[1], v[2]))
@@ -482,6 +492,7 @@
 
     def doExport(self, f):
         p = self.perform()
+        f.write(u"#Verteilung Förderbedarf in % (Auswertung: Jugendliche im CM)\r\n")
         f.write(u"Angebot;Anzahl;Prozent\r\n")
         for v in p:
             f.write(u"%s;%s;%s%%\r\n" % (v[0], v[1], v[2]))
@@ -542,6 +553,8 @@
 
     def doExport(self, f):
         p = self.perform()
+
+        f.write(u"#Anzahl der Jugendlichen im CM, davon % abgeschlossen nach durchschnittlich x Monaten (Auswertung: Jugendliche im CM)\r\n")
         f.write("Monat;Anzahl Abgeschlossen;Prozent Abgeschlossen, Anzahl Abgebrochen, Prozent Abgebrochen\r\n")
         for v in p:
             f.write(u"%s;%s;%s%%;%s;%s%%\r\n" % (v[0], v[1], v[2], v[3], v[4]))

Added: trunk/waskaweb/lib/excel.py
===================================================================
--- trunk/waskaweb/lib/excel.py	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/lib/excel.py	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,145 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (c) 2008 by Intevation GmbH
+# Authors:
+# Sascha L. Teichmann <teichmann at intevation.de>
+#
+
+from types import StringTypes, IntType, LongType
+
+from pyExcelerator import Workbook
+
+SELECT_MASTER_TBL = \
+"""SELECT * FROM master_tbl_view
+   WHERE id = %(id)s"""
+
+FETCH_ALL_IDS = \
+"""SELECT id FROM master_tbl_view"""
+
+RG_VIEWS = (
+    ("Kompetenzfestellung", "rg_kompetenzfestellung_tbl_view"),
+    ("Angebote BQ",         "rg_angebote_berufliche_qualifizierung_tbl_view"),
+    ("Angebote BV",         "rg_angebote_berufsvorbereitung_tbl_view"),
+    ("Angebote BB",         "rg_angebote_bildenden_bereich_tbl_view"),
+    ("Angebote LB",         "rg_angebote_lebensbewaeltigung_tbl_view"))
+
+SELECT_RG = \
+"""SELECT * FROM %s WHERE master_id = %d"""
+
+BLACK_LIST = set(['id', 'master_id', 'uuid_id', 'bearbeiter_id'])
+
+def to_str(x):
+    t = type(x)
+    if t in (IntType, LongType):
+        return x
+    if t in StringTypes:
+        return unicode(str(x), "utf-8")
+    return str(x)
+
+class Sheet:
+
+    def __init__(self, worksheet, relation):
+        self.worksheet    = worksheet
+        self.relation     = relation
+        self.row          = 1
+        self.column_names = None
+        self.column       = 0
+        self.max_column   = 0
+
+    def next_row(self):
+        if self.column > self.max_column:
+            self.max_column = self.column
+        self.column = 0
+        self.row += 1
+
+    def add_dataset(self, dataset):
+        if self.column_names is None:
+            self.column_names = [x[0] for x in dataset]
+
+        column    = self.column
+        row       = self.row
+        worksheet = self.worksheet
+        for x in dataset:
+            x = x[1]
+            if not x is None:
+                worksheet.write(row, column, to_str(x))
+            column += 1
+        self.column = column
+
+    def generate_header(self):
+        if self.column_names is None:
+            return
+
+        num_names = max(1, len(self.column_names))
+        repeats = self.max_column / num_names
+
+        worksheet = self.worksheet
+
+        j = 0
+        for i in xrange(repeats):
+            suffix = i != 0 and ("_%d" % i) or ""
+            for name in self.column_names:
+                worksheet.write(0, j, "%s%s" % (name, suffix))
+                j += 1
+
+    def add_row(self, row):
+        columns = row._index.items() # XXX: hackish!
+        columns.sort(lambda a, b: cmp(a[1], b[1]))
+        self.add_dataset([(a[0], row[a[1]]) for a in columns if a[0] not in BLACK_LIST])
+
+    def fetch_data(self, mid, cur):
+        cur.execute(SELECT_RG % (self.relation, mid))
+        while True:
+            row = cur.fetchone()
+            if not row: break
+            self.add_row(row)
+
+class Master(Sheet):
+    def __init__(self, worksheet, relation):
+        Sheet.__init__(self, worksheet, relation)
+
+    def fetch_data(self, mid, cur):
+        cur.execute(SELECT_MASTER_TBL, { 'id': mid })
+        row = cur.fetchone()
+        if not row: return
+        self.add_row(row)
+
+class Book:
+
+    def __init__(self):
+        self.workbook = Workbook()
+
+        sheets = [Master(self.workbook.add_sheet("Hauptdatensatz"), "master_tbl_view")]
+
+        for rg in RG_VIEWS:
+            sheets.append(Sheet(self.workbook.add_sheet(rg[0]), rg[1]))
+
+        self.sheets = sheets
+
+    def add_cases(self, case_ids, cur):
+        for case_id in case_ids:
+            for sheet in self.sheets:
+                sheet.fetch_data(case_id, cur)
+                sheet.next_row()
+
+    def generate_headers(self):
+        for sheet in self.sheets:
+            sheet.generate_header()
+
+    def write_xls(self, fname):
+        self.workbook.save(fname)
+
+def exportAsXLS(cur, fname, ids=None):
+    if ids is None:
+        ids = []
+        cur.execute(FETCH_ALL_IDS)
+        while True:
+            row = cur.fetchone()
+            if not row: break
+            ids.append(int(row[0]))
+    book = Book()
+    book.add_cases(ids, cur)
+    book.generate_headers()
+    book.write_xls(fname)
+
+# vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8:

Modified: trunk/waskaweb/lib/filters.py
===================================================================
--- trunk/waskaweb/lib/filters.py	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/lib/filters.py	2008-08-13 13:12:54 UTC (rev 46)
@@ -20,9 +20,9 @@
 def H(text):
     return escape(text, True)
 
-def shorten(text):
-    if len(text) > 40:
-        text = text[0:40] + "..."
+def shorten(text, length=40):
+    if len(text) > length:
+        text = text[0:length] + "..."
     return text
 
 # vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8:

Modified: trunk/waskaweb/lib/helpers.py
===================================================================
--- trunk/waskaweb/lib/helpers.py	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/lib/helpers.py	2008-08-13 13:12:54 UTC (rev 46)
@@ -107,8 +107,13 @@
     return out
 
 def getKAName():
+    kaname = ""
     try:
-        kaname = slashSplit(request.environ['SSL_CLIENT_S_DN'])[5].split('=')[1]
+        for f in slashSplit(request.environ['SSL_CLIENT_S_DN'])[::-1]:
+            field = f.split('=')
+            # There are two OU. We want the one != WASKA
+            if field[0] == "OU" and field[1] != "WASKA":
+                kaname = field[1]
         return kaname
     except:
         print >> sys.stderr, "Could not fetch KA-name from client certificate"

Modified: trunk/waskaweb/lib/validators.py
===================================================================
--- trunk/waskaweb/lib/validators.py	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/lib/validators.py	2008-08-13 13:12:54 UTC (rev 46)
@@ -1,6 +1,8 @@
+# -*- coding: utf-8 -*-
 from pylons import session
 import re
 import formencode
+import datetime
 
 class BaseFormValidator(formencode.Schema):
     def __init__(self):
@@ -9,6 +11,54 @@
     allow_extra_fields = True
     filter_extra_fields = False 
 
+class MaxMinInt(formencode.validators.FancyValidator):
+
+    """
+    Convert a value to an integer.
+
+    Example::
+
+        >>> Int.to_python('10')
+        10
+        >>> Int.to_python('ten')
+        Traceback (most recent call last):
+            ...
+        Invalid: Please enter an integer value
+    """
+
+    messages = {
+        'integer': u"Bitte geben Sie einen Ganzzahlenwert ein.",
+        'tooLow': u"Bitte geben Sie einen Wert größer oder gleich  %(min)i ein.",
+        'tooHigh': u"Bitte geben Sie einen Wert kleiner oder gleich %(max)i ein."
+        }
+
+    min = None
+    max = None
+
+    def __initargs__(self, args):
+        if self.min != None:
+            self.min = int(self.min)
+        if self.max != None:
+            self.max = int(self.max)
+
+
+    def _to_python(self, value, state):
+        try:
+            return int(value)
+        except (ValueError, TypeError):
+            raise formencode.Invalid(self.message('integer', state),
+                          value, state)
+
+    def validate_python(self, value, state):
+        if self.min != None and value < self.min:
+            msg = self.message("tooLow", state, min=self.min)
+            raise formencode.Invalid(msg, value, state)
+        if self.max != None and value > self.max:
+            msg = self.message("tooHigh", state, max=self.max)
+            raise formencode.Invalid(msg, value, state)
+
+    _from_python = _to_python
+
 class SecurePassword(formencode.validators.FancyValidator):
 
     min = 8
@@ -92,6 +142,7 @@
 
 class EditSettingsForm(BaseFormValidator):
     anon_transfer = formencode.validators.String(if_missing='off')
+    max_speicherdauer = MaxMinInt(min=7, max=180, not_empty=True)
 
 class SearchCaseForm(BaseFormValidator):
     pass
@@ -126,3 +177,52 @@
     filter_extra_fields = True 
     case_id = formencode.validators.Int()
     standin = formencode.ForEach(formencode.validators.Int())
+
+class DateCheck(formencode.validators.FancyValidator):
+
+    valid_date = re.compile(r'^[0-9]{1,2}.[0-9]{1,2}.[0-9]{4}$')
+
+    messages = {
+        'invalid_format': u'Bitte geben Sie das Datum im Format "TT.MM.JJJJ" an.',
+        'invalid_date':   u'Bitte geben Sie ein gültiges Datum an.'
+        }
+
+    def _to_python(self, value, state):
+        return value.strip()
+
+    def validate_python(self, value, state):
+        if not self.valid_date.match(value):
+            raise formencode.Invalid(self.message("invalid_format", state), value, state)
+        try:
+            token = value.split('.')
+            testdate = datetime.datetime(int(token[2]), int(token[1]), int(token[0]))
+        except:
+            raise formencode.Invalid(self.message("invalid_date", state), value, state)
+
+class TimeCheck(formencode.validators.FancyValidator):
+
+    valid_date = re.compile(r'^[0-9]{1,2}:[0-9]{1,2}$')
+
+    messages = {
+        'invalid_format': u'Bitte geben Sie die Zeit im Format "HH:MM" an.',
+        'invalid_time':   u'Bitte geben Sie eine gültige Zeit an.'
+        }
+
+    def _to_python(self, value, state):
+        return value.strip()
+
+    def validate_python(self, value, state):
+        if not self.valid_date.match(value):
+            raise formencode.Invalid(self.message("invalid_format", state), value, state)
+        try:
+            token = value.split(':')
+            testtime = datetime.time(int(token[0]), int(token[1]))
+        except:
+            raise formencode.Invalid(self.message("invalid_time", state), value, state)
+
+class CreateAppointmentForm(BaseFormValidator):
+    start_date = formencode.All(formencode.validators.String(not_empty=True), DateCheck())
+    start_time = formencode.All(formencode.validators.String(not_empty=True), TimeCheck())
+    end_date   = DateCheck()
+    end_time   = TimeCheck()
+    title      = formencode.validators.String(not_empty=True)

Added: trunk/waskaweb/lib/xmlexport.py
===================================================================
--- trunk/waskaweb/lib/xmlexport.py	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/lib/xmlexport.py	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,114 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (c) 2008 by Intevation GmbH
+# Authors:
+# Sascha L. Teichmann <teichmann at intevation.de>
+#
+
+from types import StringTypes
+
+FETCH_ALL_IDS = \
+"""SELECT id FROM master_tbl_view"""
+
+SELECT_MASTER_TBL = \
+"""SELECT * FROM master_tbl_view WHERE id = %(id)s"""
+
+RG_VIEWS = (
+    "kompetenzfestellung",
+    "angebote_berufliche_qualifizierung",
+    "angebote_berufsvorbereitung",
+    "angebote_bildenden_bereich",
+    "angebote_lebensbewaeltigung")
+
+SELECT_RG = \
+"""SELECT * FROM %s WHERE master_id = %d"""
+
+BLACK_LIST = set(['id', 'master_id', 'bearbeiter_id'])
+
+def escape(value, tagname):
+    if tagname == 'uuid_id':
+        return "%s" % unicode(str(value), "utf-8")
+    if type(value) in StringTypes:
+        value = unicode(str(value), "utf-8")
+        return "<![CDATA[%s]]>" % value.replace("]]>", "]]><!CDATA[]]]]><![CDATA[>]]><[!CDATA[")
+    if value is None:
+        return ""
+    return "%s" % value
+
+def dumpColums(columns):
+    out = []
+    for tagname, value in columns:
+        if not value is None and tagname not in BLACK_LIST:
+            out.append("<%s>%s</%s>" % (tagname, escape(value, tagname), tagname))
+    return out
+
+class ExportCase:
+
+    def __init__(self, master_id):
+        self.master_id = int(master_id)
+        self.columns   = None
+        self.rgs       = []
+
+    def fetchData(self, cur):
+        self.fetchMasterTable(cur)
+        self.fetchRepeatGroups(cur)
+
+    def fetchMasterTable(self, cur):
+        cur.execute(SELECT_MASTER_TBL, { 'id': self.master_id })
+        row = cur.fetchone()
+        if not row: raise Exception("No dataset for id %d" % self.master_id)
+        columns = row._index.items() # XXX: hackish!
+        columns.sort(lambda a, b: cmp(a[1], b[1]))
+        columns = [(a[0], row[a[1]]) for a in columns]
+        self.columns = columns
+
+    def fetchRepeatGroups(self, cur):
+        for view in RG_VIEWS:
+            viewname = "rg_%s_tbl_view" % view
+            cur.execute(SELECT_RG % (viewname, self.master_id))
+            rs = []
+            while True:
+                row = cur.fetchone()
+                if not row: break
+                cs = row._index.items() # XXX: hackish!
+                cs.sort(lambda a, b: cmp(a[1], b[1]))
+                cs = [(a[0], row[a[1]]) for a in cs]
+                rs.append(cs)
+            if rs:
+                self.rgs.append((view, rs))
+
+    def dumpMasterTable(self, out):
+        fields = dumpColums(self.columns)
+        if fields:
+            out.write("<master>%s</master>" % "".join(fields))
+
+    def dumpRepeatGroups(self, out):
+        for view, rgs in self.rgs:
+            for r in rgs:
+                fields = dumpColums(r)
+                if fields:
+                    out.write("<%s>%s</%s>" % (view, "".join(fields), view))
+
+    def dumpData(self, out):
+        out.write("<case>")
+        self.dumpMasterTable(out)
+        self.dumpRepeatGroups(out)
+        out.write("</case>")
+
+def exportAsXML(cur, out, ids=None):
+    if ids is None:
+        cur.execute(FETCH_ALL_IDS)
+        ids = []
+        while True:
+            row = cur.fetchone()
+            ids.append(int(row[0]))
+
+    out.write('<?xml version="1.0" encoding="UTF-8"?>\n')
+    out.write("<cases>")
+    for mid in ids:
+        case = ExportCase(mid)
+        case.fetchData(cur)
+        case.dumpData(out)
+    out.write("</cases>")
+
+# vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8:

Added: trunk/waskaweb/lib/xmlimport.py
===================================================================
--- trunk/waskaweb/lib/xmlimport.py	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/lib/xmlimport.py	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,692 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (c) 2008 by Intevation GmbH
+# Authors:
+# Sascha L. Teichmann <teichmann at intevation.de>
+#
+import sys
+from datetime import date
+
+from xml.sax.saxutils import DefaultHandler
+from xml.sax          import parse
+
+import re
+
+def _int_converter(s):
+    return int(s)
+
+def _bool_converter(s):
+    return int(s)
+
+def _date_converter(s):
+    return date(*[int(x) for x in s.split("-")])
+
+def _choice_converter(s):
+    return int(s)
+
+def _radio_converter(s):
+    return int(s)
+
+def _text_converter(s):
+    return s
+
+UUID_RE = re.compile(r"^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$")
+
+RELATIONS = {
+    'master': {
+        "einverstaendniserklaerung": _bool_converter,
+        "fkz": _text_converter,
+        "name_kompetenzagentur": _text_converter,
+        "vorname": _text_converter,
+        "name": _text_converter,
+        "erstgespraech": _date_converter,
+        "zugang_kompetenzagentur": _choice_converter,
+        "kundennummer": _text_converter,
+        "schulpflichtig": _bool_converter,
+        "noch_schueler": _bool_converter,
+        "bei_eintritt_ist_der_jugendliche": _choice_converter,
+        "rechtlicher_kontext": _choice_converter,
+        "schnittstelle_zu": _choice_converter,
+        "kontaktdaten_arge": _text_converter,
+        "kundennummer_arge": _text_converter,
+        "kontaktdaten_agentur_fuer_arbeit": _text_converter,
+        "kundennummer_agentur_fuer_arbeit": _text_converter,
+        "kundennummer_jugendamt": _text_converter,
+        "kontaktdaten_jugendamt": _text_converter,
+        "kontaktdaten_schule": _text_converter,
+        "schulname": _text_converter,
+        "kontaktdaten_gerichtshilfe": _text_converter,
+        "kundennummer_gerichtshilfe": _text_converter,
+        "kontaktdaten_weitere_institutionen": _text_converter,
+        "vorname_1": _text_converter,
+        "name_1": _text_converter,
+        "geschlecht": _choice_converter,
+        "geburtsdatum": _date_converter,
+        "familienstand": _choice_converter,
+        "strasse": _text_converter,
+        "plz": _text_converter,
+        "wohnort": _text_converter,
+        "groesse_wohnort": _choice_converter,
+        "vorwahl": _text_converter,
+        "telefon_1": _text_converter,
+        "mobiltelefon": _text_converter,
+        "email": _text_converter,
+        "telefon_sonstige": _text_converter,
+        "zweiter_wohnort": _text_converter,
+        "geburtsland": _choice_converter,
+        "geburtsland_sonstige_nennung": _text_converter,
+        "muttersprache": _choice_converter,
+        "muttersprache_sonstige_nennung": _text_converter,
+        "staatsangehoerigkeit": _choice_converter,
+        "staatsangehoerigkeit_sonstige_nennung": _text_converter,
+        "aufenthaltsstatus": _choice_converter,
+        "aufenthaltsdauer": _int_converter,
+        "vater": _choice_converter,
+        "mutter": _choice_converter,
+        "familiaere_situation_1": _choice_converter,
+        "vorname_2": _text_converter,
+        "name_2": _text_converter,
+        "vorwahl_1": _text_converter,
+        "telefon_1_1": _text_converter,
+        "mobiltelefon_1": _text_converter,
+        "email_1": _text_converter,
+        "geschwister": _int_converter,
+        "anzahl_kinder": _int_converter,
+        "haushalt_jugendlicher": _int_converter,
+        "alleinerziehend": _choice_converter,
+        "familie_selbststaendig": _bool_converter,
+        "familie_staatliche_unterstuetzung": _bool_converter,
+        "jugendlicher_selbststaendig": _bool_converter,
+        "jugendlicher_staatliche_unterstuetzung": _bool_converter,
+        "jugendlicher_unterstuetzung_soziales_umfeld": _bool_converter,
+        "wohnaufenthalt": _choice_converter,
+        "arzt_gutachten_physisch": _bool_converter,
+        "physische_beeintraechtigungen": _choice_converter,
+        "physische_beeintraechtigungen_text": _text_converter,
+        "arzt_gutachten_psychisch": _bool_converter,
+        "psychische_beeintraechtigungen": _choice_converter,
+        "psychische_beeintraechtigungen_text": _text_converter,
+        "mutter_2": _bool_converter,
+        "vater_2": _bool_converter,
+        "grosseltern": _bool_converter,
+        "geschwister_2": _bool_converter,
+        "pflegefamilie_1": _bool_converter,
+        "stiefmutter": _bool_converter,
+        "stiefvater": _bool_converter,
+        "verwandte_1": _bool_converter,
+        "partner": _bool_converter,
+        "heimbetreuerin": _bool_converter,
+        "betreuerin": _bool_converter,
+        "lehrerin": _bool_converter,
+        "mitbewohner": _bool_converter,
+        "partner_mutter": _bool_converter,
+        "partner_vater": _bool_converter,
+        "freund": _bool_converter,
+        "keine_bezugsperson": _bool_converter,
+        "hobbies_1": _choice_converter,
+        "hobbies_text": _text_converter,
+        "mitarbeit_organisationen": _choice_converter,
+        "organisationen_vereine_text": _text_converter,
+        "sonstiges_1": _choice_converter,
+        "sonstiges_text": _text_converter,
+        "clique": _bool_converter,
+        "freundin": _bool_converter,
+        "parterin": _bool_converter,
+        "schule_2": _choice_converter,
+        "klassenstufe": _int_converter,
+        "klassenwiederholung": _choice_converter,
+        "abgang": _int_converter,
+        "nicht_anwesende_tage": _int_converter,
+        "unentschuldigte_tage": _int_converter,
+        "schulabschluss_1": _choice_converter,
+        "schulabschlusserwerbsland": _choice_converter,
+        "schulabschlusserwerbsland_sonstige_nennung": _text_converter,
+        "abschluss_betriebliche_ausbildung": _choice_converter,
+        "abschluss_im_ausbildungsberuf": _text_converter,
+        "ausbildungsdauer": _int_converter,
+        "wann_abgeschlossen": _date_converter,
+        "weitere_ausbildungen": _int_converter,
+        "weitere_ausbildungen_text": _text_converter,
+        "dauer_weitere_ausbildungen": _int_converter,
+        "abgebrochene_ausbildungen": _int_converter,
+        "abgebrochene_ausbildungen_text": _text_converter,
+        "abschluss_ausserbetriebliche_ausbildung": _choice_converter,
+        "abschluss_im_ausbildungsberuf_1": _text_converter,
+        "ausbildungsdauer_1": _int_converter,
+        "wann_abgeschlossen_1": _date_converter,
+        "weitere_ausbildungen_1": _int_converter,
+        "weitere_ausbildungen_text_1": _text_converter,
+        "dauer_weitere_ausbildungen_1": _int_converter,
+        "abgebrochene_ausbildungen_1": _int_converter,
+        "abgebrochene_ausbildungen_text_1": _text_converter,
+        "massnahmeteilnahme": _choice_converter,
+        "letzte_massnahme": _text_converter,
+        "finanzierung": _text_converter,
+        "austrittsdatum": _date_converter,
+        "dauer": _int_converter,
+        "weitere_massnahmen": _choice_converter,
+        "massnahme_1": _text_converter,
+        "massnahme1_finanzierung": _text_converter,
+        "massnahme_2": _text_converter,
+        "massnahme2_finanzierung": _text_converter,
+        "massnahme_3": _text_converter,
+        "massnahme3_finanzierung": _text_converter,
+        "abgebrochene_massnahmen": _int_converter,
+        "erwerbstaetigkeit_job": _choice_converter,
+        "letzte_taetigkeit": _text_converter,
+        "dauer_1": _int_converter,
+        "austrittsdatum_1": _date_converter,
+        "weitere_taetigkeiten": _int_converter,
+        "weitere_jobs_text": _text_converter,
+        "dauer_weitere_taetigkeiten": _int_converter,
+        "arbeitslosigkeit_1": _choice_converter,
+        "anzahl_arbeitslosigkeit": _int_converter,
+        "dauer_nach_letzter_beschaeftigung": _int_converter,
+        "dauer_insgesamt": _int_converter,
+        "wehrpflicht_zivildienst_freiwilligenjahr_1": _choice_converter,
+        "art_des_dienstes": _choice_converter,
+        "dauer_2": _int_converter,
+        "mutterschutz_erziehungsurlaub": _choice_converter,
+        "anzahl": _int_converter,
+        "dauer_letzter_erziehungsurlaub": _int_converter,
+        "dauer_insgesamt_1": _int_converter,
+        "kompetenzfeststellung": _choice_converter,
+        "zielsetzung": _choice_converter,
+        "begleitung": _choice_converter,
+        "welche_vermittlung_nennung": _text_converter,
+        "freie_dokumentation": _text_converter,
+        "bildender_bereich": _bool_converter,
+        "bereich_berufliche_qualifizierung": _bool_converter,
+        "bereich_berufsvorbereitung": _bool_converter,
+        "bereich_lebensbewaeltigung": _bool_converter,
+        "sonstiger_foerderbedarf": _bool_converter,
+        "sonstiger_foerderbedarf_nennung": _text_converter,
+        "foerderzeitraum_start": _date_converter,
+        "foerderzeitraum_ende": _date_converter,
+        "dokumentation_zum_foerderplan": _text_converter,
+        "anzahl_kontakte_termine": _int_converter,
+        "anzahl_der_stunden": _int_converter,
+        "zeitraum_fallmanagement": _int_converter,
+        "beendigung_5": _date_converter,
+        "art_beendigung": _choice_converter,
+        "abbruch_durch": _choice_converter,
+        "gruende_abbruch": _choice_converter,
+        "gruende_sonstiges_nennung_4": _text_converter,
+        "vermittlung": _choice_converter,
+        "vermittlung_nennung": _text_converter,
+        "veraenderungen_rechtskreis": _choice_converter,
+        "allgemein_bildender_schulabschluss": _choice_converter,
+        "allgemein_bildender_schulabschluss_sonstiges_nennung": _text_converter,
+        "massnahmeabschluss": _choice_converter,
+        "schulart": _choice_converter,
+        "schule_sonstiges_nennung": _text_converter,
+        "klassenstufe_1": _int_converter,
+        "ausbildung": _choice_converter,
+        "ausbildung_sonstiges_nennung": _text_converter,
+        "umschulung": _choice_converter,
+        "umschulung_nennung": _text_converter,
+        "arbeitstaetigkeit": _text_converter,
+        "erwerbstatus": _choice_converter,
+        "erwerbsstatus_sonstiges_nennung": _text_converter,
+        "beschaeftigungsumfang": _choice_converter,
+        "kategorien_nichterwerbsarbeit_nichtausbildung": _choice_converter,
+        "kategorien_sonstiges_nennung": _text_converter,
+        "zeitraum_nachbetreuung": _choice_converter,
+        "verbleib_nachbetreuung": _choice_converter,
+        "mitgliedschaft_organisationen_vereinen": _choice_converter,
+        "intensitaet_mitgliedschaft": _choice_converter,
+        "nutzung_kulturangeboten": _choice_converter,
+        "haeufigkeit": _choice_converter,
+        "soziales_engagement": _text_converter,
+        "unternehmungen_freunden": _choice_converter,
+        "unternehmungen_familie": _choice_converter,
+        "peergroup": _choice_converter,
+        "familie_1": _choice_converter,
+        "beziehung": _choice_converter,
+        "arbeit_schule": _choice_converter,
+        "bester_freund_freundin": _choice_converter,
+        "einschaetzung_zielerreichung": _choice_converter,
+        "erreichte_qualifikation": _choice_converter,
+        "integration_ist_nachhaltig": _choice_converter,
+        "selbststaendige_berufswegplanung": _choice_converter,
+        "eigenstaendige_lebensgestaltung": _choice_converter,
+        "soziale_bezugssysteme": _choice_converter,
+        "teilnahme_gesellschaftliches_leben": _choice_converter,
+        "freie_dokumentation_abschlussbewertung": _text_converter
+    },
+    'kompetenzfestellung': {
+        "verfahren_kompetenzfeststellung": _choice_converter,
+        "externeranbieter": _text_converter,
+        "assessment_center": _bool_converter,
+        "interview": _bool_converter,
+        "biografieorientierte_methoden": _bool_converter,
+        "selbsttest_selbstbeurteilung": _bool_converter,
+        "sonstiges_2": _bool_converter,
+        "artdesverfahrens_nennung_sonstiges": _text_converter,
+        "testverfahren": _bool_converter,
+        "intelligenztest": _bool_converter,
+        "intelligenztest_nennung": _text_converter,
+        "schultest": _bool_converter,
+        "schultest_nennung": _text_converter,
+        "leistungstest": _bool_converter,
+        "leistungstest_nennung": _text_converter,
+        "persoenlichkeitstest": _bool_converter,
+        "persoenlichkeitstest_nennung": _text_converter,
+        "einstellungs_interessentest": _bool_converter,
+        "einstellungs_interessentest_nennung": _text_converter,
+        "dauer_des_verfahrens": _choice_converter,
+        "rechenfaehigkeit": _choice_converter,
+        "raeumliches_vorstellungsvermoegen": _choice_converter,
+        "grundverstaendnis_naturwissenschaftlicher_zusammenhaenge": _choice_converter,
+        "logisches_denken": _choice_converter,
+        "wirtschaftliche_grundkenntnisse": _choice_converter,
+        "allgemeine_pc_kenntnisse": _choice_converter,
+        "spezielle_pc_kenntnisse_grafikbearbeitung_musikbearbeitung": _choice_converter,
+        "internet_anwendungen_und_e_mail_kenntnisse": _choice_converter,
+        "andere_medien": _choice_converter,
+        "hand_fingergeschick": _choice_converter,
+        "formauffassung": _choice_converter,
+        "umgang_maschinen_werkzeugen": _choice_converter,
+        "gestalterische_fantasie": _choice_converter,
+        "methoden_der_informationsgewinnung": _choice_converter,
+        "methoden_der_informationsverarbeitung": _choice_converter,
+        "einsatz_lern_und_arbeitstechniken": _choice_converter,
+        "problemloesungsorientierung": _choice_converter,
+        "texte_lesen_und_verstehen": _choice_converter,
+        "texte_schreiben_und_formulieren": _choice_converter,
+        "deutsche_sprache": _choice_converter,
+        "sprache1": _choice_converter,
+        "sprache1_sonstige_nennung": _text_converter,
+        "beherrschung_sprache1": _choice_converter,
+        "sprache2": _choice_converter,
+        "sprache2_sonstige_nennung": _text_converter,
+        "beherrschung_sprache2": _choice_converter,
+        "sprache3": _choice_converter,
+        "sprache3_sonstige_nennung": _text_converter,
+        "beherrschung_sprache3": _choice_converter,
+        "kommunikationsfaehigkeit": _choice_converter,
+        "kritikfaehigkeit": _choice_converter,
+        "konfliktfaehigkeit": _choice_converter,
+        "kreativitaet": _choice_converter,
+        "team_und_kooperationsfaehigkeit": _choice_converter,
+        "solidarisches_verhalten": _choice_converter,
+        "selbstaendiges_lernen_arbeiten": _choice_converter,
+        "selbstreflexion_selbsteinschaetzung": _choice_converter,
+        "verantwortungsuebernahme": _choice_converter,
+        "zielorientierung": _choice_converter,
+        "zuverlaessigkeit": _choice_converter,
+        "altersgerechter_entwicklungsstand": _choice_converter,
+        "gesundheitliche_voraussetzungen": _choice_converter,
+        "konzentration": _choice_converter,
+        "ausdauer": _choice_converter,
+        "durchhaltevermoegen": _choice_converter,
+        "merkfaehigkeit": _choice_converter,
+        "bearbeitungsgeschwindigkeit": _choice_converter,
+        "befaehigung_zu_daueraufmerksamkeit": _choice_converter,
+        "leistungsbereitschaft": _choice_converter,
+        "sorgfalt": _choice_converter,
+        "umgangsformen": _choice_converter,
+        "dokumentation_kompetenzfeststellung": _text_converter
+    },
+    'angebote_bildenden_bereich': {
+        "angebotsform": _choice_converter,
+        "art_der_unterstuetzung": _text_converter,
+        "durchfuehrende_institution": _text_converter,
+        "unterstuetzung_start": _date_converter,
+        "unterstuetzung_ende": _date_converter,
+        "zeitlicher_umfang_unterstuetzung": _int_converter,
+        "beendigung_1": _choice_converter,
+        "beendigung_durch": _choice_converter,
+        "gruende_vorzeitige_beendigung": _choice_converter,
+        "gruende_sonstiges_nennung": _text_converter,
+        "nachweis_bescheinigung": _choice_converter,
+        "sonstiges_nachweis_bescheinigung": _text_converter
+    },
+    'angebote_berufsvorbereitung': {
+        "angebotsform_1": _choice_converter,
+        "art_der_unterstuetzung_1": _choice_converter,
+        "unterstuetzung_sonstiges_nennung": _text_converter,
+        "durchfuehrende_institution_1": _text_converter,
+        "unterstuetzung_start_1": _date_converter,
+        "unterstuetzung_ende_1": _date_converter,
+        "zeitlicher_umfang_unterstuetzung_1": _int_converter,
+        "beendigung_2": _choice_converter,
+        "beendigung_durch_1": _choice_converter,
+        "gruende_vorzeitige_beendigung_1": _choice_converter,
+        "gruende_sonstiges_nennung_1": _text_converter,
+        "nachweis_bescheinigung_1": _choice_converter,
+        "sonstiges_nachweis_bescheinigung_1": _text_converter
+    },
+    'angebote_berufliche_qualifizierung': {
+        "angebotsform_2": _choice_converter,
+        "angebote_im_bereich": _choice_converter,
+        "unterstuetzung_sonstiges_nennung_1": _text_converter,
+        "durchfuehrende_institution_2": _text_converter,
+        "unterstuetzung_start_2": _date_converter,
+        "unterstuetzung_ende_2": _date_converter,
+        "zeitlicher_umfang_unterstuetzung_2": _int_converter,
+        "beendigung_3": _choice_converter,
+        "beendigung_durch_2": _choice_converter,
+        "gruende_vorzeitige_beendigung_2": _choice_converter,
+        "gruende_sonstiges_nennung_2": _text_converter,
+        "nachweis_bescheinigung_2": _choice_converter,
+        "sonstiges_nachweis_bescheinigung_2": _text_converter
+    },
+    'angebote_lebensbewaeltigung': {
+        "angebotsform_3": _choice_converter,
+        "unterstuetzung_angebotsform_sonstiges_nennung": _text_converter,
+        "art_der_unterstuetzung_2": _choice_converter,
+        "unterstuetzung_sonstiges_nennung_2": _text_converter,
+        "durchfuehrende_institution_3": _text_converter,
+        "unterstuetzung_start_3": _date_converter,
+        "unterstuetzung_ende_3": _date_converter,
+        "zeitlicher_umfang_unterstuetzung_3": _int_converter,
+        "beendigung_4": _choice_converter,
+        "beendigung_durch_3": _choice_converter,
+        "gruende_vorzeitige_beendigung_3": _choice_converter,
+        "gruende_sonstiges_nennung_3": _text_converter,
+        "nachweis_bescheinigung_3": _choice_converter,
+        "sonstiges_nachweis_bescheinigung_3": _text_converter
+    }
+}
+
+CREATE_FUNCTIONS = {
+    'kompetenzfestellung':                'create_rg_kompetenz_ds',
+    'angebote_bildenden_bereich':         'create_rg_bilden_ds',
+    'angebote_berufsvorbereitung':        'create_rg_beruf_ds',
+    'angebote_berufliche_qualifizierung': 'create_rg_quali_ds',
+    'angebote_lebensbewaeltigung':        'create_rg_leben_ds'
+}
+
+EXPECT_CASES    = 0
+EXPECT_CASE     = 1
+EXPECT_RELATION = 2
+EXPECT_FIELD    = 3
+EXPECT_CHARS    = 4
+
+SQL_UPATE = """UPDATE %s_tbl_view SET %s WHERE uuid_id = %%(uuid_id)s"""
+
+SQL_GET_MASTER_ID = \
+"""SELECT get_masterid_from_uuid(%(relation_name)s, %(uuid)s)"""
+
+SQL_CREATE_MASTER_DS = \
+"""SELECT create_master_ds(%(uuid)s)"""
+
+SQL_SELECT_UUID_FROM_RELATION = \
+"""SELECT uuid_id FROM %s_tbl_view WHERE id = %%(id)s"""
+
+SQL_CREATE_REPEAT_GROUP = \
+"""SELECT %s(%%(master_id)s,  %%(uuid)s)"""
+
+def get_id_for_uuid(cur, relation_name, uuid):
+    cur.execute(SQL_GET_MASTER_ID, {
+        'relation_name': relation_name, 'uuid': uuid })
+    row = cur.next()
+    if not row: return None
+    return row[0]
+
+def create_master(cur, uuid=None):
+    cur.execute(SQL_CREATE_MASTER_DS, { 'uuid': uuid })
+    row = cur.next()
+    if not row: return None
+    return row[0]
+
+def create_repeat_group(cur, relation_name, master_id, uuid=None):
+    relation_name = CREATE_FUNCTIONS.get(relation_name)
+    if relation_name is None: return None
+    sql = SQL_CREATE_REPEAT_GROUP % relation_name
+    cur.execute(sql, { 'master_id':  master_id, 'uuid': uuid })
+    row = cur.next()
+    if not row: return None
+    return row[0]
+
+def get_uuid(cur, relation_name, ds_id):
+    sql = SQL_SELECT_UUID_FROM_RELATION % relation_name 
+    cur.execute(sql, { 'id': ds_id })
+    row = cur.next()
+    if not row: return None
+    return row[0]
+
+class Case:
+    def __init__(self):
+        self.relations = []
+
+    def append(self, relation):
+        self.relations.append(relation)
+
+    def find_first_relation(self, relation_name):
+        for relation in self.relations:
+            if relation.name == relation_name:
+                return relation
+        return None
+
+class Relation:
+
+    def __init__(self, name, items = None):
+        self.name    = name
+        if items is None: self.items = []
+        else:             self.items = items
+        self.uuid    = None
+        self.fields  = []
+
+    def append(self, field):
+        self.fields.append(field)
+
+    def find_field(self, field_name):
+        for k, v in self.fields:
+            if k == field_name:
+                return v
+        return None
+
+    def set_field(self, field_name, value):
+        for i in xrange(len(self.fields)):
+            field = self.fields[i]
+            if field[0] == field_name:
+                field[1] = value
+                return
+        self.fields.append((field_name, value))
+
+    def update(self, cur):
+        if self.uuid is None:
+            raise StandardError("UUID is not defined")
+        sets = []
+        values = {}
+        for k, v in self.fields:
+            sets.append("%s = %%(%s)s" % (k, k))
+            values[k] = v
+
+        values['uuid_id'] = self.uuid
+
+        if self.name != 'master': rel = "rg_%s" % self.name
+        else:                     rel = "master"
+
+        sql = SQL_UPATE % (rel, ", ".join(sets))
+        cur.execute(sql, values)
+
+
+class XMLHandler(DefaultHandler):
+
+    def __init__(self, case_store):
+        DefaultHandler.__init__(self)
+        self.mode       = EXPECT_CASES
+        self.ignore     = 0
+        self.relation   = None
+        self.chars      = None
+        self.case_store = case_store
+        self.case       = None
+
+    def startElement(self, name, attrs):
+        if self.mode == EXPECT_CASES:
+            if name != "cases":
+                print >> sys.stderr, "ignore %s" % name
+                self.ignore += 1
+            else:
+                self.mode = EXPECT_CASE
+
+        elif self.mode == EXPECT_CASE:
+            if name != "case":
+                print >> sys.stderr, "ignore %s" % name
+                self.ignore += 1
+            else:
+                self.case = Case()
+                self.mode = EXPECT_RELATION
+
+        elif self.mode == EXPECT_RELATION:
+            rel = RELATIONS.get(name)
+            if rel is None:
+                print >> sys.stderr, "relation '%s' not found" % name
+                self.ignore += 1
+            else:
+                #print >> sys.stderr, "relation '%s' found" % name
+                self.relation = Relation(name, rel)
+                self.mode = EXPECT_FIELD
+
+        elif self.mode == EXPECT_FIELD:
+            self.mode = EXPECT_CHARS
+            self.chars = ""
+
+        elif self.mode == EXPECT_CHARS:
+            self.ignore += 1
+
+    def endElement(self, name):
+        if self.ignore > 0:
+            self.ignore -= 1
+            return
+
+        if self.mode == EXPECT_CHARS:
+            if name != "uuid_id":
+                converter = self.relation.items.get(name)
+                if converter is None:
+                    print >> sys.stderr, "missing converter for %s" % name
+                else:
+                    if not self.chars:
+                        self.relation.append([name, None])
+                    else:
+                        #print >> sys.stderr, "convert %s" % name
+                        self.relation.append([name, converter(self.chars)])
+            else:
+                self.relation.uuid = self.chars.strip()
+                if not UUID_RE.match(self.relation.uuid):
+                    raise StandardError("UUID is invalid")
+                #print >> sys.stderr, "uuid: %s" % self.relation.uuid
+
+            self.mode = EXPECT_FIELD
+            self.chars = None
+
+        if self.mode == EXPECT_FIELD:
+            if self.relation and self.relation.name == name:
+                self.case.append(self.relation)
+                self.relation = None
+                self.mode     = EXPECT_RELATION
+            else:
+                pass
+
+        elif self.mode == EXPECT_RELATION:
+            if name == "case":
+                self.case_store.store(self.case)
+                self.case = None
+                self.mode = EXPECT_CASE
+
+        elif self.mode == EXPECT_CASE:
+            if name == "cases":
+                self.mode = EXPECT_CASES
+
+    def characters(self, content):
+        if self.mode == EXPECT_CHARS:
+            self.chars += content
+
+class CaseStore:
+
+    def __init__(self, con, cur):
+        self.con = con
+        self.cur = cur
+        #self.ids = set()
+
+    def store(self, case):
+
+        success       = False
+        master_new    = False
+        kompetenz_new = False
+        master_id     = None
+        cur           = self.cur
+
+        try:
+            # find master
+            master = case.find_first_relation('master')
+
+            if master is None:
+                # need to create one
+                master_id = create_master(cur)
+                master_new = True
+            else:
+                # we have a master
+                if master.uuid is None:
+                    # need to create new one
+                    master_id = create_master(cur)
+                    master_new = True
+                    master.uuid = get_uuid(cur, 'master', master_id)
+                else:
+                    # we have a uuid
+                    master_id = get_id_for_uuid(cur, 'master', master.uuid)
+                    if master_id is None:
+                        # does not exist -> create new
+                        master_id = create_master(cur, master.uuid)
+                        master_new = True
+                # update the master
+                master.update(cur)
+
+            # now handle the repeat groups
+            for relation in case.relations:
+                if relation.name == 'master':
+                    # masters are already handled
+                    continue
+
+                if relation.uuid is None:
+                    # need to create new
+                    relation_id = create_repeat_group(cur, relation.name, master_id)
+                    relation.uuid = get_uuid(cur, relation.name, relation_id)
+                    if relation.name == 'kompetenzfeststellung':
+                        kompetenz_new = True
+                else:
+                    # we have a UUID. find out if we have this entry already in our database
+                    m_id = get_id_for_uuid(cur, relation.name, relation.uuid)
+                    if not m_id is None and m_id != master_id:
+                        # exists but not the right master -> ignore
+                        continue
+
+                    if m_id is None:
+                        # create new
+                        relation_id = create_repeat_group(cur, relation.name, master_id, relation.uuid)
+                        if relation.name == 'kompetenzfeststellung':
+                            kompetenz_new = True
+
+                # update the relation
+                relation.update(cur)
+
+            if master_new and kompetenz_new:
+                # create at least one kompetenzfeststellung if there is a new master
+                create_repeat_group(cur, 'kompetenzfeststellung', master_id)
+
+            success = True
+            self.con.commit()
+            #self.ids.add(master_id)
+
+        finally:
+            if not success:
+                self.con.rollback()
+
+def importFromXML(f, con):
+    cur = None
+    try:
+        cur = con.cursor()
+        case_store = CaseStore(con, cur)
+        handler = XMLHandler(case_store)
+        parse(f, handler)
+    finally:
+        if cur:
+            try: cur.close()
+            except: pass
+
+    #return case_store.ids
+
+# vim:set ts=4 sw=4 si et sta sts=4:


Property changes on: trunk/waskaweb/lib/xmlimport.py
___________________________________________________________________
Name: svn:executable
   + *

Modified: trunk/waskaweb/model/agencysettings.py
===================================================================
--- trunk/waskaweb/model/agencysettings.py	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/model/agencysettings.py	2008-08-13 13:12:54 UTC (rev 46)
@@ -93,4 +93,10 @@
             return unicode(form, 'utf-8')
         return self._loadDefaultStatement('privacy_statement.html')
 
+    def getDiscretionStatement(self):
+        form = self.conf.get('ud_formular', '')
+        if len(form) > 0:
+            return unicode(form, 'utf-8')
+        return self._loadDefaultStatement('discretion_statement.html')
+
 # vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8:

Added: trunk/waskaweb/model/appointment.py
===================================================================
--- trunk/waskaweb/model/appointment.py	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/model/appointment.py	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,411 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (c) 2007 by Intevation GmbH
+# Authors:
+# Torsten Irländer <torsten.irlaender at intevation.de>
+#
+import psycopg2.extras
+import os
+import traceback
+import sys
+from datetime import datetime, timedelta
+
+
+from waskaweb.lib.base import session
+from waskaweb.lib.db import db
+from waskaweb.model.agencysettings import Agency
+from waskaweb.model.case   import CaseOverview
+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 edatum > %(date)s 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, \
+                                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 edatum >= %(date)s 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 edatum >= %(date)s AND art = 0 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 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, \
+                                name = %(title)s, \
+                                beschreibung = %(description)s, \
+                                art = %(type)s \
+                                WHERE id = %(id)s"
+
+GET_OLDACTIVE_CASES = "SELECT m.id, s.zugriff, \
+getLastCaseAppointment(m.id) as last_date \
+from master_tbl_view m \
+JOIN ka_status_tbl_view s \
+ON s.master_id = m.id \
+WHERE extract(day from now()-getLastCaseAppointment(m.id)) > %(maxdays)s \
+AND m.zeitraum_nachbetreuung = -1 \
+AND m.art_beendigung <> 1"
+
+GET_OLDFINISHED_CASES = "SELECT m.id, s.zugriff, \
+getLastCaseAppointment(m.id) as last_date \
+from master_tbl_view m \
+JOIN ka_status_tbl_view s \
+ON s.master_id = m.id \
+WHERE extract(day from now()-s.zugriff) > %(maxdays)s \
+AND (m.zeitraum_nachbetreuung <> -1 \
+OR m.art_beendigung = 1)"
+
+#class AppointmentBundle:
+#    def __init__(self, ids):
+#        self.list = []
+#        factory = ()
+#        for id in ids:
+#            self.list.append(factory.loadId(id))
+#
+#    def delete(self):
+#        num = 0
+#        for appointment in self.list:
+#            appointment.delete()
+#            num += 1
+#        return num
+#
+#    def isEmpty(self):
+#        return len(self.list) <= 0 
+#
+#    def getAppointments(self):
+#       return self.list
+
+class AppointmentFactory:
+
+    def loadById(self, id):
+        appointment = None
+        try:
+            conn = db.getConnection()
+            cur = conn.cursor()
+            cur.execute(self.get_sql, {'id': id})
+            row = cur.fetchone()
+            appointment = self.createByDBRow(row)
+        finally:
+            db.recycleConnection(conn, cur)
+        return appointment
+
+    def createByData(self, id=None, title=None, sdate=None, edate=None, desc=None, case_id=None, type=0):
+        appointment             = self.constructor()
+        appointment.id          = id
+        appointment.start_date  = sdate
+        appointment.end_date    = edate
+        appointment.title       = title
+        appointment.description = desc
+        appointment.case_id     = case_id
+        appointment.type        = type
+        return appointment
+
+    def createByDBRow(self, row):
+        id        = row[0]
+        master_id = row[1]
+        sdate     = row[2]
+        edate     = row[3]
+        name      = unicode(str(row[4]), 'utf-8')
+        desc      = unicode(str(row[5]), 'utf-8')
+        type      = row[6]
+        return self.createByData(id, name, sdate, edate, desc, master_id, type)
+
+    def createNew(self, case_id=None):
+        try:
+            conn = db.getConnection()
+            cur = conn.cursor()
+            if case_id:
+                cur.execute(self.create_sql, {'id': case_id})
+            else:
+                cur.execute(self.create_sql)
+            row = cur.fetchone()
+            id = row[0]
+            return self.createByData(id)
+        finally:
+            db.recycleConnection(conn, cur)
+        return None
+
+class CaseAppointmentFactory(AppointmentFactory):
+    def __init__(self):
+        self.get_sql = GET_CASE_APPOINTMENT_SQL
+        self.create_sql = CREATE_CASE_APPOINTMENT_SQL
+        self.constructor = CaseAppointment
+
+class CaseReminderFactory(AppointmentFactory):
+    def __init__(self):
+        self.get_sql = GET_CASE_APPOINTMENT_SQL
+        self.create_sql = CREATE_CASE_APPOINTMENT_SQL
+        self.constructor = CaseReminder
+
+class GlobalAppointmentFactory(AppointmentFactory):
+    def __init__(self):
+        self.get_sql = GET_GLOBAL_APPOINTMENT_SQL
+        self.create_sql = CREATE_GLOBAL_APPOINTMENT_SQL
+        self.constructor = GlobalAppointment
+
+class AppointmentOverview:
+    def _load(self, factory, sql, values):
+        self.appointment_list = []
+        conn, cur = None, None
+        try:
+            conn = db.getConnection()
+            cur = conn.cursor()
+            cur.execute(sql, values )
+            rows = cur.fetchall()
+            for row in rows:
+                self.appointment_list.append(factory.createByDBRow(row))
+        finally:
+            db.recycleConnection(conn, cur)
+
+    def getDatasets(self):
+        return self.appointment_list
+
+    def setDatasets(self, list):
+        self.appointment_list = list
+
+    def join(self, overview):
+        self.appointment_list.extend(overview.getDatasets())
+
+    def sort(self, cmp=None):
+        self.appointment_list = sorted(self.appointment_list)
+
+class CaseAppointmentOverview(AppointmentOverview):
+    def __init__(self, caseid=None):
+        afactory = CaseAppointmentFactory()
+        today = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
+        if caseid:
+            values = {'id': caseid, 'date': today}
+            sql = GET_CASE_APPOINTMENTLIST_SQL
+        else:
+            values = {'date': today}
+            sql = GET_ALLCASES_APPOINTMENTLIST_SQL
+        self._load(afactory, sql, values)
+
+class GlobalAppointmentOverview(AppointmentOverview):
+    def __init__(self):
+        afactory = GlobalAppointmentFactory()
+        today = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
+        values = {'date': today}
+        sql = GET_GLOBAL_APPOINTMENTLIST_SQL
+        self._load(afactory, sql, values)
+
+class CaseReminderOverview(AppointmentOverview):
+    def __init__(self, caseid=None):
+        afactory = CaseReminderFactory()
+        today = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
+        if caseid:
+            values = {'id': caseid, 'date': today}
+            sql = GET_CASE_REMINDERLIST_SQL
+        else:
+            values = {'date': today}
+            sql = GET_ALLCASES_REMINDERLIST_SQL
+        self._load(afactory, sql, values)
+
+class MaxSaveTimeReminderOverview(AppointmentOverview):
+    def __init__(self):
+        self.appointment_list = []
+        agency                = Agency()
+        maxage                = agency.getMaxSavetime()
+        cases                 = CaseOverview()
+        user                  = session['USER_AUTHORIZED']
+
+        # 0. Load ids and some additional info on cases which either are active
+        # but seems to be orphaned or are finished and not edited for
+        # longer than maxage.
+        # orphaned means that all last appointmentment, aids or the
+        # modification date is older than maxage
+        oldAndActive          = self.__getOldAndActiveCases(maxage)
+        oldAndFinished        = self.__getOldAndFinishedCases(maxage)
+
+        # 1. Load cases of the user so we can so checks regarding the maximum
+        # savetime on them
+        default_search_options = ['own:%s' % user.id, 'standin:%s' % user.id, 'state:1', 'state:2', 'state:3']
+        cases.search(";".join(default_search_options))
+
+        # 2. filter cases which seems to be orphaned and create reminders
+        oldAndActiveSet = set(oldAndActive)
+        old_cases = [case for case in cases.getDatasets() if case.id in oldAndActiveSet]
+        for case in old_cases:
+            info = oldAndActive[case.id]
+            last  = info['last_date']
+            appointment = self.__makeAppointment(case, last, maxage, finished=False)
+            self.appointment_list.append(appointment)
+
+        # 3. filter cases which are finished and not edited and create reminders
+        oldAndFinishedSet = set(oldAndFinished)
+        old_cases = [case for case in cases.getDatasets() if case.id in oldAndFinishedSet]
+        for case in old_cases:
+            info = oldAndFinished[case.id]
+            access = info['access']
+            appointment = self.__makeAppointment(case, access, maxage, finished=True)
+            self.appointment_list.append(appointment)
+
+    def __getOldAndFinishedCases(self, days):
+        conn, cur = None, None
+        list = {}
+        try:
+            conn = db.getConnection()
+            cur = conn.cursor()
+            cur.execute(GET_OLDFINISHED_CASES, {'maxdays': days})
+            result = cur.fetchall()
+            for r in result:
+                list[r[0]] = {'access':r[1], 'last_date': r[2]}
+            return list
+        finally:
+            db.recycleConnection(conn, cur)
+        return False
+
+    def __getOldAndActiveCases(self, days):
+        conn, cur = None, None
+        list = {}
+        try:
+            conn = db.getConnection()
+            cur = conn.cursor()
+            cur.execute(GET_OLDACTIVE_CASES, {'maxdays': days})
+            result = cur.fetchall()
+            for r in result:
+                list[r[0]] = {'access':r[1], 'last_date': r[2]}
+            return list
+        finally:
+            db.recycleConnection(conn, cur)
+        return False
+
+    def __makeAppointment(self, case, last_date, maxage, finished):
+        factory  = CaseAppointmentFactory()
+        type     = 1
+        title    = u"%s, %s" % (case.last_name, case.first_name)
+        age      = datetime.now() - last_date 
+        mydate   = datetime.now() - timedelta(age.days-int(maxage))
+        if finished:
+            desc = u"Achtung! Die maximale Speicherdauer von (%s Tagen) ist seit  \
+                    %s Tagen für diese Fallakte überschritten!" % (maxage, age.days-int(maxage))
+        else:
+            desc = u"Inaktive Fallakte? Bitte prüfen Sie, ob der Fall noch bearbeitet wird." 
+        appointment = factory.createByData(None, 
+                                           title,
+                                           mydate,
+                                           None,
+                                           desc,
+                                           case.id,
+                                           type)
+        return appointment
+
+class Appointment:
+    def __init__(self):
+        self.id          = None
+        self.title       = None
+        self.start_date  = None
+        self.end_date    = None
+        self.description = None
+        self.case_id     = None
+        # available types
+        # 0: normal appointment
+        # 1: Reminder
+        self.type        = 0
+
+    def __cmp__(self, other):
+        return cmp(self.start_date, other.start_date)
+
+    def _convertStr2Date(self, str, format=None):
+        str = str.strip()
+        date, time = str.split(' ')
+        d,m,Y = date.split('.')
+        H,M = time.split(':')
+        return datetime(int(Y),int(m),int(d),int(H),int(M))
+
+    def getStartDate(self, format=None):
+        if format:
+            return self.start_date.strftime(format)
+        else: return self.start_date
+
+    def getEndDate(self, format=None):
+        if format:
+            return self.end_date.strftime(format)
+        else: return self.end_date
+
+    def getDuration(self):
+        return self.end_date - self.start_date
+
+    def setData(self, data):
+        '''Sets values of the appointment to data. Data is a dict returned from formencode'''
+        self.title = data.get('title', self.title)
+        self.type  = data.get('type', self.type)
+
+        # Set date
+        sdate = "%s %s" % (data.get('start_date'), data.get('start_time'))
+        self.start_date = self._convertStr2Date(sdate)
+
+        # Default duration for appointment with no endate is 1 day
+        if not data.get('end_date') or not data.get('end_time'):
+            self.end_date   = self.start_date+timedelta(days=1)
+        else:
+            edate = "%s %s" % (data.get('end_date'), data.get('end_time'))
+            self.end_date   = self._convertStr2Date(edate)
+
+        self.description = data.get('description', self.description)
+        self.case_id = data.get('case_id', self.case_id)
+
+    def store(self):
+        conn, cur = None, None
+        fields = {'id': self.id, \
+                'title': self.title, \
+                'start_date': self.start_date, \
+                'end_date': self.end_date, \
+                'description': self.description, \
+                'type': self.type, \
+                'case_id': self.case_id}
+        try:
+            conn = db.getConnection()
+            cur = conn.cursor()
+            cur.execute(self.store_sql, fields)
+            conn.commit()
+            return True
+        finally:
+            db.recycleConnection(conn, cur)
+        return False
+
+    def isGlobal(self):
+        return self.case_id is None
+
+    def isReminder(self):
+        return self.type == 1
+
+    def delete(self):
+        conn, cur = None, None
+        try:
+            conn = db.getConnection()
+            cur = conn.cursor()
+            cur.execute(self.delete_sql, {'id': self.id})
+            conn.commit()
+            return True
+        finally:
+            db.recycleConnection(conn, cur)
+        return False
+
+class GlobalAppointment(Appointment):
+    def __init__(self):
+        Appointment.__init__(self)
+        self.type = 0
+        self.store_sql  = STORE_GLOBAL_APPOINTMENT_SQL
+        self.delete_sql = DELETE_GLOBAL_APPOINTMENT_SQL
+
+class CaseAppointment(Appointment):
+    def __init__(self):
+        Appointment.__init__(self)
+        self.type = 0
+        self.store_sql  = STORE_CASE_APPOINTMENT_SQL
+        self.delete_sql = DELETE_CASE_APPOINTMENT_SQL
+
+class CaseReminder(CaseAppointment):
+    def __init__(self):
+        CaseAppointment.__init__(self)
+        self.type = 1
+
+# vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8:

Modified: trunk/waskaweb/model/case.py
===================================================================
--- trunk/waskaweb/model/case.py	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/model/case.py	2008-08-13 13:12:54 UTC (rev 46)
@@ -18,15 +18,19 @@
 from pylons.i18n                import _, ungettext, N_
 from waskaweb.lib.db import db
 from waskaweb.lib.csv import exportAsCSV
+from waskaweb.lib.excel import exportAsXLS
+from waskaweb.lib.xmlexport import exportAsXML
 from waskaweb.lib.base import session, g, h, config 
 import waskaweb.lib.filters as F
 from waskaweb.lib.pdfimporter import asXFA, FieldExtractor
 from waskaweb.model.user import UserObject 
 from waskaweb.model.agencysettings import Agency
 from waskaweb.model.repeatgroup import AidList, CREATE_RG_BILDEN_DS,CREATE_RG_LEBEN_DS, CREATE_RG_QUALI_DS, CREATE_RG_BERUF_DS
-from waskaweb.model.statement import PrivacyStatement, AidPlanStatement
+from waskaweb.model.statement import PrivacyStatement, AidPlanStatement, DiscretionStatement
 from waskaweb.model.document import listDocuments 
 
+from os import tmpnam, unlink
+
 SAVE_SEARCH = re.compile(r'[^\w:; ]', re.UNICODE)
 
 # SQL STATEMENTS
@@ -56,7 +60,7 @@
       AND %s
     ORDER by m.name_1"""
 
-LOAD_CASESTATE_SQL = """SELECT id, status, zugriff from ka_status_tbl_view WHERE master_id = %(id)s"""
+LOAD_CASESTATE_SQL = """SELECT s.id, s.status, s.zugriff, m.zeitraum_nachbetreuung as cm_beendet, m.art_beendigung as cm_abbruch, getLastCaseAppointment(m.id) as letzer_termin from ka_status_tbl_view s JOIN master_tbl_view m ON m.id = s.master_id WHERE s.master_id = %(id)s"""
 SET_CASESTATE_SQL = """UPDATE ka_status_tbl_view SET status = %(status)s WHERE id = %(id)s"""
 
 LOAD_CASE_DIGEST_SQL = """SELECT name_1, vorname_1, kundennummer, date_part('year', age(geburtsdatum::timestamp)) as alter, plz, strasse, wohnort, vorwahl, telefon_1, mobiltelefon, telefon_sonstige, email, einverstaendniserklaerung, name_2, vorname_2, vorwahl_1, telefon_1_1, mobiltelefon_1, email_1 from master_tbl_view WHERE id = %(id)s"""
@@ -193,6 +197,46 @@
         finally:
             db.recycleConnection(con, cur)
 
+    def exportAsXML(self):
+        con, cur = None, None
+        f = StringIO.StringIO()
+        Writer = codecs.getwriter('utf-8')
+        out = Writer(f, errors='replace')
+        try:
+            con = db.getConnection()
+            cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor)
+            exportAsXML(cur, out, self.listDatasetIds())
+            out.flush()
+            bytes = out.getvalue()
+            out.close()
+            return bytes
+        finally:
+            db.recycleConnection(con, cur)
+
+    def exportAsXLS(self):
+        con, cur = None, None
+        fname = None
+        try:
+            con = db.getConnection()
+            cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor)
+            f = None
+            try:
+                fname = tmpnam() # security risk: symlink attacks
+                exportAsXLS(cur, fname, self.listDatasetIds())
+                f = open(fname, "rb")
+                return f.read()
+            finally:
+                if f:
+                    try: f.close()
+                    except: pass
+                if fname:
+                    try: unlink(fname)
+                    except: pass
+        finally:
+            db.recycleConnection(con, cur)
+
+
+
 class CaseOverview:
     def __init__(self, search_str=None):
         self.ds_list = []
@@ -714,6 +758,7 @@
         self.privacy_statement_signed = False
         self.privacy_statement = None
         self.aidplan_statement = None
+        self.discretion_statement = None
 
     def delete(self):
         '''Deletes the case from data base. Returns True if deletion succseeds'''
@@ -843,6 +888,19 @@
             raise
         return None
 
+    def getDiscretionStatement(self):
+        '''Returns the privacy statement of the case'''
+        if not self.discretion_statement is None: return self.discretion_statement
+        try:
+            # Create discretion_statement 
+            self.discretion_statement = DiscretionStatement(self.id)
+            self.discretion_statement.fillout(self.getDigest(), Agency()) 
+            return self.discretion_statement
+        except:
+            self.discretion_statement = None
+            raise
+        return None
+
     def getAidPlanStatement(self):
         '''Returns the aid plan statement of the case'''
         if not self.aidplan_statement is None: return self.aidplan_statement
@@ -922,9 +980,12 @@
                 cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
                 cur.execute(LOAD_CASESTATE_SQL, {'id': self.master_id})
                 result = cur.fetchone()
-                self.id     = result.get('id')
-                self.state  = result.get('status')
-                self.access = result.get('zugriff')
+                self.id          = result.get('id')
+                self.state       = result.get('status')
+                self.access      = result.get('zugriff')
+                self.last_date   = result.get('letzer_termin')
+                self.cm_finished = result.get('cm_beendet')
+                self.cm_canceled = result.get('cm_abbruch')
             finally:
                 db.recycleConnection(conn, cur)
         except:
@@ -943,6 +1004,12 @@
     def getState(self):
         return self.state
 
+    def isCmFinished(self):
+        return self.cm_finished != -1
+
+    def isCmCanceled(self):
+        return self.cm_canceled == 1
+
     def setState(self, value):
         conn, cur = None, None
         try:
@@ -959,10 +1026,32 @@
             traceback.print_exc(file=sys.stderr)
         return False 
 
-    def getAccessTime(self):
-        return self.access.strftime('%d.%m.%y %H:%M')
+    def getAccessTime(self, format=None):
+        if format:
+            return self.access.strftime('%d.%m.%y %H:%M')
+        return self.access
 
+    def getLastDate(self, format=None):
+        '''Returns the last occouring date from appointments, aids, or the last accesstime'''
+        if format:
+            return self.last_date.strftime('%d.%m.%y %H:%M')
+        return self.last_date
+
     def setAccessTime(self):
         pass
 
+    def getMaxSavetime(self):
+        agency  = Agency()
+        return agency.getMaxSavetime()
+
+    def daysToMaxSavetime(self):
+        maxage  = self.getMaxSavetime()
+        if self.isCmFinished() or self.isCmCanceled():
+            age     = datetime.now() - self.getAccessTime()
+        else:
+            age     = datetime.now() - self.getLastDate()
+        if int(maxage) != 0:
+            return int(maxage) - age.days
+        return None
+
 # vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8:

Modified: trunk/waskaweb/model/casedocument.py
===================================================================
--- trunk/waskaweb/model/casedocument.py	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/model/casedocument.py	2008-08-13 13:12:54 UTC (rev 46)
@@ -14,9 +14,12 @@
     def __init__(self, root=None):
         Document.__init__(self, root)
 
-    def getPageStore(self, name, ds_id=None):
+    def getPageStore(self, name, ds_id=None, proxy=None):
         db_view = "%s_view" % name
         nc = self.findByClassAndName(PageNode, name)
+        if proxy:
+            proxy.set(nc)
+            nc = proxy
         page = PageStore(db_view, nc, ds_id)
         return page
 

Modified: trunk/waskaweb/model/data.py
===================================================================
--- trunk/waskaweb/model/data.py	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/model/data.py	2008-08-13 13:12:54 UTC (rev 46)
@@ -16,6 +16,19 @@
 
 import waskaweb.model.io.document
 
+class FilteredNodeComponentProxy:
+    def __init__(self, params):
+        self.params = params
+
+    def set(self, nc):
+        self.nc = nc
+
+    def getName(self):
+        return self.nc.getName()
+
+    def allWidgets(self):
+        return [w for w in self.nc.allWidgets() if w.getName() in self.params]
+
 class PageNode(Node):
     def __init__(self):
         Node.__init__(self)
@@ -34,13 +47,13 @@
             elif isinstance(nc, Leaf) and not isinstance(nc, 
                 (RuleLeaf, ExternalChoiceListLeaf, InfoLeaf)):
                 widgets.append(nc)
-            
+
             return VISIT_CONTINUE
 
         self.visit(visitor)
 
         return widgets
-        
+
 class GroupNode(Node):
     def __init__(self):
         Node.__init__(self)
@@ -75,7 +88,7 @@
             elif isinstance(nc, Leaf) and not isinstance(nc, 
                 (RuleLeaf, ExternalChoiceListLeaf, InfoLeaf)):
                 widgets.append(nc)
-            
+
             return VISIT_CONTINUE
 
         self.visit(visitor)

Modified: trunk/waskaweb/model/navigation.py
===================================================================
--- trunk/waskaweb/model/navigation.py	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/model/navigation.py	2008-08-13 13:12:54 UTC (rev 46)
@@ -62,14 +62,28 @@
     def setParent(self, treeItem):
         self.parent = treeItem
 
-    def render(self, select_action, toggle_action, out, error=False, selected_key=None):
+    def hasEnabledChildren(self):
+        """Return true/false depending if the item has enabled children."""
+        if self.children and len(self.children) > 0:
+            for child in self.children:
+                if child.enabled: return True
+        return False
+
+    def hasDisplayedChildren(self):
+        """Return true/false depending if item has children to be displayed."""
+        if self.children and len(self.children) > 0:
+            return self.displayChildren
+        return False
+
+    def render(self, select_action, toggle_action, out, 
+                error=False, selected_key=None):
         err_str = ""
         if self.enabled:
 
             hl = self.key == selected_key and 'class="formpage_highlight"' or ""
             out.append('<li class="formpage"><span %s>' % hl)
 
-            if self.children and len(self.children) > 0: 
+            if self.hasEnabledChildren():
                 if error:
                     symbol = '<img src="/images/icons/folder_closed_blue_2_error.gif" alt="Geschlossener Ordner Fehler" title="Ordner &ouml;ffnen - Fehler in Fallakte" border="0">'
                 else: 
@@ -91,7 +105,7 @@
 
             out.append('</span>')
 
-            if self.children and len(self.children) > 0 and self.displayChildren:
+            if self.hasDisplayedChildren():
                 out.append('<ul>')
                 for child in self.children:
                     child.render(

Modified: trunk/waskaweb/model/statement.py
===================================================================
--- trunk/waskaweb/model/statement.py	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/model/statement.py	2008-08-13 13:12:54 UTC (rev 46)
@@ -37,8 +37,27 @@
 
     def isSigned(self):
         return False
-        
 
+class DiscretionStatement(Statement):
+    def __init__(self, id=None):
+        Statement.__init__(self, id)
+
+    def fillout(self, client, agency, **kwargs):
+        tmpl = agency.getDiscretionStatement()
+        self.template = Template(tmpl)
+        self.content = self._substitute(client, agency) 
+        return self.content 
+
+    def _substitute(self, client, agency):
+        # Substitution dictionary
+        s = {
+                'VORNAME': F.NA(client.first_name),
+                'NACHNAME': F.NA(client.last_name),
+                'KA_NAME': F.NA(agency.getName()),
+            }
+        result = self.template.safe_substitute(s)
+        return result
+
 class PrivacyStatement(Statement):
     def __init__(self, id=None):
         Statement.__init__(self, id)
@@ -57,7 +76,8 @@
                 'PLZ': F.NA(client.plz),
                 'STRASSE': F.NA(client.street),
                 'ORT': F.NA(client.city),
-                'KA_NAME': F.NA(agency.getName())
+                'KA_NAME': F.NA(agency.getName()),
+                'KA_SPEICHERDAUER': F.NA(agency.getMaxSavetime())
             }
         result = self.template.safe_substitute(s)
         return result 
@@ -97,7 +117,6 @@
             elif signed == -1: return None
         finally:
             db.recycleConnection(conn, cur)
-        
 
 class AidPlanStatement(Statement):
     def __init__(self, id=None):

Modified: trunk/waskaweb/public/styles/all.css
===================================================================
--- trunk/waskaweb/public/styles/all.css	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/public/styles/all.css	2008-08-13 13:12:54 UTC (rev 46)
@@ -6,6 +6,7 @@
 /*    3.1 User			*/
 /*    3.2 Administration	*/
 /* 4. Grouping form elements 	*/
+/* 5. Appointments 		*/
 /*------------------------------*/
 
 
@@ -374,3 +375,30 @@
 .print_menu_header a:hover {
 	background:#cfd1d1;
 }
+/*----------------------*/
+/* Appointments		*/
+/*----------------------*/
+
+table.appointment {
+	margin: 0.3em 0.5em 0.3em 0.5em;
+}
+
+table.appointment .date, .title, .action {
+	font-weight: bold;
+	text-align: left;
+	background : #D5D5D5;
+	/*border-bottom: 0.5pt solid;*/
+}
+table.appointment th.action {
+	width: 7em;
+}
+
+table.appointment th.date {
+	/*background: #C9C9C9;*/
+	width: 7.5em;
+}
+
+table.appointment th.description {
+	padding: 1.5em;
+}
+

Modified: trunk/waskaweb/public/styles/screen.css
===================================================================
--- trunk/waskaweb/public/styles/screen.css	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/public/styles/screen.css	2008-08-13 13:12:54 UTC (rev 46)
@@ -442,7 +442,7 @@
 	margin-bottom:1em;
 	padding:0.4em;
 	border:0.5pt solid;
-	background:white;
+	background:#D5D5D5;
 	float:left;
 	width:51.6em;
 }

Modified: trunk/waskaweb/templates/administration/edit_settings.mako
===================================================================
--- trunk/waskaweb/templates/administration/edit_settings.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/administration/edit_settings.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -1,5 +1,11 @@
 ## -*- coding: utf-8 -*-
 <%inherit file="../main.mako" />
+<%
+  formular_labels = {'ka_name': _('adm_form_settings_kaname'),
+                     'fkz': _('adm_form_settings_fkz'),
+                     'max_speicherdauer': _('adm_form_settings_max_savetime')
+                    }
+%>
 <%def name="buildNavipath()">
 		${parent.buildNavipath()}
 	<li><a href="/administration">${_('adm_np_root')}</a></li>
@@ -19,6 +25,7 @@
     </div>
   </div>
 </div>
+${self.buildFormErrors(formular_labels)}
 <div id="admin_edit_settings">
 <p>${_('adm_con_es_editsettings')}</p>
 <div class="waska_form">
@@ -28,16 +35,18 @@
             <div class="waska_form_element w30">
 	      <label for="ka_name">${_('adm_form_settings_kaname')}</label>
               % if c.form_errors.get('ka_name'):
-                <a href="#error_list"><img class="smallicon" src="/images/error_small.png"></a>
+	        <input type="text" class="field error_box" id="ka_name" name="ka_name" value="${c.form_result.get('ka_name', c.agency.getName())| h}">
+              % else:
+	        <input type="text" class="field" id="ka_name" name="ka_name" value="${c.form_result.get('ka_name', c.agency.getName())| h}">
               % endif
-	      <input type="text" class="field" id="ka_name" name="ka_name" value="${c.form_result.get('ka_name', c.agency.getName())| h}">
 	    </div>
             <div class="waska_form_element w30">
 	      <label for="fkz">${_('adm_form_settings_fkz')}</label>
               % if c.form_errors.get('fkz'):
-                <a href="#error_list"><img class="smallicon" src="/images/error_small.png"></a>
+	        <input type="text" class="error_box" id="fkz" name="fkz" value="${c.form_result.get('fkz', c.agency.getFKZ())| h}">
+              % else:
+	        <input type="text" id="fkz" name="fkz" value="${c.form_result.get('fkz', c.agency.getFKZ())| h}">
               % endif
-	      <input type="text" class="field" id="fkz" name="fkz" value="${c.form_result.get('fkz', c.agency.getFKZ())| h}">
             </div>
         </fieldset>
         <fieldset>
@@ -45,9 +54,10 @@
           <div class="waska_form_element w100">
             <label for="max_speicherdauer">${_('adm_form_settings_max_savetime')}</label>
             % if c.form_errors.get('max_speicherdauer'):
-              <a href="#error_list"><img class="smallicon" src="/images/error_small.png"></a>
+              <input type="text" class="error_box" id="max_speicherdauer" name="max_speicherdauer", value="${c.form_result.get('max_speicherdauer', c.agency.getMaxSavetime())| h}">
+            % else:
+              <input type="text" id="max_speicherdauer" name="max_speicherdauer", value="${c.form_result.get('max_speicherdauer', c.agency.getMaxSavetime())| h}">
             % endif
-            <input type="text" id="max_speicherdauer" name="max_speicherdauer", value="${c.form_result.get('max_speicherdauer', c.agency.getMaxSavetime())| h}">
             <p>Die maximale Aufbewahrungsdauer legt fest, wie lange eine Fallakte nach Abschluss des CM vorgehalten wird. Nach Ablauf der Frist, wird die Fallakte automatisch zum Löschen vorgschlagen.</p>
           </div>
           <div class="waska_form_element w100">

Modified: trunk/waskaweb/templates/administration/show_settings.mako
===================================================================
--- trunk/waskaweb/templates/administration/show_settings.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/administration/show_settings.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -30,11 +30,11 @@
   <td class="label">${_('adm_form_settings_fkz')}</td>
   <td class="table_row_v_2">${c.agency.getFKZ()| F.NA, h}</td>
 </tr>
-##<tr>
-##  <td class="label table_header_v">${_('adm_form_settings_max_savetime')}</td>
-##  <td class="table_row_v">${c.agency.getMaxSavetime()| F.NA, h}</td>
-##</tr>
 <tr>
+  <td class="label table_header_v">${_('adm_form_settings_max_savetime')}</td>
+  <td class="table_row_v">${c.agency.getMaxSavetime()| F.NA, h}</td>
+</tr>
+<tr>
   <td class="label table_header">${_('adm_form_settings_anontransfer')}</td>
   <td class="table_row_v_2">
     % if c.agency.isAnonTransfer():

Added: trunk/waskaweb/templates/appointments/appointmentlist.mako
===================================================================
--- trunk/waskaweb/templates/appointments/appointmentlist.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/appointments/appointmentlist.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,10 @@
+<%inherit file="/appointments/overview_body.mako" />
+<%def name="showAppointmentActions(appointment)">
+<a href="${h.url_for(controller='/appointment', action='show', id=appointment.id)}">
+  <img src="/images/icons/view_red.gif" border="0" alt="${_('cm_overview_a_show')}" title="${_('cm_overview_a_show')}"></a>
+% if h.hasRole(['admin_ka']):
+  <a href="${h.url_for(controller='/appointment', action='delete', id=appointment.id, confirmed=0)}">
+    <img src="/images/icons/delete_red.gif" border="0" alt="${_('cm_overview_a_delete')}" title="${_('cm_overview_a_show')}">
+  </a>
+% endif
+</%def>

Added: trunk/waskaweb/templates/appointments/dialogs/failed_delete_appointment.mako
===================================================================
--- trunk/waskaweb/templates/appointments/dialogs/failed_delete_appointment.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/appointments/dialogs/failed_delete_appointment.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,9 @@
+## -*- coding: utf-8 -*- 
+<%inherit file="../../main.mako" />
+<%def name="buildNavipath()">
+	${parent.buildNavipath()}
+	<li><a href="/case/">${_('adm_np_root')}</a></li>
+        <li><a href="/administration/overviewUser">${_('adm_np_overview')}</a></li>
+	<li><a href="#">${_('adm_np_success_deleteuser')}</a></li>
+</%def>
+<%include file="../../dialogs/failed.mako" />

Added: trunk/waskaweb/templates/appointments/dialogs/success_create_appointment.mako
===================================================================
--- trunk/waskaweb/templates/appointments/dialogs/success_create_appointment.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/appointments/dialogs/success_create_appointment.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,8 @@
+## -*- coding: utf-8 -*- 
+<%inherit file="../../main.mako" />
+<%def name="buildNavipath()">
+	${parent.buildNavipath()}
+	<li><a href="/appointment/overview">${_('app_np_list')}</a></li>
+	<li><a href="#">${_('app_np_new')}</a></li>
+</%def>
+<%include file="../../dialogs/success.mako" />

Added: trunk/waskaweb/templates/appointments/dialogs/success_delete_appointment.mako
===================================================================
--- trunk/waskaweb/templates/appointments/dialogs/success_delete_appointment.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/appointments/dialogs/success_delete_appointment.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,9 @@
+## -*- coding: utf-8 -*- 
+<%inherit file="../../main.mako" />
+<%def name="buildNavipath()">
+	${parent.buildNavipath()}
+	<li><a href="/appointment">${_('menu_app_link_overview')}</a></li>
+	<li><a href="/appointment/overview">${_('app_np_list')}</a></li>
+	<li><a href="#">${_('app_np_delete')}</a></li>
+</%def>
+<%include file="../../dialogs/success.mako" />

Added: trunk/waskaweb/templates/appointments/dialogs/success_edit_appointment.mako
===================================================================
--- trunk/waskaweb/templates/appointments/dialogs/success_edit_appointment.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/appointments/dialogs/success_edit_appointment.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,8 @@
+## -*- coding: utf-8 -*- 
+<%inherit file="../../main.mako" />
+<%def name="buildNavipath()">
+	${parent.buildNavipath()}
+	<li><a href="/appointment/overview">${_('app_np_list')}</a></li>
+	<li><a href="#">${_('app_np_edit')}</a></li>
+</%def>
+<%include file="../../dialogs/success.mako" />

Added: trunk/waskaweb/templates/appointments/edit.mako
===================================================================
--- trunk/waskaweb/templates/appointments/edit.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/appointments/edit.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,36 @@
+<%inherit file="../main.mako" />
+<%
+formular_labels = {'start_date' : 'app_form_startdate',
+                   'start_time' : 'app_form_startdate',
+                   'end_date'   : 'app_form_enddate',
+                   'end_time'   : 'app_form_endtime',
+                   'title'      : 'app_form_title'
+                  }
+%>
+<%def name="buildNavipath()">
+  ${parent.buildNavipath()}
+  <li><a href="/appointment/overview">${_('app_np_list')}</a></li>
+  <li><a href="#">${_('app_np_edit')}</a></li>
+</%def>
+<div id="content_header_small">
+  <div id="content_ueberschrift">
+${_('cm_app_header_edit')}
+  </div>
+  <div id="modusfield">
+    <div class="actions">
+      <ul>
+        <li>
+          <a href="${h.url_for(controller='appointment', action='show', id=c.form_result.get('id'))}"> ${_('menu_app_link_show_back')}</a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+${self.buildFormErrors(formular_labels)}
+<div id="admin_new_user">
+<div id="waska_form">
+<form action="${h.url_for(controller='appointment', action='editAction')}" method="POST">
+<%include file="edit_body.mako" />
+</form>
+</div>
+</div>

Added: trunk/waskaweb/templates/appointments/edit_body.mako
===================================================================
--- trunk/waskaweb/templates/appointments/edit_body.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/appointments/edit_body.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,76 @@
+<fieldset>
+  <input type="hidden" name="id">
+  <input type="hidden" name="case_id">
+  <legend>${_('app_form_legend_datetime')}</legend>
+  <div class="w25">
+    % if c.form_errors.get('start_date'):
+      <label for="starte_date" class="error_font">${_('app_form_startdate')}</label><br>
+      <input type="text" class="field error_box" id="start_date" name="start_date">
+    % else:
+      <label for="starte_date">${_('app_form_startdate')}</label><br>
+      <input type="text" class="field" id="start_date" name="start_date">
+    % endif
+  </div>
+  <div class="w75">
+    % if c.form_errors.get('start_time'):
+      <label for="starte_time" class="error_font">${_('app_form_starttime')}</label><br>
+      <input type="text" class="field error_box" id="start_time" name="start_time">
+    % else:
+      <label for="starte_time">${_('app_form_starttime')}</label><br>
+      <input type="text" class="field" id="start_time" name="start_time">
+    % endif
+  </div>
+  <div class="w25">
+    % if c.form_errors.get('end_date'):
+      <label for="ende_date" class="error_font">${_('app_form_enddate')}</label><br>
+      <input type="text" class="field error_box" id="end_date" name="end_date">
+    % else:
+      <label for="ende_date">${_('app_form_enddate')}</label><br>
+      <input type="text" class="field" id="end_date" name="end_date">
+    % endif
+  </div>
+  <div class="w75">
+    % if c.form_errors.get('end_time'):
+      <label for="ende_time" class="error_font">${_('app_form_endtime')}</label><br>
+      <input type="text" class="field error_box" id="end_time" name="end_time">
+    % else:
+      <label for="ende_time">${_('app_form_endtime')}</label><br>
+      <input type="text" class="field" id="end_time" name="end_time">
+    % endif
+  </div>
+</fieldset>
+<fieldset>
+  <legend>${_('app_form_legend_appdate')}</legend>
+  % if h.hasRole('cm_ka'):
+  <div class="w100">
+    % if c.form_errors.get('type'):
+      <label for="type" class="error_font">${_('app_form_type')}</label><br>
+      <select class="field error_box" id="type" name="type">
+    % else:
+      <select class="field" id="title" name="type">
+    % endif
+        <option value="0">Normaler Termin</option>
+        <option value="1">Wiedervorlage</option>
+      </select>
+  </div>
+  % endif
+  <div class="w100">
+    % if c.form_errors.get('title'):
+      <label for="title" class="error_font">${_('app_form_title')}</label><br>
+      <input type="text" class="field error_box" id="title" name="title">
+    % else:
+      <label for="title">${_('app_form_title')}</label><br>
+      <input type="text" class="field" id="title" name="title">
+    % endif
+  </div>
+  <div class="w100">
+    % if c.form_errors.get('description'):
+      <label for="description" class="error_font">${_('app_form_description')}</label><br>
+      <textarea class="field error_box" id="description" name="description"></textarea>
+    % else:
+      <label for="description">${_('app_form_description')}</label><br>
+      <textarea class="field" id="description" name="description"></textarea>
+    % endif
+  </div>
+</fieldset>
+<input type="submit" name="submit" value="${_('app_form_submit')}">

Modified: trunk/waskaweb/templates/appointments/new.mako
===================================================================
--- trunk/waskaweb/templates/appointments/new.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/appointments/new.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -1,8 +1,16 @@
 <%inherit file="../main.mako" />
+<%
+formular_labels = {'start_date' : 'app_form_startdate',
+                   'start_time' : 'app_form_startdate',
+                   'end_date'   : 'app_form_enddate',
+                   'end_time'   : 'app_form_endtime',
+                   'title'      : 'app_form_title'
+                  }
+%>
 <%def name="buildNavipath()">
-		${parent.buildNavipath()}
-	<li><a href="/appointment/overview">${_('app_np_list')}</a></li>
-	<li><a href="/appointment/new/">${_('app_np_new')}</a></li>
+  ${parent.buildNavipath()}
+  <li><a href="/appointment/overview">${_('app_np_list')}</a></li>
+  <li><a href="/appointment/new/">${_('app_np_new')}</a></li>
 </%def>
 <div id="content_header_small">
   <div id="content_ueberschrift">
@@ -10,11 +18,19 @@
   </div>
   <div id="modusfield">
     <div class="actions">
-	<ul>
-		<li><a href="${h.url_for(controller='appointment', action='overview')}"> ${_('menu_app_link_overview_back')}
-	    </a></li>
-	</ul>
+      <ul>
+        <li>
+          <a href="${h.url_for(controller='appointment', action='overview')}"> ${_('menu_app_link_overview_back')}</a>
+        </li>
+      </ul>
     </div>
   </div>
 </div>
-<%include file="appointment_form.mako" />
+${self.buildFormErrors(formular_labels)}
+<div id="admin_new_user">
+<div id="waska_form">
+<form action="${h.url_for(controller='appointment', action='createAction')}" method="POST">
+<%include file="edit_body.mako" />
+</form>
+</div>
+</div>

Modified: trunk/waskaweb/templates/appointments/overview.mako
===================================================================
--- trunk/waskaweb/templates/appointments/overview.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/appointments/overview.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -1,28 +1,21 @@
 <%inherit file="../main.mako" />
 <%def name="buildNavipath()">
-		${parent.buildNavipath()}	
-	<li><a href="/appointment/overview">${_('app_np_list')}</a></li>
+  ${parent.buildNavipath()}
+  <li><a href="/appointment/overview">${_('app_np_list')}</a></li>
 </%def>
-% if h.hasRole(['admin_ka']):
 <div id="content_header_small">
   <div id="content_ueberschrift">
-${_('app_header_overview')}
+    ${_('app_header_overview')}
   </div>
+  % if h.hasRole(['admin_ka']):
   <div id="modusfield">
     <div class="actions">
-	<ul>
-		<li><a href="/appointment/create"> ${_('app_actions_link_newappointment')}</a></li>
-	</ul>
+      <ul>
+        <li><a href="/appointment/create"> ${_('app_actions_link_newappointment')}</a></li>
+      </ul>
     </div>
   </div>
+  % endif
 </div>
-% endif
-% if h.hasRole(['cm_ka']):
-<div id="content_header_small">
-  <div id="content_ueberschrift">
-${_('app_header_overview')}
-  </div>
-</div>
 <p>${_('app_con_list_all_appointments')}</p> 
-% endif
-<%include file="overview_body.mako" />
+<%include file="/appointments/appointmentlist.mako" />

Modified: trunk/waskaweb/templates/appointments/overview_body.mako
===================================================================
--- trunk/waskaweb/templates/appointments/overview_body.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/appointments/overview_body.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -1,89 +1,27 @@
 ## -*- coding: utf-8 -*-
-<table>
-	<tr>
-		<th class="table_date table_header_h">${_('app_overview_tbl_header_date')}</th>
-		<th class="table_description table_header_h">${_('app_overview_tbl_header_desc')}</th>
-		<th class="table_action table_header_h">${_('app_overview_tbl_header_actions')}</th>
-	</tr>
-% if h.hasRole(['cm_ka']):
-<!-- appointments for cm -->
-	<tr>
-		<td>07.12.2007</td>
-		<td>Akte pr&#252;fen </td>
-		<td class="table_action">
-			<a href="/appointment/show/5">${_('app_overview_body_table_show')}</a>
-			<a href="/appointment/delete/5">${_('app_overview_body_table_delete')}</a>
-		</td>
-	</tr>
-	<tr>
-		<td class="table_row_h">17.12.2007</td>
-		<td class="table_row_h">Auswertung Fallakten vorbereiten</td>
-		<td class="table_row_h table_action">
-			<a href="/appointment/show/6">${_('app_overview_body_table_show')}</a>
-			<a href="/appointment/delete/6">${_('app_overview_body_table_delete')}</a>
-		</td>
-	</tr>
-	<tr>
-		<td>21.12.2007</td>
-		<td>Weihnachtsfeier</td>
-		<td class="table_action">
-			<a href="/appointment/show/7">${_('app_overview_body_table_show')}</a>
-		</td>
-	</tr>
-	<tr>
-		<td class="table_row_h">14.01.2008</td>
-		<td class="table_row_h">Gespr&#228;ch mit Peter Koch</td>
-		<td class="table_row_h table_action">
-			<a href="/appointment/show/9">${_('app_overview_body_table_show')}</a>
-			<a href="/appointment/delete/9">${_('app_overview_body_table_delete')}</a>
-		</td>
-	</tr>
-% endif
-% if h.hasRole(['admin_ka']): 
-<!-- appointments for admin -->
-	<tr>
-		<td>21.12.2007</td>
-		<td>Weihnachtsfeier</td>
-		<td class="table_action" >
-			<a href="/appointment/show/7">${_('app_overview_body_table_show')}</a>
-			<a href="/appointment/delete/7">${_('app_overview_body_table_delete')}</a>
-		</td>
-	</tr>
-% endif
-
-<!-- appointments for adm, admin, cm -->
-</table>
-<!--
-<table>
+<%!  import waskaweb.lib.filters as F %>
+<table class="appointment">
   <tr>
-    <th width="100">${_('app_overview_tbl_header_date')}</th>
-    <th>${_('app_overview_tbl_header_desc')}</th>
-    <th>${_('app_overview_tbl_header_actions')}</th>
+    <th class="date table_header_h">${_('app_overview_tbl_header_date')}</th>
+    <th class="title table_header_h">${_('app_overview_tbl_header_desc')}</th>
+    <th class="action table_header_h">${_('app_overview_tbl_header_actions')}</th>
   </tr>
-  % for a in c.appointments:
+  % for appointment in c.appointmentlist.getDatasets():
   <tr>
-    <td>${a.date| F.NA, h}</td>
-    <td>${a.title| F.NA, h}</td>
-    <td class="table_action">
-      <a href="${h.url_for(controller='appointment', action='show', id=a.id)}">Anzeigen</a>
-      % if a.global_app:
-          % if h.hasRole(['admin_ka']):
-	      <a href="${h.url_for(controller='appointment', action='delete', id=a.id)}">Löschen</a>
-          % endif
-      % else:
-          % if h.hasRole(['cm_ka']):
-	      <a href="${h.url_for(controller='appointment', action='delete', id=a.id)}">Löschen</a>
-          % endif
-      % endif
+    <td class="date">${appointment.getStartDate('%d.%m.%Y')}</td>
+    <td class="title">${appointment.title | F.NA, h}</td>
+    <td class="action">
+     ${self.showAppointmentActions(appointment)}
     </td>
   </tr>
+  <tr>
+    <% description = F.shorten(F.H(appointment.description),120) %>
+    <td colspan="3" class="description">${description | F.NA}</td>
+  </tr>
   % endfor
-  % if len(c.appointments) <= 0:
+  % if len(c.appointmentlist.getDatasets()) <= 0:
   <tr>
-    <td colspan="3">
-      Es wurden keine Termine gefunden.
-    </td>
+    <td colspan="3">Keine Termine gefunden</td>
   </tr>
   % endif
 </table>
--->

Added: trunk/waskaweb/templates/appointments/remindlist_body.mako
===================================================================
--- trunk/waskaweb/templates/appointments/remindlist_body.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/appointments/remindlist_body.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,27 @@
+## -*- coding: utf-8 -*-
+<%!  import waskaweb.lib.filters as F %>
+<table class="appointment">
+  <tr>
+    <th class="date table_header_h">${_('app_overview_tbl_header_date')}</th>
+    <th class="title table_header_h">${_('app_overview_tbl_header_desc')}</th>
+    <th class="action table_header_h">${_('app_overview_tbl_header_actions')}</th>
+  </tr>
+  % for appointment in c.remindlist.getDatasets():
+  <tr>
+    <td class="date">${appointment.getStartDate('%d.%m.%Y')}</td>
+    <td class="title">${appointment.title | F.NA, h}</td>
+    <td class="action">
+     ${self.showAppointmentActions(appointment)}
+    </td>
+  </tr>
+  <tr>
+    <% description = F.shorten(F.H(appointment.description),120) %>
+    <td colspan="3" class="description">${description | F.NA}</td>
+  </tr>
+  % endfor
+  % if len(c.remindlist.getDatasets()) <= 0:
+  <tr>
+    <td colspan="3">Keine Wiedervorlagen gefunden</td>
+  </tr>
+  % endif
+</table>

Modified: trunk/waskaweb/templates/appointments/show.mako
===================================================================
--- trunk/waskaweb/templates/appointments/show.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/appointments/show.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -1,36 +1,26 @@
 <%inherit file="../main.mako" />
 <%def name="buildNavipath()">
-		${parent.buildNavipath()}
-        <li><a href="/appointment/overview">${_('app_np_list')}</a></li>
-      	<li><a href="/appointment/show/"></a>${_('app_np_show')}</li>
+${parent.buildNavipath()}
+  <li><a href="/appointment/overview">${_('app_np_list')}</a></li>
+  <li><a href="/appointment/show/"></a>${_('app_np_show')}</li>
 </%def>
 <div id="content_header_small">
   <div id="content_ueberschrift">
-  ${_('app_header_show')}
+    ${_('app_header_show')}
   </div>
   <div id="modusfield">
     <div class="actions">
-	<ul>
-		<li><a href="${h.url_for(controller='waska')}"> ${_('sm_menu_link_home_back')}
-            </a>
-          </li>
-	</ul>
+      <ul>
+        % if h.hasRole('admin_ka'):
+        <li>
+          <a href="${h.url_for(controller='/appointment', action='edit', id=c.appointment.id)}">${_('sm_menu_link_appointment_edit')}</a>
+        </li>
+        % endif
+        <li>
+          <a href="${h.url_for(controller='/appointment', action='overview', id=c.appointment.case_id)}">${_('menu_app_link_overview_back')}</a>
+        </li>
+      </ul>
     </div>
   </div>
 </div>
-
-<!-- Fake table -->
-<table>
-	<tbody><tr>
-		<td class="label">${_('app_table_date')}</td>
-		<td>07.12.2007</td>
-	</tr>
-	<tr>
-		<td class="label">${_('app_table_title')}</td>
-		<td>Wiedervorlage Akte</td>
-	</tr>
-	<tr>
-		<td class="label">${_('app_table_description')}</td>
-		<td>Akte von Herrn Bauer vorlegen und F&#246;rderma&#223;nahmen beraten.</td>
-	</tr>
-</tbody></table>
+<%include file="/appointments/show_body.mako" />

Added: trunk/waskaweb/templates/appointments/show_body.mako
===================================================================
--- trunk/waskaweb/templates/appointments/show_body.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/appointments/show_body.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,34 @@
+<%!  import waskaweb.lib.filters as F %>
+<table>
+  <tbody>
+    <tr>
+      <td class="label table_header_v table_width_long">${_('app_table_startdate')}</td>
+      <td class="table_row_v">${c.appointment.getStartDate('%d.%m.%Y %H:%M')}</td>
+    </tr>
+    <tr>
+      <td class="label">${_('app_table_enddate')}</td>
+      <td class="table_row_v_2">${c.appointment.getEndDate('%d.%m.%Y %H:%M')}</td>
+    </tr>
+    <tr>
+      <td class="label table_header_v">${_('app_table_duration')}</td>
+      <td class="table_row_v">${c.appointment.getDuration()}</td>
+    </tr>
+    <tr>
+      <td class="label">${_('app_form_type')}</td>
+        % if c.appointment.type == 0:
+          <td class="table_row_v_2">normaler Termin</td>
+        % else:
+          <td class="table_row_v_2">Wiedervorlage</td>
+        % endif
+    </tr>
+    <tr>
+      <td class="label table_header_v">${_('app_table_title')}</td>
+      <td class="table_row_v">${c.appointment.title | F.NA, h}</td>
+    </tr>
+    <tr>
+      <td class="label">${_('app_table_description')}</td>
+      <% description = F.H(c.appointment.description).replace('\n', '<br>') %>
+      <td class="table_row_v_2">${description | F.NA}</td>
+    </tr>
+  </tbody>
+</table>

Added: trunk/waskaweb/templates/casemanagement/appointmentlist.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/appointmentlist.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/appointmentlist.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,10 @@
+<%inherit file="/appointments/overview_body.mako" />
+<%def name="showAppointmentActions(appointment)">
+<a href="${h.url_for(controller='/case', action='showAppointment', id=appointment.id)}">
+  <img src="/images/icons/view_red.gif" border="0" alt="${_('cm_overview_a_show')}" title="${_('cm_overview_a_show')}"></a>
+% if h.hasRole(['cm_ka']):
+  <a href="${h.url_for(controller='/case', action='deleteAppointment', id=appointment.id, confirmed=0)}">
+    <img src="/images/icons/delete_red.gif" border="0" alt="${_('cm_overview_a_delete')}" title="${_('cm_overview_a_show')}">
+  </a>
+% endif
+</%def>

Modified: trunk/waskaweb/templates/casemanagement/appointments.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/appointments.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/appointments.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -1,25 +1,25 @@
 <%inherit file="main.mako" />
 <%def name="buildNavipath()">
-		${parent.buildNavipath()}
-	        <li><a href="/case/select/${session.get('case').id}/1">${_('cm_np_select')}</a></li>
-		<li><a href="/case/appointments/${session.get('case').id}">${_('app_np_list')}</a></li>
+  ${parent.buildNavipath()}
+  <li><a href="/case/select/${session.get('case').id}/1">${_('cm_np_select')}</a></li>
+  <li><a href="/case/appointments/${session.get('case').id}">${_('app_np_list')}</a></li>
 </%def>
 
 <div id="content_header_small">
   <div id="content_ueberschrift">
  ${_('app_header_overview')}
   </div>
-<!--
 % if h.hasRole(['cm_ka']):
   <div id="modusfield">
     <div class="actions">
-	<ul>
-		<li><a href="/case/newAppointment"> ${_('app_actions_link_newappointment')}</a></li>
-	</ul>
+      <ul>
+        <li><a href="${h.url_for(controller='/case', action='newAppointment', id=session.get('case').id)}"> ${_('app_actions_link_newappointment')}</a></li>
+      </ul>
     </div>
   </div>
-	% endif
--->
+% endif
 </div>
-
-<%include file="../appointments/overview_body.mako" />
+<h2>Wiedervorlagen</h2>
+<%include file="/casemanagement/reminderlist.mako" />
+<h2>Termine</h2>
+<%include file="/casemanagement/appointmentlist.mako" />

Modified: trunk/waskaweb/templates/casemanagement/caselist.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/caselist.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/caselist.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -27,7 +27,7 @@
             ${case.getEditor().last_name | F.NA, h}, ${case.getEditor().first_name[0] | F.NA, h}.
           </td>
         % else:
-          <td>${case.state.getAccessTime() | F.NA, h}</td>
+          <td>${case.state.getAccessTime('%d.%m.%y %H:%M') | F.NA, h}</td>
         % endif
         <td>
           % if h.hasRole(['cm_ka']):
@@ -74,7 +74,7 @@
             ${case.getEditor().last_name | F.NA, h}, ${case.getEditor().first_name[0] | F.NA, h}.
           </td>
         % else:
-          <td class="table_row_h">${case.state.getAccessTime() | F.NA, h}</td>
+          <td class="table_row_h">${case.state.getAccessTime('%d.%m.%y %H:%M') | F.NA, h}</td>
         % endif
         <td class="table_row_h">
           % if h.hasRole(['cm_ka']):

Added: trunk/waskaweb/templates/casemanagement/dialogs/confirm_delete_appointment.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/dialogs/confirm_delete_appointment.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/dialogs/confirm_delete_appointment.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,8 @@
+<%inherit file="../main.mako" />
+<%def name="buildNavipath()">
+	${parent.buildNavipath()}
+        <li><a href="/case/select/${session.get('case').id}/1">${_('cm_np_select')}</a></li>
+	<li><a href="/case/appointments/${session.get('case').id}">${_('menu_app_link_overview')}</a></li>
+	<li><a href="#">${_('app_np_delete')}</a></li>
+</%def>
+<%include file="../../dialogs/confirm.mako" />

Added: trunk/waskaweb/templates/casemanagement/dialogs/failed_anonymize.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/dialogs/failed_anonymize.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/dialogs/failed_anonymize.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,7 @@
+## -*- coding: utf-8 -*- 
+<%inherit file="/main.mako" />
+<%def name="buildNavipath()">
+  ${parent.buildNavipath()}
+  <li><a href="#">${_('cm_np_anonymize')}</a></li>
+</%def>
+<%include file="../../dialogs/failed.mako" />

Added: trunk/waskaweb/templates/casemanagement/dialogs/failed_delete_appointment.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/dialogs/failed_delete_appointment.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/dialogs/failed_delete_appointment.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,9 @@
+## -*- coding: utf-8 -*- 
+<%inherit file="../main.mako" />
+<%def name="buildNavipath()">
+	${parent.buildNavipath()}
+        <li><a href="/case/select/${session.get('case').id}/1">${_('cm_np_select')}</a></li>
+	<li><a href="/case/appointments/${session.get('case').id}">${_('menu_app_link_overview')}</a></li>
+	<li><a href="#">${_('app_np_delete')}</a></li>
+</%def>
+<%include file="../../dialogs/failed.mako" />

Added: trunk/waskaweb/templates/casemanagement/dialogs/failed_xml_import.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/dialogs/failed_xml_import.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/dialogs/failed_xml_import.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,7 @@
+## -*- coding: utf-8 -*- 
+<%inherit file="/main.mako" />
+<%def name="buildNavipath()">
+  ${parent.buildNavipath()}
+  <li><a href="#">${_('cm_np_anonymize')}</a></li>
+</%def>
+<%include file="../../dialogs/failed.mako" />

Added: trunk/waskaweb/templates/casemanagement/dialogs/success_create_appointment.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/dialogs/success_create_appointment.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/dialogs/success_create_appointment.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,9 @@
+## -*- coding: utf-8 -*- 
+<%inherit file="../main.mako" />
+<%def name="buildNavipath()">
+  ${parent.buildNavipath()}
+  <li><a href="/case/select/${session.get('case').id}/1">${_('cm_np_select')}</a></li>
+  <li><a href="/case/appointments/${session.get('case').id}">${_('app_np_list')}</a></li>
+  <li><a href="#">${_('app_np_new')}</a></li>
+</%def>
+<%include file="../../dialogs/success.mako" />

Added: trunk/waskaweb/templates/casemanagement/dialogs/success_delete_appointment.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/dialogs/success_delete_appointment.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/dialogs/success_delete_appointment.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,9 @@
+## -*- coding: utf-8 -*- 
+<%inherit file="../main.mako" />
+<%def name="buildNavipath()">
+	${parent.buildNavipath()}
+        <li><a href="/case/select/${session.get('case').id}/1">${_('cm_np_select')}</a></li>
+	<li><a href="/case/appointments/${session.get('case').id}">${_('menu_app_link_overview')}</a></li>
+	<li><a href="#">${_('app_np_delete')}</a></li>
+</%def>
+<%include file="../../dialogs/success.mako" />

Added: trunk/waskaweb/templates/casemanagement/dialogs/success_edit_appointment.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/dialogs/success_edit_appointment.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/dialogs/success_edit_appointment.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,9 @@
+## -*- coding: utf-8 -*- 
+<%inherit file="../main.mako" />
+<%def name="buildNavipath()">
+  ${parent.buildNavipath()}
+  <li><a href="/case/select/${session.get('case').id}/1">${_('cm_np_select')}</a></li>
+  <li><a href="/case/appointments/${session.get('case').id}">${_('app_np_list')}</a></li>
+  <li><a href="#">${_('app_np_edit')}</a></li>
+</%def>
+<%include file="../../dialogs/success.mako" />

Added: trunk/waskaweb/templates/casemanagement/dialogs/success_import_anon.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/dialogs/success_import_anon.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/dialogs/success_import_anon.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,7 @@
+## -*- coding: utf-8 -*- 
+<%inherit file="/main.mako" />
+<%def name="buildNavipath()">
+  ${parent.buildNavipath()}
+  <li><a href="#">${_('cm_np_import')}</a></li>
+</%def>
+<%include file="../../dialogs/success.mako" />

Added: trunk/waskaweb/templates/casemanagement/dialogs/success_xml_import.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/dialogs/success_xml_import.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/dialogs/success_xml_import.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,7 @@
+## -*- coding: utf-8 -*- 
+<%inherit file="/main.mako" />
+<%def name="buildNavipath()">
+  ${parent.buildNavipath()}
+  <li><a href="#">${_('cm_np_import')}</a></li>
+</%def>
+<%include file="../../dialogs/success.mako" />

Modified: trunk/waskaweb/templates/casemanagement/digest.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/digest.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/digest.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -1,3 +1,4 @@
+## -*- coding: utf-8 -*-
 <%inherit file="main.mako" />
 <%!  import waskaweb.lib.filters as F %>
 <%def name="buildNavipath()">
@@ -11,10 +12,48 @@
 ${_('cm_header_digest')}
   </div>
 </div>
-<!--<div class="additional_information">
-<div class="additional_information_img"><img src="/images/info_small.png"  alt="Information"/> </div>
-<div class="additional_information_p">${_('cm_digest_con_digest_dossier')}<br></div>
-</div>-->
+% if c.daysToMaxSavetime < 0:
+<div class="dialog">
+  % if c.finished:
+    <h1><img src="/images/alert.png" alt="achtung"/>Maximale Speicherdauer überschritten!</h1>
+    <p>
+    Nach Abschluss der Nachbetreuungsphase des Jugendlichen ist eine weitere
+    Aufbewahrung der Fallakte nur bis zur maximalen Speicherdauer zulässig. Die
+    maximale Speicherdauer (${c.maxsavetime} Tage) wurde seit
+    ${abs(c.daysToMaxSavetime)} Tagen überschritten! <strong>Es wird empfohlen,
+    die Fallakte zu löschen!</strong> Alternativ können Sie diese auch
+    anonymisieren.
+    </p>
+  % elif c.canceled:
+    <h1><img src="/images/alert.png" alt="achtung"/>Maximale Speicherdauer überschritten!</h1>
+    <p>
+    Nach Abbruch des Case-Managements ist eine weitere Aufbewahrung der
+    Fallakte nur bis zur maximalen Speicherdauer zulässig. Die maximale
+    Speicherdauer (${c.maxsavetime} Tage) wurde seit
+    ${abs(c.daysToMaxSavetime)} Tagen überschritten! <strong>Es wird empfohlen,
+    die Fallakte zu löschen!</strong> Alternativ können Sie diese auch
+    anonymisieren.
+    </p>
+  % else:
+    <h1><img src="/images/question.png" alt="achtung"/>Inaktiver Fall?</h1>
+    <p>
+    Für die Fallakte konnte seit ${abs(c.daysToMaxSavetime)+int(c.maxsavetime)}
+    Tagen keine Aktivität festgestellt werden. Bitte prüfen Sie, ob der Fall
+    noch aktiv bearbeitet wird.
+    </p>
+  % endif
+</div>
+% else:
+<p><strong>Letzte Bearbeitung: ${c.last_access} </strong>
+  % if c.daysToMaxSavetime <= 14:
+    % if c.finished or c.canceled:
+      (Tage bis zum Überschreiten der maximalen Speicherdauer: ${c.daysToMaxSavetime})
+    % else:
+      (Tage bis zur nächsten automatischen Wiedervorlage der Fallakte: ${c.daysToMaxSavetime})
+    % endif
+  % endif
+</p>
+% endif
 <h2>${_('cm_header_digest_youth')}</h2>
 <table class="digest_table_left">
 	<tr>

Modified: trunk/waskaweb/templates/casemanagement/downloadCSV.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/downloadCSV.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/downloadCSV.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -13,7 +13,7 @@
 
 <div class="export_box_dialog">
 <p class="export_p"><strong class="export_number">1. </strong> CSV-Datei herunterladen:
-<a class="button export1" href="${c.download_link}/fallakten-export.csv">Herunterladen</a></p>
+<a class="button export1" href="${c.download_link}/fallakten-export-csv.txt">Herunterladen</a></p>
 </div>
 
 <div class="export_box_dialog">

Added: trunk/waskaweb/templates/casemanagement/downloadXLS.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/downloadXLS.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/downloadXLS.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,23 @@
+## -*- coding: utf-8 -*-
+<%inherit file="../main.mako" />
+<%!  import waskaweb.lib.filters as F %>
+<%def name="buildNavipath()">
+  ${parent.buildNavipath()}
+  <li><a href="/case">${_('cm_np_root')}</a></li>
+  <li><a href="/case_overview">${_('cm_np_overview')}</a></li>
+</%def>
+
+<div class="dialog">
+
+<h1><img src="/images/confirmation.png" alt="Erledigt"/>${c.success_for | F.NA, h}</h1>
+
+<div class="export_box_dialog">
+<p class="export_p"><strong class="export_number">1. </strong> XLS-Datei herunterladen:
+<a class="button export1" href="${c.download_link}/fallakten-export.xls">Herunterladen</a></p>
+</div>
+
+<div class="export_box_dialog">
+<p class="export_p"><strong class="export_number">2.</strong> Zur Übersicht zurückkehren:
+<a class="button export" href="${c.overview_link}">Übersicht</a></p>
+</div>
+

Added: trunk/waskaweb/templates/casemanagement/downloadXML.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/downloadXML.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/downloadXML.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,23 @@
+## -*- coding: utf-8 -*-
+<%inherit file="../main.mako" />
+<%!  import waskaweb.lib.filters as F %>
+<%def name="buildNavipath()">
+  ${parent.buildNavipath()}
+  <li><a href="/case">${_('cm_np_root')}</a></li>
+  <li><a href="/case_overview">${_('cm_np_overview')}</a></li>
+</%def>
+
+<div class="dialog">
+
+<h1><img src="/images/confirmation.png" alt="Erledigt"/>${c.success_for | F.NA, h}</h1>
+
+<div class="export_box_dialog">
+<p class="export_p"><strong class="export_number">1. </strong> XML-Datei herunterladen:
+<a class="button export1" target="_blank" href="${c.download_link}/fallakten-export.xml">Herunterladen</a></p>
+</div>
+
+<div class="export_box_dialog">
+<p class="export_p"><strong class="export_number">2.</strong> Zur Übersicht zurückkehren:
+<a class="button export" href="${c.overview_link}">Übersicht</a></p>
+</div>
+

Added: trunk/waskaweb/templates/casemanagement/editAppointment.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/editAppointment.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/editAppointment.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,37 @@
+<%inherit file="/casemanagement/main.mako" />
+<%
+formular_labels = {'start_date' : 'app_form_startdate',
+                   'start_time' : 'app_form_startdate',
+                   'end_date'   : 'app_form_enddate',
+                   'end_time'   : 'app_form_endtime',
+                   'title'      : 'app_form_title'
+                  }
+%>
+<%def name="buildNavipath()">
+  ${parent.buildNavipath()}
+  <li><a href="/case/select/${session.get('case').id}/1">${_('cm_np_select')}</a></li>
+  <li><a href="/case/appointments/${c.appointment.case_id}">${_('app_np_list')}</a></li>
+  <li><a href="#"></a>${_('app_np_edit')}</li>
+</%def>
+<div id="content_header_small">
+  <div id="content_ueberschrift">
+    ${_('app_header_show')}
+  </div>
+  <div id="modusfield">
+    <div class="actions">
+      <ul>
+        <li>
+          <a href="${h.url_for(controller='/case', action='showAppointment', id=c.appointment.id)}">${_('menu_app_link_show_back')}</a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+${self.buildFormErrors(formular_labels)}
+<div id="admin_new_user">
+<div id="waska_form">
+<form action="${h.url_for(controller='case', action='editAppointmentAction')}" method="POST">
+<%include file="../appointments/edit_body.mako" />
+</form>
+</div>
+</div>

Added: trunk/waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/evaluation/evaluation_result_1.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,118 @@
+## -*- coding: utf-8 -*-
+<%inherit file="../../main.mako" />
+<%!  import waskaweb.lib.filters as F %>
+<%def name="buildNavipath()">
+  ${parent.buildNavipath()}
+  <li><a href="/case">${_('cm_np_root')}</a></li>
+  <li><a href="/case/evaluate/">${_('cm_np_evaluate')}</a></li>
+  <li><a href="/evaluate/evaluate/">${_('cm_np_evaluate_result')}</a></li>
+</%def>
+<h1><a name="top">${_('cm_header_evaluate_result')}</a></h1>
+<h2>${_('eval_group_header_all')}</h2>
+<ul>
+  <li><a href="${h.url_for(controller="/evaluate", action="evaluate", id=1)}#eval_1">${_('cm_eval_summary_header_1')}</a></li>
+  <li><a href="${h.url_for(controller="/evaluate", action="evaluate", id=1)}#eval_2">${_('cm_eval_summary_header_2')}</a></li>
+</ul>
+<h2>${_('eval_group_header_incm')}</h2>
+<ul>
+  <li><a href="${h.url_for(controller="/evaluate", action="evaluate", id=2)}#eval_3">${_('cm_eval_summary_header_3')}</a></li>
+  <li><a href="${h.url_for(controller="/evaluate", action="evaluate", id=2)}#eval_4">${_('cm_eval_summary_header_4')}</a></li>
+  <li><a href="${h.url_for(controller="/evaluate", action="evaluate", id=2)}#eval_5">${_('cm_eval_summary_header_5')}</a></li>
+  <li><a href="${h.url_for(controller="/evaluate", action="evaluate", id=2)}#eval_6">${_('cm_eval_summary_header_6')}</a></li>
+</ul>
+<h2>${_('eval_group_header_finished')}</h2>
+<ul>
+  <li><a href="${h.url_for(controller="/evaluate", action="evaluate", id=3)}#eval_7">${_('cm_eval_summary_header_7')}</a></li>
+</ul>
+
+<h1>${_('eval_group_header_all')}</h1>
+<p>
+${_('eval_group_note_all')}
+</p>
+<div class="evaluation odd-row first-row">
+<h3><a name="eval_1">${_('cm_eval_summary_header_1')}</a></h3>
+<table class="evaluation">
+  <tr>
+    <th class="table_header_h table_width_long">${_('cm_eval_table_adolescent')}</th>
+    <th class="table_header_h table_width_mid_s">${_('cm_eval_table_number')}</th>
+    <th class="table_header_h table_width_mid_s">${_('cm_eval_table_percent')}</th>
+    <th class="table_header_h table_width_mid_s">&nbsp;</th>
+  </tr>
+  <tr>
+    <td>${_('cm_eval_table_consult_customer')}</td>
+    <td>${c.eval_1_total| F.NA, h}</td>
+    <td>(100%)</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td class="label table_row_v_12">${_('cm_eval_table_taken_over_to_cm')}</td>
+    <td class="table_row_v_12" >${c.eval_1_cm| F.NA, h}</td>
+    <td class="table_row_v_12">(${c.eval_1_percent| F.NA, h}%)</td>
+    <td class="table_row_v_12 table_width_mid_s">&nbsp;</td>
+  </tr>
+</table>
+<a href="#top">${_('cm_eval_table_to_overview')}</a> | <a href="/evaluate/exportEvaluation_1/auswertung_1_1.csv">${_('cm_eval_table_export_analysis')}</a>
+</div>
+<div class="evaluation odd-row">
+<h3><a name="eval_2">${_('cm_eval_summary_header_2')}</a></h3>
+<h4>${_('cm_eval_header_access_youngster_to_agency')}</h4>
+<table class="evaluation">
+   <tr>
+    <th class="table_header_h table_width_long">${_('cm_eval_table_access')}</th>
+    <th class="table_header_h table_width_mid_s">${_('cm_eval_table_number')}</th>
+    <th class="table_header_h table_width_mid_s">${_('cm_eval_table_percent')}</th>
+    <th class="table_header_h table_width_mid_s">&nbsp;</th>
+  </tr> 
+<% idset = 0 %>
+% for r in c.eval_4.itervalues():
+  % if idset==0:
+   <tr>
+     <td>${r[0]}</td>
+     <td>${r[1]| F.NA, h}</td>
+     <td>(${r[2]| F.NA, h}%)</td>
+     <td></td>
+   </tr>
+   <% idset = 1 %>
+    % else:
+    <tr>
+      <td class="table_row_v_12 table_width_long">${r[0]}</td>
+      <td class="table_row_v_12">${r[1]| F.NA, h}</td>
+      <td class="table_row_v_12">(${r[2]| F.NA, h}%)</td>
+      <td class="table_row_v_12 table_width_mid_s ">&nbsp;</td>
+    </tr>
+    <% idset = 0 %>
+  % endif
+% endfor 
+</table>
+<a href="#top">${_('cm_eval_table_to_overview')}</a> | <a href="/evaluate/exportEvaluation_4/auswertung_1_2_1.csv">${_('cm_eval_table_export_analysis')}</a>
+<h4>${_('cm_eval_head_law_access_agency')}</h4>
+<table class="evaluation">
+   <tr>
+    <th class="table_header_h table_width_mid_l">${_('cm_eval_table_law')}</th>
+    <th class="table_header_h table_width_mid_s">${_('cm_eval_table_number')}</th>
+    <th class="table_header_h table_width_mid_s">${_('cm_eval_table_percent')}</th>
+    <th class="table_header_h table_width_mid_l">&nbsp;</th>
+  </tr> 
+<% idset = 0 %>
+% for r in c.eval_5.itervalues():
+  % if idset==0:
+   <tr>
+     <td>${r[0]| F.NA, h}</td>
+     <td>${r[1]| F.NA, h}</td>
+     <td>(${r[2]| F.NA, h}%)</td>
+     <td></td>
+   </tr>
+   <% idset = 1 %>
+  % else:
+   <tr>
+     <td class="table_row_v_12">${r[0]| F.NA, h}</td>
+     <td class="table_row_v_12">${r[1]| F.NA, h}</td>
+     <td class="table_row_v_12">(${r[2]| F.NA, h}%)</td>
+     <td class="table_row_v_12 table_width_mid_l">&nbsp;</td>
+   </tr>
+   <% idset = 0 %>
+  % endif
+% endfor 
+</table>
+<a href="#top">${_('cm_eval_table_to_overview')}</a> | <a href="/evaluate/exportEvaluation_5/auswertung_1_2_2.csv">${_('cm_eval_table_export_analysis')}</a>
+</div>

Added: trunk/waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/evaluation/evaluation_result_2.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,196 @@
+## -*- coding: utf-8 -*-
+<%inherit file="../../main.mako" />
+<%!  import waskaweb.lib.filters as F %>
+<%def name="buildNavipath()">
+  ${parent.buildNavipath()}
+  <li><a href="/case">${_('cm_np_root')}</a></li>
+  <li><a href="/case/evaluate/">${_('cm_np_evaluate')}</a></li>
+  <li><a href="/evaluate/evaluate/">${_('cm_np_evaluate_result')}</a></li>
+</%def>
+<h1><a name="top">${_('cm_header_evaluate_result')}</a></h1>
+<h2>${_('eval_group_header_all')}</h2>
+<ul>
+  <li><a href="${h.url_for(controller="/evaluate", action="evaluate", id=1)}#eval_1">${_('cm_eval_summary_header_1')}</a></li>
+  <li><a href="${h.url_for(controller="/evaluate", action="evaluate", id=1)}#eval_2">${_('cm_eval_summary_header_2')}</a></li>
+</ul>
+<h2>${_('eval_group_header_incm')}</h2>
+<ul>
+  <li><a href="${h.url_for(controller="/evaluate", action="evaluate", id=2)}#eval_3">${_('cm_eval_summary_header_3')}</a></li>
+  <li><a href="${h.url_for(controller="/evaluate", action="evaluate", id=2)}#eval_4">${_('cm_eval_summary_header_4')}</a></li>
+  <li><a href="${h.url_for(controller="/evaluate", action="evaluate", id=2)}#eval_5">${_('cm_eval_summary_header_5')}</a></li>
+  <li><a href="${h.url_for(controller="/evaluate", action="evaluate", id=2)}#eval_6">${_('cm_eval_summary_header_6')}</a></li>
+</ul>
+<h2>${_('eval_group_header_finished')}</h2>
+<ul>
+  <li><a href="${h.url_for(controller="/evaluate", action="evaluate", id=3)}#eval_7">${_('cm_eval_summary_header_7')}</a></li>
+</ul>
+
+<h1>${_('eval_group_header_incm')}</h1>
+<p>
+${_('eval_group_note_incm')}
+</p>
+<div class="evaluation even-row first-row"> 
+<h3><a name="eval_3">${_('cm_eval_summary_header_3')}</a></h3>
+<table class="evaluation">
+  <tr>
+    <th class="table_header_h table_width_mid_s">${_('cm_eval_table_month')}</th>
+    <th class="table_header_h table_width_mid_l">${_('cm_eval_table_completed')}</th>
+    <th class="table_header_h table_width_mid_l">${_('cm_eval_table_aborted')}</th>
+    <th class="table_header_h table_width_mid_s" >&nbsp;</th>
+  </tr>
+  <% idset = 0 %>
+  % for r in c.eval_10:
+   % if idset==0:
+   <tr>
+    <td>${r[0]}</td>
+    <td>${r[1]| F.NA, h} (${r[2]| F.NA, h}%)</td>
+    <td>${r[3]| F.NA, h} (${r[4]| F.NA, h}%)</td>
+    <td></td>
+  </tr>
+  <% idset = 1 %>
+  % else:
+   <tr>
+     <td class="table_row_v_12">${r[0]}</td>
+     <td class="table_row_v_12">${r[1]| F.NA, h} (${r[2]| F.NA, h}%)</td>
+     <td class="table_row_v_12">${r[3]| F.NA, h} (${r[4]| F.NA, h}%)</td>
+     <td class="table_row_v_12 table_width_mid_s">&nbsp;</td>
+   </tr>
+  <% idset = 0 %>
+  % endif
+  % endfor
+</table>
+<a href="#top">${_('cm_eval_table_to_overview')}</a> | <a href="/evaluate/exportEvaluation_10/auswertung_2_1.csv">${_('cm_eval_table_export_analysis')}</a>
+</div>
+<div class="evaluation odd-row ">
+<h3><a name="eval_4">${_('cm_eval_summary_header_4')}</a></h3>
+<h4>${_('cm_eval_header_on_gender')} </h4>
+<table class="evaluation">
+  <tr>
+    <th class="table_header_h table_width_mid_s">${_('cm_eval_table_gender')}</th>
+    <th class="table_header_h table_width_mid_s">${_('cm_eval_table_number')}</th>
+    <th class="table_header_h table_width_mid_s">${_('cm_eval_table_percent')}</th>
+    <th class="table_header_h table_width_long">&nbsp;</th>
+  </tr>
+  <tr>
+    <td>${_('cm_eval_label_male')}</td>
+    <td>${c.eval_2_m[0]| F.NA, h}</td>
+    <td>(${c.eval_2_m[1]| F.NA, h}%)</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td class="table_row_v_12">${_('cm_eval_label_female')}</td>
+    <td class="table_row_v_12">${c.eval_2_w[0]| F.NA, h}</td>
+    <td class="table_row_v_12">(${c.eval_2_w[1]| F.NA, h}%)</td>
+    <td class="table_row_v_12 table_width_long">&nbsp;</td>
+  </tr>
+  <tr>
+    <td>${_('cm_eval_label_intersexual')}</td>
+    <td>${c.eval_2_i[0]| F.NA, h}</td>
+    <td>(${c.eval_2_i[1]| F.NA, h}%)</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td class="table_row_v_12">${_('cm_eval_label_unknown')}</td>
+    <td class="table_row_v_12">${c.eval_2_u[0]| F.NA, h}</td>
+    <td class="table_row_v_12">(${c.eval_2_u[1]| F.NA, h}%)</td>
+    <td class="table_row_v_12 table_width_long">&nbsp;</td>
+  </tr>
+</table>
+<a href="#top">${_('cm_eval_table_to_overview')}</a> | <a href="/evaluate/exportEvaluation_2/auswertung_2_2_1.csv">${_('cm_eval_table_export_analysis')}</a>
+<h4>${_('cm_eval_header_on_age')}</h4>
+<table class="evaluation">
+  <tr>
+    <th class="table_header_h table_width_mid_s">${_('cm_eval_table_age')}</th>
+    <th class="table_header_h table_width_mid_s">${_('cm_eval_table_number')}</th>
+    <th class="table_header_h table_width_mid_s">${_('cm_eval_table_percent')}</th>
+    <th class="table_header_h table_width_long">&nbsp;</th>
+  </tr>
+<% idset = 0 %>
+% for v in c.eval_8:
+  % if idset==0:
+  <tr>
+    <td>${v[0]| F.NA, h}</td>
+    <td>${v[1]| F.NA, h}</td>
+    <td>${v[2]| F.NA, h}%</td>
+  <td></td>
+  </tr>
+  <% idset = 1 %>
+  % else:
+  <tr>
+    <td class="table_row_v_12">${v[0]| F.NA, h}</td>
+    <td class="table_row_v_12">${v[1]| F.NA, h}</td>
+    <td class="table_row_v_12">${v[2]| F.NA, h}%</td>
+    <td class="table_row_v_12 table_width_long">&nbsp;</td>
+  </tr>
+  <% idset = 0 %>
+  % endif
+% endfor
+</table>
+<a href="#top">${_('cm_eval_table_to_overview')}</a> | <a href="/evaluate/exportEvaluation_8/auswertung_2_2_2.csv">${_('cm_eval_table_export_analysis')}</a>
+</div>
+<div class="evaluation even-row">
+<h3><a name="eval_5">${_('cm_eval_summary_header_5')| F.NA, h}</a></h3>
+<table class="evaluation">
+  <tr>
+    <th class="table_header_h table_width_long">${_('cm_eval_table_category')}</th>
+    <th class="table_header_h table_width_mid_s">${_('cm_eval_table_number')}</th>
+    <th class="table_header_h table_width_mid_s">${_('cm_eval_table_percent')}</th>
+    <th class="table_header_h table_width_mid_s">&nbsp;</th>
+  </tr>
+  <tr>
+    <td>${_('cm_eval_label_migration_background')}</td>
+    <td>${c.eval_3[0][0]| F.NA, h}</td>
+    <td>(${c.eval_3[0][1]| F.NA, h}%)</td>
+    <td class="table_width_mid_s"></td>
+  </tr>
+  <tr>
+    <td>${_('cm_eval_label_no_migration_background')}</td>
+    <td>${c.eval_3[1][0]| F.NA, h}</td>
+    <td>(${c.eval_3[1][1]| F.NA, h}%)</td>
+    <td class="table_width_mid_s"></td>
+  </tr>
+  <tr>
+    <td>${_('cm_eval_label_ka_migration_background')}</td>
+    <td>${c.eval_3[2][0]| F.NA, h}</td>
+    <td>(${c.eval_3[2][1]| F.NA, h}%)</td>
+    <td class="table_width_mid_s"></td>
+  </tr>
+</table>
+<div class="eval_note">
+    ${_('cm_eval_note_ka_migration_background')}
+</div>
+  <a href="#top">${_('cm_eval_table_to_overview')}</a> | <a href="/evaluate/exportEvaluation_3/auswertung_2_3.csv">${_('cm_eval_table_export_analysis')}</a>
+</div>
+<div class="evaluation even-row">
+<h3><a name="eval_6">${_('cm_eval_summary_header_6')}</a></h3>
+<table class="evaluation">
+  <tr>
+    <th class="table_header_h table_width_long">${_('cm_eval_table_offer')}</th>
+    <th class="table_header_h table_width_mid_s">${_('cm_eval_table_number')}</th>
+    <th class="table_header_h table_width_mid_s">${_('cm_eval_table_percent')}</th>
+    <th class="table_header_h table_width_mid_s">&nbsp;</th>
+  </tr>
+<% idset = 0 %>
+% for r in c.eval_9:
+  % if idset==0:
+  <tr>
+    <td>${r[0]| F.NA, h}</td>
+    <td>${r[1]| F.NA, h}</td>
+    <td>(${r[2]| F.NA, h}%)</td>
+    <td></td>
+  </tr>
+  <% idset = 1 %>
+  % else:
+   <tr>
+     <td class="table_row_v_12">${r[0]| F.NA, h}</td>
+     <td class="table_row_v_12">${r[1]| F.NA, h}</td>
+     <td class="table_row_v_12">(${r[2]| F.NA, h}%)</td>
+     <td class="table_row_v_12 table_width_mid_s">&nbsp;</td>
+   </tr>
+   <% idset = 0 %>
+  % endif
+% endfor 
+</table>
+<div class="eval_note">${_('eval6_note')}</div>
+<a href="#top">${_('cm_eval_table_to_overview')}</a> | <a href="/evaluate/exportEvaluation_9/auswertung_2_4.csv">${_('cm_eval_table_export_analysis')}</a>
+</div>

Added: trunk/waskaweb/templates/casemanagement/evaluation/evaluation_result_3.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/evaluation/evaluation_result_3.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/evaluation/evaluation_result_3.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,94 @@
+## -*- coding: utf-8 -*-
+<%inherit file="../../main.mako" />
+<%!  import waskaweb.lib.filters as F %>
+<%def name="buildNavipath()">
+  ${parent.buildNavipath()}
+  <li><a href="/case">${_('cm_np_root')}</a></li>
+  <li><a href="/case/evaluate/">${_('cm_np_evaluate')}</a></li>
+  <li><a href="/evaluate/evaluate/">${_('cm_np_evaluate_result')}</a></li>
+</%def>
+<h1><a name="top">${_('cm_header_evaluate_result')}</a></h1>
+<h2>${_('eval_group_header_all')}</h2>
+<ul>
+  <li><a href="${h.url_for(controller="/evaluate", action="evaluate", id=1)}#eval_1">${_('cm_eval_summary_header_1')}</a></li>
+  <li><a href="${h.url_for(controller="/evaluate", action="evaluate", id=1)}#eval_2">${_('cm_eval_summary_header_2')}</a></li>
+</ul>
+<h2>${_('eval_group_header_incm')}</h2>
+<ul>
+  <li><a href="${h.url_for(controller="/evaluate", action="evaluate", id=2)}#eval_3">${_('cm_eval_summary_header_3')}</a></li>
+  <li><a href="${h.url_for(controller="/evaluate", action="evaluate", id=2)}#eval_4">${_('cm_eval_summary_header_4')}</a></li>
+  <li><a href="${h.url_for(controller="/evaluate", action="evaluate", id=2)}#eval_5">${_('cm_eval_summary_header_5')}</a></li>
+  <li><a href="${h.url_for(controller="/evaluate", action="evaluate", id=2)}#eval_6">${_('cm_eval_summary_header_6')}</a></li>
+</ul>
+<h2>${_('eval_group_header_finished')}</h2>
+<ul>
+  <li><a href="${h.url_for(controller="/evaluate", action="evaluate", id=3)}#eval_7">${_('cm_eval_summary_header_7')}</a></li>
+</ul>
+
+<h1>${_('eval_group_header_finished')}</h1>
+<p>
+${_('eval_group_note_finished')}
+</p>
+<div class="evaluation odd-row first-row">
+<h3><a name="eval_7">${_('cm_eval_summary_header_7')}</a></h3>
+<h4>${_('cm_eval_head_where_to_place_youngster')}</h4>
+<table class="evaluation">
+   <tr>
+    <th class="table_header_h table_width_mid_l">${_('cm_eval_table_place')}</th>
+    <th class="table_header_h table_width_mid_s">${_('cm_eval_table_number')}</th>
+    <th class="table_header_h table_width_mid_s">${_('cm_eval_table_percent')}</th>
+    <th class="table_header_h table_width_mid_l">&nbsp;</th>
+  </tr>
+<% idset = 0 %>
+% for r in c.eval_6.itervalues():
+  % if idset==0:
+   <tr>
+     <td>${r[0]| F.NA, h}</td>
+     <td>${r[1]| F.NA, h}</td>
+     <td>(${r[2]| F.NA, h}%)</td>
+     <td></td>
+   </tr>
+   <% idset = 1 %>
+  % else:
+   <tr>
+     <td class="table_row_v_12">${r[0]| F.NA, h}</td>
+     <td class="table_row_v_12">${r[1]| F.NA, h}</td>
+     <td class="table_row_v_12">(${r[2]| F.NA, h}%)</td>
+     <td class="table_row_v_12 table_width_mid_l">&nbsp;</td>
+   </tr>
+   <% idset = 0 %>
+ % endif
+% endfor 
+</table>
+<a href="#top">${_('cm_eval_table_to_overview')}</a> | <a href="/evaluate/exportEvaluation_6/auswertung_3_1_1.csv">${_('cm_eval_table_export_analysis')}</a>
+<h4>${_('cm_eval_header_law_changed_after_place')}</h4>
+<table class="evaluation">
+   <tr>
+    <th class="table_header_h table_width_mid_l">${_('cm_eval_table_law_change')}</th>
+    <th class="table_header_h table_width_mid_s">${_('cm_eval_table_number')}</th>
+    <th class="table_header_h table_width_mid_s">${_('cm_eval_table_percent')}</th>
+    <th class="table_header_h table_width_mid_l">&nbsp;</th>
+  </tr>
+<% idset = 0 %>
+% for r in c.eval_7.itervalues():
+  % if idset==0:
+   <tr>
+     <td>${r[0]| F.NA, h}</td>
+     <td>${r[1]| F.NA, h}</td>
+     <td>(${r[2]| F.NA, h}%)</td>
+     <td></td>
+   </tr>
+   <% idset = 1 %>
+   % else:
+   <tr>
+     <td class="table_row_v_12">${r[0]| F.NA, h}</td>
+     <td class="table_row_v_12">${r[1]| F.NA, h}</td>
+     <td class="table_row_v_12">(${r[2]| F.NA, h}%)</td>
+     <td class="table_row_v_12 table_width_mid_l">&nbsp;</td>
+   </tr>
+   <% idset = 0 %>
+ % endif
+% endfor 
+</table>
+<a href="#top">${_('cm_eval_table_to_overview')}</a> | <a href="/evaluate/exportEvaluation_7/auswertung_3_1_2.csv">${_('cm_eval_table_export_analysis')}</a>
+</div>

Deleted: trunk/waskaweb/templates/casemanagement/evaluation_result.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/evaluation_result.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/evaluation_result.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -1,400 +0,0 @@
-## -*- coding: utf-8 -*-
-<%inherit file="../main.mako" />
-<%!  import waskaweb.lib.filters as F %>
-<%def name="buildNavipath()">
-  ${parent.buildNavipath()}
-  <li><a href="/case">${_('cm_np_root')}</a></li>
-  <li><a href="/case/evaluate/">${_('cm_np_evaluate')}</a></li>
-  <li><a href="/evaluate/evaluate/">${_('cm_np_evaluate_result')}</a></li>
-</%def>
-<h1><a name="top">${_('cm_header_evaluate_result')}</a></h1>
-<ul>
-  <li><a href="#eval_1">${_('cm_eval_summary_header_1')}</a></li>
-  <li><a href="#eval_2">${_('cm_eval_summary_header_2')}</a></li>
-  <li><a href="#eval_3">${_('cm_eval_summary_header_3')}</a></li>
-  <li><a href="#eval_4">${_('cm_eval_summary_header_4')}</a></li>
-  <li><a href="#eval_5">${_('cm_eval_summary_header_5')}</a></li>
-  <li><a href="#eval_6">${_('cm_eval_summary_header_6')}</a></li>
-  <li><a href="#eval_7">${_('cm_eval_summary_header_7')}</a></li>
-</ul>
-<!--
-<div class="actions">
-<ul>
-  <li><a href="/evaluate/exportEvaluation_1">${_('cm_actions_link_export_evaluate')}</a></li>
-  <li><a href="/evaluate/exportEvaluation_10">${_('cm_actions_link_export_evaluate')}</a></li>
-  <li><a href="/evaluate/exportEvaluation_2">${_('cm_actions_link_export_evaluate')}</a></li>
-  <li><a href="/evaluate/exportEvaluation_8">${_('cm_actions_link_export_evaluate')}</a></li>
-  <li><a href="/evaluate/exportEvaluation_3">${_('cm_actions_link_export_evaluate')}</a></li>
-  <li><a href="/evaluate/exportEvaluation_4">${_('cm_actions_link_export_evaluate')}</a></li>
-  <li><a href="/evaluate/exportEvaluation_5">${_('cm_actions_link_export_evaluate')}</a></li>
-  <li><a href="/evaluate/exportEvaluation_6">${_('cm_actions_link_export_evaluate')}</a></li>
-  <li><a href="/evaluate/exportEvaluation_9">${_('cm_actions_link_export_evaluate')}</a></li>
-</ul>
-</div>
--->
-<h2>${_('eval_group_note_header')}</h2>
-<table>
-<tr>
-  <td class="eval_group_all"></td>
-  <td>
-    ${_('eval_group_note_all')}
-  </td>
-<tr>
-<tr>
-  <td class="eval_group_incm"></td>
-  <td>
-    ${_('eval_group_note_incm')}
-  </td>
-<tr>
-<tr>
-  <td class="eval_group_finished"></td>
-  <td>
-    ${_('eval_group_note_finished')}
-  </td>
-<tr>
-</table>
-<table>
-<tr>
-  <td class="eval_group_all" rowspan="2"></td>
-  <td>
-      <div class="evaluation odd-row first-row">
-      <h3><a name="eval_1">${_('cm_eval_header_1')}</a></h3>
-      <table class="evaluation">
-        <tr>
-          <th class="table_header_h table_width_long">${_('cm_eval_table_adolescent')}</th>
-          <th class="table_header_h table_width_mid_s">${_('cm_eval_table_number')}</th>
-          <th class="table_header_h table_width_mid_s">${_('cm_eval_table_percent')}</th>
-          <th class="table_header_h table_width_mid_s">&nbsp;</th>
-        </tr>
-        <tr>
-          <td>${_('cm_eval_table_consult_customer')}</td>
-          <td>${c.eval_1_total| F.NA, h}</td>
-          <td>(100%)</td>
-          <td></td>
-        </tr>
-        <tr>
-          <td class="label table_row_v_12">${_('cm_eval_table_taken_over_to_cm')}</td>
-          <td class="table_row_v_12" >${c.eval_1_cm| F.NA, h}</td>
-          <td class="table_row_v_12">(${c.eval_1_percent| F.NA, h}%)</td>
-          <td class="table_row_v_12 table_width_mid_s">&nbsp;</td>
-        </tr>
-      </table>
-      <a href="#top">${_('cm_eval_table_to_overview')}</a> | <a href="/evaluate/exportEvaluation_1/auswertung_1_beratung.csv">${_('cm_eval_table_export_analysis')}</a>
-      </div>
-    </td>
-  </tr>
-  <tr>
-    <td>
-      <div class="evaluation odd-row">
-      <h3><a name="eval_2">${_('cm_eval_header_2')}</a></h3>
-      <h4>${_('cm_eval_header_access_youngster_to_agency')}</h4>
-      <table class="evaluation">
-         <tr>
-          <th class="table_header_h table_width_long">${_('cm_eval_table_access')}</th>
-          <th class="table_header_h table_width_mid_s">${_('cm_eval_table_number')}</th>
-          <th class="table_header_h table_width_mid_s">${_('cm_eval_table_percent')}</th>
-          <th class="table_header_h table_width_mid_s">&nbsp;</th>
-        </tr> 
-      <% idset = 0 %>
-      % for r in c.eval_4.itervalues():
-        % if idset==0:
-         <tr>
-           <td>${r[0]}</td>
-           <td>${r[1]| F.NA, h}</td>
-           <td>(${r[2]| F.NA, h}%)</td>
-           <td></td>
-         </tr>
-         <% idset = 1 %>
-          % else:
-          <tr>
-            <td class="table_row_v_12 table_width_long">${r[0]}</td>
-            <td class="table_row_v_12">${r[1]| F.NA, h}</td>
-            <td class="table_row_v_12">(${r[2]| F.NA, h}%)</td>
-            <td class="table_row_v_12 table_width_mid_s ">&nbsp;</td>
-          </tr>
-          <% idset = 0 %>
-        % endif
-      % endfor 
-      </table>
-      <a href="#top">${_('cm_eval_table_to_overview')}</a> | <a href="/evaluate/exportEvaluation_4/auswertung_5_zugang.csv">${_('cm_eval_table_export_analysis')}</a>
-      <h4>${_('cm_eval_head_law_access_agency')}</h4>
-      <table class="evaluation">
-         <tr>
-          <th class="table_header_h table_width_mid_l">${_('cm_eval_table_law')}</th>
-          <th class="table_header_h table_width_mid_s">${_('cm_eval_table_number')}</th>
-          <th class="table_header_h table_width_mid_s">${_('cm_eval_table_percent')}</th>
-          <th class="table_header_h table_width_mid_l">&nbsp;</th>
-        </tr> 
-      <% idset = 0 %>
-      % for r in c.eval_5.itervalues():
-        % if idset==0:
-         <tr>
-           <td>${r[0]| F.NA, h}</td>
-           <td>${r[1]| F.NA, h}</td>
-           <td>(${r[2]| F.NA, h}%)</td>
-           <td></td>
-         </tr>
-         <% idset = 1 %>
-        % else:
-         <tr>
-           <td class="table_row_v_12">${r[0]| F.NA, h}</td>
-           <td class="table_row_v_12">${r[1]| F.NA, h}</td>
-           <td class="table_row_v_12">(${r[2]| F.NA, h}%)</td>
-           <td class="table_row_v_12 table_width_mid_l">&nbsp;</td>
-         </tr>
-         <% idset = 0 %>
-        % endif
-      % endfor 
-      </table>
-      <a href="#top">${_('cm_eval_table_to_overview')}</a> | <a href="/evaluate/exportEvaluation_5/auswertung_5_rechtskreis.csv">${_('cm_eval_table_export_analysis')}</a>
-      </div>
-    </td>
-  </tr>
-  <tr>
-    <td class="eval_group_incm" rowspan="4"></td>
-    <td>
-      <div class="evaluation even-row"> 
-      <h3><a name="eval_3">${_('cm_eval_header_3')}</a></h3>
-      <table class="evaluation">
-        <tr>
-          <th class="table_header_h table_width_mid_s">${_('cm_eval_table_month')}</th>
-          <th class="table_header_h table_width_mid_l">${_('cm_eval_table_completed')}</th>
-          <th class="table_header_h table_width_mid_l">${_('cm_eval_table_aborted')}</th>
-          <th class="table_header_h table_width_mid_s" >&nbsp;</th>
-        </tr>
-        <% idset = 0 %>
-        % for r in c.eval_10:
-         % if idset==0:
-         <tr>
-          <td>${r[0]}</td>
-          <td>${r[1]| F.NA, h} (${r[2]| F.NA, h}%)</td>
-          <td>${r[3]| F.NA, h} (${r[4]| F.NA, h}%)</td>
-          <td></td>
-        </tr>
-        <% idset = 1 %>
-        % else:
-         <tr>
-           <td class="table_row_v_12">${r[0]}</td>
-           <td class="table_row_v_12">${r[1]| F.NA, h} (${r[2]| F.NA, h}%)</td>
-           <td class="table_row_v_12">${r[3]| F.NA, h} (${r[4]| F.NA, h}%)</td>
-           <td class="table_row_v_12 table_width_mid_s">&nbsp;</td>
-         </tr>
-        <% idset = 0 %>
-        % endif
-        % endfor
-      </table>
-      <a href="#top">${_('cm_eval_table_to_overview')}</a> | <a href="/evaluate/exportEvaluation_10/auswertung_2_abgeschlossen.csv">${_('cm_eval_table_export_analysis')}</a>
-      </div>
-    </td>
-  </tr>
-  <tr>
-    <td>
-      <div class="evaluation odd-row">
-      <h3><a name="eval_4">${_('cm_eval_header_4')}</a></h3>
-      <h4>${_('cm_eval_header_on_gender')} </h4>
-      <table class="evaluation">
-        <tr>
-          <th class="table_header_h table_width_mid_s">${_('cm_eval_table_gender')}</th>
-          <th class="table_header_h table_width_mid_s">${_('cm_eval_table_number')}</th>
-          <th class="table_header_h table_width_mid_s">${_('cm_eval_table_percent')}</th>
-          <th class="table_header_h table_width_long">&nbsp;</th>
-        </tr>
-        <tr>
-          <td>${_('cm_eval_label_male')}</td>
-          <td>${c.eval_2_m[0]| F.NA, h}</td>
-          <td>(${c.eval_2_m[1]| F.NA, h}%)</td>
-          <td></td>
-        </tr>
-        <tr>
-          <td class="table_row_v_12">${_('cm_eval_label_female')}</td>
-          <td class="table_row_v_12">${c.eval_2_w[0]| F.NA, h}</td>
-          <td class="table_row_v_12">(${c.eval_2_w[1]| F.NA, h}%)</td>
-          <td class="table_row_v_12 table_width_long">&nbsp;</td>
-        </tr>
-        <tr>
-          <td>${_('cm_eval_label_intersexual')}</td>
-          <td>${c.eval_2_i[0]| F.NA, h}</td>
-          <td>(${c.eval_2_i[1]| F.NA, h}%)</td>
-          <td></td>
-        </tr>
-        <tr>
-          <td class="table_row_v_12">${_('cm_eval_label_unknown')}</td>
-          <td class="table_row_v_12">${c.eval_2_u[0]| F.NA, h}</td>
-          <td class="table_row_v_12">(${c.eval_2_u[1]| F.NA, h}%)</td>
-          <td class="table_row_v_12 table_width_long">&nbsp;</td>
-        </tr>
-      </table>
-      <a href="#top">${_('cm_eval_table_to_overview')}</a> | <a href="/evaluate/exportEvaluation_2/auswertung_3_geschlecht.csv">${_('cm_eval_table_export_analysis')}</a>
-      <h4>${_('cm_eval_header_on_age')}</h4>
-      <table class="evaluation">
-        <tr>
-          <th class="table_header_h table_width_mid_s">${_('cm_eval_table_age')}</th>
-          <th class="table_header_h table_width_mid_s">${_('cm_eval_table_number')}</th>
-          <th class="table_header_h table_width_mid_s">${_('cm_eval_table_percent')}</th>
-          <th class="table_header_h table_width_long">&nbsp;</th>
-        </tr>
-      <% idset = 0 %>
-      % for v in c.eval_8:
-        % if idset==0:
-        <tr>
-          <td>${v[0]| F.NA, h}</td>
-          <td>${v[1]| F.NA, h}</td>
-          <td>${v[2]| F.NA, h}%</td>
-        <td></td>
-        </tr>
-        <% idset = 1 %>
-        % else:
-        <tr>
-          <td class="table_row_v_12">${v[0]| F.NA, h}</td>
-          <td class="table_row_v_12">${v[1]| F.NA, h}</td>
-          <td class="table_row_v_12">${v[2]| F.NA, h}%</td>
-          <td class="table_row_v_12 table_width_long">&nbsp;</td>
-        </tr>
-        <% idset = 0 %>
-        % endif
-      % endfor
-      </table>
-      <a href="#top">${_('cm_eval_table_to_overview')}</a> | <a href="/evaluate/exportEvaluation_8/auswertung_3_alter.csv">${_('cm_eval_table_export_analysis')}</a>
-      </div>
-    </td>
-  </tr>
-  <tr>
-    <td>
-      <div class="evaluation even-row">
-      <h3><a name="eval_5">${_('cm_eval_header_5')| F.NA, h}</a></h3>
-      <table class="evaluation">
-        <tr>
-          <th class="table_header_h table_width_long">${_('cm_eval_table_category')}</th>
-          <th class="table_header_h table_width_mid_s">${_('cm_eval_table_number')}</th>
-          <th class="table_header_h table_width_mid_s">${_('cm_eval_table_percent')}</th>
-          <th class="table_header_h table_width_mid_s">&nbsp;</th>
-        </tr>
-        <tr>
-          <td>${_('cm_eval_label_migration_background')}</td>
-          <td>${c.eval_3[0][0]| F.NA, h}</td>
-          <td>(${c.eval_3[0][1]| F.NA, h}%)</td>
-          <td class="table_width_mid_s"></td>
-        </tr>
-        <tr>
-          <td>${_('cm_eval_label_no_migration_background')}</td>
-          <td>${c.eval_3[1][0]| F.NA, h}</td>
-          <td>(${c.eval_3[1][1]| F.NA, h}%)</td>
-          <td class="table_width_mid_s"></td>
-        </tr>
-        <tr>
-          <td>${_('cm_eval_label_ka_migration_background')}</td>
-          <td>${c.eval_3[2][0]| F.NA, h}</td>
-          <td>(${c.eval_3[2][1]| F.NA, h}%)</td>
-          <td class="table_width_mid_s"></td>
-        </tr>
-      </table>
-      <a href="#top">${_('cm_eval_table_to_overview')}</a> | <a href="/evaluate/exportEvaluation_3/auswertung_4_migration.csv">${_('cm_eval_table_export_analysis')}</a>
-      </div>
-    </td>
-  </tr>
-  <tr>
-    <td>
-      <div class="evaluation even-row">
-      <h3><a name="eval_6">${_('cm_eval_header_6')}</a></h3>
-      <table class="evaluation">
-        <tr>
-          <th class="table_header_h table_width_long">${_('cm_eval_table_offer')}</th>
-          <th class="table_header_h table_width_mid_s">${_('cm_eval_table_number')}</th>
-          <th class="table_header_h table_width_mid_s">${_('cm_eval_table_percent')}</th>
-          <th class="table_header_h table_width_mid_s">&nbsp;</th>
-        </tr>
-      <% idset = 0 %>
-      % for r in c.eval_9:
-        % if idset==0:
-        <tr>
-          <td>${r[0]| F.NA, h}</td>
-          <td>${r[1]| F.NA, h}</td>
-          <td>(${r[2]| F.NA, h}%)</td>
-          <td></td>
-        </tr>
-        <% idset = 1 %>
-        % else:
-         <tr>
-           <td class="table_row_v_12">${r[0]| F.NA, h}</td>
-           <td class="table_row_v_12">${r[1]| F.NA, h}</td>
-           <td class="table_row_v_12">(${r[2]| F.NA, h}%)</td>
-           <td class="table_row_v_12 table_width_mid_s">&nbsp;</td>
-         </tr>
-         <% idset = 0 %>
-        % endif
-      % endfor 
-      </table>
-      <div class="eval_note">${_('eval6_note')}</div>
-      <a href="#top">${_('cm_eval_table_to_overview')}</a> | <a href="/evaluate/exportEvaluation_9/auswertung_6_bedarf.csv">${_('cm_eval_table_export_analysis')}</a>
-      </div>
-    </td>
-  </tr>
-  <tr>
-    <td class="eval_group_finished"></td>
-    <td>
-      <div class="evaluation odd-row">
-      <h3><a name="eval_7">${_('cm_eval_header_7')}</a></h3>
-      <h4>${_('cm_eval_head_where_to_place_youngster')}</h4>
-      <table class="evaluation">
-         <tr>
-          <th class="table_header_h table_width_mid_l">${_('cm_eval_table_place')}</th>
-          <th class="table_header_h table_width_mid_s">${_('cm_eval_table_number')}</th>
-          <th class="table_header_h table_width_mid_s">${_('cm_eval_table_percent')}</th>
-          <th class="table_header_h table_width_mid_l">&nbsp;</th>
-        </tr>
-      <% idset = 0 %>
-      % for r in c.eval_6.itervalues():
-        % if idset==0:
-         <tr>
-           <td>${r[0]| F.NA, h}</td>
-           <td>${r[1]| F.NA, h}</td>
-           <td>(${r[2]| F.NA, h}%)</td>
-           <td></td>
-         </tr>
-         <% idset = 1 %>
-        % else:
-         <tr>
-           <td class="table_row_v_12">${r[0]| F.NA, h}</td>
-           <td class="table_row_v_12">${r[1]| F.NA, h}</td>
-           <td class="table_row_v_12">(${r[2]| F.NA, h}%)</td>
-           <td class="table_row_v_12 table_width_mid_l">&nbsp;</td>
-         </tr>
-         <% idset = 0 %>
-       % endif
-      % endfor 
-      </table>
-      <a href="#top">${_('cm_eval_table_to_overview')}</a> | <a href="/evaluate/exportEvaluation_6/auswertung_7_vermittelt.csv">${_('cm_eval_table_export_analysis')}</a>
-      <h4>${_('cm_eval_header_law_changed_after_place')}</h4>
-      <table class="evaluation">
-         <tr>
-          <th class="table_header_h table_width_mid_l">${_('cm_eval_table_law_change')}</th>
-          <th class="table_header_h table_width_mid_s">${_('cm_eval_table_number')}</th>
-          <th class="table_header_h table_width_mid_s">${_('cm_eval_table_percent')}</th>
-          <th class="table_header_h table_width_mid_l">&nbsp;</th>
-        </tr>
-      <% idset = 0 %>
-      % for r in c.eval_7.itervalues():
-        % if idset==0:
-         <tr>
-           <td>${r[0]| F.NA, h}</td>
-           <td>${r[1]| F.NA, h}</td>
-           <td>(${r[2]| F.NA, h}%)</td>
-           <td></td>
-         </tr>
-         <% idset = 1 %>
-         % else:
-         <tr>
-           <td class="table_row_v_12">${r[0]| F.NA, h}</td>
-           <td class="table_row_v_12">${r[1]| F.NA, h}</td>
-           <td class="table_row_v_12">(${r[2]| F.NA, h}%)</td>
-           <td class="table_row_v_12 table_width_mid_l">&nbsp;</td>
-         </tr>
-         <% idset = 0 %>
-       % endif
-      % endfor 
-      </table>
-      <a href="#top">${_('cm_eval_table_to_overview')}</a> | <a href="/evaluate/exportEvaluation_7/auswertung_7_rechtskreis.csv">${_('cm_eval_table_export_analysis')}</a>
-      </div>
-    </td>
-  </tr>
-</table>

Modified: trunk/waskaweb/templates/casemanagement/main.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/main.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/main.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -31,13 +31,13 @@
           <div id="marked">
           <ul>
           % if session.get('case').hasPrivacyStatement() is None:
-            <li><a href="/statement/printPrivacyStatement/${session.get('case').id}" target="_blank" onclick="return checkModification();"> ${_('cm_main_print_statement')}</a></li>
             <li><a href="/statement/setPrivacyStatement/${session.get('case').id}" onclick="return checkModification();"> ${_('cm_main_set_statement')}</a></li>
           % elif session.get('case').hasPrivacyStatement():
-            <li><a href="/statement/setPrivacyStatement/${session.get('case').id}" onclick="return checkModification();"> ${_('cm_main_revoke_statement')}</a></li>
+            <li><a href="/statement/declinePrivacyStatement/${session.get('case').id}/0" onclick="return checkModification();"> ${_('cm_main_revoke_statement')}</a></li>
           % endif
           % if session.get('case').getState().getState() != 5:
             <li><a href="/case/anonymize/${session.get('case').id}/0" onclick="return checkModification();"> ${_('cm_main_anonymize_case')}</a></li>
+            <li><a href="/statement/listStatements/${session.get('case').id}" onclick="return checkModification();"> ${_('statement_list_statement')}</a></li>
           % endif
           </ul>
         </div>
@@ -54,7 +54,9 @@
       <ul>
         <li><a href="${h.url_for(controller='/case_overview')}" onclick="return checkModification();"> ${_('cm_menu_link_backtooverview')}</a></li>
         <li><a href="/case/printAll/${session.get('case').id}" onclick="return checkModification();"> ${_('cm_menu_link_print')}</a></li>
-
+        % if h.hasRole(['cm_ka']):
+          <li><a href="/case/newReminder/${session.get('case').id}" onclick="return checkModification();"> ${_('cm_menu_link_create_reminder')}</a></li>
+        % endif
       </ul>
     % endif
     </div>
@@ -66,7 +68,7 @@
         <li><a href="/case/digest/${session.get('case').id}" onclick="return checkModification();"> ${_('cm_menu_link_digest')}</a></li>
         % if h.hasRole(['cm_ka', 'admin_ka']):
         <li><a href="/case/organisation/${session.get('case').id}" onclick="return checkModification();"> ${_('cm_menu_link_organisation')}</a></li>
-        <!--<li><a href="/case/appointments/${session.get('case').id}" onclick="return checkModification();"> ${_('cm_menu_link_appointment')}</a></li>-->
+        <li><a href="/case/appointments/${session.get('case').id}" onclick="return checkModification();"> ${_('cm_menu_link_appointment')}</a></li>
         <li><a href="/case/documents/${session.get('case').id}" onclick="return checkModification();"> ${_('cm_menu_link_documents')}</a></li>
         % endif
       </ul>

Added: trunk/waskaweb/templates/casemanagement/newAppointment.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/newAppointment.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/newAppointment.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,37 @@
+<%inherit file="main.mako" />
+<%
+formular_labels = {'start_date' : 'app_form_startdate',
+                   'start_time' : 'app_form_startdate',
+                   'end_date'   : 'app_form_enddate',
+                   'end_time'   : 'app_form_endtime',
+                   'title'      : 'app_form_title'
+                  }
+%>
+<%def name="buildNavipath()">
+  ${parent.buildNavipath()}
+  <li><a href="/case/select/${session.get('case').id}/1">${_('cm_np_select')}</a></li>
+  <li><a href="/case/appointments/${session.get('case').id}">${_('app_np_list')}</a></li>
+  <li><a href="#">${_('app_np_new')}</a></li>
+</%def>
+<div id="content_header_small">
+  <div id="content_ueberschrift">
+${_('cm_app_header_new')}
+  </div>
+  <div id="modusfield">
+    <div class="actions">
+      <ul>
+        <li>
+          <a href="${h.url_for(controller='case', action='appointments', id=c.ds_id)}"> ${_('menu_app_link_overview_back')}</a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+${self.buildFormErrors(formular_labels)}
+<div id="admin_new_user">
+<div id="waska_form">
+<form action="${h.url_for(controller='case', action='newAppointmentAction')}" method="POST">
+<%include file="../appointments/edit_body.mako" />
+</form>
+</div>
+</div>

Modified: trunk/waskaweb/templates/casemanagement/organisation.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/organisation.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/organisation.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -43,7 +43,7 @@
 <table>
   <tr>
     <th class="table_header_h table_checkbox">&nbsp;</th>
-    <th class="table_header_h table_description">Bearbeiter</th>
+    <th class="table_header_h table_description">Mitarbeiterin / Mitarbeiter</th>
   </tr>
   <% idset = True %>
   % for user in c.user_list:

Modified: trunk/waskaweb/templates/casemanagement/overview.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/overview.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/overview.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -59,6 +59,8 @@
       % if h.hasRole(['admin_ka', 'cm_ka']):
       <option value="stand-in">Auswahl Vertretung zuweisen</option>
       <option value="exportCSV">Auswahl als CSV-Datei exportieren</option>
+      <option value="exportXML">Auswahl als XML-Datei exportieren</option>
+      <option value="exportXLS">Auswahl als XLS-Datei exportieren</option>
       <!--<option value="evaluate">Auswahl auswerten</option>-->
       % endif
     </select>

Added: trunk/waskaweb/templates/casemanagement/reminderlist.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/reminderlist.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/reminderlist.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,10 @@
+<%inherit file="/appointments/remindlist_body.mako" />
+<%def name="showAppointmentActions(appointment)">
+<a href="${h.url_for(controller='/case', action='showAppointment', id=appointment.id)}">
+  <img src="/images/icons/view_red.gif" border="0" alt="${_('cm_overview_a_show')}" title="${_('cm_overview_a_show')}"></a>
+% if h.hasRole(['cm_ka']):
+  <a href="${h.url_for(controller='/case', action='deleteAppointment', id=appointment.id, confirmed=0)}">
+    <img src="/images/icons/delete_red.gif" border="0" alt="${_('cm_overview_a_delete')}" title="${_('cm_overview_a_show')}">
+  </a>
+% endif
+</%def>

Added: trunk/waskaweb/templates/casemanagement/showAppointment.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/showAppointment.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/showAppointment.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,29 @@
+<%inherit file="/casemanagement/main.mako" />
+<%def name="buildNavipath()">
+  ${parent.buildNavipath()}
+  <li><a href="/case/select/${session.get('case').id}/1">${_('cm_np_select')}</a></li>
+  <li><a href="/case/appointments/${c.appointment.case_id}">${_('app_np_list')}</a></li>
+  <li><a href="/appointment/show/${c.appointment.id}"></a>${_('app_np_show')}</li>
+</%def>
+<div id="content_header_small">
+  <div id="content_ueberschrift">
+    ${_('app_header_show')}
+  </div>
+  <div id="modusfield">
+    <div class="actions">
+      <ul>
+        % if h.hasRole('cm_ka'):
+        <li>
+          <a href="${h.url_for(controller='/case', action='editAppointment', id=c.appointment.id)}">
+            ${_('sm_menu_link_edit_appointment')}
+          </a>
+        </li>
+        % endif
+        <li>
+          <a href="${h.url_for(controller='/case', action='appointments', id=c.appointment.case_id)}">${_('menu_app_link_overview_back')}</a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<%include file="/appointments/show_body.mako" />

Modified: trunk/waskaweb/templates/casemanagement/upload.mako
===================================================================
--- trunk/waskaweb/templates/casemanagement/upload.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/casemanagement/upload.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -11,27 +11,27 @@
 
 <h2>PDF-Import</h2>
 <p class="import_p">Es können Dateien im PDF-Format (.pdf) angegeben werden.<br>
-Die Größe einer Datei darf nicht 10MB überschreiten.</p>
+Die Größe einer Datei darf 10MB nicht überschreiten.</p>
 <div class="import_box_dialog">
 ${h.form(h.url(action='importAction'), multipart=True)}
 <label class="import_label" for="pdffile"><strong class="import_number">1.</strong> Datei wählen:</label>
 ${h.file_field('pdffile')}<br>
-<label class="import_label" for="pdfimport"><strong class="import_number">2.</strong> Datei importieren:</label>
+<label class="import_label" for="anonymize"><strong class="import_number">2.</strong> ${h.check_box('anonymize')} Akte nach Import umgehend anonymisieren.</label>
+<br>
+<label class="import_label" for="pdfimport"><strong class="import_number">3.</strong> Datei importieren:</label>
 ${h.submit(_('cm_from_import_submit'))}
 ${h.end_form()}
 </div>
 
-##<h2>XML-Import</h2>
-##<p class="import_p">Es können Dateien im XML-Format (.xml) und ZIP-Archive (.zip) angegeben werden. <br>
-##Die Größe einer Datei darf nicht 10MB überschreiten.</p>
-##<div class="import_box_dialog">
-##${h.form(h.url(action='importAction'), multipart=True)}
-##<label class="import_label" for="xmlfile"><strong class="import_number">1.</strong> Datei wählen:</label>
-##${h.file_field('pdffile')}<br>
-##<label class="import_label" for="pdfimport"><strong class="import_number">2.</strong> Datei importieren:</label>
-##${h.submit(_('cm_from_import_submit'))}
-##${h.end_form()}
-##</div>
+<h2>XML-Import</h2>
+<p class="import_p">Es können Dateien im XML-Format (.xml) angegeben werden. <br>
+Die Größe einer Datei darf 10MB nicht überschreiten.</p>
+<div class="import_box_dialog">
+${h.form(h.url(action='importXMLAction'), multipart=True)}
+<label class="import_label" for="xmlfile"><strong class="import_number">1.</strong> Datei wählen:</label>
+${h.file_field('xmlfile')}<br>
+<label class="import_label" for="pdfimport"><strong class="import_number">2.</strong> Datei importieren:</label>
+${h.submit(_('cm_from_import_submit'))}
+${h.end_form()}
 </div>
-
-
+</div>

Modified: trunk/waskaweb/templates/main.mako
===================================================================
--- trunk/waskaweb/templates/main.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/main.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -105,7 +105,7 @@
         <h1>${_('np_root')}</h1>
         <ul>
           <li><a href="${h.url_for(controller='/waska')}">${_('sm_menu_link_home')}</a></li>
-          <!--<li><a href="${h.url_for(controller='/appointment', action='overview')}"> ${_('menu_app_link_overview')}</a></li>-->
+          <li><a href="${h.url_for(controller='/appointment', action='overview')}"> ${_('menu_app_link_overview')}</a></li>
           <li><a href="${h.url_for(controller='/document', action='globalOverview')}"> ${_('menu_doc_link_overview')} </a> </li>
         </ul>
       </div>
@@ -117,7 +117,7 @@
       <h1>${_('menu_header_cm')}</h1>
       <ul>
         <li><a href="${h.url_for(controller='/agency_overview')}"> ${_('menu_cm_link_overview')}</a> </li>
-        <li><a href="${h.url_for(controller='/evaluate', action='evaluate')}"> ${_('cm_actions_link_evaluate')}</a></li>
+        <li><a href="${h.url_for(controller='/evaluate', action='evaluate', id=1)}"> ${_('cm_actions_link_evaluate')}</a></li>
       </ul>
     </div>
   </div>
@@ -131,7 +131,7 @@
           <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>
         % endif
-        <li><a href="${h.url_for(controller='/evaluate', action='evaluate')}"> ${_('cm_actions_link_evaluate')}</a></li>
+        <li><a href="${h.url_for(controller='/evaluate', action='evaluate', id=1)}"> ${_('cm_actions_link_evaluate')}</a></li>
       </ul>
     </div>
   </div>

Added: trunk/waskaweb/templates/start/appointmentlist.mako
===================================================================
--- trunk/waskaweb/templates/start/appointmentlist.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/start/appointmentlist.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,10 @@
+<%inherit file="/appointments/overview_body.mako" />
+<%def name="showAppointmentActions(appointment)">
+  %if appointment.case_id:
+    <a href="${h.url_for(controller='/case', action='showAppointment', id=appointment.id, confirmed=0)}">
+      <img src="/images/icons/view_red.gif" border="0" alt="${_('cm_overview_a_show')}" title="${_('cm_overview_a_show')}"></a>
+  % else:
+    <a href="${h.url_for(controller='/appointment', action='show', id=appointment.id)}">
+      <img src="/images/icons/view_red.gif" border="0" alt="${_('cm_overview_a_show')}" title="${_('cm_overview_a_show')}"></a>
+  % endif
+</%def>

Added: trunk/waskaweb/templates/start/remindlist.mako
===================================================================
--- trunk/waskaweb/templates/start/remindlist.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/start/remindlist.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,5 @@
+<%inherit file="/appointments/remindlist_body.mako" />
+<%def name="showAppointmentActions(appointment)">
+  <a href="${h.url_for(controller='/case', action='select', id=appointment.case_id, confirmed=0)}">
+    <img src="/images/icons/view_red.gif" border="0" alt="${_('cm_overview_a_show')}" title="${_('cm_overview_a_show')}"></a>
+</%def>

Modified: trunk/waskaweb/templates/start/start.mako
===================================================================
--- trunk/waskaweb/templates/start/start.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/start/start.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -20,14 +20,10 @@
   </ul>
  </div>
 %endif
-
-% if (h.getLogin() != 'adm'): 
-% if h.hasRole(['cm_ka']):
-<p>Hier werden Sie eine kurze &Uuml;bersicht Ihrer anliegenden Termine und
-Erinnerungen zu den F&auml;lle sehen.</p>
+% if (h.getLogin() != 'adm'):
+<h2>Wiedervorlagen</h2>
+<%include file="/start/remindlist.mako"/>
+</table>
+<h2>Termine</h2>
+<%include file="/start/appointmentlist.mako"/>
 % endif
-% if h.hasRole(['admin_ka']): 
-<p>Hier werden Sie eine kurze &Uuml;bersicht der allgemeinen Termine in der
-Kompetenzagentur sehen.</p>
-% endif
-% endif

Modified: trunk/waskaweb/templates/statement/dialogs/missing_statement.mako
===================================================================
--- trunk/waskaweb/templates/statement/dialogs/missing_statement.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/statement/dialogs/missing_statement.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -1,27 +1,9 @@
 ## -*- coding: utf-8 -*- 
 <%inherit file="../../main.mako" />
 <%def name="buildNavipath()">
-	${parent.buildNavipath()}
-	<li><a href="/case/">${_('cm_np_root')}</a></li>
-        <li><a href="/case_overview">${_('cm_np_overview')}</a></li>
-	<li><a href="#">${_('cm_np_show')}</a></li>
+  ${parent.buildNavipath()}
+  <li><a href="/case/">${_('cm_np_root')}</a></li>
+  <li><a href="/case_overview">${_('cm_np_overview')}</a></li>
+  <li><a href="#">${_('cm_np_show')}</a></li>
 </%def>
-<div class="dialog" />
-<h1><img src="/images/alert.png"/>${_('statement_dialog_header_statement_no')}</h1>
-<p>${_('statement_dialog_p_statement_no_explanation')}</p>
-% if h.hasRole(['cm_ka']):
-<p>${_('statement_dialog_p_options')}
-<ol>
-<li><strong>${_('statement_dialog_li_statement_set')}</strong>${_('statement_dialog_li_statement_set_explanation')}</li>
-<li><strong>${_('statement_dialog_li_statement_not_set')}</strong>${_('statement_dialog_li_statement_not_set_explanation')}</li>
-</ol>
-<p>
-<a class="button" href="/statement/setPrivacyStatement/${c.ds_id}">${_('statement_dialog_a_statement_set')}</a>
-<a class="button" href="/case/select/${c.ds_id}/1">${_('statement_dialog_a_statement_not_set')}</a>
-</p>
-% else:
-<p>
-<a class="button" href="/case/select/${c.ds_id}/1">${_('statement_dialog_a_ok')}</a>
-</p>
-% endif
-
+<%include file="missing_statement_body.mako" />

Added: trunk/waskaweb/templates/statement/dialogs/missing_statement_body.mako
===================================================================
--- trunk/waskaweb/templates/statement/dialogs/missing_statement_body.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/statement/dialogs/missing_statement_body.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,23 @@
+## -*- coding: utf-8 -*- 
+<div class="dialog" />
+<h1><img src="/images/alert.png"/>${_('statement_dialog_header_statement_no')}</h1>
+<p>${_('statement_dialog_p_statement_no_explanation')}</p>
+% if h.hasRole(['cm_ka']):
+<p>${_('statement_dialog_p_options') % h.link_to(_('statement_edit_a_statement_form_printversion'), h.url(controller="statement", action="printPrivacyStatement", id=c.ds_id))}
+
+<ol>
+<li><strong>${_('statement_dialog_li_statement_accepted')}</strong>${_('statement_dialog_li_statement_accepted_explanation')}</li>
+<li><strong>${_('statement_dialog_li_statement_unclear')}</strong>${_('statement_dialog_li_statement_unclear_explanation')}</li>
+<li><strong>${_('statement_dialog_li_statement_declined')}</strong>${_('statement_dialog_li_statement_declined_explanation')}</li>
+</ol>
+<p>
+<a class="button" href="${h.url_for(controller="statement", action="acceptPrivacyStatement", id=c.ds_id, confirmed=0)}">${_('statement_dialog_li_statement_accepted')}</a>
+<a class="button" href="${c.targeturl}">${_('statement_dialog_li_statement_unclear')}</a>
+<a class="button" href="${h.url_for(controller="statement", action="declinePrivacyStatement", id=c.ds_id, confirmed=0)}">${_('statement_dialog_li_statement_declined')}</a>
+</p>
+% else:
+<p>
+<a class="button" href="/case/select/${c.ds_id}/1">${_('statement_dialog_a_ok')}</a>
+</p>
+% endif
+

Modified: trunk/waskaweb/templates/statement/edit.mako
===================================================================
--- trunk/waskaweb/templates/statement/edit.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/statement/edit.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -1,47 +1,8 @@
-## -*- coding: utf-8 -*-
-<%inherit file="../casemanagement/main.mako" />
+## -*- coding: utf-8 -*- 
+<%inherit file="/casemanagement/main.mako" />
 <%def name="buildNavipath()">
   ${parent.buildNavipath()}
   <li><a href="/case/select/${session.get('case').id}/1">${_('cm_np_select')}</a></li>
   <li><a href="#">${_('statement_np_edit')}</a></li>
 </%def>
-<h1>${_('statement_edit_header_statement')}</h1>
-% if h.hasRole(['cm_ka']) and session.get('case').hasPrivacyStatement() is None:
-<div id="statement_text">
-  <p>${_('statement_edit_p_no_statement')}</p>
-  <p>${_('statement_edit_p_statement_decision')}</p>
-  <p>${_('statement_edit_p_statement_form')}<a href="/statement/printPrivacyStatement/${c.ds_id}" target="_blank">${_('statement_edit_a_statement_form_printversion')}</a> ${_('statement_edit_p_statement_form_end')}</p>
-  <div id="statement_form" class="waska_form">
-    <form id="waska_form" action="/statement/setPrivacyStatementAction" accept-charset="UTF-8" name="waska_form" method="POST">
-      <div id="statement_box">
-        <input type="radio" id="statement_signed" name="statement_signed" value="1">
-        <label for="statement_signed">${_('statement_label_statement_yes')}
-        </br>
-        </label>
-        <input type="radio" id="statement_not_signed" name="statement_signed" value="0">
-        <label for="statement_not_signed">${_('statement_label_statement_no')}
-        </label>
-        </br>
-        <input type="hidden" name="case_id" value="${c.ds_id | h}"> 
-        <input id="statement_submit" type="submit" value="Speichern" name="save">
-      </div>
-    </form>
-  </div>
-</div>
-% elif h.hasRole(['cm_ka']) and session.get('case').hasPrivacyStatement():
-<div id="statement_text">
-  <p>${_('statement_revoke_p_statement')}</p>
-  <div id="statement_form" class="waska_form">
-    <form id="waska_form" action="/statement/setPrivacyStatementAction" accept-charset="UTF-8" name="waska_form" method="POST">
-      <div id="statement_box">
-        <div class="waska_form_element w100">
-          <input type="checkbox" id="statement_revoked" name="statement_revoked" value="1">
-          <label for="statement_revoked">${_('statement_label_statement_revoked')}</label>
-        </div>
-        <input type="hidden" name="case_id" value="${c.ds_id | h}"> 
-        <input id="statement_submit" type="submit" value="Speichern" name="save">
-      </div>
-    </form>
-  </div>
-</div>
-% endif
+<%include file="dialogs/missing_statement_body.mako" />

Added: trunk/waskaweb/templates/statement/edit.mako.old
===================================================================
--- trunk/waskaweb/templates/statement/edit.mako.old	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/statement/edit.mako.old	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,47 @@
+## -*- coding: utf-8 -*-
+<%inherit file="../casemanagement/main.mako" />
+<%def name="buildNavipath()">
+  ${parent.buildNavipath()}
+  <li><a href="/case/select/${session.get('case').id}/1">${_('cm_np_select')}</a></li>
+  <li><a href="#">${_('statement_np_edit')}</a></li>
+</%def>
+<h1>${_('statement_edit_header_statement')}</h1>
+% if h.hasRole(['cm_ka']) and session.get('case').hasPrivacyStatement() is None:
+<div id="statement_text">
+  <p>${_('statement_edit_p_no_statement')}</p>
+  <p>${_('statement_edit_p_statement_decision')}</p>
+  <p>${_('statement_edit_p_statement_form')}<a href="/statement/printPrivacyStatement/${c.ds_id}" target="_blank">${_('statement_edit_a_statement_form_printversion')}</a> ${_('statement_edit_p_statement_form_end')}</p>
+  <div id="statement_form" class="waska_form">
+    <form id="waska_form" action="/statement/setPrivacyStatementAction" accept-charset="UTF-8" name="waska_form" method="POST">
+      <div id="statement_box">
+        <input type="radio" id="statement_signed" name="statement_signed" value="1">
+        <label for="statement_signed">${_('statement_label_statement_yes')}
+        </br>
+        </label>
+        <input type="radio" id="statement_not_signed" name="statement_signed" value="0">
+        <label for="statement_not_signed">${_('statement_label_statement_no')}
+        </label>
+        </br>
+        <input type="hidden" name="case_id" value="${c.ds_id | h}"> 
+        <input id="statement_submit" type="submit" value="Speichern" name="save">
+      </div>
+    </form>
+  </div>
+</div>
+% elif h.hasRole(['cm_ka']) and session.get('case').hasPrivacyStatement():
+<div id="statement_text">
+  <p>${_('statement_revoke_p_statement')}</p>
+  <div id="statement_form" class="waska_form">
+    <form id="waska_form" action="/statement/setPrivacyStatementAction" accept-charset="UTF-8" name="waska_form" method="POST">
+      <div id="statement_box">
+        <div class="waska_form_element w100">
+          <input type="checkbox" id="statement_revoked" name="statement_revoked" value="1">
+          <label for="statement_revoked">${_('statement_label_statement_revoked')}</label>
+        </div>
+        <input type="hidden" name="case_id" value="${c.ds_id | h}"> 
+        <input id="statement_submit" type="submit" value="Speichern" name="save">
+      </div>
+    </form>
+  </div>
+</div>
+% endif

Added: trunk/waskaweb/templates/statement/list_statements.mako
===================================================================
--- trunk/waskaweb/templates/statement/list_statements.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/statement/list_statements.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -0,0 +1,41 @@
+## -*- coding: utf-8 -*-
+<%inherit file="/casemanagement/main.mako" />
+<%!  import waskaweb.lib.filters as F %>
+<%def name="buildNavipath()">
+  ${parent.buildNavipath()}
+  <li><a href="/case/select/${session.get('case').id}/1">${_('cm_np_select')}</a></li>
+  <li><a href="/statement/listStatements/${session.get('case').id}">${_('statement_np_list_statements')}</a></li>
+</%def>
+
+<div id="content_header_small">
+  <div id="content_ueberschrift">
+${_('statement_header_list_statements')}
+  </div>
+</div><br>
+<h2>1. ${_('statement_header_ee')}</h2>
+<p>
+${_('statement_explaination_ee')}
+</p>
+<p>
+  <a href="${h.url_for(controller='/statement', action='printPrivacyStatement', id=session.get('case').id)}" target="_blank">
+    Erklärung drucken
+  </a>
+</p><br>
+<h2>2. ${_('statement_header_fp')}</h2>
+<p>
+${_('statement_explaination_fp')}
+</p>
+<p>
+  <a href="${h.url_for(controller='/statement', action='printAidPlanStatement', id=session.get('case').id)}" target="_blank">
+    Erklärung drucken
+  </a>
+</p><br>
+<h2>3. ${_('statement_header_ud')}</h2>
+<p>
+${_('statement_explaination_ud')}
+</p>
+<p>
+  <a href="${h.url_for(controller='/statement', action='printDiscretionStatement', id=session.get('case').id)}"  target="_blank">
+    Erklärung drucken
+  </a>
+</p>

Modified: trunk/waskaweb/templates/usersettings/change_password.mako
===================================================================
--- trunk/waskaweb/templates/usersettings/change_password.mako	2008-08-13 13:12:15 UTC (rev 45)
+++ trunk/waskaweb/templates/usersettings/change_password.mako	2008-08-13 13:12:54 UTC (rev 46)
@@ -22,7 +22,7 @@
 <p class="import_p">Das neue Passwort sollte aus mindestens 8 Zeichen bestehen und 2 Sonderzeichen enthalten. </p>
 <div class="import_box_dialog">
 <form action="${h.url_for(controller="usersettings", action="changePasswordAction")}" method="POST">
-<div waska_form_element>	
+<div class="waska_form_element">	
           % if c.form_errors.get('passwd'):
 	    <label class="import_label" for="passwd" class="error_font"><strong class="import_number">1. </strong>${_('adm_form_newuser_passwd')}</label>
             <input type="password" class="field error_box" id="passwd" name="passwd">
@@ -31,7 +31,7 @@
             <input type="password" class="field" id="passwd" name="passwd">
           % endif
           </div>
-<div waska_form_element>
+<div class="waska_form_element">
           % if c.form_errors.get('passwd2'):
 	    <label class="import_label" for="passwd2" class="error_font"><strong class="import_number">2. </strong>${_('adm_form_newuser_passwd_confirm')}</label>
             <input type="password" class="field error_box" id="passwd2" name="passwd2">



More information about the Mpuls-commits mailing list