def manage_stock_movement(product_infos, product_id, cat_id_src):
# product_ref : reference sur produit (servira de nom de fichier contenant les stocks associe)
product_ref = product_infos["reference"]
# cat_id_dest : id de la category du produit selon picata (la ou va etre stocke les infos de la synchro en cours)
cat_id_dest = product_infos["product_category_id"]
# creation de la variable stocks pour plus de lisibilité
stocks = {}
for tag, value in product_infos.iteritems():
if tag in STOCK_PARAMS:
stocks[ENTREPOTS_ID[tag]] = value
# log.debug("Product {} : stock_id = {}, value = {}".format(product_infos["name"],ENTREPOTS_ID[tag], value))
# Les stocks sont rangé par catégories pour des question de limite de nbrs de fichier
filename_dest = "stock/"+cat_id_dest+"/"+product_ref+".txt"
rs = []
#Si le dossier n'existe pas, on le crée
if not os.path.exists(os.path.dirname(filename_dest)):
try:
os.makedirs(os.path.dirname(filename_dest))
except OSError as exc: # Guard against race condition
if exc.errno != errno.EEXIST:
raise
if cat_id_src:
filename_src = "stock/"+cat_id_src+"/"+product_ref+".txt"
# Si le fichier existe, on lit les valeurs du stock precedent
if (os.path.exists(filename_src)):
with open(filename_src, 'r') as fp:
datas = []
for line in fp:
difference = 0
data = line.split(":")
difference = int(stocks[data[0]]) - int(data[1])
if (difference > 0):
change_stock_value(data[0], difference, product_id, "1")
elif (difference < 0) :
change_stock_value(data[0], abs(difference), product_id, "-1")
# else:
# log.debug("Stock for product {} (id {}) up to date".format(product_infos["name"],product_id))
# Sinon, crée les movement de stock correspondant
else:
for warehouse_id, quantity in stocks.iteritems():
if (int(quantity) >= 0) :
change_stock_value(warehouse_id, int(quantity), product_id, "1")
else:
change_stock_value(warehouse_id, abs(int(quantity)), product_id, "-1")
# Dans tout les cas, on (re)ecrit le fichier avec les nouvelles valeurs
with open(filename_dest, 'w') as fp:
for warehouse_id, quantity in stocks.iteritems():
fp.write(warehouse_id+":"+quantity+"\n")
fp.close()