From 542d29ed51ebac97652b623e844aff4b1b6e136a Mon Sep 17 00:00:00 2001
From: anonymous <anonymous>
Date: Thu, 27 Jun 2019 12:54:41 +0200
Subject: [PATCH] ODPSH-31

---
 .../odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo  | Bin 8762 -> 8946 bytes
 .../odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po  |   9 +++++
 ckanext/odsh/plugin.py                        |   3 ++
 ckanext/odsh/public/odsh.css                  |  18 ++++++----
 .../odsh/templates/datarequests/close.html    |  16 +++++++++
 .../odsh/templates/datarequests/comment.html  |   2 +-
 ckanext/odsh/templates/datarequests/edit.html |  16 +++++++++
 ckanext/odsh/templates/datarequests/new.html  |   8 ++---
 .../snippets/datarequest_form.html            |   9 +++--
 ckanext/odsh/tests/test_datarequest.py        |  32 +++++++++++++++++-
 ckanext/odsh/tests/test_helpers.py            |   1 +
 11 files changed, 96 insertions(+), 18 deletions(-)
 create mode 100644 ckanext/odsh/templates/datarequests/close.html
 create mode 100644 ckanext/odsh/templates/datarequests/edit.html

diff --git a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo
index cef945a8afa87f4e86460ece41951d9de3fdfc29..8be79d9fd27fdd19815a279d577a8af7bd65b6ed 100644
GIT binary patch
delta 2526
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
IzGyTL027b_(f|Me

delta 2376
zcmez5y33{ho)F7a1_lO(eg*~x83qQ1DJ&o!0`qV(FfcPPFz`ZYK`1TC$-n?oDhcJw
zaWXInF)%PFaWXLQGcYiiaxyS*GcYi?Lg_$Gi21Rc3=FIc3=CDA3=HfH4D}2RoD2-&
z3=9k%oD2-S3=9klpc>Xe>0O)*415d>49B1bUxixy6v}_a$-uzHz`*c}lYv2yfq{XQ
zi-AFbfq_Asi-AFsfq}t-3nCuG1yPs61#wtD7sw&?3=Gv=5SKS{F)*-!LV$~bfs=uO
zVKx^7g9HNu!&0dDJ}w3Z0R{$!qfi5{aWOE6F)%Q^-~#)E;Xl*@c5aZt3=Bft5c4Fs
zAs&$DW?&FyU|`VWW?)cdU|?|JW?*2hXJBB+;)eJ<kDGx(g@J*ghMR#wgn@x!AvXhq
zECU0>Hg1STSD@-%b3=UglbeBogMooTm<M8k3=hO&Z7AQ62V#x`55z;EP&%Fm5(1e#
z3=H+4xGLp=__P(OU>*+xgEa#K!wMb-1}O#xh9^9bxc<+>z`(=6z`()_u~3kgfkBsn
zfkA;6;xj*9hyzl1Ar8ypg@iycRDBgxyptCa<&$_B>cNR<6)z;wtmlPTv>&SB2vqzs
zFT@9rp$5E#s{00|e?w_dLII@(Rz8RW1^6K5$wO%sD6PrIz@P|<3ch-Xf&e~99ES2i
zTpkOh)1cz{P>tn$5Fgd>L87dg4-#?{q4KNvAVIsHkAXp(fq`K+A0#B7^FeZvGCw3S
zs`Eqau>^%bC>uHPGcX7<Ffh3DLxM7z9}+}`{E*b#$qz|1tN0lhG#MBeE<pLepz;a=
z3=DD%3=EC}5cLTHkhIe%07)zJ1sE9Q85kILLislZARe#(EC5OUKcE8Kf)IlQ1R*}t
z7lg=r2tqVO3ql;40998a2yyUaL5RgG1tC#&N|1qpiGhLP3RK^9L5M@{2r@88GcYiG
z6J%hp0_A@pAqECL1_lOSAqEC7Q0f<AV6b3dU^p(sz%YRkl)NE9Jy8UbM&^q^;&wfh
z-X{VH^0OikbvH#IiS)S$#9?1VARgfog@mB8C`6s7C`esB14Fnd#6>Bh5Q7`Q5)2Ie
zQ2rcINSv(}h2;OeqL4IjP84FnRZ&Rxd=2F@i7_y!F)%Plh(UtfUJPPkyck4%t{B9g
zW-$f^c2NGGBnB~fmKem~)nbs6YLgfw==VbT7sMDClo=QpZi_K6C^0ZF{1<~nm6A9_
zpCgp^5Qk(#e<(jx98wO%h(kPDC=N-Sz2XcE^`NqSr#Qq#d&MCJo)L$X)vv`NKH!jm
z@HHeLLG3C5NnC*vkSNKQfP_%J1SHW;lz{kjC6vEk0^-5z5|EI1ApuDv-y|67!DTdv
z02Pf=k`M(3k_-$X3=9l*l91Fs87jV45|a2%OF}HTFUi1Q#K6GtRTAP*4JnAvJ)|HO
z_(?%RCIZTjmx3hXOeshd<w?~uFxWCMFie$#1kq(FNICFA3gV*=QV^FjNka@2hSIXq
z5TB|`LsGT9G(=ydG{ggm(h&Xm(hvtUN<;F0hcqPWdZZZ`bQl;I*4Ilz;`)v>q(FEM
zwcrDk{spC3WFS7~lYs=eiVURaHIZRpFlS(3NRnY-FkoO{m?Z;o@M#%HRNj$+<gVW`
zkdV=mg*ePW7LvB=on#>{43&jwjFDwv&|qL-$d!dyFijR>!4X-Afq!Hn21?68vXhq_
zBrO!kL878h4idBn<skZB$UzdDm^=f6Ap--0lRU&DCGy}9uV?6zhgdvc9%9f2c?Je8
z1_p+6@{lt6r#!@^(h877sHXri*joYOuu27p!5bAIMeSn+NJz>nLV{dF5fU{zijd08
zL=j?+zaq#3(hLkaiVO^v3=9mD6d4$t85kJOC_)mQz+_9#3by>blEmba$qzV7Hm7sN
YaC3Qs1hPvqQ;R157wy`-Sj?XX0IwF+N&o-=

diff --git a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po
index 8190419f..43b3fa34 100644
--- a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po
+++ b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po
@@ -439,6 +439,15 @@ msgstr "Fertig"
 msgid "Data Proposal"
 msgstr "Datenvorschlag"
 
+msgid "Create Data Proposal"
+msgstr "Datensatz vorschlagen"
+
+msgid "Close Data Proposal"
+msgstr "Datenvorschlag abschließen"
+
+msgid "Edit Data Proposal"
+msgstr "Datenvorschlag bearbeiten"
+
 msgid "No data proposal found"
 msgstr "Kein Datenvorschlag gefunden"
 
diff --git a/ckanext/odsh/plugin.py b/ckanext/odsh/plugin.py
index 7531b568..405f275b 100644
--- a/ckanext/odsh/plugin.py
+++ b/ckanext/odsh/plugin.py
@@ -367,6 +367,9 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm
             m.connect('user_datasets', '/user/{id:.*}', action='read',
                       ckan_icon='sitemap')
 
+        map.connect('comment_datarequest', '/datarequest/new',
+                    controller='ckanext.datarequests.controllers.ui_controller:DataRequestsUI',
+                    action='new', conditions=dict(method=['GET', 'POST']), ckan_icon='comment')
         map.connect('comment_datarequest', '/datarequest/{id}',
                     controller='ckanext.datarequests.controllers.ui_controller:DataRequestsUI',
                     action='comment', conditions=dict(method=['GET', 'POST']), ckan_icon='comment')
diff --git a/ckanext/odsh/public/odsh.css b/ckanext/odsh/public/odsh.css
index ce861036..496f42b7 100644
--- a/ckanext/odsh/public/odsh.css
+++ b/ckanext/odsh/public/odsh.css
@@ -1959,16 +1959,15 @@ p.package-info-categorie
     background-color: #003064;
 }
 
-.label.label-open
+.label.label-closed
 {
     color: white;
-    background-color: #003064;
+    background-color: #DBDBDB;
 }
 
-.label.label-closed
+.datarequest .dataset-heading .label
 {
-    color: white;
-    background-color: #DBDBDB;
+    vertical-align: top;
 }
 
 .datarequest-subtitle
@@ -2076,4 +2075,11 @@ p.package-info-categorie
 .datarequest .dataset-content .icon-comment
 {
     margin-top: 10px;
-}
\ No newline at end of file
+}
+
+.datarequest .dataset-form{
+    width: 715px;
+}
+.datarequest .dataset-form .row-fluid .span6 {
+    width: 715px;
+}
diff --git a/ckanext/odsh/templates/datarequests/close.html b/ckanext/odsh/templates/datarequests/close.html
new file mode 100644
index 00000000..65d168a6
--- /dev/null
+++ b/ckanext/odsh/templates/datarequests/close.html
@@ -0,0 +1,16 @@
+{% extends "datarequests/base.html" %}
+
+{% block subtitle %}{{ _('Close Data Proposal') }}{% endblock %}
+
+{% block breadcrumb_content %}
+  <li>{% link_for _('Data Proposal'), controller='ckanext.datarequests.controllers.ui_controller:DataRequestsUI', action='index' %}</li>
+  <li>{% link_for c.datarequest.get('title')|truncate(30), controller='ckanext.datarequests.controllers.ui_controller:DataRequestsUI', action='show', id=c.datarequest.get('id') %}</li>
+  <li class="active"><a href="">{{ _('Close Data Proposal') }}</a></li>
+{% endblock %}
+
+{% block primary_content_inner %}
+  <h1 class="{% block page_heading_class %}page-heading{% endblock %}">{% block page_heading %}{{ _('Close Data Proposal') }}{% endblock %}</h1>
+  {% snippet "datarequests/snippets/close_datarequest_form.html", datarequest=c.datarequest, datasets=c.datasets, errors=c.errors, errors_summary=c.errors_summary  %}
+{% endblock %}
+
+{% block page_header %}{% endblock %}
\ No newline at end of file
diff --git a/ckanext/odsh/templates/datarequests/comment.html b/ckanext/odsh/templates/datarequests/comment.html
index 5b550518..25e9567b 100644
--- a/ckanext/odsh/templates/datarequests/comment.html
+++ b/ckanext/odsh/templates/datarequests/comment.html
@@ -57,7 +57,7 @@
           <div  class="dataset-details">
             {% if c.datarequest.get('closed', False) %}
             <div class="label label-closed">
-                {% trans %}Closed{% endtrans %}
+                {% trans %}Done{% endtrans %}
             </div>
             {% else %}
             <div class="label label-open">
diff --git a/ckanext/odsh/templates/datarequests/edit.html b/ckanext/odsh/templates/datarequests/edit.html
new file mode 100644
index 00000000..6ca7fb66
--- /dev/null
+++ b/ckanext/odsh/templates/datarequests/edit.html
@@ -0,0 +1,16 @@
+{% extends "datarequests/base.html" %}
+
+{% block subtitle %}{{ _('Edit Data Proposal') }}{% endblock %}
+
+{% block breadcrumb_content %}
+  <li>{% link_for _('Data Proposal'), controller='ckanext.datarequests.controllers.ui_controller:DataRequestsUI', action='index' %}</li>
+  <li>{% link_for c.original_title|truncate(30), controller='ckanext.datarequests.controllers.ui_controller:DataRequestsUI', action='show', id=c.datarequest.get('id') %}</li>
+  <li class="active"><a href="">{{ _('Edit Data Proposal') }}</a></li>
+{% endblock %}
+
+{% block primary_content_inner %}
+  <h1 class="{% block page_heading_class %}page-heading{% endblock %}">{% block page_heading %}{{ _('Edit Data Proposal') }}{% endblock %}</h1>
+  {% snippet "datarequests/snippets/edit_datarequest_form.html", data=c.datarequest, errors=c.errors, errors_summary=c.errors_summary, offering=c.offering %}
+{% endblock %}
+
+{% block page_header %}{% endblock %}
\ No newline at end of file
diff --git a/ckanext/odsh/templates/datarequests/new.html b/ckanext/odsh/templates/datarequests/new.html
index 46dd7b08..e8f5807d 100644
--- a/ckanext/odsh/templates/datarequests/new.html
+++ b/ckanext/odsh/templates/datarequests/new.html
@@ -3,8 +3,8 @@
 {% block subtitle %}{{ _('Create Data Request') }}{% endblock %}
 
 {% block breadcrumb_content %}
-  <li>{% link_for _('Data Requests'), controller='ckanext.datarequests.controllers.ui_controller:DataRequestsUI', action='index' %}</li>
-  <li class="active"><a href="">{{ _('Create Data Request') }}</a></li>
+  <li>{% link_for _('Data Proposal'), controller='ckanext.datarequests.controllers.ui_controller:DataRequestsUI', action='index' %}</li>
+  <li class="active"><a href="">{{ _('Create Data Proposal') }}</a></li>
 {% endblock %}
 
 {% block primary_content_inner %}
@@ -12,9 +12,7 @@
   {% snippet "datarequests/snippets/new_datarequest_form.html", data=c.datarequest, errors=c.errors, errors_summary=c.errors_summary, offering=c.offering %}
 {% endblock %}
 
-{% block secondary_content_additional_info %}
-  <p>{% trans %}To create a data request, fill the form and specify a title and a description for your request. Please, be as clear as you can in order to ease the task of accomplishing your request. You can also specify an organization if your data request is closely related with it. {% endtrans %}
-  </p>
+{% block secondary %}
 {% endblock %}
 
 {% block page_header %}{% endblock %}
\ No newline at end of file
diff --git a/ckanext/odsh/templates/datarequests/snippets/datarequest_form.html b/ckanext/odsh/templates/datarequests/snippets/datarequest_form.html
index 54b823f0..9bebd010 100644
--- a/ckanext/odsh/templates/datarequests/snippets/datarequest_form.html
+++ b/ckanext/odsh/templates/datarequests/snippets/datarequest_form.html
@@ -4,22 +4,21 @@
 {% set description = data.get('description', '') %}
 {% set organization_id = data.get('organization_id', h.get_request_param('organization')) %}
 {% set organizations_available = h.organizations_available('read') %}
-{% set form_horizontal = 'form-horizontal' if h.ckan_version()[:3] <= '2.7' else '' %}
 
 {# This provides a full page that renders a form for publishing a dataset. It can
 then itself be extended to add/remove blocks of functionality. #}
-<form class="dataset-form {{ form_horizontal }}" method="post" data-module="basic-form" action enctype="multipart/form-data">
+<form class="dataset-form" method="post" data-module="basic-form" action enctype="multipart/form-data">
 
   <input type="hidden" id="id" name="id" value="{{ data.get('id', '') }}" />
 
   {% block errors %}{{ form.errors(errors_summary) }}{% endblock %}
 
   {% block offering_title %}
-    {{ form.input('title', id='field-title', label=_('Title'), placeholder=_('eg. Data Request Name'), value=title, error=errors['Title'], classes=['control-full', 'control-large'], is_required=true) }}
+    {{ form.input('title', id='field-title', label=_('Title'), placeholder=_('eg. Data Request Name'), value=title, error=errors['Title'], classes=['control-full'], is_required=true) }}
   {% endblock %}
 
   {% block offering_description %}
-    {{ form.markdown('description', id='field-description', label=_('Description'), placeholder=_('eg. Data Request description'), value=description, error=errors['Description']) }}
+    {{ form.markdown('description', id='field-description', label=_('Description'), placeholder=_('eg. Data Request description'), value=description, error=errors['Description'], is_required=true) }}
   {% endblock %}
 
 
@@ -31,7 +30,7 @@ then itself be extended to add/remove blocks of functionality. #}
           <a class="btn btn-danger pull-left" href="{% url_for controller='ckanext.datarequests.controllers.ui_controller:DataRequestsUI', action='delete', id=data.get('id') %}" data-module="confirm-action" data-module-i18n="{{ locale }}">{% block delete_button_text %}{{ _('Delete') }}{% endblock %}</a>
         {% endif %}
       {% endblock %}
-      <button class="btn btn-primary" type="submit" name="save">{% block save_button_text %}{{ _('Create Data Request') }}{% endblock %}</button>
+      <button class="btn btn-primary btn-arrow-right" type="submit" name="save">{% block save_button_text %}{{ _('Create Data Request') }}{% endblock %}</button>
     </div>
   {% endblock %}
 
diff --git a/ckanext/odsh/tests/test_datarequest.py b/ckanext/odsh/tests/test_datarequest.py
index d94695c3..a37c7e4e 100644
--- a/ckanext/odsh/tests/test_datarequest.py
+++ b/ckanext/odsh/tests/test_datarequest.py
@@ -38,8 +38,9 @@ class TestDatarequest:
         form['description'] = markdown
         final_response = self.app.submit_form(form)
 
+
         id = re.search(
-            '/datarequest/comment/([a-zA-Z0-9\-]*)">', final_response.body).group(1)
+            '/datarequest/edit/([a-zA-Z0-9\-]*)">', final_response.body).group(1)
         return id
 
     def test_create_datarequest(self):
@@ -50,6 +51,22 @@ class TestDatarequest:
         response = self.app.get('/datarequest')
         assert id in response
 
+    def test_edit_datarequest(self):
+        # Arrange
+        id = self._create_request()
+
+        # Act
+        response = self.app.get('/datarequest/edit/'+id)
+        form = response.forms[0]
+        form['title'] = id+'edit_title'
+        form['description'] = id+'edit_desc'
+        final_response = self.app.submit_form(form)
+
+        # Assert
+        response = self.app.get('/datarequest/'+id)
+        assert id+'edit_title' in response
+        assert id+'edit_desc' in response
+
     def test_comment_datarequest(self):
         # Arrange
         id = self._create_request()
@@ -64,6 +81,19 @@ class TestDatarequest:
         # Assert
         assert guid in final_response
 
+    def test_close_datarequest(self):
+        # Arrange
+        id = self._create_request()
+
+        # Act
+        response = self.app.get('/datarequest/close/'+id)
+        form = response.forms[0]
+        final_response = self.app.submit_form(form)
+
+        # Assert
+        response = self.app.get('/datarequest/'+id)
+        assert 'label-closed' in response
+
     def _get_app(self):
         if not hasattr(self, 'app'):
             app = AppProxy()
diff --git a/ckanext/odsh/tests/test_helpers.py b/ckanext/odsh/tests/test_helpers.py
index 678af9b0..f033b573 100644
--- a/ckanext/odsh/tests/test_helpers.py
+++ b/ckanext/odsh/tests/test_helpers.py
@@ -5,6 +5,7 @@ from ckan.common import config
 import ckan.config.middleware
 import ckan.tests.helpers as helpers
 import sys
+import pdb
 
 
 def odsh_test():
-- 
GitLab