From 834bf7ed7fbc1165bae2105ade26f71a71a10bf4 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Mon, 13 Mar 2017 14:18:49 +0100
Subject: [PATCH] issue #54: list of required equipment

* list is configuarable (start date and end date can be configured)
* view without css for copy to email
---
 smash/web/forms.py                            | 13 +++-
 .../equipment_and_rooms/kit_requests.html     | 61 ++++++++++++++++++-
 .../kit_requests_send_mail.html               | 26 ++++++++
 smash/web/urls.py                             |  3 +-
 smash/web/views.py                            | 35 ++++++++---
 5 files changed, 126 insertions(+), 12 deletions(-)
 create mode 100644 smash/web/templates/equipment_and_rooms/kit_requests_send_mail.html

diff --git a/smash/web/forms.py b/smash/web/forms.py
index 5df96b13..663f6886 100644
--- a/smash/web/forms.py
+++ b/smash/web/forms.py
@@ -1,5 +1,5 @@
 from django import forms
-from django.forms import ModelForm
+from django.forms import ModelForm, Form
 from .models import *
 from datetime import datetime
 
@@ -156,3 +156,14 @@ class VisitAddForm(ModelForm):
         if (self.cleaned_data['datetime_begin']>=self.cleaned_data['datetime_end']):
             self.add_error('datetime_begin', "Start date must be before end date")
             self.add_error('datetime_end', "Start date must be before end date")
+
+class KitRequestForm(Form):
+    start_date = forms.DateField(label="From date",
+        widget=forms.DateInput(DATEPICKER_DATE_ATTRS, "%Y-%m-%d"),
+        required=False
+    )
+
+    end_date = forms.DateField(label="End date",
+        widget=forms.DateInput(DATEPICKER_DATE_ATTRS, "%Y-%m-%d"),
+        required=False
+    )
diff --git a/smash/web/templates/equipment_and_rooms/kit_requests.html b/smash/web/templates/equipment_and_rooms/kit_requests.html
index 6f5154b8..b9881bd2 100644
--- a/smash/web/templates/equipment_and_rooms/kit_requests.html
+++ b/smash/web/templates/equipment_and_rooms/kit_requests.html
@@ -2,21 +2,58 @@
 
 {% block ui_active_tab %}'equipment_and_rooms'{% endblock ui_active_tab %}
 {% block page_header %}
-  Kits required between {{ start_date | date:"Y-m-d" }} and {% ifequal end_date '' %} end of time {% else %} {{ end_date | date:"Y-m-d" }} {% endifequal %}
+  Kits required between {{ start_date | date:"Y-m-d" }} and {% if end_date %}  {{ end_date | date:"Y-m-d" }} {% else %} end of time {% endif %}
 {% endblock page_header %}
 {% block page_description %}
 {% endblock page_description %}
 
+{% block styles %}
+{{ block.super }}
+	{% include "includes/datepicker.css.html" %}
+{% endblock styles %}
+
 {% block breadcrumb %}
 {% include "equipment_and_rooms/breadcrumb.html" %}
 {% endblock breadcrumb %}
 
 {% block maincontent %}
 
-<div class="row">
+{% block content %}
+<div class="box box-info">
+  <form method="post" action="" class="form-horizontal">
+		{% csrf_token %}
+
+		<div class="box-body">
+      <div class="col-sm-6">
+  			{% for field in form %}
+  				<div class="form-group {% if field.errors %}has-error{% endif %}">
+  					<label class="col-sm-4 control-label">
+  						{{ field.label }}
+  					</label>
+
+  					<div class="col-sm-8">
+  						{{ field }}
+  					</div>
+
+  					{% if field.errors %}
+  						<span class="help-block">
+  							{{ field.errors }}
+  						</span>
+  					{% endif %}
+  				</div>
+  			{% endfor %}
+      </div>
+		</div>
+
+    <div class="box-footer">
+			<div class="col-sm-6">
+				<button type="submit" class="btn btn-block btn-success">Search</button>
+			</div>
+		</div><!-- /.box-footer -->
 
+	</form>
 
-	<div class="col-md-12">
+	<div class="box col-md-12">
     <table id="visit_table" class="table table-bordered table-striped">
         <thead>
       <tr>
@@ -41,8 +78,26 @@
         {% endfor %}
       </tbody>
     </table>
+
+    <div class="box-footer">
+			<div class="col-sm-12">
+        {% if end_date == None %}
+          <a href="{% url 'web.views.kit_requests_send_mail' start_date|date:"Y-m-d" %}" class="btn btn-block btn-default">Show email content</a>
+        {% else %}
+          <a href="{% url 'web.views.kit_requests_send_mail' start_date|date:"Y-m-d" end_date|date:"Y-m-d" %}" class="btn btn-block btn-default">Show email content</a>
+        {% endif %}
+			</div>
+		</div><!-- /.box-footer -->
+
 	</div>
 
 
 </div>
+{% endblock %}
 {% endblock maincontent %}
+
+{% block scripts %}
+	{{ block.super }}
+
+  {% include "includes/datepicker.js.html" %}
+{% endblock scripts %}
diff --git a/smash/web/templates/equipment_and_rooms/kit_requests_send_mail.html b/smash/web/templates/equipment_and_rooms/kit_requests_send_mail.html
new file mode 100644
index 00000000..1c89a616
--- /dev/null
+++ b/smash/web/templates/equipment_and_rooms/kit_requests_send_mail.html
@@ -0,0 +1,26 @@
+<h1>Kits required between {{ start_date }} and {% if end_date %}  {{ end_date }} {% else %} end of time {% endif %}</h1>
+<table>
+  <thead>
+    <tr>
+      <th>Date</th>
+      <th>Kits</th>
+    </tr>
+  </thead>
+  <tbody>
+
+    {% for appointment in appointments %}
+      <tr>
+        <td>{{ appointment.datetime_when | date:"Y-m-d H:i"}}     </td>
+        <td>
+            {% for type in appointment.appointment_types.all %}
+              {% for item in type.required_equipment.all %}
+                {% if item.disposable %}
+                  {{ item.name }},
+                {% endif %}
+              {% endfor %}
+            {% endfor %}
+        </td>
+      </tr>
+    {% endfor %}
+  </tbody>
+</table>
diff --git a/smash/web/urls.py b/smash/web/urls.py
index e2dadb71..6712d2a4 100644
--- a/smash/web/urls.py
+++ b/smash/web/urls.py
@@ -57,7 +57,8 @@ urlpatterns = [
     url(r'^equipment_and_rooms$', views.equipment_and_rooms, name='web.views.equipment_and_rooms'),
     url(r'^equipment_and_rooms/eqdef$', views.equipment_def, name='web.views.equipment_def'),
     url(r'^equipment_and_rooms/kit_requests$', views.kit_requests, name='web.views.kit_requests'),
-    url(r'^equipment_and_rooms/kit_requests/(?P<start_date>\w+)/(?P<end_date>\w+)/$', views.kit_requests, name='web.views.kit_requests'),
+    url(r'^equipment_and_rooms/kit_requests/(?P<start_date>[\w-]+)/$', views.kit_requests_send_mail, name='web.views.kit_requests_send_mail'),
+    url(r'^equipment_and_rooms/kit_requests/(?P<start_date>[\w-]+)/(?P<end_date>[\w-]+)/$', views.kit_requests_send_mail, name='web.views.kit_requests_send_mail'),
 
 
     url(r'^mail_templates$', views.mail_templates, name='web.views.mail_templates'),
diff --git a/smash/web/views.py b/smash/web/views.py
index fe3d78c2..f8604523 100644
--- a/smash/web/views.py
+++ b/smash/web/views.py
@@ -704,13 +704,14 @@ def write_appointments_to_csv(writer):
 def export(request):
 	return wrap_response(request, 'export/index.html',{})
 
-def get_kit_requests(user, start_date = '', end_date = ''):
-	if start_date =='':
+def get_kit_requests(user, start_date = None, end_date = None):
+	if start_date == None:
 		start_date = get_today_midnight_date() + datetime.timedelta(days=1)
 		end_date = start_date + datetime.timedelta(days=7)
 	else :
-		start_date = parse_datetime(start_date)
-		if end_date != '':
+		if isinstance(start_date, str):
+			start_date = parse_datetime(start_date)
+		if (end_date != None) and (isinstance(end_date, str)):
 			end_date = parse_datetime(end_date)
 
 	appointment_types = AppointmentType.objects.filter(required_equipment__disposable=True)
@@ -721,7 +722,7 @@ def get_kit_requests(user, start_date = '', end_date = ''):
 		location__in = get_filter_locations(user),
 		status = Appointment.APPOINTMENT_STATUS_SCHEDULED,
 		)
-	if end_date!='':
+	if end_date!=None:
 		appointments = appointments.filter(datetime_when__lt = end_date)
 
 	result = {
@@ -731,6 +732,26 @@ def get_kit_requests(user, start_date = '', end_date = ''):
 		}
 	return result
 
-def kit_requests(request,start_date = '', end_date = ''):
+def get_kit_requests_data(request, start_date = None, end_date = None):
+	form = KitRequestForm()
+	if request.method=='POST':
+		form = KitRequestForm(request.POST)
+		if form.is_valid():
+			form_data = form.cleaned_data
+			start_date = form_data.get('start_date')
+			end_date = form_data.get('end_date')
+
+	params = get_kit_requests(request.user, start_date, end_date)
+	params.update({
+		'form': form
+	})
+	print "\n\n\n\n"
+	print params['start_date']
+	print "\n\n\n\n"
+	return params
+
+def kit_requests(request):
+	return wrap_response(request, 'equipment_and_rooms/kit_requests.html', get_kit_requests_data(request))
 
-	return wrap_response(request, 'equipment_and_rooms/kit_requests.html', get_kit_requests(request.user, start_date, end_date))
+def kit_requests_send_mail(request, start_date, end_date = None):
+	return wrap_response(request, 'equipment_and_rooms/kit_requests_send_mail.html', get_kit_requests_data(request, start_date, end_date))
-- 
GitLab