diff --git a/filters.py b/filters.py new file mode 100644 index 00000000..c7efcd7f --- /dev/null +++ b/filters.py @@ -0,0 +1,9 @@ +import django_filters + +from assets import models + + +class AssetFilter(django_filters.FilterSet): + class Meta: + model = models.Asset + fields = ['asset_id', 'description', 'category', 'status'] diff --git a/forms.py b/forms.py new file mode 100644 index 00000000..90a02b9a --- /dev/null +++ b/forms.py @@ -0,0 +1,9 @@ +from django import forms + +from assets import models + + +class AssetForm(forms.ModelForm): + class Meta: + model = models.Asset + fields = '__all__' diff --git a/static/js/ajax_form.js b/static/js/ajax_form.js new file mode 100644 index 00000000..d90363a3 --- /dev/null +++ b/static/js/ajax_form.js @@ -0,0 +1,73 @@ +function filterAssetTable() { + $.ajax({ + url : "/asset/filter/", // the endpoint + type : "POST", // http method + data : { + form: $('#asset-filter-form').serialize() + }, + traditional: true, + + success : function(data) { + // console.log(data); + $('#asset_table_body').html(data) + }, + + error : function(xhr) {console.log(xhr.status + ": " + xhr.responseText)} + }); +} + +function updateAsset() { + $.ajax({ + url : "/asset/update/", // the endpoint + type : "POST", // http method + data : { + form: $('#asset_update_form').serialize() + }, + traditional: true, + + success : function(data) { + // console.log(data); + window.location.href = data['url']; + }, + + error : function(xhr) {console.log(xhr.status + ": " + xhr.responseText)} + }); +} + +function formAssetSearch() { + $.ajax({ + url : "/asset/filter/", // the endpoint + type : "POST", // http method + data : { + sender: 'asset_update', + form: "csrfmiddlewaretoken=" + $('input[name=csrfmiddlewaretoken]').val() + "&asset_id=" + $('#parent_search').val() + }, + traditional: true, + + success : function(data) { + // console.log(data); + $('#formAssetSearchResult').html(data); + // window.location.href = data['url']; + }, + + error : function(xhr) {console.log(xhr.status + ": " + xhr.responseText)} + }); +} + +function deleteAsset(asset_id) { + $.ajax({ + url : "/asset/delete/", // the endpoint + type : "POST", // http method + data : { + asset_id: asset_id + }, + traditional: true, + + success : function(data) { + // console.log(data); + window.location.href = data['url']; + }, + + error : function(xhr) {console.log(xhr.status + ": " + xhr.responseText)} + }); +} \ No newline at end of file diff --git a/static/js/csrf.js b/static/js/csrf.js new file mode 100644 index 00000000..895ce31e --- /dev/null +++ b/static/js/csrf.js @@ -0,0 +1,23 @@ +$.ajaxSetup({ + beforeSend: function(xhr, settings) { + function getCookie(name) { + var cookieValue = null; + if (document.cookie && document.cookie != '') { + var cookies = document.cookie.split(';'); + for (var i = 0; i < cookies.length; i++) { + var cookie = jQuery.trim(cookies[i]); + // Does this cookie string begin with the name we want? + if (cookie.substring(0, name.length + 1) == (name + '=')) { + cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); + break; + } + } + } + return cookieValue; + } + if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) { + // Only send the token to relative URLs i.e. locally. + xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); + } + } +}); \ No newline at end of file diff --git a/templates/asset_form.html b/templates/asset_form.html deleted file mode 100644 index 65c21816..00000000 --- a/templates/asset_form.html +++ /dev/null @@ -1,15 +0,0 @@ -{% extends 'base.html' %} - - -{% block main %} - -

Asset {{ form_header|default:'Create' }}

- -
- {{ form }} - {% csrf_token %} - - -
- -{% endblock %} diff --git a/templates/asset_update.html b/templates/asset_update.html new file mode 100644 index 00000000..fd0d6bf8 --- /dev/null +++ b/templates/asset_update.html @@ -0,0 +1,298 @@ +{% extends 'base.html' %} +{% load widget_tweaks %} +{% load asset_templatetags %} +{% block title %}Asset {{ object.asset_id }}{% endblock %} + + +{% block main %} + +

+ Asset + {% if object %} + | {{ object.asset_id }} + {% else %} + Create + {% endif %} +

+
+ +
+ +
+ {% csrf_token %} + + +
+
+
+ {% if edit %} +{# #} + + {% else %} + Edit + {% endif %} + {% if object %} + Delete + {% endif %} +
+
+
+ +
+
+
+ Asset Details +
+
+
+ {% if edit %} +
+
+ {% if object.asset_id %} + {% render_field form.asset_id|attr:'readonly'|add_class:'disabled_input' value=object.asset_id %} + {% else %} + {% render_field form.asset_id %} + {% endif %} + +
+ +
+ {% render_field form.description value=object.description %} + +
+ +
+ + +
+ +
+ + +
+ +
+ {% render_field form.serial_number value=object.serial_number %} + +
+ +
+ {% render_field form.comments|add_class:'materialize-textarea' %} + +
+ +
+ {% else %} +
Asset ID
+
{{ object.asset_id }}
+ +
Description
+
{{ object.description }}
+ +
Category
+
{{ object.category }}
+ +
Status
+
{{ object.status }}
+ +
Serial Number
+
{{ object.serial_number|default:'-' }}
+ +
Comments
+
{{ object.comments|default:'-'|linebreaksbr }}
+ {% endif %} +
+
+
+
+ +
+
+
+ Purchase Details +
+
+
+ {% if edit %} +
+
+ + +
+ +
+ {% render_field form.purchase_price value=object.purchase_price %} + +
+ +
+ {% render_field form.salvage_value value=object.salvage_value %} + +
+ +
+ {% render_field form.date_acquired|add_class:'datepicker' value=object.date_acquired|date %} + +
+ +
+ {% render_field form.date_sold|add_class:'datepicker' value=object.date_sold|date %} + +
+
+ {% else %} +
Purchased From
+
{{ object.purchased_from|default_if_none:'-' }}
+ +
Purchase Price
+
£{{ object.purchase_price|default_if_none:'-' }}
+ +
Salvage Value
+
£{{ object.salvage_value|default_if_none:'-' }}
+ +
Date Acquired
+
{{ object.date_acquired|default_if_none:'-' }}
+ +
Date Sold
+
{{ object.date_sold|default_if_none:'-' }}
+ {% endif %} +
+
+
+
+ + {% if object.is_cable %} +
+
+
+ Cable Details +
+
+
+
Length
+
{{ object.length }}m
+ +
Type
+
TODO
+ +
Required CSA
+
TODO
+
+
+
+
+ {% endif %} + +
+
+
+ Collection Details +
+
+
+ {% if edit %} +
+ +
+ + + +
+
+ +
+
+ + +{# {% render_field form.parent value=object.parent %}#} +
+
+ +
+
+
+ +
+
+ {% else %} +
Parent
+
+ {% if object.parent %} + + {{ object.parent.asset_id }} - {{ object.parent.description }} + + {% else %} + - + {% endif %} +
+ +
Children
+ {% if object.asset_parent.all %} + {% for child in object.asset_parent.all %} +
+ + {{ child.asset_id }} - {{ child.description }} + +
+ {% endfor %} + {% else %} +
-
+ {% endif %} + {% endif %} +
+
+
+
+
+ + {% include 'confirm_delete.html' with object=object %} + +{% endblock %} + +{% block script %} + +{# #} + + + + + +{% endblock %} \ No newline at end of file diff --git a/templates/asset_update_search_results.html b/templates/asset_update_search_results.html new file mode 100644 index 00000000..edd156f1 --- /dev/null +++ b/templates/asset_update_search_results.html @@ -0,0 +1,16 @@ +{% for asset in object_list %} + + {{ asset.asset_id }} - {{ asset.description }} + +
+ {% empty %} + No assets match given ID +{% endfor %} + + \ No newline at end of file