From 366d4b214390f454809b446016136843e617beaf Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 12 May 2020 21:40:42 +1000 Subject: [PATCH] Add new attechment functionality to new models - Giving the ol' refactor tractor a fresh coat of paint --- InvenTree/InvenTree/api.py | 25 +++++++++++++++++++ InvenTree/order/api.py | 17 +++---------- .../order/templates/order/po_attachments.html | 9 +++++-- .../order/templates/order/so_attachments.html | 11 +++++--- InvenTree/order/views.py | 8 ++++++ InvenTree/part/api.py | 11 ++------ .../part/templates/part/attachments.html | 9 +++++-- InvenTree/part/views.py | 5 ++++ InvenTree/stock/api.py | 15 ++--------- .../templates/stock/item_attachments.html | 6 ++--- 10 files changed, 70 insertions(+), 46 deletions(-) diff --git a/InvenTree/InvenTree/api.py b/InvenTree/InvenTree/api.py index abb6102a6f..eb87b8f77a 100644 --- a/InvenTree/InvenTree/api.py +++ b/InvenTree/InvenTree/api.py @@ -8,6 +8,9 @@ from __future__ import unicode_literals from django.utils.translation import ugettext as _ from django.http import JsonResponse +from django_filters.rest_framework import DjangoFilterBackend +from rest_framework import filters + from rest_framework import permissions from rest_framework.response import Response from rest_framework.views import APIView @@ -41,6 +44,28 @@ class InfoView(AjaxView): return JsonResponse(data) +class AttachmentMixin: + """ + Mixin for creating attachment objects, + and ensuring the user information is saved correctly. + """ + + permission_classes = [permissions.IsAuthenticated] + + filter_backends = [ + DjangoFilterBackend, + filters.OrderingFilter, + filters.SearchFilter, + ] + + def perform_create(self, serializer): + """ Save the user information when a file is uploaded """ + + attachment = serializer.save() + attachment.user = self.request.user + attachment.save() + + class ActionPluginView(APIView): """ Endpoint for running custom action plugins. diff --git a/InvenTree/order/api.py b/InvenTree/order/api.py index cb48b4c11d..dba493baab 100644 --- a/InvenTree/order/api.py +++ b/InvenTree/order/api.py @@ -12,6 +12,7 @@ from rest_framework import filters from django.conf.urls import url, include from InvenTree.helpers import str2bool +from InvenTree.api import AttachmentMixin from part.models import Part from company.models import SupplierPart @@ -200,7 +201,7 @@ class POLineItemDetail(generics.RetrieveUpdateAPIView): ] -class SOAttachmentList(generics.ListCreateAPIView): +class SOAttachmentList(generics.ListCreateAPIView, AttachmentMixin): """ API endpoint for listing (and creating) a SalesOrderAttachment (file upload) """ @@ -208,12 +209,6 @@ class SOAttachmentList(generics.ListCreateAPIView): queryset = SalesOrderAttachment.objects.all() serializer_class = SOAttachmentSerializer - filter_backends = [ - DjangoFilterBackend, - filters.OrderingFilter, - filters.SearchFilter, - ] - filter_fields = [ 'order', ] @@ -399,7 +394,7 @@ class SOLineItemDetail(generics.RetrieveUpdateAPIView): permission_classes = [permissions.IsAuthenticated] -class POAttachmentList(generics.ListCreateAPIView): +class POAttachmentList(generics.ListCreateAPIView, AttachmentMixin): """ API endpoint for listing (and creating) a PurchaseOrderAttachment (file upload) """ @@ -407,12 +402,6 @@ class POAttachmentList(generics.ListCreateAPIView): queryset = PurchaseOrderAttachment.objects.all() serializer_class = POAttachmentSerializer - filter_backends = [ - DjangoFilterBackend, - filters.OrderingFilter, - filters.SearchFilter, - ] - filter_fields = [ 'order', ] diff --git a/InvenTree/order/templates/order/po_attachments.html b/InvenTree/order/templates/order/po_attachments.html index 388b7197b6..79a0105a61 100644 --- a/InvenTree/order/templates/order/po_attachments.html +++ b/InvenTree/order/templates/order/po_attachments.html @@ -21,8 +21,9 @@ - - + + + @@ -31,6 +32,10 @@ +
{% trans "File" %}{% trans "Comment" %}{% trans "File" %}{% trans "Comment" %}{% trans "Uploaded" %}
{{ attachment.basename }} {{ attachment.comment }} + {% if attachment.upload_date %}{{ attachment.upload_date }}{% endif %} + {% if attachment.user %}{{ attachment.user.username }}{% endif %} +