Modif stock lors d'une annulation

- 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
This commit is contained in:
Aurélien Delobelle 2016-08-27 21:43:19 +02:00
parent ffa73c41c3
commit a0f1243690
2 changed files with 24 additions and 4 deletions

View file

@ -368,6 +368,10 @@ class InventoryArticle(models.Model):
stock_new = models.IntegerField() stock_new = models.IntegerField()
stock_error = models.IntegerField(default = 0) 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): class Supplier(models.Model):
articles = models.ManyToManyField( articles = models.ManyToManyField(
Article, Article,

View file

@ -951,6 +951,12 @@ def kpsul_cancel_operations(request):
# Pour les balances de caisses # Pour les balances de caisses
# Les balances de caisses dont il y a eu un relevé depuis la date # Les balances de caisses dont il y a eu un relevé depuis la date
# de la commande ne doivent pas être modifiées # 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 # TODO ? : Maj les balance_old de relevés pour modifier l'erreur
last_statement = (CheckoutStatement.objects last_statement = (CheckoutStatement.objects
.filter(checkout=ope.group.checkout) .filter(checkout=ope.group.checkout)
@ -964,7 +970,19 @@ def kpsul_cancel_operations(request):
to_checkouts_balances[ope.group.checkout] -= ope.amount to_checkouts_balances[ope.group.checkout] -= ope.amount
# Pour les stocks d'articles # 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: if ope.article and 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 to_articles_stocks[ope.article] += ope.article_nb
if not opes: if not opes:
@ -1307,13 +1325,11 @@ def inventory_create(request):
article = articles.get(pk=form.cleaned_data['article'].pk) article = articles.get(pk=form.cleaned_data['article'].pk)
stock_old = article.stock stock_old = article.stock
stock_new = form.cleaned_data['stock_new'] stock_new = form.cleaned_data['stock_new']
stock_error = stock_new - stock_old
InventoryArticle.objects.create( InventoryArticle.objects.create(
inventory = inventory, inventory = inventory,
article = article, article = article,
stock_old = stock_old, stock_old = stock_old,
stock_new = stock_new, stock_new = stock_new)
stock_error = stock_error)
article.stock = stock_new article.stock = stock_new
article.save() article.save()
print('ok') print('ok')