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:
parent
ffa73c41c3
commit
a0f1243690
2 changed files with 24 additions and 4 deletions
|
@ -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,
|
||||
|
|
|
@ -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')
|
||||
|
|
Loading…
Reference in a new issue