mirror of
https://github.com/ae-utbm/sith.git
synced 2025-07-10 03:49:24 +00:00
Take item from stock form addition
This commit is contained in:
17
stock/templates/stock/stock_take_items.jinja
Normal file
17
stock/templates/stock/stock_take_items.jinja
Normal file
@ -0,0 +1,17 @@
|
||||
{% extends "core/base.jinja" %}
|
||||
{% from 'core/macros.jinja' import user_profile_link %}
|
||||
|
||||
{% block title %}
|
||||
{% trans s = stock %}Take items form {{ s }}{% endtrans %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h3>{% trans s = stock %}Take items form {{ s }}{% endtrans %}</h3>
|
||||
<div>
|
||||
<form method="post" action="" class="inline" style="display:inline">
|
||||
{% csrf_token %}
|
||||
{{ form.as_p() }}
|
||||
<p><input type="submit" value="{% trans %}Take items{% endtrans %}" /></p>
|
||||
</form>
|
||||
</div>
|
||||
{% endblock %}
|
@ -12,6 +12,7 @@ urlpatterns = [
|
||||
url(r'^(?P<stock_id>[0-9]+)$', StockItemList.as_view(), name='items_list'),
|
||||
url(r'^(?P<stock_id>[0-9]+)/stockItem/newItem$', StockItemCreateView.as_view(), name='new_item'),
|
||||
url(r'^stockItem/(?P<item_id>[0-9]+)/edit$', StockItemEditView.as_view(), name='edit_item'),
|
||||
url(r'^(?P<stock_id>[0-9]+)/stockItem/takeItems$', StockTakeItemsBaseFormView.as_view(), name='take_items'),
|
||||
|
||||
# ShoppingList urls
|
||||
url(r'^(?P<stock_id>[0-9]+)/shoppingList/list$', StockShoppingListView.as_view(), name='shoppinglist_list'),
|
||||
|
@ -8,10 +8,9 @@ from django.forms.models import modelform_factory
|
||||
from django.core.urlresolvers import reverse_lazy, reverse
|
||||
|
||||
from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, CanCreateMixin, TabedViewMixin
|
||||
from counter.views import CounterAdminTabsMixin
|
||||
from counter.models import Counter
|
||||
from stock.models import Stock, StockItem
|
||||
|
||||
from counter.views import CounterAdminTabsMixin, CounterTabsMixin
|
||||
from counter.models import Counter, ProductType
|
||||
from stock.models import Stock, StockItem, ShoppingList
|
||||
|
||||
|
||||
class StockItemList(CounterAdminTabsMixin, CanCreateMixin, ListView):
|
||||
@ -23,6 +22,9 @@ class StockItemList(CounterAdminTabsMixin, CanCreateMixin, ListView):
|
||||
pk_url_kwarg = "stock_id"
|
||||
current_tab = "stocks"
|
||||
|
||||
#def can_be_viewed_by(self, user):
|
||||
#return user.is_in_group(settings.SITH_GROUPS['counter-admin'].id)
|
||||
|
||||
class StockListView(CounterAdminTabsMixin, CanViewMixin, ListView):
|
||||
"""
|
||||
A list view for the admins
|
||||
@ -357,3 +359,77 @@ class StockUpdateAfterShopppingBaseFormView(CounterAdminTabsMixin, CanEditMixin,
|
||||
def get_success_url(self):
|
||||
self.kwargs.pop('shoppinglist_id', None)
|
||||
return reverse_lazy('stock:shoppinglist_list', args=self.args, kwargs=self.kwargs)
|
||||
|
||||
|
||||
class StockTakeItemsForm(forms.BaseForm):
|
||||
"""
|
||||
docstring for StockTakeItemsFormView
|
||||
"""
|
||||
def clean(self):
|
||||
with transaction.atomic():
|
||||
for k,t in self.cleaned_data.items():
|
||||
item_id = int(k[5:])
|
||||
if int(t) > 0 :
|
||||
item = StockItem.objects.filter(id=item_id).first()
|
||||
item.effective_quantity -= int(t)
|
||||
item.save()
|
||||
return self.cleaned_data
|
||||
|
||||
|
||||
class StockTakeItemsBaseFormView(CounterTabsMixin, CanEditMixin, DetailView, BaseFormView):
|
||||
"""
|
||||
docstring for StockTakeItemsBaseFormView
|
||||
"""
|
||||
model = StockItem
|
||||
template_name = "stock/stock_take_items.jinja"
|
||||
pk_url_kwarg = "stock_id"
|
||||
current_tab = "take_items_from_stock"
|
||||
|
||||
def get_form_class(self):
|
||||
fields = OrderedDict()
|
||||
kwargs = {}
|
||||
for t in ProductType.objects.order_by('name').all():
|
||||
for i in self.stock.items.filter(type=t).order_by('name').all():
|
||||
field_name = "item-%s" % (str(i.id))
|
||||
fields[field_name] = forms.CharField(max_length=30, required=True, label=str(i))
|
||||
kwargs[field_name] = i.effective_quantity
|
||||
kwargs['stock_id'] = self.stock.id
|
||||
kwargs['counter_id'] = self.stock.counter.id
|
||||
kwargs['base_fields'] = fields
|
||||
return type('StockTakeItemsForm', (StockTakeItemsForm,), kwargs)
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
"""
|
||||
Simple get view
|
||||
"""
|
||||
self.stock = Stock.objects.filter(id=self.kwargs['stock_id']).first()
|
||||
return super(StockTakeItemsBaseFormView, self).get(request, *args, **kwargs)
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
"""
|
||||
Handle the many possibilities of the post request
|
||||
"""
|
||||
self.object = self.get_object()
|
||||
self.stock = Stock.objects.filter(id=self.kwargs['stock_id']).first()
|
||||
if self.stock.counter.type == "BAR" and not ('counter_token' in self.request.session.keys() and
|
||||
self.request.session['counter_token'] == self.stock.counter.token): # Also check the token to avoid the bar to be stolen
|
||||
return HttpResponseRedirect(reverse_lazy('counter:details', args=self.args,
|
||||
kwargs={'counter_id': self.stock.counter.id})+'?bad_location')
|
||||
return super(StockTakeItemsBaseFormView, self).post(request, *args, **kwargs)
|
||||
|
||||
def form_valid(self, form):
|
||||
return super(StockTakeItemsBaseFormView, self).form_valid(form)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
kwargs = super(StockTakeItemsBaseFormView, self).get_context_data(**kwargs)
|
||||
if 'form' not in kwargs.keys():
|
||||
kwargs['form'] = self.get_form()
|
||||
kwargs['stock'] = self.stock
|
||||
kwargs['counter'] = self.stock.counter
|
||||
return kwargs
|
||||
|
||||
def get_success_url(self):
|
||||
stock = Stock.objects.filter(id=self.kwargs['stock_id']).first()
|
||||
self.kwargs['counter_id'] = stock.counter.id
|
||||
self.kwargs.pop('stock_id', None)
|
||||
return reverse_lazy('counter:details', args=self.args, kwargs=self.kwargs)
|
||||
|
Reference in New Issue
Block a user