diff --git a/docs/HISTORY.txt b/docs/HISTORY.txt
index ea18ab811b6..c6c1920abc4 100644
--- a/docs/HISTORY.txt
+++ b/docs/HISTORY.txt
@@ -5,6 +5,7 @@ Changelog
---------------------
- Bump docxcompose version to 1.0.1 [njohner]
+- Improve SIP package generation and download. [phgross]
- Fix qa tests. [lgraf]
- Disable properties action for teams. [deiferni]
- Add source vocabularies for workspace invitations and todo responsibles. [njohner]
diff --git a/opengever/disposition/browser/configure.zcml b/opengever/disposition/browser/configure.zcml
index 9873f2116bc..3ee5cbaa130 100644
--- a/opengever/disposition/browser/configure.zcml
+++ b/opengever/disposition/browser/configure.zcml
@@ -38,6 +38,20 @@
permission="opengever.disposition.DownloadSIPPackage"
/>
+
+
+
+
\n"
"Language-Team: LANGUAGE \n"
@@ -273,6 +273,16 @@ msgstr "Angebot abgelehnt durch ${user}"
msgid "msg_disposition_updated"
msgstr "Aktualisiert durch ${user}"
+#. Default: "No SIP Package generated for this disposition."
+#: ./opengever/disposition/browser/ech0160.py
+msgid "msg_no_sip_package_generated"
+msgstr "Es wurde noch kein SIP Paket generiert für dieses Angebot."
+
+#. Default: "SIP Package generated successfully."
+#: ./opengever/disposition/browser/ech0160.py
+msgid "msg_sip_package_sucessfully_generated"
+msgstr "SIP Paket erfolgreich generiert."
+
#. Default: "Period"
#: ./opengever/disposition/browser/templates/overview.pt
msgid "period"
diff --git a/opengever/disposition/locales/fr/LC_MESSAGES/opengever.disposition.po b/opengever/disposition/locales/fr/LC_MESSAGES/opengever.disposition.po
index 2536f78264d..edc76631f52 100644
--- a/opengever/disposition/locales/fr/LC_MESSAGES/opengever.disposition.po
+++ b/opengever/disposition/locales/fr/LC_MESSAGES/opengever.disposition.po
@@ -1,21 +1,20 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2018-03-19 12:59+0000\n"
+"POT-Creation-Date: 2019-07-25 14:32+0000\n"
"PO-Revision-Date: 2018-05-22 10:09+0000\n"
"Last-Translator: Niklaus Johner \n"
-"Language-Team: French \n"
-"Language: fr\n"
+"Language-Team: French \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 2.13.1\n"
"Language-Code: en\n"
"Language-Name: English\n"
"Preferred-Encodings: utf-8 latin1\n"
"Domain: DOMAIN\n"
+"Language: fr\n"
+"X-Generator: Weblate 2.13.1\n"
#: ./opengever/disposition/browser/excel_export.py
msgid "The report could not been generated."
@@ -276,6 +275,16 @@ msgstr "Offre refusée par ${user}"
msgid "msg_disposition_updated"
msgstr "Actualisé par ${user}"
+#. Default: "No SIP Package generated for this disposition."
+#: ./opengever/disposition/browser/ech0160.py
+msgid "msg_no_sip_package_generated"
+msgstr ""
+
+#. Default: "SIP Package generated successfully."
+#: ./opengever/disposition/browser/ech0160.py
+msgid "msg_sip_package_sucessfully_generated"
+msgstr ""
+
#. Default: "Period"
#: ./opengever/disposition/browser/templates/overview.pt
msgid "period"
diff --git a/opengever/disposition/locales/opengever.disposition.pot b/opengever/disposition/locales/opengever.disposition.pot
index 4f3bd00248e..19d22a2c04f 100644
--- a/opengever/disposition/locales/opengever.disposition.pot
+++ b/opengever/disposition/locales/opengever.disposition.pot
@@ -4,7 +4,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2018-03-19 12:59+0000\n"
+"POT-Creation-Date: 2019-07-25 14:32+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -276,6 +276,16 @@ msgstr ""
msgid "msg_disposition_updated"
msgstr ""
+#. Default: "No SIP Package generated for this disposition."
+#: ./opengever/disposition/browser/ech0160.py
+msgid "msg_no_sip_package_generated"
+msgstr ""
+
+#. Default: "SIP Package generated successfully."
+#: ./opengever/disposition/browser/ech0160.py
+msgid "msg_sip_package_sucessfully_generated"
+msgstr ""
+
#. Default: "Period"
#: ./opengever/disposition/browser/templates/overview.pt
msgid "period"
diff --git a/opengever/disposition/tests/test_disposition.py b/opengever/disposition/tests/test_disposition.py
index 9516197c4a3..2bcd8dcbf6b 100644
--- a/opengever/disposition/tests/test_disposition.py
+++ b/opengever/disposition/tests/test_disposition.py
@@ -224,3 +224,40 @@ def test_reset_date_of_submission_for_dropped_dossiers(self, browser):
None, ILifeCycle(self.offered_dossier_to_destroy).date_of_submission)
self.assertEquals(
date.today(), ILifeCycle(self.expired_dossier).date_of_submission)
+
+ @browsing
+ def test_sip_package_is_genarated_and_stored_on_dispose(self, browser):
+ self.login(self.records_manager, browser)
+
+ self.set_workflow_state('disposition-state-appraised', self.disposition)
+
+ browser.open(self.disposition, view='overview')
+ browser.click_on('disposition-transition-dispose')
+
+ self.assertEquals(['Item state changed.'], info_messages())
+ self.assertTrue(self.disposition.has_sip_package())
+
+ # Download is possible
+ self.assertIn(
+ 'Download disposition package', browser.css('ul.actions li').text)
+
+ @browsing
+ def test_sip_package_is_removed_on_close(self, browser):
+ self.login(self.records_manager, browser)
+
+ self.disposition.store_sip_package()
+ self.set_workflow_state('disposition-state-appraised', self.disposition)
+ browser.open(self.disposition, view='overview')
+
+ browser.click_on('disposition-transition-dispose')
+ self.assertTrue(self.disposition.has_sip_package())
+
+ with self.login(self.archivist, browser=browser):
+ browser.open(self.disposition, view='overview')
+ browser.click_on('disposition-transition-archive')
+
+ browser.open(self.disposition, view='overview')
+ browser.click_on('disposition-transition-close')
+
+ self.assertEquals(['Item state changed.'], info_messages())
+ self.assertFalse(self.disposition.has_sip_package())
diff --git a/opengever/disposition/tests/test_ech0160export.py b/opengever/disposition/tests/test_ech0160export.py
index b24263a041e..eb260bc2135 100644
--- a/opengever/disposition/tests/test_ech0160export.py
+++ b/opengever/disposition/tests/test_ech0160export.py
@@ -1,7 +1,10 @@
from datetime import datetime
from ftw.testbrowser import browsing
+from ftw.testbrowser.pages.statusmessages import error_messages
+from ftw.testbrowser.pages.statusmessages import info_messages
from ftw.testing import freeze
from opengever.testing import IntegrationTestCase
+import os
class TesteCH0160Deployment(IntegrationTestCase):
@@ -22,3 +25,50 @@ def test_returns_zip_file_stream(self, browser):
self.assertEquals(
'inline; filename="SIP_20160611_PLONE_10xy.zip"',
self.request.response.headers.get('content-disposition'))
+
+
+class TestECH0160StoreView(IntegrationTestCase):
+
+ @browsing
+ def test_generates_sip_package_and_stores_it_as_a_blob_on_the_filesystem(self, browser):
+ self.login(self.records_manager, browser=browser)
+
+ self.set_workflow_state('disposition-state-disposed', self.disposition)
+ self.disposition.transfer_number = "10xy"
+ self.assertFalse(self.disposition.has_sip_package())
+
+ with freeze(datetime(2016, 6, 11)):
+ browser.open(self.disposition, view='ech0160_store')
+
+ self.assertEquals(
+ ['SIP Package generated successfully.'], info_messages())
+ self.assertTrue(self.disposition.has_sip_package())
+
+
+class TestECH0160DownloadView(IntegrationTestCase):
+
+ @browsing
+ def test_shows_status_message_when_no_zip_is_stored(self, browser):
+ self.login(self.archivist, browser=browser)
+
+ self.set_workflow_state('disposition-state-disposed', self.disposition)
+ browser.open(self.disposition, view='ech0160_download')
+ self.assertEquals([u'No SIP Package generated for this disposition.'],
+ error_messages())
+
+ @browsing
+ def test_streams_zip_when_sip_package_is_stored(self, browser):
+ self.login(self.archivist, browser=browser)
+
+ self.set_workflow_state('disposition-state-disposed', self.disposition)
+ self.disposition.transfer_number = "10xy"
+ self.disposition.store_sip_package()
+
+ with freeze(datetime(2016, 6, 11)):
+ browser.open(self.disposition, view='ech0160_download')
+
+ self.assertEquals(
+ 'application/zip', browser.headers.get('content-type'))
+ self.assertEquals(
+ "attachment; filename*=UTF-8''SIP_20160611_PLONE_10xy.zip",
+ browser.headers.get('content-disposition'))
diff --git a/opengever/disposition/tests/test_overview.py b/opengever/disposition/tests/test_overview.py
index 90ab7e7a488..86f8e662401 100644
--- a/opengever/disposition/tests/test_overview.py
+++ b/opengever/disposition/tests/test_overview.py
@@ -152,11 +152,13 @@ def test_action_availability(self, browser):
browser.css('ul.actions li').text)
browser.find('disposition-transition-dispose').click()
+
self.assertEquals(['Export appraisal list as excel',
'Download disposition package'],
browser.css('ul.actions li').text)
+
self.assertEquals(
- os.path.join(self.disposition.absolute_url(), 'ech0160_export'),
+ os.path.join(self.disposition.absolute_url(), 'ech0160_download'),
browser.find('Download disposition package').get('href'))
self.assertEquals(
os.path.join(self.disposition.absolute_url(), 'download_excel'),