From 3aa4225acb99e6109549ba0d08bfe55f78aca343 Mon Sep 17 00:00:00 2001 From: stefan Date: Sat, 25 Jan 2025 15:24:59 +0100 Subject: [PATCH] added form to change stock lot --- shimatta_kenkyusho/parts/forms.py | 54 +++++++++---------- .../parts/views/storage_views.py | 12 +++++ .../parts/modals/update-stock-modal.html | 11 +++- 3 files changed, 47 insertions(+), 30 deletions(-) diff --git a/shimatta_kenkyusho/parts/forms.py b/shimatta_kenkyusho/parts/forms.py index 3c4cd5f..56fa7f5 100644 --- a/shimatta_kenkyusho/parts/forms.py +++ b/shimatta_kenkyusho/parts/forms.py @@ -53,7 +53,7 @@ class AutoCompleteWidget(widgets.Input): 'name_field_name': self.name_field_name, 'prepend': self.prepend, 'name': display_name, - } + } return context class AutocompleteForeingKeyField(forms.UUIDField): @@ -72,7 +72,7 @@ class AutocompleteForeingKeyField(forms.UUIDField): prepend) self.foreign_model = foreign_model - + def clean(self, value): try: pre_cleaned_uuid = super().clean(value) @@ -113,15 +113,13 @@ class AddSubStorageForm(ChangeStorageForm): class DeleteStockForm(forms.Form): stock_uuid = forms.UUIDField() -class EditWatermarkForm(forms.Form): +class EditStockBaseForm(forms.Form): stock_uuid = forms.UUIDField() - watermark_active = forms.BooleanField(required=False) #If it is false, the webbrowser won't send it at all. Therefore we have to set it to required=False - watermark = forms.IntegerField(min_value=0) def clean(self): cleaned_data = super().clean() id = cleaned_data.get("stock_uuid") - + if not id: raise ValidationError("No stock UUID given") @@ -134,6 +132,10 @@ class EditWatermarkForm(forms.Form): return cleaned_data +class EditWatermarkForm(EditStockBaseForm): + watermark_active = forms.BooleanField(required=False) #If it is false, the webbrowser won't send it at all. Therefore we have to set it to required=False + watermark = forms.IntegerField(min_value=0) + def save(self): stock = self.cleaned_data['stock'] active = self.cleaned_data['watermark_active'] @@ -145,32 +147,26 @@ class EditWatermarkForm(forms.Form): stock.watermark = watermark stock.save() -class EditStockAmountForm(forms.Form): +class EditLotForm(EditStockBaseForm): + lot = forms.IntegerField(min_value=0) + + def save(self): + stock = self.cleaned_data['stock'] + lot = self.cleaned_data['lot'] + + stock.lot = lot + stock.save() + +class EditStockAmountForm(EditStockBaseForm): stock_uuid = forms.UUIDField() amount = forms.IntegerField(min_value=0) - def clean(self): - cleaned_data = super().clean() - id = cleaned_data.get("stock_uuid") - - if not id: - raise ValidationError("No stock UUID given") - - stock = None - try: - stock = parts_models.Stock.objects.get(id=id) - except: - raise ValidationError("Stock with uuid %s does not exist" % (id)) - cleaned_data['stock'] = stock - - return cleaned_data - def save(self, increase: bool): stock = self.cleaned_data['stock'] amount = self.cleaned_data['amount'] if not increase: - amount = -amount + amount = -amount return stock.atomic_increment(amount) @@ -195,7 +191,7 @@ class AddStockForm(forms.Form): cleaned_data['component'] = component return cleaned_data - + def save(self, storage): component = self.cleaned_data.get('component') amount = self.cleaned_data.get('amount') @@ -254,7 +250,7 @@ class DistributorNumberDeleteForm(forms.Form): class ComponentParameterDeleteForm(forms.Form): param_num = forms.UUIDField(required=True) model = parts_models.ComponentParameter - + def clean_param_num(self): my_uuid = self.cleaned_data['param_num'] try: @@ -323,7 +319,7 @@ class ComponentParameterCreateForm(forms.Form): if not ptype: raise ValidationError('No valid parameter type selected') - + if not value: raise ValidationError('No valid parameter value') @@ -335,7 +331,7 @@ class ComponentParameterCreateForm(forms.Form): data['number_value'] = number else: pass - + def save(self, component): param_type = self.cleaned_data['parameter_type'] if param_type.parameter_type == 'F': @@ -364,6 +360,6 @@ class QrSearchForm(forms.Form): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - + qr_search = forms.CharField(label='qr_search', validators=[my_qr_validator]) \ No newline at end of file diff --git a/shimatta_kenkyusho/parts/views/storage_views.py b/shimatta_kenkyusho/parts/views/storage_views.py index 283ce92..7ee8ed1 100644 --- a/shimatta_kenkyusho/parts/views/storage_views.py +++ b/shimatta_kenkyusho/parts/views/storage_views.py @@ -213,6 +213,16 @@ class StockViewDetail(LoginRequiredMixin, BaseTemplateMixin, DetailView): context = self.get_context_data(**kwargs) return self.render_to_response(context) + def handle_update_lot(self, request, **kwargs): + edit_form = EditLotForm(data=request.POST) + if edit_form.is_valid(): + edit_form.save() + else: + pass # Todo: Handle error + + context = self.get_context_data(**kwargs) + return self.render_to_response(context) + def handle_amount_change_post(self, request, increase, **kwargs): edit_form = EditStockAmountForm(data=request.POST) if edit_form.is_valid(): @@ -252,6 +262,8 @@ class StockViewDetail(LoginRequiredMixin, BaseTemplateMixin, DetailView): return self.handle_del_stock_post(request, **kwargs) elif 'submit-edit-watermark' in request.POST: return self.handle_update_watermark(request, **kwargs) + elif 'submit-edit-lot' in request.POST: + return self.handle_update_lot(request, **kwargs) elif 'submit-amount-reduce' in request.POST: return self.handle_amount_change_post(request, False, **kwargs) elif 'submit-amount-increase' in request.POST: diff --git a/shimatta_kenkyusho/templates/parts/modals/update-stock-modal.html b/shimatta_kenkyusho/templates/parts/modals/update-stock-modal.html index 6729c98..c15c067 100644 --- a/shimatta_kenkyusho/templates/parts/modals/update-stock-modal.html +++ b/shimatta_kenkyusho/templates/parts/modals/update-stock-modal.html @@ -39,7 +39,7 @@ needs following context:
{% csrf_token %} -
+
= 0 %}checked{%endif%}>
@@ -47,7 +47,16 @@ needs following context:
+
+ {% csrf_token %} + +
+ + +
+
+ \ No newline at end of file