diff --git a/server/backend/excel.py b/server/backend/excel.py index bcc22cf..73460f0 100644 --- a/server/backend/excel.py +++ b/server/backend/excel.py @@ -1,14 +1,92 @@ import pandas as pd -def read_excel(dir, sheet1, sheet2): - if sheet1 and sheet2: - dfs = pd.read_excel(dir, sheet_name=[sheet1, sheet2]) - df1 = dfs[sheet1] - df2 = dfs[sheet2] - cols1 = df1[["Артикул поставщика", "Кол-во", "Вайлдберриз реализовал Товар (Пр)"]] - print(df1.head(), df2.head(), cols1.head()) - elif sheet1: - dfs = pd.read_excel(dir, sheet_name=[sheet1]) - df1 = dfs[sheet1] - cols1 = df1[["Артикул поставщика", "Кол-во", "Вайлдберриз реализовал Товар (Пр)"]] - print(cols1.head()) +# def read_excel(base_dir): +# try: +# dfs = pd.read_excel(base_dir, sheet_name=None) +# return dfs +# except Exception as e: +# raise f"⚠️ Ошибка при чтении {file.name}: {e}" + +class BaseHandler: + def __init__(self, file_path): + self.file_path = file_path + self.dfs = self.read() + + def read(self): + try: + return pd.read_excel(self.file_path, sheet_name=None) + except Exception as e: + raise Exception(f"⚠️ Ошибка при чтении {self.file_path}: {e}") + + def process(self): + raise NotImplementedError + +class YandexHandler(BaseHandler): + def process(self): + # читаем Excel внутри объекта + dfs = pd.read_excel(self.file_path, sheet_name=None) + # проверяем наличие нужных листов + if "Получено от потребителей" not in dfs or "Возвращено потребителям" not in dfs: + raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") + # сама обработка + print("Реализация Яндекс") + +class WBHandler(BaseHandler): + def process(self): + dfs = pd.read_excel(self.file_path, sheet_name=None) + if "Sheet1" not in dfs : + raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") + print("Реализация WB") + +class OZONHandler(BaseHandler): + def process(self): + dfs = pd.read_excel(self.file_path, sheet_name=None) + if "Отчет о реализации" not in dfs : + raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") + print("Реализация OZON") + +class OZONPurchasesHandler(BaseHandler): + def process(self): + dfs = pd.read_excel(self.file_path, sheet_name=None) + if "Отчет о выкупленных товарах" not in dfs: + raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") + print("Выкупы озон") + +class WBPurchasesHandler(BaseHandler): + def process(self): + dfs = pd.read_excel(self.file_path, sheet_name=None) + if "Sheet1" not in dfs: + raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") + print("Выкупы wb") +class OZONComHandler(BaseHandler): + def process(self): + dfs = pd.read_excel(self.file_path, sheet_name=None) + if "Лист_1" not in dfs: + raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") + df = dfs["Лист_1"] + cont = df.iloc[1, 0] + if cont != "«Интернет решения» ООО": + raise Exception(f"В файле {self.file_path.name} неверный контрагент") + print("Товары, переданные на комиссию озон") + +class WBComHandler(BaseHandler): + def process(self): + dfs = pd.read_excel(self.file_path, sheet_name=None) + if "Лист_1" not in dfs: + raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") + df = dfs["Лист_1"] + cont = df.iloc[1, 0] + if cont != '"Вайлдберриз" ООО': + raise Exception(f"В файле {self.file_path.name} неверный контрагент") + print("Товары, переданные на комиссию wb") + +class YandexComHandler(BaseHandler): + def process(self): + dfs = pd.read_excel(self.file_path, sheet_name=None) + if "Лист_1" not in dfs: + raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") + df = dfs["Лист_1"] + cont = df.iloc[1, 0] + if cont != "Яндекс Маркет ООО": + raise Exception(f"В файле {self.file_path.name} неверный контрагент") + print("Товары, переданные на комиссию yandex") diff --git a/server/backend/validating_files.py b/server/backend/validating_files.py index c41f8e4..52827a2 100644 --- a/server/backend/validating_files.py +++ b/server/backend/validating_files.py @@ -1,31 +1,58 @@ +import server.backend.excel as excel + from dotenv import load_dotenv #Работа с env import os from pathlib import Path load_dotenv() -dir = Path(os.getenv("DIR")) +base_dir = Path(os.getenv("DIR")) + +handlers = { #метки какие файлы есть и должны быть занесены с вызовами функций из файла + "period_closure_income": excel.YandexHandler, + "0": excel.WBHandler, + "отчет о реализации товара": excel.OZONHandler, + "realizationreportcis": excel.OZONPurchasesHandler, + "уведомление о выкупе": excel.WBPurchasesHandler, + "Товары, переданные на комиссию озон": excel.OZONComHandler, + "Товары, переданные на комиссию вб": excel.WBComHandler, + "Товары, переданные на комиссию яндекс": excel.YandexComHandler +} + #Проход по всем файлам в директории def validating(): - for file in dir.rglob("*.xlsx"): - name = file.stem + if not base_dir.exists(): + raise (f"Директория {base_dir} не существует") #Проверка существует ли директория + for file in base_dir.rglob("*.xlsx"): + + if file.name.startswith("~$"): #Проверка не редактируемый ли файл + continue + + name = file.stem.lower() + print(f"\n🔹 Файл: {file.name}") + label = None match file: - case _ if "period_closure_income" in name.lower(): - #Проверять более подробно - print("Реализация Яндекс ", name) - + case _ if "period_closure_income" in name: + label = "period_closure_income" case _ if name == "0": - print("Реализация ВБ", name) - - case _ if "отчет о реализации товара" in name.lower(): - print("Реализация ОЗОН", name) - - case _ if "вб" in name.lower() or "озон" in name.lower() or "яндекс" in name.lower(): - print("Товары, переданные на комиссию", name) - - case _ if "realizationreportcis" in name.lower(): - print("Выкупы озон ", name) - - case _ if "уведомление о выкупе" in name.lower(): - print("Выкупы вб ", name) - - case _: + label = "0" + case _ if "отчет о реализации товара" in name: + label = "отчет о реализации товара" + case _ if "вб" in name: + label = "Товары, переданные на комиссию вб" + case _ if "озон" in name: + label = "Товары, переданные на комиссию озон" + case _ if "яндекс" in name: + label = "Товары, переданные на комиссию яндекс" + case _ if "realizationreportcis" in name: + label = "realizationreportcis" + case _ if "уведомление о выкупе" in name: + label = "уведомление о выкупе" + case _: #Для неизвестных файлов print("Неизвестный файл") + if label: + handler_class = handlers.get(label) + if handler_class: + # создаём объект для текущего файла + handler = handler_class(file) # передаём путь к файлу + handler.process() # dfs читается внутри объекта + else: + print(f"⚠️ Нет обработчика для метки '{label}'")