#coding:utf-8

import sys
sys.dont_write_bytecode = True

def SQL_Connect():
	from termcolor import colored
	from pprint import pprint
	from pyodbc import connect

	try:
		cnxn = "DRIVER={ODBC Driver 17 for SQL Server};"
		cnxn += "SERVER=tcp:" + "192.168.1.114" + ";"
		cnxn +="DATABASE=" + "MERCATOR_THE_SOUND_SOURCE_SPRL" + ";"
		cnxn +="UID=" + "OVH_Request" + ";"
		cnxn +="PWD=" + "Soleil3"
		cnxn = connect(cnxn, autocommit=True)
		crsr = cnxn.cursor()
		return cnxn, crsr
	except Exception as e:
		print(colored(f"Impossible de se connecter à Mercator via SQL\n", "red"))
		print(colored(f"{e}\n", "yellow"))
		return False

def MariaDB_Connect():
	from termcolor import colored
	from pprint import pprint
	import mariadb

	try:
		conn = mariadb.connect(user="thesoundsource", password="GAVEzWVnggs9b5h4XHJjsRW33Fkrynn55UQfxV7S2W6pwhRj", host="localhost", port=3306, database="FFWD_PrestaDB")
		cur = conn.cursor()
		return conn, cur
	except Exception as e:
		print(colored(f"Impossible de se connecter à Prestashop via MariaDB\n", "red"))
		print(colored(f"{e}\n", "yellow"))
		return False

def Fetch_FFWD_Stock(time_span=15):
	from termcolor import colored
	from pprint import pprint

	m_conn, m_cur = SQL_Connect()

	try:
		if time_span == -1:
			query = f"""
					SELECT
					RTRIM(S.S_ID) AS S_ID,
					RTRIM(S.S_MODELE) AS S_MODELE,
					RTRIM(S.S_TARTI_1) AS S_TARTI_1,
					RTRIM(D.DISPO) AS DISPO,
					RTRIM(S.S_QDISPO) AS S_QDISPO,
					RTRIM(S.S_QV_3) AS S_QV_3,
					FORMAT(S_DISPO_FOU, 'yyyy-MM-dd') AS S_DISPO_FOU,
					RTRIM(S.S_REMARQUE_FOU) AS S_REMARQUE_FOU,
					FORMAT(S_MODIF, 'yyyy-MM-dd HH:mm:ss') AS S_MODIF,
					FORMAT(S_WEB_DATE, 'yyyy-MM-dd HH:mm:ss') AS S_WEB_DATE,
					S.S_SOMMEIL AS S_SOMMEIL
					FROM STOCK S
					JOIN DISPO D ON S.S_ID = D.ID_STOCK
					WHERE S.S_COMPTEA = '604000'
					AND D.ID_MAGASIN = '0000000001';
					"""
		else:
			query = f"""
					SELECT
					RTRIM(S.S_ID) AS S_ID,
					RTRIM(S.S_MODELE) AS S_MODELE,
					RTRIM(S.S_TARTI_1) AS S_TARTI_1,
					RTRIM(D.DISPO) AS DISPO,
					RTRIM(S.S_QDISPO) AS S_QDISPO,
					RTRIM(S.S_QV_3) AS S_QV_3,
					FORMAT(S_DISPO_FOU, 'yyyy-MM-dd') AS S_DISPO_FOU,
					RTRIM(S.S_REMARQUE_FOU) AS S_REMARQUE_FOU,
					FORMAT(S_MODIF, 'yyyy-MM-dd HH:mm:ss') AS S_MODIF,
					FORMAT(S_WEB_DATE, 'yyyy-MM-dd HH:mm:ss') AS S_WEB_DATE,
					S.S_SOMMEIL AS S_SOMMEIL
					FROM STOCK S
					JOIN DISPO D ON S.S_ID = D.ID_STOCK
					WHERE S.S_COMPTEA = '604000'
					AND D.ID_MAGASIN = '0000000001'
					AND (
						(S.S_MODIF BETWEEN DATEADD(MINUTE, -{time_span}, GETDATE()) AND GETDATE())
						OR
						(S.S_WEB_DATE BETWEEN DATEADD(MINUTE, -{time_span}, GETDATE()) AND GETDATE())
					);
					"""

		m_cur.execute(query)
		data = m_cur.fetchall()

		if not data:
			print(colored(f"Aucune résultat renvoyé par la requête SQL\n", "yellow"))
			return False

		m_export = {}

		for item in data:
			m_id = item[0]
			m_export[m_id] = {"S_MODELE": item[1],
							  "S_TARTI_1": item[2],
							  "DISPO": item[3],
							  "S_QDISPO": item[4],
							  "S_QV_3": item[5],
							  "S_DISPO_FOU": item[6],
							  "S_REMARQUE_FOU": item[7],
							  "S_MODIF": item[8],
							  "S_WEB_DATE": item[9],
							  "S_SOMMEIL": item[10],}

		m_cur.close()
		m_conn.close()
		return m_export

	except Exception as e:
		print(colored(f"Impossible de créer le dictionnaire à partir de la requête SQL\n", "red"))
		print(colored(f"{e}\n", "yellow"))
		return False

def Fetch_M2M_Stock(time_span=15):
	from termcolor import colored
	from pprint import pprint

	m_conn, m_cur = SQL_Connect()

	try:
		if time_span == -1:
			query = f"""
					SELECT
					RTRIM(S.S_ID) AS S_ID,
					RTRIM(S.S_MODELE) AS S_MODELE,
					RTRIM(S.S_TARTI_1) AS S_TARTI_1,
					RTRIM(D.DISPO) AS DISPO,
					RTRIM(S.S_QDISPO) AS S_QDISPO,
					RTRIM(S.S_QV_3) AS S_QV_3,
					FORMAT(S_DISPO_FOU, 'yyyy-MM-dd') AS S_DISPO_FOU,
					RTRIM(S.S_REMARQUE_FOU) AS S_REMARQUE_FOU,
					FORMAT(S_MODIF, 'yyyy-MM-dd HH:mm:ss') AS S_MODIF,
					FORMAT(S_WEB_DATE, 'yyyy-MM-dd HH:mm:ss') AS S_WEB_DATE,
					S.S_SOMMEIL AS S_SOMMEIL
					FROM STOCK S
					JOIN DISPO D ON S.S_ID = D.ID_STOCK
					WHERE S.S_COMPTEA = '604012'
					AND D.ID_MAGASIN = '0000000004';
					"""

		else:
			query = f"""
					SELECT
					RTRIM(S.S_ID) AS S_ID,
					RTRIM(S.S_MODELE) AS S_MODELE,
					RTRIM(S.S_TARTI_1) AS S_TARTI_1,
					RTRIM(D.DISPO) AS DISPO,
					RTRIM(S.S_QDISPO) AS S_QDISPO,
					RTRIM(S.S_QV_3) AS S_QV_3,
					FORMAT(S_DISPO_FOU, 'yyyy-MM-dd') AS S_DISPO_FOU,
					RTRIM(S.S_REMARQUE_FOU) AS S_REMARQUE_FOU,
					FORMAT(S_MODIF, 'yyyy-MM-dd HH:mm:ss') AS S_MODIF,
					FORMAT(S_WEB_DATE, 'yyyy-MM-dd HH:mm:ss') AS S_WEB_DATE,
					S.S_SOMMEIL AS S_SOMMEIL
					FROM STOCK S
					JOIN DISPO D ON S.S_ID = D.ID_STOCK
					WHERE S.S_COMPTEA = '604012'
					AND D.ID_MAGASIN = '0000000004'
					AND (
						(S.S_MODIF BETWEEN DATEADD(MINUTE, -{time_span}, GETDATE()) AND GETDATE())
						OR
						(S.S_WEB_DATE BETWEEN DATEADD(MINUTE, -{time_span}, GETDATE()) AND GETDATE())
					);
					"""

		m_cur.execute(query)
		data = m_cur.fetchall()

		if not data:
			print(colored(f"Aucune résultat renvoyé par la requête SQL\n", "yellow"))
			return False

		m_export = {}

		for item in data:
			m_id = item[0]
			m_export[m_id] = {"S_MODELE": item[1],
							  "S_TARTI_1": item[2],
							  "DISPO": item[3],
							  "S_QDISPO": item[4],
							  "S_QV_3": item[5],
							  "S_DISPO_FOU": item[6],
							  "S_REMARQUE_FOU": item[7],
							  "S_MODIF": item[8],
							  "S_WEB_DATE": item[9],
							  "S_SOMMEIL": item[10],}

		m_cur.close()
		m_conn.close()
		return m_export

	except Exception as e:
		print(colored(f"Impossible de créer le dictionnaire à partir de la requête SQL\n", "red"))
		print(colored(f"{e}\n", "yellow"))
		return False

def Fetch_MariaDB_UID(p_cur, m_id):
	from termcolor import colored
	from pprint import pprint

	try:
		query = f"""
				SELECT id_product
				FROM ps_product
				WHERE reference = '{m_id}';
				"""

		p_cur.execute(query)
		data = p_cur.fetchone()

		if data:
			p_id = str(data[0])
			return p_id
		else:
			return None

	except Exception as e:
		print(colored(f"Impossible de faire la correspondance des IDs entre Mercator et Prestashop\n", "red"))
		print(colored(f"{e}\n", "yellow"))
		return False

def Set_New_Stock(m_export):
	from termcolor import colored
	from pprint import pprint
	from datetime import datetime
	from datetime import timedelta

	p_conn, p_cur = MariaDB_Connect()

	p_import = {}

	today = datetime.today()
	delta = today - timedelta(days=7)

	for m_id, m_data in m_export.items():

		print(f"{m_id} ↔ ", end="")

		p_id = Fetch_MariaDB_UID(p_cur, m_id)

		if p_id:

			if len(p_id) >= 3:
				print(f"{p_id}\t\t", end="")
			else:
				print(f"{p_id}\t\t\t", end="")

			if int(m_data["DISPO"]) - int(m_data["S_QV_3"]) >= 1:
				alt_quantity = 99
				alt_comment = "En stock magasin"
				alt_date = datetime.now().strftime("%Y-%m-%d")
				print(f"► Stock : {alt_quantity}\t\t", end="")
			else:
				if delta <= datetime.strptime(m_data["S_WEB_DATE"], "%Y-%m-%d %H:%M:%S") <= today:
					if "disponible" in m_data["S_REMARQUE_FOU"].lower() or "quantité limitée" in m_data["S_REMARQUE_FOU"].lower():
						alt_quantity = 1
						alt_comment = "En stock internet"
						alt_date = m_data["S_DISPO_FOU"]
						print(f"► Stock : {alt_quantity}\t\t\t", end="")
					elif "prévu pour" in m_data["S_REMARQUE_FOU"].lower():
						alt_quantity = 0
						alt_comment = m_data["S_REMARQUE_FOU"]
						alt_date = m_data["S_DISPO_FOU"]
						print(f"► Stock : {alt_quantity}\t\t\t", end="")
					else:
						alt_quantity = -1
						alt_comment = m_data["S_REMARQUE_FOU"]
						alt_date = m_data["S_DISPO_FOU"]
						print(f"► Stock : {alt_quantity}\t\t", end="")
				else:
					alt_quantity = -1
					alt_comment = m_data["S_REMARQUE_FOU"]
					alt_date = m_data["S_DISPO_FOU"]
					print(f"► Stock : {alt_quantity}\t\t", end="")
			if float(m_data["S_TARTI_1"]) <= 0.0 or m_data["S_SOMMEIL"] is True:
				alt_price = 0
				alt_active = 0
				print(f"► Prix : {alt_price}\t\t\t\t", end="")
			elif float(m_data["S_TARTI_1"]) > 0.0 and m_data["S_SOMMEIL"] is False:
				alt_price = round(float(m_data["S_TARTI_1"]) / (1 + 21 / 100), 6)
				alt_active = 1
				if len(str(alt_price)) >= 11 and len(str(alt_price)) <= 14:
					print(f"► Prix : {alt_price}\t", end="")
				elif len(str(alt_price)) >= 7 and len(str(alt_price)) <= 10:
					print(f"► Prix : {alt_price}\t\t", end="")
				else:
					print(f"► Prix : {alt_price}\t\t\t", end="")
			else:
				print(f"► Prix : ► Erreur avec la référence")
				continue
			print(f"► Dictionnaire : ", end="")
			try:
				p_import[m_id] = {'id_product' : p_id,
								  "ps_stock_available_quantity" : alt_quantity,
								  "ps_product_price" : alt_price,
								  'ps_product_shop_price' : alt_price,
								  'ps_product_id_tax_rules_group' : 22,
								  'ps_product_shop_id_tax_rules_group': 22,
								  'ps_product_lang_delivery_out_stock' : alt_comment,
								  'ps_product_shop_available_date' : alt_date,
								  'ps_product_available_date' : alt_date,
								  'ps_stock_available_out_of_stock' : 2,
								  'ps_product_active' : alt_active,
								  'ps_product_shop_active' : alt_active,}
				print(f"OK")
			except Exception as e:
				print(colored(f"Erreur avec lors de la création du dictionnaire", "red"))
		else:
			print(f"-----\t\t► Pas trouvé\t\t► Pas trouvé\t\t\t► Pas trouvé")
			continue

	if len(p_import) > 0:
		print(f"\n{len(p_import)} référence(s) trouvée(s) dans Prestashop")
		p_cur.close()
		p_conn.close()
		return p_import
	else:
		print(f"\nAucune donnée dans le dictionnaire destiné à l'importation")
		p_cur.close()
		p_conn.close()
		return False

def Update_New_Stock(p_import):
	from termcolor import colored
	from pprint import pprint
	import mariadb

	p_conn, p_cur = MariaDB_Connect()

	print("\n*** Début des transactions SQL ***")

	p_conn.begin()

	enum_products, enum_queries = 0, 0

	try:
		for m_id, m_data in p_import.items():

			queries = [
				f"UPDATE ps_stock_available SET quantity = '{m_data['ps_stock_available_quantity']}' WHERE id_product = '{m_data['id_product']}' AND quantity != '{m_data['ps_stock_available_quantity']}';",
				f"UPDATE ps_product SET price = '{m_data['ps_product_price']}' WHERE id_product = '{m_data['id_product']}' AND price != '{m_data['ps_product_price']}';",
				f"UPDATE ps_product_shop SET price = '{m_data['ps_product_shop_price']}' WHERE id_product = '{m_data['id_product']}' AND price != '{m_data['ps_product_shop_price']}';",
				f"UPDATE ps_product SET id_tax_rules_group = '{m_data['ps_product_id_tax_rules_group']}' WHERE id_product = '{m_data['id_product']}' AND id_tax_rules_group != '{m_data['ps_product_id_tax_rules_group']}';",
				f"UPDATE ps_product_shop SET id_tax_rules_group = '{m_data['ps_product_shop_id_tax_rules_group']}' WHERE id_product = '{m_data['id_product']}' AND id_tax_rules_group != '{m_data['ps_product_shop_id_tax_rules_group']}';",
				f"UPDATE ps_product_lang SET delivery_out_stock = '{m_data['ps_product_lang_delivery_out_stock']}' WHERE id_product = '{m_data['id_product']}' AND delivery_out_stock != '{m_data['ps_product_lang_delivery_out_stock']}';",
				f"UPDATE ps_product_shop SET available_date = '{m_data['ps_product_shop_available_date']}' WHERE id_product = '{m_data['id_product']}' AND available_date != '{m_data['ps_product_shop_available_date']}';",
				f"UPDATE ps_product SET available_date = '{m_data['ps_product_available_date']}' WHERE id_product = '{m_data['id_product']}' AND available_date != '{m_data['ps_product_available_date']}';",
				f"UPDATE ps_stock_available SET out_of_stock = '{m_data['ps_stock_available_out_of_stock']}' WHERE id_product = '{m_data['id_product']}' AND out_of_stock != '{m_data['ps_stock_available_out_of_stock']}';",
				f"UPDATE ps_product SET active = '{m_data['ps_product_active']}' WHERE id_product = '{m_data['id_product']}' AND active != '{m_data['ps_product_active']}';",
				f"UPDATE ps_product_shop SET active = '{m_data['ps_product_shop_active']}' WHERE id_product = '{m_data['id_product']}' AND active != '{m_data['ps_product_shop_active']}';",]

			print(f"\n[{m_id}]")

			for query in queries:
				print(f"{query}")
				p_cur.execute(query)
				enum_queries += 1
			enum_products += 1

		print("\n*** Fin des transactions SQL ***")
		p_conn.commit()

	except mariadb.Error as e:
		print(colored(f"MaraiDB.Error : Impossible de mettre les données à jour dans Prestashop", "red"))
		print(colored(f"{e}\n", "yellow"))
		p_conn.rollback()
		return False
	except Exception as e:
		print(colored(f"Exception : Impossible de mettre les données à jour dans Prestashop", "red"))
		print(colored(f"{e}\n", "yellow"))
		p_conn.rollback()
		return False
	finally:
		p_cur.close()
		p_conn.close()
		return enum_queries, enum_products

def Backup_Current_Stock(m_export):
	from termcolor import colored
	from datetime import datetime
	from datetime import date
	from decimal import Decimal

	p_conn, p_cur = MariaDB_Connect()

	p_export = {}

	try:
		for m_id, m_data in m_export.items():
			p_id = Fetch_MariaDB_UID(p_cur, m_id)

			if p_id:
				query = f"""
						SELECT
						pp.id_product AS id_product,
						pp.price AS ps_product_price,
						pps.price AS ps_product_shop_price,
						pp.id_tax_rules_group AS ps_product_id_tax_rules_group,
						pps.id_tax_rules_group AS ps_product_shop_id_tax_rules_group,
						ppl.delivery_out_stock AS ps_product_lang_delivery_out_stock,
						pp.available_date AS ps_product_available_date,
						pps.available_date AS ps_product_shop_available_date,
						psa.out_of_stock AS ps_stock_available_out_of_stock,
						psa.quantity AS ps_stock_available_quantity,
						pp.active AS ps_product_active,
						pps.active AS ps_product_shop_active
						FROM ps_product pp
						JOIN ps_product_shop pps ON pps.id_product = pp.id_product
						JOIN ps_stock_available psa ON psa.id_product = pp.id_product
						JOIN ps_product_lang ppl ON ppl.id_product = pp.id_product
						WHERE ppl.id_lang = '1' AND pp.id_product = '{p_id}';
						"""

				p_cur.execute(query)
				p_data = p_cur.fetchall()

				for row in p_data:
					p_export[p_id] = {
						"id_product": row[0],
						"ps_product_price": float(row[1]) if isinstance(row[1], Decimal) else row[1],
						"ps_product_shop_price": float(row[2]) if isinstance(row[2], Decimal) else row[2],
						"ps_product_id_tax_rules_group": row[3],
						"ps_product_shop_id_tax_rules_group": row[4],
						"ps_product_lang_delivery_out_stock": row[5],
						"ps_product_available_date": row[6].strftime("%Y-%m-%d") if isinstance(row[6], (date, datetime)) else row[6],
						"ps_product_shop_available_date": row[7].strftime("%Y-%m-%d") if isinstance(row[7], (date, datetime)) else row[7],
						"ps_stock_available_out_of_stock": row[8],
						"ps_stock_available_quantity": row[9],
						"ps_product_active": row[10],
						"ps_product_shop_active": row[11],
						"S_ID": m_id,
					}

		if len(p_export) > 0:

			sql_file_path = f"/var/www/ffwdstore.be/apps/py-sync/bak/backup-{datetime.now().strftime('%Y%m%d_%H%M%S')}.sql"

			with open(sql_file_path, "w", encoding="utf-8") as sql_file:
				for p_id, p_data in p_export.items():
					queries = [
						f"UPDATE ps_product SET price = '{p_data['ps_product_price']}' WHERE id_product = '{p_data['id_product']}' AND price != '{p_data['ps_product_price']}';",
						f"UPDATE ps_product_shop SET price = '{p_data['ps_product_shop_price']}' WHERE id_product = '{p_data['id_product']}' AND price != '{p_data['ps_product_shop_price']}';",
						f"UPDATE ps_product SET id_tax_rules_group = '{p_data['ps_product_id_tax_rules_group']}' WHERE id_product = '{p_data['id_product']}' AND id_tax_rules_group != '{p_data['ps_product_id_tax_rules_group']}';",
						f"UPDATE ps_product_shop SET id_tax_rules_group = '{p_data['ps_product_shop_id_tax_rules_group']}' WHERE id_product = '{p_data['id_product']}' AND id_tax_rules_group != '{p_data['ps_product_shop_id_tax_rules_group']}';",
						f"UPDATE ps_product_lang SET delivery_out_stock = '{p_data['ps_product_lang_delivery_out_stock']}' WHERE id_product = '{p_data['id_product']}' AND delivery_out_stock != '{p_data['ps_product_lang_delivery_out_stock']}';",
						f"UPDATE ps_product SET available_date = '{p_data['ps_product_available_date']}' WHERE id_product = '{p_data['id_product']}' AND available_date != '{p_data['ps_product_available_date']}';",
						f"UPDATE ps_product_shop SET available_date = '{p_data['ps_product_shop_available_date']}' WHERE id_product = '{p_data['id_product']}' AND available_date != '{p_data['ps_product_shop_available_date']}';",
						f"UPDATE ps_stock_available SET out_of_stock = '{p_data['ps_stock_available_out_of_stock']}' WHERE id_product = '{p_data['id_product']}' AND out_of_stock != '{p_data['ps_stock_available_out_of_stock']}';",
						f"UPDATE ps_stock_available SET quantity = '{p_data['ps_stock_available_quantity']}' WHERE id_product = '{p_data['id_product']}' AND quantity != '{p_data['ps_stock_available_quantity']}';",
						f"UPDATE ps_product SET active = '{p_data['ps_product_active']}' WHERE id_product = '{p_data['id_product']}' AND active != '{p_data['ps_product_active']}';",
						f"UPDATE ps_product_shop SET active = '{p_data['ps_product_shop_active']}' WHERE id_product = '{p_data['id_product']}' AND active != '{p_data['ps_product_shop_active']}';"
					]

					sql_file.write(f"[{p_data['S_ID']}]\n")

					for query in queries:
						sql_file.write(query + "\n")
					sql_file.write("\n")

		p_cur.close()
		p_conn.close()

		return True

	except Exception as e:
		print(colored(f"\nImpossible de créer le backup des données", "red"))
		print(colored(f"{e}\n", "yellow"))
		print(e)
		return False

def ExecFFWD():
	from termcolor import colored
	from pprint import pprint
	from datetime import datetime
	from os import remove
	from sys import argv

	ScriptLog = f"/var/www/ffwdstore.be/apps/py-sync/log/ffwd.log-{datetime.now().strftime('%Y%m%d_%H%M%S')}.txt"

	with open(ScriptLog, "w") as f:
		sys.stdout = f
		sys.stderr = f

		print(f"\n=== Début de FFWD ===")
		try:
			if int(argv[1]) == -1:
				print(f"\n*** Tous les articles de la base de données ***")
				CurrentStock = Fetch_FFWD_Stock(int(argv[1]))
			else:
				print(f"\n*** Tous les articles modifiés depuis les {int(argv[1])} dernières minutes ***")
				CurrentStock = Fetch_FFWD_Stock(int(argv[1]))
		except IndexError as e:
			print(f"\n*** Tous les articles modifiés depuis les 15 dernières minutes ***")
			CurrentStock = Fetch_FFWD_Stock()
		except ValueError as e:
			print(colored(f"Erreur de format dans l'argument passé au programme", "red"))
			return False

		if CurrentStock is False:
			remove(ScriptLog)
			return False
		else:
			print(f"\n*** Backup des données avant l'importation ***")
			backupSQL = Backup_Current_Stock(CurrentStock)
			print(f"\n*** Correspondance et préparation des données ***\n")
			ConvertedStock = Set_New_Stock(CurrentStock)
			if ConvertedStock is not False:
				print(f"\n*** Mise à jour des données ***")
				Queries, Products = Update_New_Stock(ConvertedStock)
				print(f"Produit(s) traité(s) : {Products}\nRequête(s) envoyée(s) : {Queries}")

		print(f"\n=== Fin de FFWD ===")

	sys.stdout = sys.__stdout__
	sys.stderr = sys.__stderr__

	return True

def ExecM2M():
	from termcolor import colored
	from pprint import pprint
	from datetime import datetime
	from os import remove
	from sys import argv

	ScriptLog = f"/var/www/ffwdstore.be/apps/py-sync/log/m2m.log-{datetime.now().strftime('%Y%m%d_%H%M%S')}.txt"

	with open(ScriptLog, "w") as f:
		sys.stdout = f
		sys.stderr = f

		print(f"\n=== Début de M2M ===")
		try:
			if int(argv[1]) == -1:
				print(f"\n*** Tous les articles de la base de données ***")
				CurrentStock = Fetch_M2M_Stock(int(argv[1]))
			else:
				print(f"\n*** Tous les articles modifiés depuis les {int(argv[1])} dernières minutes ***")
				CurrentStock = Fetch_M2M_Stock(int(argv[1]))
		except IndexError as e:
			print(f"\n*** Tous les articles modifiés depuis les 15 dernières minutes ***")
			CurrentStock = Fetch_M2M_Stock()
		except ValueError as e:
			print(colored(f"Erreur de format dans l'argument passé au programme", "red"))
			return False

		if CurrentStock is False:
			remove(ScriptLog)
			return False
		else:
			print(f"\n*** Backup des données avant l'importation ***")
			backupSQL = Backup_Current_Stock(CurrentStock)
			print(f"\n*** Correspondance et préparation des données ***\n")
			ConvertedStock = Set_New_Stock(CurrentStock)
			if ConvertedStock is not False:
				print(f"\n*** Mise à jour des données ***")
				Queries, Products = Update_New_Stock(ConvertedStock)
				print(f"Produit(s) traité(s) : {Products}\nRequête(s) envoyée(s) : {Queries}")

		print(f"\n=== Fin de M2M ===")

	sys.stdout = sys.__stdout__
	sys.stderr = sys.__stderr__

	return True

if __name__ == "__main__":
	ExecFFWD()
	ExecM2M()
	#renvo yer les erreur dans le logs?? cron