перед настройкой базы данных. Выгрузка кадровых файлов разделена по дням.
This commit is contained in:
@@ -96,7 +96,7 @@ def format_row_cells(ws, r_num, fill_obj, is_bold=False, align_b="right", bold_f
|
|||||||
cell_b.alignment = Alignment(horizontal=align_b, vertical="center", wrap_text=wrap_b)
|
cell_b.alignment = Alignment(horizontal=align_b, vertical="center", wrap_text=wrap_b)
|
||||||
|
|
||||||
|
|
||||||
# --- 1. СВОДКА НА СЕГОДНЯ (ОСТАВЛЕНА БЕЗ ИЗМЕНЕНИЙ, КАК ЕСТЬ) ---
|
# --- 1. СВОДКА НА СЕГОДНЯ ---
|
||||||
def generate_summary_excel(merged_df, date_str="27.07.2026", filename=None):
|
def generate_summary_excel(merged_df, date_str="27.07.2026", filename=None):
|
||||||
if not filename:
|
if not filename:
|
||||||
filename = f"{format_date_ru(date_str)} сводка.xlsx"
|
filename = f"{format_date_ru(date_str)} сводка.xlsx"
|
||||||
@@ -162,7 +162,7 @@ def generate_summary_excel(merged_df, date_str="27.07.2026", filename=None):
|
|||||||
ws.row_dimensions[current_row].hidden = True
|
ws.row_dimensions[current_row].hidden = True
|
||||||
current_row += 1
|
current_row += 1
|
||||||
|
|
||||||
# 5. ИТОГО НА РАБОТЕ (Включает: пришли по СКУД + Командировки + Удаленная работа)
|
# 5. ИТОГО НА РАБОТЕ (Раскрывающийся список, свернут hidden=True)
|
||||||
is_working_mask = (merged_df['Пришел'] == True) | (
|
is_working_mask = (merged_df['Пришел'] == True) | (
|
||||||
merged_df['Вид_отсутствия'].astype(str).str.lower().str.contains('командировк|удален|дистанцион|разъездн', regex=True, na=False)
|
merged_df['Вид_отсутствия'].astype(str).str.lower().str.contains('командировк|удален|дистанцион|разъездн', regex=True, na=False)
|
||||||
)
|
)
|
||||||
@@ -173,6 +173,14 @@ def generate_summary_excel(merged_df, date_str="27.07.2026", filename=None):
|
|||||||
format_row_cells(ws, current_row, FILL_PRESENT, is_bold=True, bold_font=bold_font)
|
format_row_cells(ws, current_row, FILL_PRESENT, is_bold=True, bold_font=bold_font)
|
||||||
current_row += 1
|
current_row += 1
|
||||||
|
|
||||||
|
if not present.empty:
|
||||||
|
for idx, fio in enumerate(sorted(present['Сотрудник'].dropna().unique()), 1):
|
||||||
|
ws.cell(row=current_row, column=1, value=f"{idx}. {fio}")
|
||||||
|
format_row_cells(ws, current_row, FILL_PRESENT, is_bold=False)
|
||||||
|
ws.row_dimensions[current_row].outlineLevel = 1
|
||||||
|
ws.row_dimensions[current_row].hidden = True
|
||||||
|
current_row += 1
|
||||||
|
|
||||||
# 6. АНОМАЛИИ (В самом низу таблицы, раскрывающийся список)
|
# 6. АНОМАЛИИ (В самом низу таблицы, раскрывающийся список)
|
||||||
anomalies = merged_df[(merged_df['Пришел'] == True) & (merged_df['Вид_отсутствия'].notna())]
|
anomalies = merged_df[(merged_df['Пришел'] == True) & (merged_df['Вид_отсутствия'].notna())]
|
||||||
|
|
||||||
@@ -223,7 +231,7 @@ def generate_summary_excel(merged_df, date_str="27.07.2026", filename=None):
|
|||||||
print(f"[⚠️] Файл открыт в Excel! Сохранено как: {alt_path}")
|
print(f"[⚠️] Файл открыт в Excel! Сохранено как: {alt_path}")
|
||||||
|
|
||||||
|
|
||||||
# --- 2. ДЕТАЛЬНЫЙ ОТЧЕТ ЗА ВЧЕРА (С ДОРАБОТАННЫМ РАСЧЕТОМ И ЗЕЛЕНОЙ ПОДСВЕТКОЙ АНОМАЛИЙ) ---
|
# --- 2. ДЕТАЛЬНЫЙ ОТЧЕТ ЗА ВЧЕРА ---
|
||||||
def generate_detailed_excel(merged_df, date_str="26.07.2026", filename=None):
|
def generate_detailed_excel(merged_df, date_str="26.07.2026", filename=None):
|
||||||
if not filename:
|
if not filename:
|
||||||
filename = f"{format_date_ru(date_str)} отчет.xlsx"
|
filename = f"{format_date_ru(date_str)} отчет.xlsx"
|
||||||
|
|||||||
Reference in New Issue
Block a user