From bd2cb79e0458c6e884758c370c2ba63c11614d7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20H=C3=BCttel?= Date: Sun, 24 Oct 2021 21:14:11 +0200 Subject: [PATCH] Add functionality to 'Add substorage modal' on stock pages --- shimatta_kenkyusho/parts/views.py | 34 ++++++++++++++- shimatta_kenkyusho/templates/base.html | 4 ++ .../templates/parts/stocks-detail.html | 41 +++++++++++++++++-- 3 files changed, 74 insertions(+), 5 deletions(-) diff --git a/shimatta_kenkyusho/parts/views.py b/shimatta_kenkyusho/parts/views.py index ded7acc..bf3fe68 100644 --- a/shimatta_kenkyusho/parts/views.py +++ b/shimatta_kenkyusho/parts/views.py @@ -1,6 +1,7 @@ from django.shortcuts import render, redirect from django.urls import resolve, reverse from django.contrib.auth import logout, login +from django.contrib.auth.models import User from django.http import HttpResponse from .navbar import NavBar from django.contrib.auth.forms import AuthenticationForm as AuthForm @@ -11,6 +12,7 @@ from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMix from .models import Storage, Stock from .qr_parser import QrCodeValidator from django.core.paginator import Paginator +from django.core.exceptions import ValidationError class QrSearchForm(forms.Form): my_qr_validator = QrCodeValidator() @@ -123,6 +125,10 @@ class StockView(LoginRequiredMixin, BaseTemplateMixin, TemplateView): return context +class AddSubStorageForm(forms.Form): + storage_name = forms.CharField(label="storage_name", initial='') + responsible = forms.CharField(label='responsible_user') + class StockViewDetail(LoginRequiredMixin, BaseTemplateMixin, DetailView): template_name = 'parts/stocks-detail.html' model = Storage @@ -148,7 +154,31 @@ class StockViewDetail(LoginRequiredMixin, BaseTemplateMixin, DetailView): storage_paginator = Paginator(Storage.objects.filter(parent_storage=self.object), self.default_pagination_size) context['storages'] = storage_paginator.get_page(storage_page) + add_storage_form = AddSubStorageForm() + add_storage_form.fields['responsible'].initial = self.request.user.username + context['add_storage_form'] = add_storage_form return context - def post(self): - pass \ No newline at end of file + def handle_add_storage_post(self, request, **kwargs): + f = AddSubStorageForm(data=request.POST) + if f.is_valid(): + sub_name = f.cleaned_data['storage_name'] + try: + user = User.objects.get(username=f.cleaned_data['responsible']) + try: + Storage.objects.create(name=sub_name, parent_storage=self.object, responsible=user) + except ValidationError as v_err: + f.add_error('storage_name', '. '.join(v_err.messages)) + except: + f.add_error('responsible', 'Invalid user') + context = self.get_context_data(**kwargs) + context['add_storage_form'] = f + return self.render_to_response(context) + + def post(self, request, *args, **kwargs): + self.object = self.get_object() + + if 'submit-add-storage' in request.POST: + return self.handle_add_storage_post(request) + + return super().post(request, *args, **kwargs) \ No newline at end of file diff --git a/shimatta_kenkyusho/templates/base.html b/shimatta_kenkyusho/templates/base.html index 41c54c8..43076d5 100644 --- a/shimatta_kenkyusho/templates/base.html +++ b/shimatta_kenkyusho/templates/base.html @@ -53,5 +53,9 @@ {% endblock content %} + + {% block custom_scripts %} + {% endblock custom_scripts %} + \ No newline at end of file diff --git a/shimatta_kenkyusho/templates/parts/stocks-detail.html b/shimatta_kenkyusho/templates/parts/stocks-detail.html index 7e93842..759e5cb 100644 --- a/shimatta_kenkyusho/templates/parts/stocks-detail.html +++ b/shimatta_kenkyusho/templates/parts/stocks-detail.html @@ -40,6 +40,7 @@ + {% with add_storage_form as form %} -{% endblock content %} \ No newline at end of file +{% endblock content %} + +{% block custom_scripts %} +{% if add_storage_form.errors %} + +{% endif %} +{% endblock custom_scripts %} +