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
from itertools import product
import pyodbc
import time
@ -142,33 +141,28 @@ def to_date(value):
def expand_sell_orders(sell_orders_list):
"""
Garante:
- 1 sellOrder por coluna
- duplica linhas quando houver mais de um sellOrder por marca
Retorna uma única tupla com os sellOrders concatenados por marca.
Se houver múltiplos sellOrders para uma marca, junta com vírgula (sem duplicatas).
"""
sell_map = {
"BOT": [],
"EUD": [],
"QDB": []
"BOT": set(),
"EUD": set(),
"QDB": set()
}
for item in sell_orders_list:
bu = item.get("businessUnit")
orders = item.get("sellOrders", [])
if bu in sell_map:
sell_map[bu] = orders or [""]
if bu in sell_map and orders:
sell_map[bu].update(orders)
# garante pelo menos 1 linha
for k in sell_map:
if not sell_map[k]:
sell_map[k] = [""]
# Concatena múltiplos sellOrders com vírgula (ordenados), ou string vazia se não houver
sell_bot = ", ".join(sorted(sell_map["BOT"])) if sell_map["BOT"] else ""
sell_eud = ", ".join(sorted(sell_map["EUD"])) if sell_map["EUD"] else ""
sell_qdb = ", ".join(sorted(sell_map["QDB"])) if sell_map["QDB"] else ""
return list(product(
sell_map["BOT"],
sell_map["EUD"],
sell_map["QDB"]
))
# Retorna sempre uma única combinação
return [(sell_bot, sell_eud, sell_qdb)]
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_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 ''}")
# ===============================
@ -479,9 +475,11 @@ def save_store_data_to_db(store_data, stats):
# Deletar registros existentes dos pedidos
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})"
cursor.execute(delete_query, unique_orders)
cursor.execute(delete_query, unique_orders_int)
stats["registros_deletados"] += cursor.rowcount
conn.commit()