From 779fc42f26b4ac6a42c20c41fb2669ceb2d922f6 Mon Sep 17 00:00:00 2001 From: Harry Bridge Date: Sat, 5 Jan 2019 20:04:58 +0000 Subject: [PATCH] Added views --- urls.py | 15 ++++--- views.py | 135 ++++++++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 122 insertions(+), 28 deletions(-) diff --git a/urls.py b/urls.py index bfc532c9..da61ab38 100644 --- a/urls.py +++ b/urls.py @@ -2,10 +2,13 @@ from django.urls import path from assets import views urlpatterns = [ - path('', views.Index.as_view(), name='index'), - path('assets/', views.AssetList.as_view(), name='asset_list'), - path('assets//', views.AssetDetail.as_view(), name='asset_detail'), - path('assets/create', views.AssetCreate.as_view(), name='asset_create'), - path('assets//update', views.AssetUpdate.as_view(), name='asset_update'), - path('assets//delete', views.AssetDelete.as_view(), name='asset_delete'), + # path('', views.Index.as_view(), name='index'), + path('', views.AssetList.as_view(), name='index'), + path('asset/list/', views.AssetList.as_view(), name='asset_list'), + path('asset//', views.AssetDetail.as_view(), name='asset_detail'), + path('asset/create/', views.AssetEdit.as_view(), name='asset_create'), + path('asset//edit/', views.AssetEdit.as_view(), name='asset_update'), + path('asset/delete/', views.asset_delete, name='ajax_asset_delete'), + path('asset/filter/', views.asset_filter, name='ajax_asset_filter'), + path('asset/update/', views.asset_update, name='ajax_asset_update'), ] diff --git a/views.py b/views.py index 79a45dc6..3bc31e4d 100644 --- a/views.py +++ b/views.py @@ -1,42 +1,133 @@ -from django.shortcuts import render +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.core import serializers from django.views import generic -from django.urls import reverse_lazy -from assets import models +from django.contrib.auth import views as auth_views +from django.urls import reverse_lazy, reverse +from django.db.models import Q +import datetime +from dateutil import parser +# import json +import simplejson as json +from assets import models, forms -class Index(generic.TemplateView): +class Login(auth_views.LoginView): + template_name = 'registration/login.html' + + +class Logout(auth_views.LogoutView): + template_name = 'registration/logout.html' + + +class PasswordChange(auth_views.PasswordChangeView): + template_name = 'registration/password_change.html' + + def get_success_url(self): + return reverse_lazy('profile_detail', kwargs={'pk': self.request.user.id}) + + +class Index(LoginRequiredMixin, generic.TemplateView): template_name = 'index.html' -class AssetList(generic.ListView): +class AssetList(LoginRequiredMixin, generic.ListView): model = models.Asset template_name = 'asset_list.html' + paginate_by = 40 + ordering = ['-pk'] -class AssetDetail(generic.DetailView): +class AssetDetail(LoginRequiredMixin, generic.DetailView): model = models.Asset - template_name = 'asset_detail.html' + template_name = 'asset_update.html' -class AssetCreate(generic.CreateView): - model = models.Asset - fields = '__all__' - template_name = 'asset_form.html' - # success_url = reverse_lazy('asset_list') +# class AssetCreate(LoginRequiredMixin, generic.TemplateView): +# fields = '__all__' +# template_name = 'asset_update.html' +# # success_url = reverse_lazy('asset_list') -class AssetUpdate(generic.UpdateView): - model = models.Asset - fields = '__all__' - template_name = 'asset_form.html' +class AssetEdit(LoginRequiredMixin, generic.TemplateView): + template_name = 'asset_update.html' def get_context_data(self, **kwargs): - context = super(AssetUpdate, self).get_context_data(**kwargs) - context['form_header'] = 'Update' + context = super(AssetEdit, self).get_context_data(**kwargs) + if self.kwargs: + context['object'] = get_object_or_404(models.Asset, pk=self.kwargs['pk']) + context['form'] = forms.AssetForm + # context['asset_names'] = models.Asset.objects.values_list('asset_id', 'description').order_by('-date_acquired')[] + context['edit'] = True + return context -class AssetDelete(generic.DeleteView): - model = models.Asset - template_name = 'confirm_delete.html' - success_url = reverse_lazy('asset_list') +@login_required() +def asset_update(request): + context = dict() + + if request.method == 'POST' and request.is_ajax(): + defaults = QueryDict(request.POST['form'].encode('ASCII')).dict() + defaults.pop('csrfmiddlewaretoken') + + asset_pk = int(defaults.pop('id')) + + if defaults['date_acquired']: + defaults['date_acquired'] = parser.parse(defaults.pop('date_acquired')) + else: + defaults['date_acquired'] = None + + if defaults['date_sold']: + defaults['date_sold'] = parser.parse(defaults.pop('date_sold')) + else: + defaults['date_sold'] = None + + # if defaults['parent']: + # defaults['parent'] = models.Asset.objects.get(asset_id=defaults.pop('parent')) + + form = forms.AssetForm(defaults) + context['valid'] = form.is_valid() + context['errors'] = form.errors.as_json() + + if asset_pk == 0: + asset = models.Asset.objects.create(**form.cleaned_data) + else: + asset, created = models.Asset.objects.update_or_create(pk=asset_pk, defaults=form.cleaned_data) + + context['url'] = reverse('asset_detail', args=[asset.pk]) + + return HttpResponse(json.dumps(context), content_type='application/json') + + +@login_required() +def asset_delete(request): + context = dict() + if request.method == 'POST' and request.is_ajax(): + asset = get_object_or_404(models.Asset, pk=request.POST.get('asset_id', None)) + asset.delete() + + context['url'] = reverse('asset_list') + + return HttpResponse(json.dumps(context), content_type='application/json') + + +@login_required() +def asset_filter(request): + context = dict() + + if request.method == 'POST' and request.is_ajax(): + defaults = QueryDict(request.POST['form'].encode('ASCII')).dict() + defaults.pop('csrfmiddlewaretoken') + + context['object_list'] = models.Asset.objects.filter( + Q(pk__icontains=defaults.get('asset_id')) | + Q(asset_id__icontains=defaults.get('asset_id')) + ) + + if request.POST.get('sender', None) == 'asset_update': + return render(request, template_name='asset_update_search_results.html', context=context) + else: + return render(request, template_name='asset_list_table_body.html', context=context)