Files
Excel-project/server/backend/handlers/ozon_handler.py
2026-01-03 19:48:18 +03:00

49 lines
2.2 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 datetime
import re
def report_date(df, format: str):
cell = str(df.iloc[0, 4])
match = re.search(r"\d{2}\.\d{2}\.\d{4}", cell)
if not match:
return None
dt = datetime.datetime.strptime(match.group(0), "%d.%m.%Y")
return dt.strftime(format)
def process_sheet(df,real_arti: int,real_quantity: int,real_sum_1: int,real_sum_2: int):
# пропускаем служебные строки
df = df.iloc[2:].reset_index(drop=True)
# выбираем нужные колонки по индексам
df = df.iloc[:, [real_arti, real_quantity, real_sum_1, real_sum_2]].copy()
df.dropna(inplace=True)
df = df[(df != 0).all(axis=1)]
# складываем суммы
df.iloc[:, 2] += df.iloc[:, 3]
df = df.iloc[:, [0, 1, 2]]
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 = df.groupby('arti', as_index=False).agg({'counts': 'sum', 'price': 'sum'})
df = processing(df)
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=2,real_quantity=8, real_sum_1=5,real_sum_2=6) # номера столбцов от озона
validated_rows_2 = process_sheet(dfs["Отчет о реализации"], real_arti=2,real_quantity=16, real_sum_1=13,real_sum_2=14)#
date=report_date(dfs["Отчет о реализации"], format=settings.TIMEFORMAT)
return validated_rows_1, validated_rows_2, date