From df20bf6dde35e4c85d15882eca1b46abfb2bff53 Mon Sep 17 00:00:00 2001 From: Skia Date: Tue, 25 Apr 2017 08:57:07 +0200 Subject: [PATCH] Reindent stock app --- stock/models.py | 116 +++++----- stock/urls.py | 46 ++-- stock/views.py | 588 ++++++++++++++++++++++++------------------------ 3 files changed, 375 insertions(+), 375 deletions(-) diff --git a/stock/models.py b/stock/models.py index 760fa262..edded142 100644 --- a/stock/models.py +++ b/stock/models.py @@ -7,80 +7,80 @@ from django.conf import settings from counter.models import Counter, ProductType class Stock(models.Model): - """ - The Stock class, this one is used to know how many products are left for a specific counter - """ - name = models.CharField(_('name'), max_length=64) - counter = models.OneToOneField(Counter, verbose_name=_('counter'), related_name='stock') + """ + The Stock class, this one is used to know how many products are left for a specific counter + """ + name = models.CharField(_('name'), max_length=64) + counter = models.OneToOneField(Counter, verbose_name=_('counter'), related_name='stock') - def __str__(self): - return "%s (%s)" % (self.name, self.counter) + def __str__(self): + return "%s (%s)" % (self.name, self.counter) - def get_absolute_url(self): - return reverse('stock:list') + def get_absolute_url(self): + return reverse('stock:list') - def can_be_viewed_by(self, user): - return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) + def can_be_viewed_by(self, user): + return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) class StockItem(models.Model): - """ - The StockItem class, element of the stock - """ - name = models.CharField(_('name'), max_length=64) - unit_quantity = models.IntegerField(_('unit quantity'), default=0, help_text=_('number of element in one box')) - effective_quantity = models.IntegerField(_('effective quantity'), default=0, help_text=_('number of box')) - minimal_quantity = models.IntegerField(_('minimal quantity'), default=1, - help_text=_('if the effective quantity is less than the minimal, item is added to the shopping list')) - type = models.ForeignKey(ProductType, related_name="stock_items", verbose_name=_("type"), null=True, blank=True, - on_delete=models.SET_NULL) - stock_owner = models.ForeignKey(Stock, related_name="items") + """ + The StockItem class, element of the stock + """ + name = models.CharField(_('name'), max_length=64) + unit_quantity = models.IntegerField(_('unit quantity'), default=0, help_text=_('number of element in one box')) + effective_quantity = models.IntegerField(_('effective quantity'), default=0, help_text=_('number of box')) + minimal_quantity = models.IntegerField(_('minimal quantity'), default=1, + help_text=_('if the effective quantity is less than the minimal, item is added to the shopping list')) + type = models.ForeignKey(ProductType, related_name="stock_items", verbose_name=_("type"), null=True, blank=True, + on_delete=models.SET_NULL) + stock_owner = models.ForeignKey(Stock, related_name="items") - def __str__(self): - return "%s" % (self.name) + def __str__(self): + return "%s" % (self.name) - def get_absolute_url(self): - return reverse('stock:items_list', kwargs={'stock_id':self.stock_owner.id}) + def get_absolute_url(self): + return reverse('stock:items_list', kwargs={'stock_id':self.stock_owner.id}) - def can_be_viewed_by(self, user): - return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) + def can_be_viewed_by(self, user): + return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) class ShoppingList(models.Model): - """ - The ShoppingList class, used to make an history of the shopping lists - """ - date = models.DateTimeField(_('date')) - name = models.CharField(_('name'), max_length=64) - todo = models.BooleanField(_('todo')) - comment = models.TextField(_('comment'), null=True, blank=True) - stock_owner = models.ForeignKey(Stock, null=True, related_name="shopping_lists") + """ + The ShoppingList class, used to make an history of the shopping lists + """ + date = models.DateTimeField(_('date')) + name = models.CharField(_('name'), max_length=64) + todo = models.BooleanField(_('todo')) + comment = models.TextField(_('comment'), null=True, blank=True) + stock_owner = models.ForeignKey(Stock, null=True, related_name="shopping_lists") - def __str__(self): - return "%s (%s)" % (self.name, self.date) + def __str__(self): + return "%s (%s)" % (self.name, self.date) - def get_absolute_url(self): - return reverse('stock:shoppinglist_list') + def get_absolute_url(self): + return reverse('stock:shoppinglist_list') - def can_be_viewed_by(self, user): - return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) + def can_be_viewed_by(self, user): + return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) class ShoppingListItem(models.Model): - """ - """ - shopping_lists = models.ManyToManyField(ShoppingList, verbose_name=_("shopping lists"), related_name="shopping_items_to_buy") - stockitem_owner = models.ForeignKey(StockItem, related_name="shopping_item", null=True) - name = models.CharField(_('name'), max_length=64) - type = models.ForeignKey(ProductType, related_name="shoppinglist_items", verbose_name=_("type"), null=True, blank=True, - on_delete=models.SET_NULL) - tobuy_quantity = models.IntegerField(_('quantity to buy'), default=6, help_text=_("quantity to buy during the next shopping session")) - bought_quantity = models.IntegerField(_('quantity bought'), default=0, help_text=_("quantity bought during the last shopping session")) + """ + """ + shopping_lists = models.ManyToManyField(ShoppingList, verbose_name=_("shopping lists"), related_name="shopping_items_to_buy") + stockitem_owner = models.ForeignKey(StockItem, related_name="shopping_item", null=True) + name = models.CharField(_('name'), max_length=64) + type = models.ForeignKey(ProductType, related_name="shoppinglist_items", verbose_name=_("type"), null=True, blank=True, + on_delete=models.SET_NULL) + tobuy_quantity = models.IntegerField(_('quantity to buy'), default=6, help_text=_("quantity to buy during the next shopping session")) + bought_quantity = models.IntegerField(_('quantity bought'), default=0, help_text=_("quantity bought during the last shopping session")) - def __str__(self): - return "%s - %s" % (self.name, self.shopping_lists.first()) + def __str__(self): + return "%s - %s" % (self.name, self.shopping_lists.first()) - def can_be_viewed_by(self, user): - return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) + def can_be_viewed_by(self, user): + return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) + + def get_absolute_url(self): + return reverse('stock:shoppinglist_list') - def get_absolute_url(self): - return reverse('stock:shoppinglist_list') - diff --git a/stock/urls.py b/stock/urls.py index b7744e45..cf5c4677 100644 --- a/stock/urls.py +++ b/stock/urls.py @@ -3,28 +3,28 @@ from django.conf.urls import include, url from stock.views import * urlpatterns = [ -#Stock urls - url(r'^new/counter/(?P[0-9]+)$', StockCreateView.as_view(), name='new'), - url(r'^edit/(?P[0-9]+)$', StockEditView.as_view(), name='edit'), - url(r'^list$', StockListView.as_view(), name='list'), + #Stock urls + url(r'^new/counter/(?P[0-9]+)$', StockCreateView.as_view(), name='new'), + url(r'^edit/(?P[0-9]+)$', StockEditView.as_view(), name='edit'), + url(r'^list$', StockListView.as_view(), name='list'), -# StockItem urls - url(r'^(?P[0-9]+)$', StockItemList.as_view(), name='items_list'), - url(r'^(?P[0-9]+)/stockItem/newItem$', StockItemCreateView.as_view(), name='new_item'), - url(r'^stockItem/(?P[0-9]+)/edit$', StockItemEditView.as_view(), name='edit_item'), - url(r'^(?P[0-9]+)/stockItem/takeItems$', StockTakeItemsBaseFormView.as_view(), name='take_items'), + # StockItem urls + url(r'^(?P[0-9]+)$', StockItemList.as_view(), name='items_list'), + url(r'^(?P[0-9]+)/stockItem/newItem$', StockItemCreateView.as_view(), name='new_item'), + url(r'^stockItem/(?P[0-9]+)/edit$', StockItemEditView.as_view(), name='edit_item'), + url(r'^(?P[0-9]+)/stockItem/takeItems$', StockTakeItemsBaseFormView.as_view(), name='take_items'), -# ShoppingList urls - url(r'^(?P[0-9]+)/shoppingList/list$', StockShoppingListView.as_view(), name='shoppinglist_list'), - url(r'^(?P[0-9]+)/shoppingList/create$', StockItemQuantityBaseFormView.as_view(), name='shoppinglist_create'), - url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/items$', StockShoppingListItemListView.as_view(), - name='shoppinglist_items'), - url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/delete$', StockShoppingListDeleteView.as_view(), - name='shoppinglist_delete'), - url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/setDone$', StockShopppingListSetDone.as_view(), - name='shoppinglist_set_done'), - url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/setTodo$', StockShopppingListSetTodo.as_view(), - name='shoppinglist_set_todo'), - url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/updateStock$', StockUpdateAfterShopppingBaseFormView.as_view(), - name='update_after_shopping'), -] + # ShoppingList urls + url(r'^(?P[0-9]+)/shoppingList/list$', StockShoppingListView.as_view(), name='shoppinglist_list'), + url(r'^(?P[0-9]+)/shoppingList/create$', StockItemQuantityBaseFormView.as_view(), name='shoppinglist_create'), + url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/items$', StockShoppingListItemListView.as_view(), + name='shoppinglist_items'), + url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/delete$', StockShoppingListDeleteView.as_view(), + name='shoppinglist_delete'), + url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/setDone$', StockShopppingListSetDone.as_view(), + name='shoppinglist_set_done'), + url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/setTodo$', StockShopppingListSetTodo.as_view(), + name='shoppinglist_set_todo'), + url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/updateStock$', StockUpdateAfterShopppingBaseFormView.as_view(), + name='update_after_shopping'), + ] diff --git a/stock/views.py b/stock/views.py index 2fab9ea4..5d242c25 100644 --- a/stock/views.py +++ b/stock/views.py @@ -19,211 +19,211 @@ from stock.models import Stock, StockItem, ShoppingList, ShoppingListItem class StockItemList(CounterAdminTabsMixin, CanCreateMixin, ListView): - """ - The stockitems list view for the counter owner - """ - model = Stock - template_name = 'stock/stock_item_list.jinja' - pk_url_kwarg = "stock_id" - current_tab = "stocks" + """ + The stockitems list view for the counter owner + """ + model = Stock + template_name = 'stock/stock_item_list.jinja' + pk_url_kwarg = "stock_id" + current_tab = "stocks" + + def get_context_data(self): + ret = super(StockItemList, self).get_context_data() + if 'stock_id' in self.kwargs.keys(): + ret['stock'] = Stock.objects.filter(id=self.kwargs['stock_id']).first(); + return ret - def get_context_data(self): - ret = super(StockItemList, self).get_context_data() - if 'stock_id' in self.kwargs.keys(): - ret['stock'] = Stock.objects.filter(id=self.kwargs['stock_id']).first(); - return ret - class StockListView(CounterAdminTabsMixin, CanViewMixin, ListView): - """ - A list view for the admins - """ - model = Stock - template_name = 'stock/stock_list.jinja' - current_tab = "stocks" + """ + A list view for the admins + """ + model = Stock + template_name = 'stock/stock_list.jinja' + current_tab = "stocks" + - class StockEditForm(forms.ModelForm): - """ - A form to change stock's characteristics - """ - class Meta: - model = Stock - fields = ['name', 'counter'] - - def __init__(self, *args, **kwargs): - super(StockEditForm, self).__init__(*args, **kwargs) + """ + A form to change stock's characteristics + """ + class Meta: + model = Stock + fields = ['name', 'counter'] + + def __init__(self, *args, **kwargs): + super(StockEditForm, self).__init__(*args, **kwargs) + + def save(self, *args, **kwargs): + return super(StockEditForm, self).save(*args, **kwargs) - def save(self, *args, **kwargs): - return super(StockEditForm, self).save(*args, **kwargs) - class StockEditView(CounterAdminTabsMixin, CanEditPropMixin, UpdateView): - """ - An edit view for the stock - """ - model = Stock - form_class = modelform_factory(Stock, fields=['name', 'counter']) - pk_url_kwarg = "stock_id" - template_name = 'core/edit.jinja' - current_tab = "stocks" - + """ + An edit view for the stock + """ + model = Stock + form_class = modelform_factory(Stock, fields=['name', 'counter']) + pk_url_kwarg = "stock_id" + template_name = 'core/edit.jinja' + current_tab = "stocks" + class StockItemEditView(CounterAdminTabsMixin, CanEditPropMixin, UpdateView): - """ - An edit view for a stock item - """ - model = StockItem - form_class = modelform_factory(StockItem, fields=['name', 'unit_quantity', 'effective_quantity', 'minimal_quantity', 'type', 'stock_owner']) - pk_url_kwarg = "item_id" - template_name = 'core/edit.jinja' - current_tab = "stocks" + """ + An edit view for a stock item + """ + model = StockItem + form_class = modelform_factory(StockItem, fields=['name', 'unit_quantity', 'effective_quantity', 'minimal_quantity', 'type', 'stock_owner']) + pk_url_kwarg = "item_id" + template_name = 'core/edit.jinja' + current_tab = "stocks" class StockCreateView(CounterAdminTabsMixin, CanCreateMixin, CreateView): - """ - A create view for a new Stock - """ - model = Stock - form_class = modelform_factory(Stock, fields=['name', 'counter']) - template_name = 'core/create.jinja' - pk_url_kwarg = "counter_id" - current_tab = "stocks" - success_url = reverse_lazy('stock:list') + """ + A create view for a new Stock + """ + model = Stock + form_class = modelform_factory(Stock, fields=['name', 'counter']) + template_name = 'core/create.jinja' + pk_url_kwarg = "counter_id" + current_tab = "stocks" + success_url = reverse_lazy('stock:list') + + def get_initial(self): + ret = super(StockCreateView, self).get_initial() + if 'counter_id' in self.kwargs.keys(): + ret['counter'] = self.kwargs['counter_id'] + return ret - def get_initial(self): - ret = super(StockCreateView, self).get_initial() - if 'counter_id' in self.kwargs.keys(): - ret['counter'] = self.kwargs['counter_id'] - return ret - class StockItemCreateView(CounterAdminTabsMixin, CanCreateMixin, CreateView): - """ - A create view for a new StockItem - """ - model = StockItem - form_class = modelform_factory(StockItem, fields=['name', 'unit_quantity', 'effective_quantity', 'minimal_quantity', 'type', 'stock_owner']) - template_name = 'core/create.jinja' - pk_url_kwarg = "stock_id" - current_tab = "stocks" + """ + A create view for a new StockItem + """ + model = StockItem + form_class = modelform_factory(StockItem, fields=['name', 'unit_quantity', 'effective_quantity', 'minimal_quantity', 'type', 'stock_owner']) + template_name = 'core/create.jinja' + pk_url_kwarg = "stock_id" + current_tab = "stocks" - def get_initial(self): - ret = super(StockItemCreateView, self).get_initial() - if 'stock_id' in self.kwargs.keys(): - ret['stock_owner'] = self.kwargs['stock_id'] - return ret + def get_initial(self): + ret = super(StockItemCreateView, self).get_initial() + if 'stock_id' in self.kwargs.keys(): + ret['stock_owner'] = self.kwargs['stock_id'] + return ret - def get_success_url(self): - return reverse_lazy('stock:items_list', kwargs={'stock_id':self.object.stock_owner.id}) + def get_success_url(self): + return reverse_lazy('stock:items_list', kwargs={'stock_id':self.object.stock_owner.id}) class StockShoppingListView(CounterAdminTabsMixin, CanViewMixin, ListView): - """ - A list view for the people to know the item to buy - """ - model = Stock - template_name = "stock/stock_shopping_list.jinja" - pk_url_kwarg = "stock_id" - current_tab = "stocks" + """ + A list view for the people to know the item to buy + """ + model = Stock + template_name = "stock/stock_shopping_list.jinja" + pk_url_kwarg = "stock_id" + current_tab = "stocks" - def get_context_data(self): - ret = super(StockShoppingListView, self).get_context_data() - if 'stock_id' in self.kwargs.keys(): - ret['stock'] = Stock.objects.filter(id=self.kwargs['stock_id']).first(); - return ret + def get_context_data(self): + ret = super(StockShoppingListView, self).get_context_data() + if 'stock_id' in self.kwargs.keys(): + ret['stock'] = Stock.objects.filter(id=self.kwargs['stock_id']).first(); + return ret class StockItemQuantityForm(forms.BaseForm): - def clean(self): - with transaction.atomic(): - self.stock = Stock.objects.filter(id=self.stock_id).first() - shopping_list = ShoppingList(name="Courses "+self.stock.counter.name, date=timezone.now(), todo=True) - shopping_list.save() - shopping_list.stock_owner = self.stock - shopping_list.save() - for k,t in self.cleaned_data.items(): - if k == 'name': - shopping_list.name = t - shopping_list.save() - elif k == "comment": - shopping_list.comment = t - shopping_list.save() - else: - if t > 0 : - item_id = int(k[5:]) - item = StockItem.objects.filter(id=item_id).first() - shoppinglist_item = ShoppingListItem(stockitem_owner=item, name=item.name, type=item.type, tobuy_quantity=t) - shoppinglist_item.save() - shoppinglist_item.shopping_lists.add(shopping_list) - shoppinglist_item.save() - - return self.cleaned_data + def clean(self): + with transaction.atomic(): + self.stock = Stock.objects.filter(id=self.stock_id).first() + shopping_list = ShoppingList(name="Courses "+self.stock.counter.name, date=timezone.now(), todo=True) + shopping_list.save() + shopping_list.stock_owner = self.stock + shopping_list.save() + for k,t in self.cleaned_data.items(): + if k == 'name': + shopping_list.name = t + shopping_list.save() + elif k == "comment": + shopping_list.comment = t + shopping_list.save() + else: + if t > 0 : + item_id = int(k[5:]) + item = StockItem.objects.filter(id=item_id).first() + shoppinglist_item = ShoppingListItem(stockitem_owner=item, name=item.name, type=item.type, tobuy_quantity=t) + shoppinglist_item.save() + shoppinglist_item.shopping_lists.add(shopping_list) + shoppinglist_item.save() + + return self.cleaned_data class StockItemQuantityBaseFormView(CounterAdminTabsMixin, CanEditMixin, DetailView, BaseFormView): - """ - docstring for StockItemOutList - """ - model = StockItem - template_name = "stock/shopping_list_quantity.jinja" - pk_url_kwarg = "stock_id" - current_tab = "stocks" + """ + docstring for StockItemOutList + """ + model = StockItem + template_name = "stock/shopping_list_quantity.jinja" + pk_url_kwarg = "stock_id" + current_tab = "stocks" - def get_form_class(self): - fields = OrderedDict() - kwargs = {} - fields['name'] = forms.CharField(max_length=30, required=True, label=_('Shopping list name')) - for t in ProductType.objects.order_by('name').all(): - for i in self.stock.items.filter(type=t).order_by('name').all(): - if i.effective_quantity <= i.minimal_quantity: - field_name = "item-%s" % (str(i.id)) - fields[field_name] = forms.IntegerField(required=True, label=str(i), initial=0, - help_text=_(str(i.effective_quantity)+" left")) - fields['comment'] = forms.CharField(widget=forms.Textarea(attrs={"placeholder":_("Add here, items to buy that are not reference as a stock item (example : sponge, knife, mugs ...)")}), - required=False, label=_("Comments")) - kwargs['stock_id'] = self.stock.id - kwargs['base_fields'] = fields - return type('StockItemQuantityForm', (StockItemQuantityForm,), kwargs) + def get_form_class(self): + fields = OrderedDict() + kwargs = {} + fields['name'] = forms.CharField(max_length=30, required=True, label=_('Shopping list name')) + for t in ProductType.objects.order_by('name').all(): + for i in self.stock.items.filter(type=t).order_by('name').all(): + if i.effective_quantity <= i.minimal_quantity: + field_name = "item-%s" % (str(i.id)) + fields[field_name] = forms.IntegerField(required=True, label=str(i), initial=0, + help_text=_(str(i.effective_quantity)+" left")) + fields['comment'] = forms.CharField(widget=forms.Textarea(attrs={"placeholder":_("Add here, items to buy that are not reference as a stock item (example : sponge, knife, mugs ...)")}), + required=False, label=_("Comments")) + kwargs['stock_id'] = self.stock.id + kwargs['base_fields'] = fields + return type('StockItemQuantityForm', (StockItemQuantityForm,), kwargs) - def get(self, request, *args, **kwargs): - """ - Simple get view - """ - self.stock = Stock.objects.filter(id=self.kwargs['stock_id']).first() - return super(StockItemQuantityBaseFormView, 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() - return super(StockItemQuantityBaseFormView, self).post(request, *args, **kwargs) + def get(self, request, *args, **kwargs): + """ + Simple get view + """ + self.stock = Stock.objects.filter(id=self.kwargs['stock_id']).first() + return super(StockItemQuantityBaseFormView, self).get(request, *args, **kwargs) - def form_valid(self, form): - return super(StockItemQuantityBaseFormView, self).form_valid(form) + 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() + return super(StockItemQuantityBaseFormView, self).post(request, *args, **kwargs) - def get_context_data(self, **kwargs): - kwargs = super(StockItemQuantityBaseFormView, self).get_context_data(**kwargs) - if 'form' not in kwargs.keys(): - kwargs['form'] = self.get_form() - kwargs['stock'] = self.stock - return kwargs + def form_valid(self, form): + return super(StockItemQuantityBaseFormView, self).form_valid(form) - def get_success_url(self): - return reverse_lazy('stock:shoppinglist_list', args=self.args, kwargs=self.kwargs) + def get_context_data(self, **kwargs): + kwargs = super(StockItemQuantityBaseFormView, self).get_context_data(**kwargs) + if 'form' not in kwargs.keys(): + kwargs['form'] = self.get_form() + kwargs['stock'] = self.stock + return kwargs + + def get_success_url(self): + return reverse_lazy('stock:shoppinglist_list', args=self.args, kwargs=self.kwargs) class StockShoppingListItemListView(CounterAdminTabsMixin, CanViewMixin, ListView): - """docstring for StockShoppingListItemListView""" - model = ShoppingList - template_name = "stock/shopping_list_items.jinja" - pk_url_kwarg = "shoppinglist_id" - current_tab = "stocks" + """docstring for StockShoppingListItemListView""" + model = ShoppingList + template_name = "stock/shopping_list_items.jinja" + pk_url_kwarg = "shoppinglist_id" + current_tab = "stocks" - def get_context_data(self): - ret = super(StockShoppingListItemListView, self).get_context_data() - if 'shoppinglist_id' in self.kwargs.keys(): - ret['shoppinglist'] = ShoppingList.objects.filter(id=self.kwargs['shoppinglist_id']).first(); - return ret + def get_context_data(self): + ret = super(StockShoppingListItemListView, self).get_context_data() + if 'shoppinglist_id' in self.kwargs.keys(): + ret['shoppinglist'] = ShoppingList.objects.filter(id=self.kwargs['shoppinglist_id']).first(); + return ret class StockShoppingListDeleteView(CounterAdminTabsMixin, CanEditMixin, DeleteView): """ @@ -235,7 +235,7 @@ class StockShoppingListDeleteView(CounterAdminTabsMixin, CanEditMixin, DeleteVie current_tab = "stocks" def get_success_url(self): - return reverse_lazy('stock:shoppinglist_list', kwargs={'stock_id':self.object.stock_owner.id}) + return reverse_lazy('stock:shoppinglist_list', kwargs={'stock_id':self.object.stock_owner.id}) class StockShopppingListSetDone(CanEditMixin, DetailView): @@ -275,143 +275,143 @@ class StockShopppingListSetTodo(CanEditMixin, DetailView): class StockUpdateAfterShopppingForm(forms.BaseForm): - def clean(self): - with transaction.atomic(): - self.shoppinglist = ShoppingList.objects.filter(id=self.shoppinglist_id).first() - for k,t in self.cleaned_data.items(): - shoppinglist_item_id = int(k[5:]) - if int(t) > 0 : - shoppinglist_item = ShoppingListItem.objects.filter(id=shoppinglist_item_id).first() - shoppinglist_item.bought_quantity = int(t) - shoppinglist_item.save() - shoppinglist_item.stockitem_owner.effective_quantity += int(t) - shoppinglist_item.stockitem_owner.save() - self.shoppinglist.todo = False - self.shoppinglist.save() - return self.cleaned_data + def clean(self): + with transaction.atomic(): + self.shoppinglist = ShoppingList.objects.filter(id=self.shoppinglist_id).first() + for k,t in self.cleaned_data.items(): + shoppinglist_item_id = int(k[5:]) + if int(t) > 0 : + shoppinglist_item = ShoppingListItem.objects.filter(id=shoppinglist_item_id).first() + shoppinglist_item.bought_quantity = int(t) + shoppinglist_item.save() + shoppinglist_item.stockitem_owner.effective_quantity += int(t) + shoppinglist_item.stockitem_owner.save() + self.shoppinglist.todo = False + self.shoppinglist.save() + return self.cleaned_data class StockUpdateAfterShopppingBaseFormView(CounterAdminTabsMixin, CanEditMixin, DetailView, BaseFormView): - """ - docstring for StockUpdateAfterShopppingBaseFormView - """ - model = ShoppingList - template_name = "stock/update_after_shopping.jinja" - pk_url_kwarg = "shoppinglist_id" - current_tab = "stocks" + """ + docstring for StockUpdateAfterShopppingBaseFormView + """ + model = ShoppingList + template_name = "stock/update_after_shopping.jinja" + pk_url_kwarg = "shoppinglist_id" + current_tab = "stocks" - def get_form_class(self): - fields = OrderedDict() - kwargs = {} - for t in ProductType.objects.order_by('name').all(): - for i in self.shoppinglist.shopping_items_to_buy.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), - help_text=_(str(i.tobuy_quantity) + " asked")) - kwargs['shoppinglist_id'] = self.shoppinglist.id - kwargs['base_fields'] = fields - return type('StockUpdateAfterShopppingForm', (StockUpdateAfterShopppingForm,), kwargs) + def get_form_class(self): + fields = OrderedDict() + kwargs = {} + for t in ProductType.objects.order_by('name').all(): + for i in self.shoppinglist.shopping_items_to_buy.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), + help_text=_(str(i.tobuy_quantity) + " asked")) + kwargs['shoppinglist_id'] = self.shoppinglist.id + kwargs['base_fields'] = fields + return type('StockUpdateAfterShopppingForm', (StockUpdateAfterShopppingForm,), kwargs) - def get(self, request, *args, **kwargs): - self.shoppinglist = ShoppingList.objects.filter(id=self.kwargs['shoppinglist_id']).first() - return super(StockUpdateAfterShopppingBaseFormView, 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.shoppinglist = ShoppingList.objects.filter(id=self.kwargs['shoppinglist_id']).first() - return super(StockUpdateAfterShopppingBaseFormView, self).post(request, *args, **kwargs) + def get(self, request, *args, **kwargs): + self.shoppinglist = ShoppingList.objects.filter(id=self.kwargs['shoppinglist_id']).first() + return super(StockUpdateAfterShopppingBaseFormView, self).get(request, *args, **kwargs) - def form_valid(self, form): - """ - We handle here the redirection - """ - return super(StockUpdateAfterShopppingBaseFormView, self).form_valid(form) + def post(self, request, *args, **kwargs): + """ + Handle the many possibilities of the post request + """ + self.object = self.get_object() + self.shoppinglist = ShoppingList.objects.filter(id=self.kwargs['shoppinglist_id']).first() + return super(StockUpdateAfterShopppingBaseFormView, self).post(request, *args, **kwargs) - def get_context_data(self, **kwargs): - kwargs = super(StockUpdateAfterShopppingBaseFormView, self).get_context_data(**kwargs) - if 'form' not in kwargs.keys(): - kwargs['form'] = self.get_form() - kwargs['shoppinglist'] = self.shoppinglist - kwargs['stock'] = self.shoppinglist.stock_owner - return kwargs + def form_valid(self, form): + """ + We handle here the redirection + """ + return super(StockUpdateAfterShopppingBaseFormView, self).form_valid(form) - def get_success_url(self): - self.kwargs.pop('shoppinglist_id', None) - return reverse_lazy('stock:shoppinglist_list', args=self.args, kwargs=self.kwargs) + def get_context_data(self, **kwargs): + kwargs = super(StockUpdateAfterShopppingBaseFormView, self).get_context_data(**kwargs) + if 'form' not in kwargs.keys(): + kwargs['form'] = self.get_form() + kwargs['shoppinglist'] = self.shoppinglist + kwargs['stock'] = self.shoppinglist.stock_owner + return kwargs + + 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 t > 0 : - item = StockItem.objects.filter(id=item_id).first() - item.effective_quantity -= t - item.save() - return self.cleaned_data + """ + docstring for StockTakeItemsFormView + """ + def clean(self): + with transaction.atomic(): + for k,t in self.cleaned_data.items(): + item_id = int(k[5:]) + if t > 0 : + item = StockItem.objects.filter(id=item_id).first() + item.effective_quantity -= 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" + """ + 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.IntegerField(required=False, label=str(i), initial=0, min_value=0, max_value=i.effective_quantity, - help_text=_("("+ str(i.effective_quantity) + " left)")) - 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_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.IntegerField(required=False, label=str(i), initial=0, min_value=0, max_value=i.effective_quantity, + help_text=_("(%(effective_quantity)s left" % {"effective_quantity": str(i.effective_quantity)})) + 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 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 form_valid(self, form): - return super(StockTakeItemsBaseFormView, self).form_valid(form) + 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 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 form_valid(self, form): + return super(StockTakeItemsBaseFormView, self).form_valid(form) - 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) \ No newline at end of file + 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)