Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
162 changes: 138 additions & 24 deletions simple_org_chart/app_main.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ def flock(fd, op):
update_employee_data,
_load_fetch_all_employees_fallback,
)
from simple_org_chart.exports import format_hire_date
from simple_org_chart.exports import format_hire_date, add_metadata_sheet, format_export_filters
from simple_org_chart import user_scanner_service

load_dotenv()
Expand Down Expand Up @@ -1462,21 +1462,39 @@ def flatten_org_data(node, manager_name="", row_num=2):
return row_num

# Flatten the data starting from root
flatten_org_data(data)
last_row = flatten_org_data(data)

# Auto-adjust column widths
for col in range(1, len(visible_columns) + 1):
column = get_column_letter(col)
ws.column_dimensions[column].width = 20

# Generate filename
filename = f"org-chart-{datetime.now().strftime('%Y-%m-%d')}.xlsx"

filters = []
if hide_disabled_users:
filters.append('hideDisabled')
if hide_guest_users:
filters.append('hideGuests')
if hide_no_title:
filters.append('hideNoTitle')
if ignored_departments:
filters.append('ignoreDepartments')

add_metadata_sheet(
wb,
filename=filename,
sheet_title=ws.title,
item_count=last_row - 2,
data_export_option=', '.join(filters) if filters else 'allData',
)

# Save to BytesIO
output = BytesIO()
wb.save(output)
output.seek(0)

# Generate filename
filename = f"org-chart-{datetime.now().strftime('%Y-%m-%d')}.xlsx"

return send_file(
output,
as_attachment=True,
Expand Down Expand Up @@ -1605,12 +1623,20 @@ def export_missing_manager_report():
column_letter = get_column_letter(col)
ws.column_dimensions[column_letter].width = 22

filename = f"missing-managers-{datetime.now().strftime('%Y-%m-%d')}.xlsx"

add_metadata_sheet(
wb,
filename=filename,
sheet_title=ws.title,
item_count=len(filtered_records),
data_export_option=format_export_filters(scope, toggles, tp),
)

output = BytesIO()
wb.save(output)
output.seek(0)

filename = f"missing-managers-{datetime.now().strftime('%Y-%m-%d')}.xlsx"

return send_file(
output,
as_attachment=True,
Expand Down Expand Up @@ -1693,12 +1719,20 @@ def export_missing_photo_report():
column_letter = get_column_letter(col)
ws.column_dimensions[column_letter].width = 22

filename = f"missing-photos-{datetime.now().strftime('%Y-%m-%d')}.xlsx"

add_metadata_sheet(
wb,
filename=filename,
sheet_title=ws.title,
item_count=len(filtered_records),
data_export_option=format_export_filters(scope, toggles, tp),
)

output = BytesIO()
wb.save(output)
output.seek(0)

filename = f"missing-photos-{datetime.now().strftime('%Y-%m-%d')}.xlsx"

return send_file(
output,
as_attachment=True,
Expand Down Expand Up @@ -1743,7 +1777,7 @@ def export_disabled_users_report():

try:
refresh = request.args.get('refresh', 'false').lower() == 'true'
records, _ = _get_disabled_records_from_request(
records, applied_filters = _get_disabled_records_from_request(
force_refresh=refresh,
apply_filters=True
)
Expand Down Expand Up @@ -1783,12 +1817,24 @@ def export_disabled_users_report():
column_letter = get_column_letter(col)
ws.column_dimensions[column_letter].width = 24

filename = f"disabled-users-{datetime.now().strftime('%Y-%m-%d')}.xlsx"

filter_parts = []
for k, v in applied_filters.items():
filter_parts.append(f"{k}={v}")

add_metadata_sheet(
wb,
filename=filename,
sheet_title=ws.title,
item_count=len(records),
data_export_option=', '.join(filter_parts) if filter_parts else 'allData',
)

output = BytesIO()
wb.save(output)
output.seek(0)

filename = f"disabled-users-{datetime.now().strftime('%Y-%m-%d')}.xlsx"

return send_file(
output,
as_attachment=True,
Expand Down Expand Up @@ -1916,12 +1962,20 @@ def export_recently_disabled_report():
column_letter = get_column_letter(col)
ws.column_dimensions[column_letter].width = 24

filename = f"disabled-last-365-days-{datetime.now().strftime('%Y-%m-%d')}.xlsx"

add_metadata_sheet(
wb,
filename=filename,
sheet_title=ws.title,
item_count=len(records),
data_export_option=f"recentDays={recent_days}, licensedOnly={licensed_only}, includeGuests={include_guests}",
)

output = BytesIO()
wb.save(output)
output.seek(0)

filename = f"disabled-last-365-days-{datetime.now().strftime('%Y-%m-%d')}.xlsx"

return send_file(
output,
as_attachment=True,
Expand Down Expand Up @@ -2005,12 +2059,20 @@ def export_recently_hired_report():
column_letter = get_column_letter(col)
ws.column_dimensions[column_letter].width = 24

filename = f"hired-last-365-days-{datetime.now().strftime('%Y-%m-%d')}.xlsx"

add_metadata_sheet(
wb,
filename=filename,
sheet_title=ws.title,
item_count=len(records),
data_export_option=format_export_filters(scope, tp=tp),
)

output = BytesIO()
wb.save(output)
output.seek(0)

filename = f"hired-last-365-days-{datetime.now().strftime('%Y-%m-%d')}.xlsx"

return send_file(
output,
as_attachment=True,
Expand Down Expand Up @@ -2290,12 +2352,30 @@ def export_last_logins_report():
column_letter = get_column_letter(col)
ws.column_dimensions[column_letter].width = 26

filename = f"last-logins-{datetime.now().strftime('%Y-%m-%d')}.xlsx"

add_metadata_sheet(
wb,
filename=filename,
sheet_title=ws.title,
item_count=len(filtered_records),
data_export_option=format_export_filters(scope, {
'include_user_mailboxes': include_user_mailboxes,
'include_shared_mailboxes': include_shared_mailboxes,
'include_room_equipment_mailboxes': include_room_equipment_mailboxes,
'include_enabled': include_enabled,
'include_disabled': include_disabled,
'include_licensed': include_licensed,
'include_unlicensed': include_unlicensed,
'include_members': include_members,
'include_guests': include_guests,
}, tp),
)

output = BytesIO()
wb.save(output)
output.seek(0)

filename = f"last-logins-{datetime.now().strftime('%Y-%m-%d')}.xlsx"

return send_file(
output,
as_attachment=True,
Expand Down Expand Up @@ -2395,12 +2475,20 @@ def export_disabled_licensed_report():
column_letter = get_column_letter(col)
ws.column_dimensions[column_letter].width = 24

filename = f"disabled-licensed-users-{datetime.now().strftime('%Y-%m-%d')}.xlsx"

add_metadata_sheet(
wb,
filename=filename,
sheet_title=ws.title,
item_count=len(records),
data_export_option=f"licensedOnly=True, includeGuests={include_guests}",
)

output = BytesIO()
wb.save(output)
output.seek(0)

filename = f"disabled-licensed-users-{datetime.now().strftime('%Y-%m-%d')}.xlsx"

return send_file(
output,
as_attachment=True,
Expand Down Expand Up @@ -2572,12 +2660,30 @@ def export_filtered_users_report():
column_letter = get_column_letter(col)
ws.column_dimensions[column_letter].width = 26

filename = f"filtered-users-{datetime.now().strftime('%Y-%m-%d')}.xlsx"

add_metadata_sheet(
wb,
filename=filename,
sheet_title=ws.title,
item_count=len(filtered_records),
data_export_option=format_export_filters(scope, {
'include_user_mailboxes': include_user_mailboxes,
'include_shared_mailboxes': include_shared_mailboxes,
'include_room_equipment_mailboxes': include_room_equipment_mailboxes,
'include_enabled': include_enabled,
'include_disabled': include_disabled,
'include_licensed': include_licensed,
'include_unlicensed': include_unlicensed,
'include_members': include_members,
'include_guests': include_guests,
}, tp),
)

output = BytesIO()
wb.save(output)
output.seek(0)

filename = f"filtered-users-{datetime.now().strftime('%Y-%m-%d')}.xlsx"

return send_file(
output,
as_attachment=True,
Expand Down Expand Up @@ -2662,12 +2768,20 @@ def export_filtered_licensed_report():
column_letter = get_column_letter(col)
ws.column_dimensions[column_letter].width = 24

filename = f"filtered-licensed-users-{datetime.now().strftime('%Y-%m-%d')}.xlsx"

add_metadata_sheet(
wb,
filename=filename,
sheet_title=ws.title,
item_count=len(records),
data_export_option='allData',
)

output = BytesIO()
wb.save(output)
output.seek(0)

filename = f"filtered-licensed-users-{datetime.now().strftime('%Y-%m-%d')}.xlsx"

return send_file(
output,
as_attachment=True,
Expand Down
11 changes: 11 additions & 0 deletions simple_org_chart/data_update.py
Original file line number Diff line number Diff line change
Expand Up @@ -692,6 +692,17 @@ def _generate_xlsx_bytes() -> bytes:
for col in range(1, len(headers) + 1):
ws.column_dimensions[get_column_letter(col)].width = 20

filename = f"org-chart-{datetime.now().strftime('%Y-%m-%d')}.xlsx"

from simple_org_chart.exports import add_metadata_sheet
add_metadata_sheet(
wb,
filename=filename,
sheet_title=ws.title,
item_count=len(employees),
data_export_option='allData',
)

# Save to BytesIO
output = BytesIO()
wb.save(output)
Expand Down
Loading
Loading