diff --git a/InvenTree/stock/api.py b/InvenTree/stock/api.py index 2ffc2e8d69..0c045f1cf5 100644 --- a/InvenTree/stock/api.py +++ b/InvenTree/stock/api.py @@ -69,6 +69,13 @@ class StockDetail(generics.RetrieveUpdateDestroyAPIView): return queryset + def get_serializer_context(self): + + ctx = super().get_serializer_context() + ctx['user'] = getattr(self.request, 'user', None) + + return ctx + def get_serializer(self, *args, **kwargs): kwargs['part_detail'] = True @@ -79,16 +86,6 @@ class StockDetail(generics.RetrieveUpdateDestroyAPIView): return self.serializer_class(*args, **kwargs) - def update(self, request, *args, **kwargs): - """ - Record the user who updated the item - """ - - # TODO: Record the user! - # user = request.user - - return super().update(request, *args, **kwargs) - def perform_destroy(self, instance): """ Instead of "deleting" the StockItem @@ -392,6 +389,13 @@ class StockList(generics.ListCreateAPIView): queryset = StockItem.objects.all() filterset_class = StockFilter + def get_serializer_context(self): + + ctx = super().get_serializer_context() + ctx['user'] = getattr(self.request, 'user', None) + + return ctx + def create(self, request, *args, **kwargs): """ Create a new StockItem object via the API. diff --git a/InvenTree/stock/models.py b/InvenTree/stock/models.py index 8e07074a76..70e557a901 100644 --- a/InvenTree/stock/models.py +++ b/InvenTree/stock/models.py @@ -265,15 +265,15 @@ class StockItem(MPTTModel): user = kwargs.pop('user', None) + if user is None: + user = getattr(self, '_user', None) + # If 'add_note = False' specified, then no tracking note will be added for item creation add_note = kwargs.pop('add_note', True) notes = kwargs.pop('notes', '') - - if not self.pk: - # StockItem has not yet been saved - add_note = add_note and True - else: + + if self.pk: # StockItem has already been saved # Check if "interesting" fields have been changed @@ -301,11 +301,10 @@ class StockItem(MPTTModel): except (ValueError, StockItem.DoesNotExist): pass - add_note = False - super(StockItem, self).save(*args, **kwargs) - if add_note: + # If user information is provided, and no existing note exists, create one! + if user and self.tracking_info.count() == 0: tracking_info = { 'status': self.status, diff --git a/InvenTree/stock/serializers.py b/InvenTree/stock/serializers.py index c4b424bf25..31f21605a2 100644 --- a/InvenTree/stock/serializers.py +++ b/InvenTree/stock/serializers.py @@ -81,6 +81,15 @@ class StockItemSerializer(InvenTree.serializers.InvenTreeModelSerializer): - Includes serialization for the item location """ + def update(self, instance, validated_data): + """ + Custom update method to pass the user information through to the instance + """ + + instance._user = self.context['user'] + + return super().update(instance, validated_data) + @staticmethod def annotate_queryset(queryset): """