From 6f84a115bccae00bdbb8ee993b994d5c5d60128b Mon Sep 17 00:00:00 2001
From: Jacek Lebioda <jacek.lebioda@uni.lu>
Date: Tue, 12 Dec 2017 16:43:22 +0100
Subject: [PATCH] Item modification

---
 smash/web/forms/forms.py                      | 10 ++-
 .../equipment_and_rooms/equipment/add.html    | 61 ++++++++++++++++++
 .../equipment/breadcrumb.html                 |  2 +-
 .../equipment_and_rooms/equipment/edit.html   | 62 +++++++++++++++++++
 .../equipment_and_rooms/equipment/index.html  | 20 ++++--
 .../templates/equipment_and_rooms/index.html  | 55 ++++++++--------
 smash/web/templates/sidebar.html              |  1 +
 smash/web/urls.py                             |  5 +-
 smash/web/views/equipment.py                  | 47 +++++++++++++-
 9 files changed, 223 insertions(+), 40 deletions(-)
 create mode 100644 smash/web/templates/equipment_and_rooms/equipment/add.html
 create mode 100644 smash/web/templates/equipment_and_rooms/equipment/edit.html

diff --git a/smash/web/forms/forms.py b/smash/web/forms/forms.py
index 65e60931..1a2a4f90 100644
--- a/smash/web/forms/forms.py
+++ b/smash/web/forms/forms.py
@@ -7,8 +7,8 @@ from django.forms import ModelForm, Form
 from django.utils.dates import MONTHS
 
 from web.models import Appointment, AppointmentType, AppointmentTypeLink, \
-    Availability, ContactAttempt, FlyingTeam, Holiday, StudySubject, Room, \
-    Worker, Visit, VoucherType, VoucherTypePrice
+    Availability, ContactAttempt, FlyingTeam, Holiday, Item, \
+    StudySubject, Room, Worker, Visit, VoucherType, VoucherTypePrice
 from web.models.constants import SUBJECT_TYPE_CHOICES
 from web.views.notifications import get_filter_locations
 
@@ -369,6 +369,12 @@ def validate_availability_conflict(self, cleaned_data, availability):
         self.add_error('available_till', error)
 
 
+class ItemForm(ModelForm):
+    class Meta:
+        model = Item
+        fields = "__all__"
+
+
 class FlyingTeamAddForm(ModelForm):
     class Meta:
         model = FlyingTeam
diff --git a/smash/web/templates/equipment_and_rooms/equipment/add.html b/smash/web/templates/equipment_and_rooms/equipment/add.html
new file mode 100644
index 00000000..c73c1847
--- /dev/null
+++ b/smash/web/templates/equipment_and_rooms/equipment/add.html
@@ -0,0 +1,61 @@
+{% extends "_base.html" %}
+{% load static %}
+{% load filters %}
+
+{% block styles %}
+    {{ block.super }}
+    <link rel="stylesheet" href="{% static 'AdminLTE/plugins/awesomplete/awesomplete.css' %}"/>
+{% endblock styles %}
+
+{% block ui_active_tab %}'equipment_and_rooms'{% endblock ui_active_tab %}
+{% block page_header %}New equipment definition{% endblock page_header %}
+{% block page_description %}{% endblock page_description %}
+
+{% block title %}{{ block.super }} - Add new equipment definition{% endblock %}
+
+{% block breadcrumb %}
+    {% include "equipment_and_rooms/equipment/breadcrumb.html" %}
+{% endblock breadcrumb %}
+
+{% block maincontent %}
+        <div class="box box-info">
+            <div class="box-header with-border">
+                <a href="{% url 'web.views.equipment' %}" class="btn btn-block btn-default">Go back (without changes)</a>
+            </div>
+
+            <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 for="{# TODO #}" class="col-sm-4 control-label">
+                                    {{ field.label }}
+                                </label>
+
+                                <div class="col-sm-8">
+                                    {{ field|add_class:'form-control' }}
+                                </div>
+
+                                {% if field.errors %}
+                                    <span class="help-block">
+                                        {{ field.errors }}
+                                     </span>
+                                {% endif %}
+                            </div>
+                        {% endfor %}
+                    </div>
+                </div><!-- /.box-body -->
+
+                <div class="box-footer">
+                    <div class="col-sm-6">
+                        <button type="submit" class="btn btn-block btn-success">Add</button>
+                    </div>
+                    <div class="col-sm-6">
+                        <a href="{% url 'web.views.equipment' %}" class="btn btn-block btn-default">Cancel</a>
+                    </div>
+                </div><!-- /.box-footer -->
+            </form>
+        </div>
+    {% endblock %}
diff --git a/smash/web/templates/equipment_and_rooms/equipment/breadcrumb.html b/smash/web/templates/equipment_and_rooms/equipment/breadcrumb.html
index 3b209ad3..7205568f 100644
--- a/smash/web/templates/equipment_and_rooms/equipment/breadcrumb.html
+++ b/smash/web/templates/equipment_and_rooms/equipment/breadcrumb.html
@@ -1,3 +1,3 @@
 <li><a href="{% url 'web.views.appointments' %}"><i class="fa fa-dashboard"></i> Dashboard</a></li>
 <li><a href="{% url 'web.views.equipment_and_rooms' %}">Equipment and rooms</a></li>
-<li class="active"><a href="{% url 'web.views.equipment_def' %}">Equipment definitions</a></li>
+<li class="active"><a href="{% url 'web.views.equipment' %}">Equipment definitions</a></li>
diff --git a/smash/web/templates/equipment_and_rooms/equipment/edit.html b/smash/web/templates/equipment_and_rooms/equipment/edit.html
new file mode 100644
index 00000000..df7d706b
--- /dev/null
+++ b/smash/web/templates/equipment_and_rooms/equipment/edit.html
@@ -0,0 +1,62 @@
+{% extends "_base.html" %}
+{% load static %}
+{% load filters %}
+
+{% block styles %}
+    {{ block.super }}
+    <link rel="stylesheet" href="{% static 'AdminLTE/plugins/awesomplete/awesomplete.css' %}"/>
+{% endblock styles %}
+
+{% block ui_active_tab %}'equipment_and_rooms'{% endblock ui_active_tab %}
+{% block page_header %}Edit equipment definition{% endblock page_header %}
+{% block page_description %}{% endblock page_description %}
+
+{% block title %}{{ block.super }} - Edit equipment definition{% endblock %}
+
+{% block breadcrumb %}
+    {% include "equipment_and_rooms/equipment/breadcrumb.html" %}
+{% endblock breadcrumb %}
+
+{% block maincontent %}
+
+        <div class="box box-info">
+            <div class="box-header with-border">
+                <a href="{% url 'web.views.equipment' %}" class="btn btn-block btn-default">Go back (without changes)</a>
+            </div>
+
+            <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 for="{# TODO #}" class="col-sm-4 control-label">
+                                    {{ field.label }}
+                                </label>
+
+                                <div class="col-sm-8">
+                                    {{ field|add_class:'form-control' }}
+                                </div>
+
+                                {% if field.errors %}
+                                    <span class="help-block">
+                                        {{ field.errors }}
+                                     </span>
+                                {% endif %}
+                            </div>
+                        {% endfor %}
+                    </div>
+                </div><!-- /.box-body -->
+
+                <div class="box-footer">
+                    <div class="col-sm-6">
+                        <button type="submit" class="btn btn-block btn-success">Save</button>
+                    </div>
+                    <div class="col-sm-6">
+                        <a href="{% url 'web.views.equipment' %}" class="btn btn-block btn-default">Cancel</a>
+                    </div>
+                </div><!-- /.box-footer -->
+            </form>
+        </div>
+    {% endblock %}
diff --git a/smash/web/templates/equipment_and_rooms/equipment/index.html b/smash/web/templates/equipment_and_rooms/equipment/index.html
index 997a206e..d1869fa9 100644
--- a/smash/web/templates/equipment_and_rooms/equipment/index.html
+++ b/smash/web/templates/equipment_and_rooms/equipment/index.html
@@ -7,7 +7,7 @@
     <link rel="stylesheet" href="{% static 'AdminLTE/plugins/datatables/dataTables.bootstrap.css' %}">
 {% endblock styles %}
 
-{% block ui_active_tab %}'eqdef'{% endblock ui_active_tab %}
+{% block ui_active_tab %}'equipment_and_rooms'{% endblock ui_active_tab %}
 {% block page_header %}Equipment definitions{% endblock page_header %}
 {% block page_description %}{% endblock page_description %}
 
@@ -18,7 +18,7 @@
 {% block maincontent %}
 
     <div>
-        <a class="btn btn-app">
+        <a class="btn btn-app" href="{% url 'web.views.equipment_add' %}">
             <i class="fa fa-plus"></i> Add new equipment type
         </a>
     </div>
@@ -31,6 +31,7 @@
                     <th>No.</th>
                     <th>Name</th>
                     <th>Is fixed?</th>
+                    <th>Is disposable?</th>
                     <th>Edit</th>
                     <th>Delete</th>
                 </tr>
@@ -42,16 +43,23 @@
                         <td>{{ equip.name }}</td>
                         <td>
                             {% if equip.isFixed %}
-                                <button type="button" class="btn btn-block btn-danger">YES</button>
+                                Yes
                             {% else %}
-                                <button type="button" class="btn btn-block btn-success">NO</button>
+                                No
                             {% endif %}
                         </td>
                         <td>
-                            <button type="button" class="btn btn-block btn-default">Edit</button>
+                            {% if equip.disposable %}
+                                Yes
+                            {% else %}
+                                No
+                            {% endif %}
+                        </td>
+                        <td>
+                            <a href="{% url 'web.views.equipment_edit' equip.id %}" class="btn btn-block btn-default">Edit</button>
                         </td>
                         <td>
-                            <button type="button" class="btn btn-block btn-default">Delete</button>
+                            <a href="{% url 'web.views.equipment_delete' equip.id %}" class="btn btn-block btn-danger">Delete</button>
                         </td>
                     </tr>
                 {% endfor %}
diff --git a/smash/web/templates/equipment_and_rooms/index.html b/smash/web/templates/equipment_and_rooms/index.html
index db2a4628..365946c8 100644
--- a/smash/web/templates/equipment_and_rooms/index.html
+++ b/smash/web/templates/equipment_and_rooms/index.html
@@ -43,7 +43,7 @@
 			<div class="icon">
 			  <i class="ion ion-settings"></i>
 			</div>
-			<a href="{% url 'web.views.equipment_def' %}" class="small-box-footer">
+			<a href="{% url 'web.views.equipment' %}" class="small-box-footer">
 			  Edit <i class="fa fa-arrow-circle-right"></i>
 			</a>
 		</div>
@@ -78,36 +78,35 @@
         			  Manage <i class="fa fa-arrow-circle-right"></i>
         			</a>
         		</div>
+        </div>
+        <div class="col-md-3">
+          <div class="bg-green small-box">
+            <div class="inner">
+              <h4>Rooms</h4>
 
-            <div class="bg-green small-box">
-        			<div class="inner">
-        			  <h4>Rooms</h4>
+              <p>&nbsp;</p>
+            </div>
+            <div class="icon">
+              <i class="ion ion-android-home"></i>
+            </div>
+            <a href="{% url 'web.views.equipment_and_rooms.rooms' %}" class="small-box-footer">
+              Manage <i class="fa fa-arrow-circle-right"></i>
+            </a>
+          </div>
 
-        			  <p>&nbsp;</p>
-        			</div>
-        			<div class="icon">
-        			  <i class="ion ion-android-home"></i>
-        			</div>
-        			<a href="#" class="small-box-footer">
-        			  Manage <i class="fa fa-arrow-circle-right"></i>
-        			</a>
-        		</div>
+          <div class="bg-green small-box">
+            <div class="inner">
+              <h4>Equipment in rooms</h4>
 
-            {% comment %}
-		<div class="bg-yellow small-box">
-			<div class="inner">
-			  <h4>Equipment in rooms</h4>
-
-			  <p>&nbsp;</p>
-			</div>
-			<div class="icon">
-			  <i class="ion ion-medkit"></i>
-			</div>
-			<a href="#" class="small-box-footer">
-			  Edit <i class="fa fa-arrow-circle-right"></i>
-			</a>
-		</div>
-    {% endcomment %}
+              <p>&nbsp;</p>
+            </div>
+            <div class="icon">
+              <i class="ion ion-medkit"></i>
+            </div>
+            <a href="{% url 'web.views.equipment' %}" class="small-box-footer">
+              Edit <i class="fa fa-arrow-circle-right"></i>
+            </a>
+          </div>
         </div>
 
         {% comment %}
diff --git a/smash/web/templates/sidebar.html b/smash/web/templates/sidebar.html
index c883860f..89063a20 100644
--- a/smash/web/templates/sidebar.html
+++ b/smash/web/templates/sidebar.html
@@ -38,6 +38,7 @@
             </span>
         </a>
         <ul class="treeview-menu">
+            <li><a href="{% url 'web.views.equipment' %}">Equipment items</a></li>
               <li><a href="{% url 'web.views.equipment_and_rooms.flying_teams' %}">Flying teams</a></li>
               <li><a href="{% url 'web.views.kit_requests' %}">Kit requests</a></li>
               <li><a href="{% url 'web.views.equipment_and_rooms.rooms' %}">Rooms</a></li>
diff --git a/smash/web/urls.py b/smash/web/urls.py
index fef4fade..fc52d712 100644
--- a/smash/web/urls.py
+++ b/smash/web/urls.py
@@ -122,7 +122,10 @@ urlpatterns = [
     ####################
 
     url(r'^equipment_and_rooms$', views.equipment.equipment_and_rooms, name='web.views.equipment_and_rooms'),
-    url(r'^equipment_and_rooms/equipment_def$', views.equipment.equipment_def, name='web.views.equipment_def'),
+    url(r'^equipment_and_rooms/equipment/add$', views.equipment.equipment_add, name='web.views.equipment_add'),
+    url(r'^equipment_and_rooms/equipment/edit/(?P<equipment_id>\d+)$', views.equipment.equipment_edit, name='web.views.equipment_edit'),
+    url(r'^equipment_and_rooms/equipment/delete/(?P<equipment_id>\d+)$', views.equipment.equipment_delete, name='web.views.equipment_delete'),
+    url(r'^equipment_and_rooms/equipment$', views.equipment.equipment, name='web.views.equipment'),
     url(r'^equipment_and_rooms/kit_requests$', views.kit.kit_requests, name='web.views.kit_requests'),
     url(r'^equipment_and_rooms/kit_requests/(?P<start_date>[\w-]+)/$', views.kit.kit_requests_send_mail,
         name='web.views.kit_requests_send_mail'),
diff --git a/smash/web/views/equipment.py b/smash/web/views/equipment.py
index 8b00db7d..6db42477 100644
--- a/smash/web/views/equipment.py
+++ b/smash/web/views/equipment.py
@@ -1,11 +1,54 @@
 # coding=utf-8
-from django.shortcuts import redirect
+from django.shortcuts import redirect, get_object_or_404
 
 from . import wrap_response
 from ..models import Item
+from ..forms.forms import ItemForm
 
 
-def equipment_def(request):
+def equipment(request):
+    equipment_list = Item.objects.order_by('-name')
+    context = {
+        'equipment_list': equipment_list
+    }
+
+    return wrap_response(request, "equipment_and_rooms/equipment/index.html", context)
+
+
+def equipment_add(request):
+    0 // 0
+    if request.method == 'POST':
+        form = ItemForm(request.POST)
+        if form.is_valid():
+            form.save()
+            return redirect('web.views.equipment')
+    else:
+        form = ItemForm()
+
+    return wrap_response(request, 'equipment_and_rooms/equipment/add.html', {'form': form})
+
+
+def equipment_edit(request, equipment_id):
+    the_item = get_object_or_404(Item, id=equipment_id)
+    if request.method == 'POST':
+        form = ItemForm(request.POST, instance=the_item)
+        if form.is_valid():
+            form.save()
+            return redirect('web.views.equipment')
+    else:
+        form = ItemForm(instance=the_item)
+
+    return wrap_response(request, 'equipment_and_rooms/equipment/edit.html', {'form': form})
+
+
+def equipment_delete(request, equipment_id):
+    the_item = get_object_or_404(Item, id=equipment_id)
+    the_item.delete()
+
+    return redirect('web.views.equipment')
+
+
+def equipment_add(request):
     equipment_list = Item.objects.order_by('-name')
     context = {
         'equipment_list': equipment_list
-- 
GitLab