From e3cbcbd1518e7ce51c0ab623f7ed9a35e5310d44 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Sat, 5 Oct 2019 20:17:26 +0100 Subject: [PATCH] Fixed search and implemented an asset search api Added asset picker for parent attribute Co-authored-by: Panagiotis Petridis --- assets/templates/asset_create.html | 32 +--------- assets/templates/asset_list.html | 20 +++--- assets/templates/asset_update.html | 32 +--------- .../partials/asset_list_table_body.html | 3 +- assets/templates/partials/asset_picker.html | 63 +++++++++++++++++++ assets/urls.py | 2 + assets/views.py | 38 +++++++---- 7 files changed, 109 insertions(+), 81 deletions(-) create mode 100644 assets/templates/partials/asset_picker.html diff --git a/assets/templates/asset_create.html b/assets/templates/asset_create.html index 640008e3..4a908d79 100644 --- a/assets/templates/asset_create.html +++ b/assets/templates/asset_create.html @@ -20,6 +20,7 @@ {% else %}
{% endif %} + {% include 'form_errors.html' %}
@@ -142,35 +143,8 @@ Collection Details
-
- - -
- - - - -
-
- -
- -
- - - - -
-
-
-
-
-
- -
-
+ {% include 'partials/asset_picker.html' %} +
diff --git a/assets/templates/asset_list.html b/assets/templates/asset_list.html index a8a0da2a..3d1ed407 100644 --- a/assets/templates/asset_list.html +++ b/assets/templates/asset_list.html @@ -11,20 +11,20 @@ {% csrf_token %}
- +
- - -
- {% csrf_token %}
- + {% for name in statuses %} + {% if name == status_select %} + {% endfor %}
- +
diff --git a/assets/templates/asset_update.html b/assets/templates/asset_update.html index 1a976646..a3a228a0 100644 --- a/assets/templates/asset_update.html +++ b/assets/templates/asset_update.html @@ -24,6 +24,7 @@ {% else %}
{% endif %} +{% include 'form_errors.html' %}
@@ -190,35 +191,8 @@
{% if edit or duplicate %} -
- - -
- - -
-
- -
- -
- - -
-
-
- -
-
-
- -
- {% else %} + {% include 'partials/asset_picker.html' %} + {% else%}
Parent
diff --git a/assets/templates/partials/asset_list_table_body.html b/assets/templates/partials/asset_list_table_body.html index 4972b993..db4a62a9 100644 --- a/assets/templates/partials/asset_list_table_body.html +++ b/assets/templates/partials/asset_list_table_body.html @@ -1,7 +1,6 @@ {% for item in object_list %} {#
  • {{ item.asset_id }} - {{ item.description }}
  • #} - - + {% if object.parent%} + + {% endif %} + + +{% load static %} +{% block css %} + + +{% endblock %} + +{% block preload_js %} + + +{% endblock %} + +{% block js %} + +{% endblock js %} \ No newline at end of file diff --git a/assets/urls.py b/assets/urls.py index 5970d64b..09c12047 100644 --- a/assets/urls.py +++ b/assets/urls.py @@ -15,6 +15,8 @@ urlpatterns = [ path('asset//duplicate/', views.AssetDuplicate.as_view(), name='asset_duplicate'), path('asset/delete/', views.asset_delete, name='ajax_asset_delete'), + path('asset/search/', views.AssetSearch.as_view(), name='asset_search_json'), + path('supplier/list', views.SupplierList.as_view(), name='supplier_list'), path('supplier/', views.SupplierDetail.as_view(), name='supplier_detail'), path('supplier/create', views.SupplierCreate.as_view(), name='supplier_create'), diff --git a/assets/views.py b/assets/views.py index 064ccfc1..02e51892 100644 --- a/assets/views.py +++ b/assets/views.py @@ -1,7 +1,7 @@ from django.shortcuts import render, get_object_or_404 from django.contrib.auth.decorators import login_required from django.contrib.auth.mixins import LoginRequiredMixin -from django.http import HttpResponse, QueryDict +from django.http import HttpResponse, QueryDict, JsonResponse from django.core import serializers from django.views import generic from django.contrib.auth import views as auth_views @@ -22,27 +22,39 @@ class AssetList(LoginRequiredMixin, generic.ListView): def get_queryset(self): #TODO Feedback to user when search fails query = self.request.GET.get('query', "") + queryset = self.model.objects.all() if len(query) >= 3: - return self.model.objects.filter(Q(asset_id__exact=query) | Q(description__icontains=query)) - elif query != "": - return self.model.objects.filter(Q(asset_id__exact=query)) - else: - cat = self.request.GET.get('cat', "") - status = self.request.GET.get('status', "") - if cat != "None": - return self.model.objects.filter(category__name__exact=cat) - elif status != "None": - return self.model.objects.filter(status__name__exact=status) - else: - return self.model.objects.all() + queryset = self.model.objects.filter(Q(asset_id__exact=query) | Q(description__icontains=query)) + + cat = self.request.GET.get('cat', "") + status = self.request.GET.get('status', "") + if cat != "": + queryset = queryset.filter(category__name__exact=cat) + elif status != "": + queryset = queryset.filter(status__name__exact=status) + + return queryset def get_context_data(self, **kwargs): context = super(AssetList, self).get_context_data(**kwargs) context["search_name"] = self.request.GET.get('query', "") + context["categories"] = models.AssetCategory.objects.all() + context["category_select"] = self.request.GET.get('cat', "") + context["statuses"] = models.AssetStatus.objects.all() + context["status_select"] = self.request.GET.get('stats', "") return context; +class AssetSearch(AssetList): + def render_to_response(self, context, **response_kwargs): + result = [] + + for asset in context["object_list"]: + result.append({"id":asset.pk, "label":(asset.asset_id + " | " + asset.description)}) + + return JsonResponse(result, safe=False) + class AssetDetail(LoginRequiredMixin, generic.DetailView): model = models.Asset template_name = 'asset_update.html'