From a0f12436907af251d795c5d026aa24092a288b3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Delobelle?= Date: Sat, 27 Aug 2016 21:43:19 +0200 Subject: [PATCH] Modif stock lors d'une annulation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Le stock n'est pas modifié s'il y a eu un inventaire depuis la date de la commande annulée - La méthode save d'ArticleInventory calcule elle-même l'erreur à partir de stock_old et stock_new --- kfet/models.py | 4 ++++ kfet/views.py | 24 ++++++++++++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/kfet/models.py b/kfet/models.py index eaf037b6..907c6938 100644 --- a/kfet/models.py +++ b/kfet/models.py @@ -368,6 +368,10 @@ class InventoryArticle(models.Model): stock_new = models.IntegerField() stock_error = models.IntegerField(default = 0) + def save(self, *args, **kwargs): + self.stock_error = self.stock_new - self.stock_old + super(InventoryArticle, self).save(*args, **kwargs) + class Supplier(models.Model): articles = models.ManyToManyField( Article, diff --git a/kfet/views.py b/kfet/views.py index 87dc9a12..b46747e8 100644 --- a/kfet/views.py +++ b/kfet/views.py @@ -951,6 +951,12 @@ def kpsul_cancel_operations(request): # Pour les balances de caisses # Les balances de caisses dont il y a eu un relevé depuis la date # de la commande ne doivent pas être modifiées + # TODO : Prendre en compte le dernier relevé où la caisse a été + # comptée et donc modifier les balance_old (et amount_error) + # des relevés suivants. + # Note : Dans le cas où un CheckoutStatement est mis à jour + # par `.save()`, amount_error est recalculé automatiquement, + # ce qui n'est pas le cas en faisant un update sur queryset # TODO ? : Maj les balance_old de relevés pour modifier l'erreur last_statement = (CheckoutStatement.objects .filter(checkout=ope.group.checkout) @@ -964,8 +970,20 @@ def kpsul_cancel_operations(request): to_checkouts_balances[ope.group.checkout] -= ope.amount # Pour les stocks d'articles + # Les stocks d'articles dont il y a eu un inventaire depuis la date + # de la commande ne doivent pas être modifiés + # TODO : Prendre en compte le dernier inventaire où le stock a bien + # été compté (pas dans le cas d'une livraison). + # Note : si InventoryArticle est maj par .save(), stock_error + # est recalculé automatiquement if ope.article and ope.article_nb: - to_articles_stocks[ope.article] += ope.article_nb + last_stock = (ArticleInventory.objects + .select_related('inventory') + .filter(article=ope.article) + .order_by('at') + .last()) + if not last_stock or last_stock.inventory.at < ope.group.at: + to_articles_stocks[ope.article] += ope.article_nb if not opes: data['warnings']['already_canceled'] = opes_already_canceled @@ -1307,13 +1325,11 @@ def inventory_create(request): article = articles.get(pk=form.cleaned_data['article'].pk) stock_old = article.stock stock_new = form.cleaned_data['stock_new'] - stock_error = stock_new - stock_old InventoryArticle.objects.create( inventory = inventory, article = article, stock_old = stock_old, - stock_new = stock_new, - stock_error = stock_error) + stock_new = stock_new) article.stock = stock_new article.save() print('ok')