This commit is contained in:
2026-01-03 19:48:18 +03:00
parent 5d15ff9f5e
commit dcf7878f03
12 changed files with 130 additions and 42 deletions

1
run.py
View File

@@ -1,4 +1,3 @@
import server.backend.services.excel as excel
from server.backend.services.validating_files import validating from server.backend.services.validating_files import validating
from server.backend.api import companies,contractors,storages, nomenclature from server.backend.api import companies,contractors,storages, nomenclature
#_______________ #_______________

View File

@@ -2,7 +2,6 @@ import requests
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
from base64 import b64encode from base64 import b64encode
from server.backend.schemas.pydantic import settings from server.backend.schemas.pydantic import settings
import re
from functools import lru_cache from functools import lru_cache
import pandas as pd import pandas as pd
auth_str = f"{settings.USERNAME}:{settings.PASSWORD}" auth_str = f"{settings.USERNAME}:{settings.PASSWORD}"

View File

@@ -1,4 +1,20 @@
import requests import requests
import json import json
from base64 import b64encode from base64 import b64encode
from server.backend.schemas.pydantic import settings from server.backend.schemas.pydantic import settings
import pandas as pd
auth_str = f"{settings.USERNAME}:{settings.PASSWORD}"
b64_auth_str = b64encode(auth_str.encode("utf-8")).decode("utf-8")
session = requests.Session()
session.headers.update({
"Authorization": f"Basic {b64_auth_str}",
"Content-Type": "application/json",
"Accept": "application/json"
})
def fetch_contragents():
response = session.post(settings.URL_REPORT, data=json.dumps(data))
response.raise_for_status()
return response.status_code

View File

@@ -2,3 +2,19 @@ import requests
import json import json
from base64 import b64encode from base64 import b64encode
from server.backend.schemas.pydantic import settings from server.backend.schemas.pydantic import settings
import pandas as pd
auth_str = f"{settings.USERNAME}:{settings.PASSWORD}"
b64_auth_str = b64encode(auth_str.encode("utf-8")).decode("utf-8")
session = requests.Session()
session.headers.update({
"Authorization": f"Basic {b64_auth_str}",
"Content-Type": "application/json",
"Accept": "application/json"
})
def fetch_contragents():
response = session.post(settings.URL_REPORT, data=json.dumps(data))
response.raise_for_status()
return response.status_code

View File

@@ -1,32 +1,49 @@
from pydantic import ValidationError from pydantic import ValidationError
from server.backend.schemas.pydantic import ExcelInfo,settings,Translit from server.backend.schemas.pydantic import ExcelInfo,settings,Translit
from server.backend.api.nomenclature import processing from server.backend.api.nomenclature import processing
import datetime
import re 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)
def process_sheet(df, real_arti:str, real_quantity:str, real_sum_1:str, real_sum_2:str): # выбираем нужные колонки по индексам
df = df[[real_arti, real_quantity, real_sum_1, real_sum_2]].copy().dropna() #copy and drop all NA values df = df.iloc[:, [real_arti, real_quantity, real_sum_1, real_sum_2]].copy()
df = df[(df != 0).all(axis=1)] #drop all 0 values df.dropna(inplace=True)
df[real_sum_1]+=df[real_sum_2] df = df[(df != 0).all(axis=1)]
df = df[[real_arti, real_quantity, real_sum_1]].copy()
df.rename(columns={real_arti: 'arti', real_quantity: 'counts', real_sum_1: 'price'}, inplace=True) #переименовываем для pydantic # складываем суммы
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'].replace(Translit.TRANSLIT, regex=True)
df['arti'] = df['arti'].astype(str).str.upper().str.extract(f'({settings.PATTERN})') #arti под regex df['arti'] = df['arti'].astype(str).str.upper().str.extract(f'({settings.PATTERN})')
df['price'] = df['price'].astype(float) #Float to Int, if exists df['price'] = df['price'].astype(float)
df['counts'] = df['counts'].astype(int) #Float to Int, if exists df['counts'] = df['counts'].astype(int)
df = df.groupby('arti', as_index=False).agg({'counts': 'sum', 'price': 'sum'}) #groupping
df = processing(df) #vlookup for ref_keys # группировка
df = df.groupby('arti', as_index=False).agg({'counts': 'sum', 'price': 'sum'})
df = processing(df)
validated_rows, errors = [], [] validated_rows, errors = [], []
for i, row in df.iterrows(): #проходит построчно по df, где i - индекс строки, row - данные строки for i, row in df.iterrows():
try: try:
validated_rows.append(ExcelInfo(**row.to_dict())) #добавляем в список проверенные данные полученные от pydantic, которые туда передаются в виде dict validated_rows.append(ExcelInfo(**row.to_dict()))
except ValidationError as e: except ValidationError as e:
errors.append((i, e.errors())) #выводит ошибку и пишет номер строки errors.append((i, e.errors()))
if errors: if errors:
raise Exception(f"There are some errors with validation in Отчет о реализации, check it ", errors) raise Exception("There are some errors with validation in Отчет о реализации", errors)
return validated_rows return validated_rows
def evaluating(dfs): 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_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')# validated_rows_2 = process_sheet(dfs["Отчет о реализации"], real_arti=2,real_quantity=16, real_sum_1=13,real_sum_2=14)#
return validated_rows_1, validated_rows_2 date=report_date(dfs["Отчет о реализации"], format=settings.TIMEFORMAT)
return validated_rows_1, validated_rows_2, date
#Добавить проверку с бд по keys

View File

@@ -4,14 +4,19 @@ from server.backend.api.nomenclature import processing
import re import re
def process_sheet(df, real_arti:int, real_quantity:int, real_sum_1:int): def process_sheet(df, real_arti:int, real_quantity:int, real_sum_1:int):
#Выборка
df = df[[real_arti, real_quantity, real_sum_1]].copy().dropna() #copy and drop all NA values 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[(df != 0).all(axis=1)] #drop all 0 values
df = df[[real_arti, real_quantity, real_sum_1]].copy() df = df[[real_arti, real_quantity, real_sum_1]]
df.rename(columns={real_arti: 'arti', real_quantity: 'counts', real_sum_1: 'price'}, inplace=True) #переименовываем для pydantic df.rename(columns={real_arti: 'arti', real_quantity: 'counts', real_sum_1: 'price'}, inplace=True) #переименовываем для pydantic
#Нормализация
df['arti'] = df['arti'].replace(Translit.TRANSLIT, regex=True) 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['arti'] = df['arti'].astype(str).str.upper().str.extract(f'({settings.PATTERN})') #arti под regex
df['price'] = df['price'].astype(float) #Float to Int, if exists df['price'] = df['price'].astype(float) #Float to Int, if exists
df['counts'] = df['counts'].astype(int) #Float to Int, if exists df['counts'] = df['counts'].astype(int) #Float to Int, if exists
#Группировка
df = processing(df) #vlookup for ref_keys df = processing(df) #vlookup for ref_keys
validated_rows, errors = [], [] validated_rows, errors = [], []
for i, row in df.iterrows(): #проходит построчно по df, где i - индекс строки, row - данные строки for i, row in df.iterrows(): #проходит построчно по df, где i - индекс строки, row - данные строки

View File

@@ -2,16 +2,25 @@ from pydantic import ValidationError
from server.backend.schemas.pydantic import ExcelInfo,settings,Translit from server.backend.schemas.pydantic import ExcelInfo,settings,Translit
from server.backend.api.nomenclature import processing from server.backend.api.nomenclature import processing
import re 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): def process_sheet(df, real_arti:str, real_quantity:str, real_sum_1:str):
#Выборка
df = df[[real_arti, real_quantity, real_sum_1]].copy().dropna() #copy and drop all NA values 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[(df != 0).all(axis=1)] #drop all 0 values
df = df[[real_arti, real_quantity, real_sum_1]].copy() df = df[[real_arti, real_quantity, real_sum_1]]
df.rename(columns={real_arti: 'arti', real_quantity: 'counts', real_sum_1: 'price'}, inplace=True) #переименовываем для pydantic df.rename(columns={real_arti: 'arti', real_quantity: 'counts', real_sum_1: 'price'}, inplace=True) #переименовываем для pydantic
#Нормализация
df['arti'] = df['arti'].replace(Translit.TRANSLIT, regex=True) 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['arti'] = df['arti'].astype(str).str.upper().str.extract(f'({settings.PATTERN})') #arti под regex
df['price'] = df['price'].astype(float) #переделка к норм виду и преобразование в float df['price'] = df['price'].astype(float) #переделка к норм виду и преобразование в float
df['counts'] = df['counts'].astype(int) #Float to Int, if exists 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 = df.groupby('arti', as_index=False).agg({'counts': 'sum', 'price': 'sum'}) #groupping
df = processing(df) #vlookup for ref_keys df = processing(df) #vlookup for ref_keys
validated_rows, errors = [], [] validated_rows, errors = [], []
@@ -25,4 +34,5 @@ def process_sheet(df, real_arti:str, real_quantity:str, real_sum_1:str):
return validated_rows return validated_rows
def evaluating(dfs): 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="Артикул",real_quantity=dfs["Лист_1"].columns[4], real_sum_1=dfs["Лист_1"].columns[8]) # номера столбцов
return validated_rows_1 date = last_day_of_month(settings.TIMEFORMAT)
return validated_rows_1, date

View File

@@ -1,17 +1,27 @@
from pydantic import ValidationError from pydantic import ValidationError
from server.backend.schemas.pydantic import ExcelInfo, settings,Translit from server.backend.schemas.pydantic import ExcelInfo, settings,Translit
from server.backend.api.nomenclature import processing 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, document_type:str): def process_sheet(df, document_type:str):
#Выборка
df = df[['Артикул поставщика', 'Тип документа', 'Кол-во', 'Вайлдберриз реализовал Товар (Пр)']].copy().dropna() #copy and drop all NA values df = df[['Артикул поставщика', 'Тип документа', 'Кол-во', 'Вайлдберриз реализовал Товар (Пр)']].copy().dropna() #copy and drop all NA values
df = df[(df != 0).all(axis=1)] #drop all 0 values df = df[(df != 0).all(axis=1)] #drop all 0 values
df = df[df['Тип документа'] == document_type] #фильтруем по типу документа df = df[df['Тип документа'] == document_type] #фильтруем по типу документа
df = df[['Артикул поставщика', 'Кол-во', 'Вайлдберриз реализовал Товар (Пр)']].copy() df = df[['Артикул поставщика', 'Кол-во', 'Вайлдберриз реализовал Товар (Пр)']]
df.rename(columns={'Артикул поставщика': 'arti', 'Кол-во': 'counts', 'Вайлдберриз реализовал Товар (Пр)': 'price'}, inplace=True) #переименовываем для pydantic df.rename(columns={'Артикул поставщика': 'arti', 'Кол-во': 'counts', 'Вайлдберриз реализовал Товар (Пр)': 'price'}, inplace=True) #переименовываем для pydantic
#Нормализация
df['arti'] = df['arti'].replace(Translit.TRANSLIT, regex=True) 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['arti'] = df['arti'].astype(str).str.upper().str.extract(f'({settings.PATTERN})') #arti под regex
df['price'] = df['price'].astype(float) #Float to Int, if exists df['price'] = df['price'].astype(float) #Float to Int, if exists
df['counts'] = df['counts'].astype(int) #Float to Int, if exists df['counts'] = df['counts'].astype(int) #Float to Int, if exists
#Группировка
df = df.groupby('arti', as_index=False).agg({'counts': 'sum', 'price': 'sum'}) df = df.groupby('arti', as_index=False).agg({'counts': 'sum', 'price': 'sum'})
df = processing(df) #vlookup for ref_keys df = processing(df) #vlookup for ref_keys
validated_rows, errors = [], [] validated_rows, errors = [], []
@@ -27,10 +37,11 @@ def process_sheet(df, document_type:str):
def evaluating(dfs): def evaluating(dfs):
validated_rows_1 = process_sheet(dfs["Sheet1"], document_type='Продажа') validated_rows_1 = process_sheet(dfs["Sheet1"], document_type='Продажа')
validated_rows_2 = process_sheet(dfs["Sheet1"], document_type='Возврат') validated_rows_2 = process_sheet(dfs["Sheet1"], document_type='Возврат')
date = last_day_of_month(settings.TIMEFORMAT)
# sum_1 = sum(row.price for row in validated_rows_1) # sum_1 = sum(row.price for row in validated_rows_1)
# sum_2 = sum(row.price for row in validated_rows_2) # sum_2 = sum(row.price for row in validated_rows_2)
# print("Sum for 'Продажа':", sum_1) # print("Sum for 'Продажа':", sum_1)
# print("Sum for 'Возврат':", sum_2) # print("Sum for 'Возврат':", sum_2)
return validated_rows_1, validated_rows_2 return validated_rows_1, validated_rows_2, date

View File

@@ -4,14 +4,19 @@ from server.backend.api.nomenclature import processing
import re import re
def process_sheet(df, real_arti:str, real_quantity:str, real_sum_1:str): def process_sheet(df, real_arti:str, real_quantity:str, real_sum_1:str):
#Выборка
df = df[[real_arti, real_quantity, real_sum_1]].copy().dropna() #copy and drop all NA values 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[(df != 0).all(axis=1)] #drop all 0 values
df = df[[real_arti, real_quantity, real_sum_1]].copy() df = df[[real_arti, real_quantity, real_sum_1]]
df.rename(columns={real_arti: 'arti', real_quantity: 'counts', real_sum_1: 'price'}, inplace=True) #переименовываем для pydantic df.rename(columns={real_arti: 'arti', real_quantity: 'counts', real_sum_1: 'price'}, inplace=True) #переименовываем для pydantic
#Нормализация
df['arti'] = df['arti'].astype(str).str.upper().str.extract(f'({settings.PATTERN})') #arti под regex df['arti'] = df['arti'].astype(str).str.upper().str.extract(f'({settings.PATTERN})') #arti под regex
df['arti'] = df['arti'].replace(Translit.TRANSLIT, regex=True) df['arti'] = df['arti'].replace(Translit.TRANSLIT, regex=True)
df['price'] = df['price'].str.replace(' ', '', regex=False).str.replace(',', '.', regex=False).astype(float) #переделка к норм виду и преобразование в float df['price'] = df['price'].str.replace(' ', '', regex=False).str.replace(',', '.', regex=False).astype(float) #переделка к норм виду и преобразование в float
df['counts'] = df['counts'].astype(int) #Float to Int, if exists 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 = df.groupby('arti', as_index=False).agg({'counts': 'sum', 'price': 'sum'}) #groupping
df = processing(df) #vlookup for ref_keys df = processing(df) #vlookup for ref_keys
validated_rows, errors = [], [] validated_rows, errors = [], []

View File

@@ -1,17 +1,26 @@
from pydantic import ValidationError from pydantic import ValidationError
from server.backend.schemas.pydantic import ExcelInfo, settings,Translit from server.backend.schemas.pydantic import ExcelInfo, settings,Translit
from server.backend.api.nomenclature import processing from server.backend.api.nomenclature import processing
import datetime
import re import re
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, multiply_price=1, sheet_name=''): def process_sheet(df, multiply_price=1, sheet_name=''):
#Выборка
df = df[['Ваш SKU', 'Количество, шт.', 'Сумма транзакции, ₽']].copy().dropna() #выбираем нужные колонки, делаем копию, чтобы можно было удалить None inline модом df = df[['Ваш SKU', 'Количество, шт.', 'Сумма транзакции, ₽']].copy().dropna() #выбираем нужные колонки, делаем копию, чтобы можно было удалить None inline модом
df = df[(df != 0).all(axis=1)] #drop all 0 values df = df[(df != 0).all(axis=1)] #drop all 0 values
df['Сумма транзакции, ₽'] *= multiply_price #умножаем на -1 для возвратов df['Сумма транзакции, ₽'] *= multiply_price #умножаем на -1 для возвратов
df.rename(columns={'Ваш SKU': 'arti', 'Количество, шт.': 'counts', 'Сумма транзакции, ₽': 'price'}, inplace=True) #переименовываем для pydantic df.rename(columns={'Ваш SKU': 'arti', 'Количество, шт.': 'counts', 'Сумма транзакции, ₽': 'price'}, inplace=True) #переименовываем для pydantic
#Нормализация
df['arti'] = df['arti'].replace(Translit.TRANSLIT, regex=True) 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['arti'] = df['arti'].astype(str).str.upper().str.extract(f'({settings.PATTERN})') #arti под regex
df['price'] = df['price'].astype(float) #To float, if exists df['price'] = df['price'].astype(float) #To float, if exists
df['counts'] = df['counts'].astype(int) #To float, if exists df['counts'] = df['counts'].astype(int) #To float, if exists
#Группировка
df = df.groupby('arti', as_index=False).agg({'counts': 'sum', 'price': 'sum'}) #groupping df = df.groupby('arti', as_index=False).agg({'counts': 'sum', 'price': 'sum'}) #groupping
df = processing(df) #vlookup for ref_keys df = processing(df) #vlookup for ref_keys
validated_rows, errors = [], [] validated_rows, errors = [], []
@@ -26,4 +35,5 @@ def process_sheet(df, multiply_price=1, sheet_name=''):
def evaluating(dfs): def evaluating(dfs):
validated_rows_1 = process_sheet(dfs["Получено от потребителей"], sheet_name="Получено от потребителей") validated_rows_1 = process_sheet(dfs["Получено от потребителей"], sheet_name="Получено от потребителей")
validated_rows_2 = process_sheet(dfs["Возвращено потребителям"], multiply_price=-1, sheet_name="Возвращено потребителям") validated_rows_2 = process_sheet(dfs["Возвращено потребителям"], multiply_price=-1, sheet_name="Возвращено потребителям")
return validated_rows_1, validated_rows_2 date = last_day_of_month(settings.TIMEFORMAT)
return validated_rows_1, validated_rows_2, date

View File

@@ -14,6 +14,7 @@ class ExcelOut(BaseModel):
class Settings(BaseSettings): class Settings(BaseSettings):
DIR:str DIR:str
PATTERN: str PATTERN: str
TIMEFORMAT:str
USERNAME: str USERNAME: str
PASSWORD: str PASSWORD: str
URL_REPORT:str URL_REPORT:str

View File

@@ -29,7 +29,7 @@ class YandexHandler(BaseHandler):
raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы")
# вызываем функцию evaluating # вызываем функцию evaluating
validated_data = yandex_handler.evaluating(dfs) validated_data = yandex_handler.evaluating(dfs)
print("Реализация Яндекс завершена, валидированных строк:", len(validated_data[0]), "Реализация", len(validated_data[1]), "Возвраты") print("Реализация Яндекс завершена, валидированных строк:", len(validated_data[0]), "Реализация", len(validated_data[1]), "Возвраты", validated_data[2], "Дата")
class WBHandler(BaseHandler): class WBHandler(BaseHandler):
def process(self): def process(self):
@@ -38,17 +38,16 @@ class WBHandler(BaseHandler):
if "Sheet1" not in dfs : if "Sheet1" not in dfs :
raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы")
validated_data = wb_handler.evaluating(dfs) validated_data = wb_handler.evaluating(dfs)
print("Реализация WB завершена, валидированных строк:", len(validated_data[0]), "Реализация", len(validated_data[1]), "Возвраты") print("Реализация WB завершена, валидированных строк:", len(validated_data[0]), "Реализация", len(validated_data[1]), "Возвраты", validated_data[2], "Дата")
class OZONHandler(BaseHandler): class OZONHandler(BaseHandler):
def process(self): def process(self):
#Доставать № документа и дату #Доставать № документа и дату
dfs = self.read(skiprows=14, skipfooter=17) dfs = self.read(skiprows=[0,3,4,5,6,7,8,9,10,11,12,13], skipfooter=17)
if "Отчет о реализации" not in dfs: if "Отчет о реализации" not in dfs:
raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы")
validated_data = ozon_handler.evaluating(dfs) validated_data = ozon_handler.evaluating(dfs)
print("Реализация OZON завершена, валидированных строк:", len(validated_data[0]), "Реализация", len(validated_data[1]), "Возвраты") print("Реализация OZON завершена, валидированных строк:", len(validated_data[0]), "Реализация", len(validated_data[1]), "Возвраты", validated_data[2], "Дата")
class OZONPurchasesHandler(BaseHandler): class OZONPurchasesHandler(BaseHandler):
def process(self): def process(self):
#доставать дату и номер документа #доставать дату и номер документа
@@ -64,7 +63,7 @@ class WBPurchasesHandler(BaseHandler):
if "Sheet1" not in dfs: if "Sheet1" not in dfs:
raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы")
validated_data = wb_purchases_handler.evaluating(dfs) validated_data = wb_purchases_handler.evaluating(dfs)
print("Выкупы WB завершены, валидированных строк:", len(validated_data), "Реализация", validated_data) print("Выкупы WB завершены, валидированных строк:", len(validated_data), "Реализация")
class OZONComHandler(BaseHandler): class OZONComHandler(BaseHandler):
def process(self): def process(self):
@@ -77,7 +76,7 @@ class OZONComHandler(BaseHandler):
if cont != "«Интернет решения» ООО": if cont != "«Интернет решения» ООО":
raise Exception(f"В файле {self.file_path.name} неверный контрагент") raise Exception(f"В файле {self.file_path.name} неверный контрагент")
validated_data = ozon_wb_yandex_com_handler.evaluating(dfs) validated_data = ozon_wb_yandex_com_handler.evaluating(dfs)
print("Передача на коммисию OZON завершена, валидированных строк:", len(validated_data), "Реализация") print("Передача на коммисию OZON завершена, валидированных строк:", len(validated_data[0]), "Реализация", validated_data[1], "Дата")
class WBComHandler(BaseHandler): class WBComHandler(BaseHandler):
def process(self): def process(self):
@@ -90,7 +89,7 @@ class WBComHandler(BaseHandler):
if cont != '"Вайлдберриз" ООО': if cont != '"Вайлдберриз" ООО':
raise Exception(f"В файле {self.file_path.name} неверный контрагент") raise Exception(f"В файле {self.file_path.name} неверный контрагент")
validated_data = ozon_wb_yandex_com_handler.evaluating(dfs) validated_data = ozon_wb_yandex_com_handler.evaluating(dfs)
print("Передача на коммисию WB завершена, валидированных строк:", len(validated_data), "Реализация") print("Передача на коммисию WB завершена, валидированных строк:", len(validated_data[0]), "Реализация", validated_data[1], "Дата")
class YandexComHandler(BaseHandler): class YandexComHandler(BaseHandler):
def process(self): def process(self):
@@ -103,5 +102,5 @@ class YandexComHandler(BaseHandler):
if cont != "Яндекс Маркет ООО": if cont != "Яндекс Маркет ООО":
raise Exception(f"В файле {self.file_path.name} неверный контрагент") raise Exception(f"В файле {self.file_path.name} неверный контрагент")
validated_data = ozon_wb_yandex_com_handler.evaluating(dfs) validated_data = ozon_wb_yandex_com_handler.evaluating(dfs)
print("Передача на коммисию YANDEX завершена, валидированных строк:", len(validated_data), "Реализация") print("Передача на коммисию YANDEX завершена, валидированных строк:", len(validated_data[0]), "Реализация", validated_data[1], "Дата")