Files
Excel-project/server/backend/handlers/ozon_wb_yandex_com_handler.py
2026-01-08 17:51:12 +03:00

40 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from pydantic import ValidationError
from server.backend.schemas.pydantic import ExcelInfo,settings,Translit
from server.backend.api.nomenclature import processing
import re
import datetime
def last_day_of_month(format: str):
next_month = datetime.datetime.now().replace(day=28) + datetime.timedelta(days=4)
last_day = next_month - datetime.timedelta(days=next_month.day)
return last_day.strftime(format)
def process_sheet(df, real_arti:str, real_quantity:str, real_sum_1:str):
df= df.iloc[2:].reset_index(drop=True)
#Выборка
df = df.iloc[:, [real_arti, real_quantity, real_sum_1]].copy().dropna()
#df = df[[real_arti, real_quantity, real_sum_1]].copy().dropna() #copy and drop all NA values
df = df[(df != 0).all(axis=1)] #drop all 0 values
#df = df[[real_arti, real_quantity, real_sum_1]]
df.columns = ['arti', 'counts', 'price']
#Нормализация
df['arti'] = df['arti'].replace(Translit.TRANSLIT, regex=True)
df['arti'] = df['arti'].astype(str).str.upper().str.extract(f'({settings.PATTERN})') #arti под regex
df['price'] = df['price'].astype(float) #переделка к норм виду и преобразование в float
df['counts'] = df['counts'].astype(int) #Float to Int, if exists
#Группировка
df = df.groupby('arti', as_index=False).agg({'counts': 'sum', 'price': 'sum'}) #groupping
df = processing(df) #vlookup for ref_keys
validated_rows, errors = [], []
for i, row in df.iterrows(): #проходит построчно по df, где i - индекс строки, row - данные строки
try:
validated_rows.append(ExcelInfo(**row.to_dict())) #добавляем в список проверенные данные полученные от pydantic, которые туда передаются в виде dict
except ValidationError as e:
errors.append((i, e.errors())) #выводит ошибку и пишет номер строки
if errors:
raise Exception(f"There are some errors with validation in Лист_1, check it ", errors)
return validated_rows
def evaluating(dfs):
#validated_rows_1 = process_sheet(dfs["Лист_1"], real_arti="Артикул",real_quantity=dfs["Лист_1"].columns[4], real_sum_1=dfs["Лист_1"].columns[8]) # номера столбцов
validated_rows_1 = process_sheet(dfs["Лист_1"], real_arti=0,real_quantity=4, real_sum_1=8)
date = last_day_of_month(settings.TIMEFORMAT)
return validated_rows_1, date