feat(reports): add simplified report builder, fix nan/inf crash and separate unhired/no-pass staff
This commit is contained in:
+18
-4
@@ -134,12 +134,24 @@ def main():
|
||||
if df_scud_today is not None and not df_scud_today.empty:
|
||||
export_raw_scud(df_scud_today, filename=f"СКУД_Сырые_данные_{today_str}.xlsx")
|
||||
|
||||
# [Этап 3] Детальный отчет за вчера через otchet_generator
|
||||
print(f"\n[3/5] Обработка и построение детального отчета за ВЧЕРА ({yesterday_str})...")
|
||||
# [Этап 3] Детальный и Упрощенный отчеты за вчера
|
||||
print(f"\n[3/5] Обработка и построение детального и упрощенного отчетов за ВЧЕРА ({yesterday_str})...")
|
||||
res_otchet = generate_otchet_service(target_date=yesterday_str)
|
||||
if res_otchet.get("status") == "success":
|
||||
print(f"[✓] {res_otchet.get('message')}: {res_otchet.get('filepath')}")
|
||||
|
||||
# Генерация Упрощенного отчета за вчера
|
||||
try:
|
||||
from services.reports.simplified_builder import generate_simplified_excel
|
||||
df_scud_y = load_best_snapshot_for_date(yesterday_str, prefer_final_y=True)
|
||||
df_staff_y, df_abs_y = load_1c_files_for_date(yesterday_str)
|
||||
df_merged_y = merge_scud_and_1c(df_scud_y, df_staff_y, df_abs_y)
|
||||
|
||||
simplified_path = generate_simplified_excel(df_merged_y, date_str=yesterday_str)
|
||||
print(f"[✓] Упрощенный отчет за {yesterday_str} успешно сформирован: {simplified_path}")
|
||||
except Exception as e:
|
||||
print(f"[⚠️] Ошибка формирования упрощенного отчета: {e}")
|
||||
|
||||
# [Этап 4] Сводка за сегодня через svodka_generator
|
||||
print(f"\n[4/5] Обработка и построение Ежедневной сводки за {today_str} {args.time or ''}...")
|
||||
res_svodka = generate_svodka_service(
|
||||
@@ -165,8 +177,10 @@ def main():
|
||||
]
|
||||
absent_unexplained = df_merged_today[
|
||||
(df_merged_today['Пришел'] == False) &
|
||||
(df_merged_today['Вид_отсутствия'].isna() | (df_merged_today['Вид_отсутствия'].astype(str).str.strip() == '')) &
|
||||
(df_merged_today.get('is_excluded', False) == False)
|
||||
(df_merged_today['Вид_отсутствия'].isna() | (df_merged_today['Вид_отсутствия'].astype(str).str.strip().isin(['', 'nan', 'None']))) &
|
||||
(df_merged_today.get('is_excluded', False) == False) &
|
||||
(df_merged_today.get('not_hired_yet', False) == False) &
|
||||
(df_merged_today.get('no_scud_pass', False) == False)
|
||||
]
|
||||
|
||||
summary_md = generate_markdown_report(
|
||||
|
||||
Reference in New Issue
Block a user