Commit dd55db61 by Yvon Kerdoncuff

#7050 stock movement : if all required quantity can not be reserved, increase…

#7050 stock movement : if all required quantity can not be reserved, increase stock so that movement can be done
parent 7e9e7948
Pipeline #3917 failed with stage
...@@ -4,6 +4,7 @@ from outils.common_imports import * ...@@ -4,6 +4,7 @@ from outils.common_imports import *
from outils.common import OdooAPI from outils.common import OdooAPI
from decimal import * from decimal import *
from datetime import datetime from datetime import datetime
from inventory.models import CagetteInventory
class CagetteStock(models.Model): class CagetteStock(models.Model):
...@@ -59,6 +60,7 @@ class CagetteStock(models.Model): ...@@ -59,6 +60,7 @@ class CagetteStock(models.Model):
return {'errors': errors, 'picking_id': picking} return {'errors': errors, 'picking_id': picking}
picking_name += datetime.now().strftime("%d/%m/%Y %H:%M:%S") picking_name += datetime.now().strftime("%d/%m/%Y %H:%M:%S")
picking_short_name = picking_name
picking_name += ' - ' + stock_movement_data['operator']['name'] + ' ('+ str(stock_movement_data['operator']['barcode_base']) + ')' picking_name += ' - ' + stock_movement_data['operator']['name'] + ' ('+ str(stock_movement_data['operator']['barcode_base']) + ')'
fields = { fields = {
...@@ -105,7 +107,7 @@ class CagetteStock(models.Model): ...@@ -105,7 +107,7 @@ class CagetteStock(models.Model):
picking_move_lines = api.search_read( picking_move_lines = api.search_read(
'stock.move', 'stock.move',
[('picking_id', '=', picking_id)], # Filtre sur le picking_id [('picking_id', '=', picking_id)], # Filtre sur le picking_id
['id', 'product_id', 'product_qty'] # Champs nécessaires ['id', 'product_id', 'product_qty', 'product_uom'] # Champs nécessaires
) )
# Pour chaque mouvement de picking, vérifier la disponibilité avant de procéder # Pour chaque mouvement de picking, vérifier la disponibilité avant de procéder
...@@ -125,10 +127,22 @@ class CagetteStock(models.Model): ...@@ -125,10 +127,22 @@ class CagetteStock(models.Model):
# Vérifier si le stock net disponible est suffisant pour le mouvement actuel # Vérifier si le stock net disponible est suffisant pour le mouvement actuel
if product_qty > net_available_stock: if product_qty > net_available_stock:
# Lever une exception pour bloquer l'action #Le stock réservable n'est pas suffisant. On effectue un inventaire pour augmenter le stock.
raise Exception( #à la valeur de la quantité que l'on souhaite transférer + la quantité réservée
'Réservation totale impossible pour le produit : {}. Quantité nette réservable : {}. Opération annulée.'.format( p = {
move['product_id'][1], net_available_stock)) # Utilisation du nom du produit 'id': product_id,
'uom_id': move['product_uom'],
'qty': product_qty + stock_quant_data[0]['reserved_quantity']
}
inventory_data = {
'name': 'Augmentation de stock avant mouvement : ' + picking_short_name,
'products': [p]
}
res = CagetteInventory.update_products_stock(inventory_data)
if 'errors' in res and res['errors']:
raise Exception('Erreur lors de l\'augmentation de stock précédant le transfert : ' + res['errors'][0])
# Si le stock est suffisant, on effectue l'action de transfert immédiat # Si le stock est suffisant, on effectue l'action de transfert immédiat
api.execute('stock.picking', 'stock_immediate_transfer', [picking_id]) api.execute('stock.picking', 'stock_immediate_transfer', [picking_id])
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment