This commit is contained in:
daniel.rodrigues 2025-11-18 16:20:20 -03:00
parent c56c60510c
commit 87568422b4

View File

@ -198,6 +198,89 @@ def create_draft_temp_table(cursor):
conn.rollback() conn.rollback()
raise raise
def clear_promo_table(cursor):
"""Limpa a tabela promo"""
try:
cursor.execute("DELETE FROM [GINSENG].[dbo].[promo]")
conn.commit()
print("Tabela 'promo' limpa com sucesso.")
except Exception as e:
print(f"Erro ao limpar a tabela promo: {e}")
conn.rollback()
raise
def process_and_insert_promo_data(store_code, response_data, cursor):
"""Processa os dados da API e insere na tabela promo (baseado no Atualizar_promo.py)"""
try:
base = response_data.get('data', {})
# Definir os ciclos normais e EUD
cycles = {
'normal': {
'thirdToLastCycle': base.get('thirdToLastCycle'),
'secondToLastCycle': base.get('secondToLastCycle'),
'lastCycle': base.get('lastCycle'),
'currentCycle': base.get('currentCycle'),
'nextCycle': base.get('nextCycle'),
'secondToNextCycle': base.get('secondToNextCycle'),
},
'eud': {
'secondToNextCycleEud': base.get('secondToNextCycleEud'),
'nextCycleEud': base.get('nextCycleEud'),
'thirdToLastCycleEud': base.get('thirdToLastCycleEud'),
'secondToLastCycleEud': base.get('secondToLastCycleEud'),
'lastCycleEud': base.get('lastCycleEud'),
'currentCycleEud': base.get('currentCycleEud'),
}
}
products = base.get('products', [])
if not products:
return 0
promo_count = 0
for product in products:
code = product.get('code')
if not code:
continue
business_unit = product.get('businessUnit', '').upper()
ciclo_usado = cycles['eud'] if business_unit == 'EUD' else cycles['normal']
for promotion in product.get('promotions', []):
cycle = promotion.get('cycle')
if not cycle:
continue
for cycle_key, cycle_value in ciclo_usado.items():
if cycle == cycle_value:
# Inserir dados na tabela promo
product_data = {
'loja_id': store_code,
'code': code,
'type': promotion.get('type'),
'target': promotion.get('target'),
f'{cycle_key}_discountPercent': promotion.get('discountPercent'),
f'{cycle_key}_description': promotion.get('description'),
}
# Montar query de inserção
columns = ', '.join(product_data.keys())
placeholders = ', '.join(['?' for _ in product_data])
query = f"""
INSERT INTO [GINSENG].[dbo].[promo] ({columns})
VALUES ({placeholders})
"""
cursor.execute(query, list(product_data.values()))
promo_count += 1
conn.commit()
return promo_count
except Exception as e:
print(f"Erro ao processar dados de promoção da loja {store_code}: {e}")
conn.rollback()
return 0
def process_and_insert_data(store_code, response_data, cursor): def process_and_insert_data(store_code, response_data, cursor):
"""Processa os dados da API e insere na tabela draft_temp""" """Processa os dados da API e insere na tabela draft_temp"""
try: try:
@ -335,10 +418,13 @@ def fetch_and_insert_data(store_code, index, total, cursor, retry_count=1):
# Requisição bem-sucedida # Requisição bem-sucedida
response_data = response.json() response_data = response.json()
# Processa e insere os dados diretamente no banco # Processa e insere os dados na tabela draft_temp
num_products = process_and_insert_data(store_code, response_data, cursor) num_products = process_and_insert_data(store_code, response_data, cursor)
print(f"{index}/{total}: Loja {store_code} processada com sucesso ({num_products} produtos inseridos).") # Processa e insere os dados na tabela promo
num_promos = process_and_insert_promo_data(store_code, response_data, cursor)
print(f"{index}/{total}: Loja {store_code} processada com sucesso ({num_products} produtos inseridos, {num_promos} promoções inseridas).")
return True return True
except RequestException as e: except RequestException as e:
@ -481,6 +567,9 @@ def main():
# Criar a tabela draft_temp se não existir # Criar a tabela draft_temp se não existir
create_draft_temp_table(cursor) create_draft_temp_table(cursor)
# Limpar a tabela promo
clear_promo_table(cursor)
failed_stores = [] failed_stores = []
total = len(store_codes) total = len(store_codes)