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> </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> </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> </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> </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