From f9138f49978abe2d677e020362e9d6470454bbf6 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 30 Apr 2018 21:03:25 +1000 Subject: [PATCH] Item stocktake form --- InvenTree/stock/forms.py | 10 ++++++++ InvenTree/stock/serializers.py | 1 + InvenTree/stock/templates/stock/item.html | 10 ++++++++ InvenTree/stock/urls.py | 2 ++ InvenTree/stock/views.py | 29 +++++++++++++++++++++++ 5 files changed, 52 insertions(+) diff --git a/InvenTree/stock/forms.py b/InvenTree/stock/forms.py index 1727c35329..ca9d6f6360 100644 --- a/InvenTree/stock/forms.py +++ b/InvenTree/stock/forms.py @@ -46,6 +46,16 @@ class MoveStockItemForm(forms.ModelForm): ] +class StocktakeForm(forms.ModelForm): + + class Meta: + model = StockItem + + fields = [ + 'quantity', + ] + + class EditStockItemForm(HelperForm): class Meta: diff --git a/InvenTree/stock/serializers.py b/InvenTree/stock/serializers.py index db253d69c5..a9c5c3248a 100644 --- a/InvenTree/stock/serializers.py +++ b/InvenTree/stock/serializers.py @@ -15,6 +15,7 @@ class StockItemSerializer(serializers.ModelSerializer): 'part', 'supplier_part', 'location', + 'in_stock', 'belongs_to', 'customer', 'quantity', diff --git a/InvenTree/stock/templates/stock/item.html b/InvenTree/stock/templates/stock/item.html index 18ed7c507e..c0fa277896 100644 --- a/InvenTree/stock/templates/stock/item.html +++ b/InvenTree/stock/templates/stock/item.html @@ -97,6 +97,7 @@ {% if item.in_stock %} + {% endif %} @@ -127,6 +128,15 @@ reload: true, }); }); + + $("#stocktake").click(function() { + launchModalForm("#modal-form", + "{% url 'stock-item-stocktake' item.id %}", + { + reload: true + }); + }); + {% endif %} $("#delete-item").click(function () { diff --git a/InvenTree/stock/urls.py b/InvenTree/stock/urls.py index 2f4d0c1c67..090ffcac53 100644 --- a/InvenTree/stock/urls.py +++ b/InvenTree/stock/urls.py @@ -15,6 +15,8 @@ stock_item_detail_urls = [ url(r'^edit/?', views.StockItemEdit.as_view(), name='stock-item-edit'), url(r'^delete/?', views.StockItemDelete.as_view(), name='stock-item-delete'), url(r'^move/?', views.StockItemMove.as_view(), name='stock-item-move'), + url(r'^stocktake/?', views.StockItemStocktake.as_view(), name='stock-item-stocktake'), + url('^.*$', views.StockItemDetail.as_view(), name='stock-item-detail'), ] diff --git a/InvenTree/stock/views.py b/InvenTree/stock/views.py index c3bcfe4a82..e3f38724bd 100644 --- a/InvenTree/stock/views.py +++ b/InvenTree/stock/views.py @@ -10,10 +10,13 @@ from InvenTree.views import AjaxUpdateView, AjaxDeleteView, AjaxCreateView from part.models import Part from .models import StockItem, StockLocation +import datetime + from .forms import EditStockLocationForm from .forms import CreateStockItemForm from .forms import EditStockItemForm from .forms import MoveStockItemForm +from .forms import StocktakeForm class StockIndex(ListView): model = StockItem @@ -135,3 +138,29 @@ class StockItemMove(AjaxUpdateView): form_class = MoveStockItemForm +class StockItemStocktake(AjaxUpdateView): + model = StockItem + template_name = 'modal_form.html' + context_object_name = 'item' + ajax_form_title = 'Item stocktake' + form_class = StocktakeForm + + def post(self, request, *args, **kwargs): + + form = self.form_class(request.POST, instance=self.get_object()) + + if form.is_valid(): + obj = form.save() + + obj.stocktake_date = datetime.datetime.now() + obj.stocktake_user = request.user + + obj.save() + + data = { + 'form_valid': form.is_valid() + } + + return self.renderJsonResponse(request, form, data) + +