промежуточно. Работает все, неверно формируется вчерашний отчет (нет выхода).
This commit is contained in:
+24
-36
@@ -1,46 +1,34 @@
|
||||
import os
|
||||
import pandas as pd
|
||||
from datetime import datetime, timedelta
|
||||
from config import DATA_DIR, DATE_TODAY, DATE_YESTERDAY
|
||||
import time
|
||||
from datetime import datetime
|
||||
from config import SCUD_FILE_TODAY, STAFF_FILE_1C, ABSENT_FILE_1C
|
||||
|
||||
def check_file_freshness():
|
||||
|
||||
def check_file_freshness(max_age_hours=24):
|
||||
"""
|
||||
Проверяет наличие и актуальность файлов СКУД и 1С.
|
||||
Возвращает (is_valid, warnings_list, errors_list)
|
||||
Проверяет существование и свежесть входных файлов.
|
||||
"""
|
||||
errors = []
|
||||
warnings = []
|
||||
errors = []
|
||||
now = time.time()
|
||||
max_age_sec = max_age_hours * 3600
|
||||
|
||||
# Ожидаемые имена файлов
|
||||
scud_today_file = os.path.join(DATA_DIR, f"Сотрудники_{DATE_TODAY}.xlsx")
|
||||
scud_yesterday_file = os.path.join(DATA_DIR, f"Сотрудники_{DATE_YESTERDAY}.xlsx")
|
||||
staff_file = os.path.join(DATA_DIR, "Штатные сотрудники - ОУП.xlsx")
|
||||
absent_file = os.path.join(DATA_DIR, "Отсутствия сотрудников - выгрузка.xlsx")
|
||||
|
||||
now = datetime.now()
|
||||
|
||||
# 1. Проверка файла СКУД за СЕГОДНЯ
|
||||
if not os.path.exists(scud_today_file):
|
||||
errors.append(f"❌ КРИТИЧЕСКАЯ ОШИБКА: Отсутствует актуальный файл СКУД за сегодня: 'Сотрудники_{DATE_TODAY}.xlsx'!")
|
||||
else:
|
||||
# Проверяем дату изменения файла (mtime)
|
||||
file_mtime = datetime.fromtimestamp(os.path.getmtime(scud_today_file))
|
||||
if file_mtime.date() < now.date():
|
||||
errors.append(f"⚠️ ОШИБКА АКТУАЛЬНОСТИ: Файл 'Сотрудники_{DATE_TODAY}.xlsx' существует, но изменялся прошлым днем ({file_mtime.strftime('%d.%m.%Y %H:%M')})!")
|
||||
|
||||
# 2. Проверка файла СКУД за ВЧЕРА
|
||||
if not os.path.exists(scud_yesterday_file):
|
||||
warnings.append(f"⚠️ ПРЕДУПРЕЖДЕНИЕ: Файл СКУД за вчера ({DATE_YESTERDAY}) не найден. Детальный отчет за вчера может быть неполным.")
|
||||
|
||||
# 3. Проверка файлов 1С (Штат и Отсутствия)
|
||||
for f_path, f_name in [(staff_file, "Штатные сотрудники"), (absent_file, "Выгрузка отсутствий")]:
|
||||
if not os.path.exists(f_path):
|
||||
errors.append(f"❌ КРИТИЧЕСКАЯ ОШИБКА: Файл 1С '{f_name}' не найден в папке data/!")
|
||||
# 1. Проверка файлов 1С в data/1c
|
||||
for file_path, label in [(STAFF_FILE_1C, "Штатное расписание 1С"), (ABSENT_FILE_1C, "Отсутствия 1С")]:
|
||||
if not os.path.exists(file_path):
|
||||
errors.append(f"Файл '{label}' не найден по пути: {file_path}")
|
||||
else:
|
||||
file_mtime = datetime.fromtimestamp(os.path.getmtime(f_path))
|
||||
days_old = (now - file_mtime).days
|
||||
if days_old >= 2:
|
||||
warnings.append(f"⚠️ УСТАРЕВШИЕ ДАННЫЕ 1С: Файл '{os.path.basename(f_path)}' не обновлялся {days_old} дн. (Дата: {file_mtime.strftime('%d.%m.%Y')})")
|
||||
mtime = os.path.getmtime(file_path)
|
||||
age_hours = (now - mtime) / 3600
|
||||
if age_hours > max_age_hours:
|
||||
warnings.append(
|
||||
f"Файл '{label}' обновлялся давно ({age_hours:.1f} ч. назад). "
|
||||
f"Дата изменения: {datetime.fromtimestamp(mtime).strftime('%d.%m.%Y %H:%M')}"
|
||||
)
|
||||
|
||||
# 2. Проверка файла СКУД в data/scud
|
||||
if not os.path.exists(SCUD_FILE_TODAY):
|
||||
warnings.append(f"Сегодняшний файл СКУД еще не сформирован: {SCUD_FILE_TODAY}")
|
||||
|
||||
is_valid = len(errors) == 0
|
||||
return is_valid, warnings, errors
|
||||
Reference in New Issue
Block a user