This commit is contained in:
daniel.rodrigues 2026-01-16 10:09:17 -03:00
parent 45858dc952
commit 67aa7d311d

View File

@ -1,5 +1,4 @@
import requests import requests
from itertools import product
import pyodbc import pyodbc
import time import time
@ -142,33 +141,28 @@ def to_date(value):
def expand_sell_orders(sell_orders_list): def expand_sell_orders(sell_orders_list):
""" """
Garante: Retorna uma única tupla com os sellOrders concatenados por marca.
- 1 sellOrder por coluna Se houver múltiplos sellOrders para uma marca, junta com vírgula (sem duplicatas).
- duplica linhas quando houver mais de um sellOrder por marca
""" """
sell_map = { sell_map = {
"BOT": [], "BOT": set(),
"EUD": [], "EUD": set(),
"QDB": [] "QDB": set()
} }
for item in sell_orders_list: for item in sell_orders_list:
bu = item.get("businessUnit") bu = item.get("businessUnit")
orders = item.get("sellOrders", []) orders = item.get("sellOrders", [])
if bu in sell_map: if bu in sell_map and orders:
sell_map[bu] = orders or [""] sell_map[bu].update(orders)
# garante pelo menos 1 linha # Concatena múltiplos sellOrders com vírgula (ordenados), ou string vazia se não houver
for k in sell_map: sell_bot = ", ".join(sorted(sell_map["BOT"])) if sell_map["BOT"] else ""
if not sell_map[k]: sell_eud = ", ".join(sorted(sell_map["EUD"])) if sell_map["EUD"] else ""
sell_map[k] = [""] sell_qdb = ", ".join(sorted(sell_map["QDB"])) if sell_map["QDB"] else ""
return list(product( # Retorna sempre uma única combinação
sell_map["BOT"], return [(sell_bot, sell_eud, sell_qdb)]
sell_map["EUD"],
sell_map["QDB"]
))
def process_store_with_retry(store, headers, max_retries=3, retry_delay=5, token_refresh_callback=None): def process_store_with_retry(store, headers, max_retries=3, retry_delay=5, token_refresh_callback=None):
@ -424,9 +418,11 @@ pdvs_response = requests.get(PDVS_API_URL, timeout=30)
pdvs_response.raise_for_status() pdvs_response.raise_for_status()
pdvs_data = pdvs_response.json() pdvs_data = pdvs_response.json()
STORES = [str(pdv) for pdv in pdvs_data["data"]["pdvs"]] STORES_FULL = [str(pdv) for pdv in pdvs_data["data"]["pdvs"]]
print(f"Total de lojas encontradas: {len(STORES)}") STORES = STORES_FULL
print(f"Total de lojas encontradas: {len(STORES)} (de {len(STORES_FULL)} disponíveis)")
print(f"Lojas: {', '.join(STORES[:10])}{'...' if len(STORES) > 10 else ''}") print(f"Lojas: {', '.join(STORES[:10])}{'...' if len(STORES) > 10 else ''}")
# =============================== # ===============================
@ -479,9 +475,11 @@ def save_store_data_to_db(store_data, stats):
# Deletar registros existentes dos pedidos # Deletar registros existentes dos pedidos
if unique_orders: if unique_orders:
placeholders = ','.join(['?' for _ in unique_orders]) # Converter para int para garantir compatibilidade com coluna numérica do banco
unique_orders_int = [int(p) for p in unique_orders]
placeholders = ','.join(['?' for _ in unique_orders_int])
delete_query = f"DELETE FROM [GINSENG].[dbo].[extrato_pedidos_mar] WHERE [Pedido] IN ({placeholders})" delete_query = f"DELETE FROM [GINSENG].[dbo].[extrato_pedidos_mar] WHERE [Pedido] IN ({placeholders})"
cursor.execute(delete_query, unique_orders) cursor.execute(delete_query, unique_orders_int)
stats["registros_deletados"] += cursor.rowcount stats["registros_deletados"] += cursor.rowcount
conn.commit() conn.commit()