Files
Excel-project/server/backend/handlers/ozon_handler.py
2026-01-14 15:15:37 +03:00

50 lines
2.4 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 last_day_of_month(format: str):
today = datetime.datetime.now()
first_day_current_month = today.replace(day=1)
last_day_prev_month = first_day_current_month - datetime.timedelta(days=1)
return last_day_prev_month.strftime(format)
def process_sheet(df,real_arti: int,real_quantity: int,real_sum_1: int,real_sum_2: int):
# выбираем нужные колонки по индексам
df = df.iloc[:, [real_arti, real_quantity, real_sum_1, real_sum_2]].copy()
# print("до группировки:", df.iloc[:, 2].sum())
df.dropna(inplace=True)
df = df[(df.iloc[:, [1]] != 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=17, real_sum_1=14,real_sum_2=15)#
sum_1 = sum(row.price for row in validated_rows_1)
sum_2 = sum(row.price for row in validated_rows_2)
print("Sum for 'Продажа':", sum_1)
print("Sum for 'Возврат':", sum_2)
date=last_day_of_month(format=settings.TIMEFORMAT)
return validated_rows_1, validated_rows_2, date