Files
Excel-project/server/backend/handlers/ozon_purchases_handler.py
2026-01-06 18:55:47 +03:00

48 lines
2.0 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
import re
import datetime
def report_date(df, date_format: str):
row_text = " ".join(df.iloc[0].astype(str))
match = re.search(r"по\s+(\d{2}\.\d{2}\.\d{4})", row_text)
if not match:
raise ValueError("There is no date in ozon_purchase_handler")
dt = datetime.datetime.strptime(match.group(1), "%d.%m.%Y")
return dt.strftime(date_format)
def process_sheet(df, real_arti:int, real_quantity:int, real_sum_1:int):
df = df.iloc[2:].reset_index(drop=True)
# выбор нужных столбцов ПО ПОЗИЦИИ
df = df.iloc[:, [real_arti, real_quantity, real_sum_1]].copy().dropna()
df = df[(df != 0).all(axis=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})')
df['price'] = df['price'].astype(float)
df['counts'] = df['counts'].astype(int)
#Группировка
df = processing(df) #vlookup for ref_keys
validated_rows, errors = [], []
for i, row in df.iterrows():
try:
validated_rows.append(ExcelInfo(**row.to_dict()))
except ValidationError as e:
errors.append((i, e.errors()))
if errors:
raise Exception(
"There are some errors with validation in Отчет о выкупленных товарах",
errors
)
return validated_rows
def evaluating(dfs):
validated_rows_1 = process_sheet(dfs["Отчет о выкупленных товарах"], real_arti=3,real_quantity=10, real_sum_1=11) # номера столбцов от озона
date=report_date(dfs["Отчет о выкупленных товарах"], date_format=settings.TIMEFORMAT)
return validated_rows_1, date