feat(turnstile): двухконтурный учет СКУД, реестры исключений с автокомплитом 1С и калибровка таймзон
This commit is contained in:
@@ -181,9 +181,33 @@ def load_absent_data(date_str):
|
||||
except Exception as e:
|
||||
print(f" [⚠️] Ошибка обработки static_reason_workers.csv: {e}")
|
||||
|
||||
# Обогащение реестрами "Мест. командир." и "Иное"
|
||||
try:
|
||||
from services.manual_absences_repo import get_active_manual_absences_for_date
|
||||
manual_records = get_active_manual_absences_for_date(date_str)
|
||||
if manual_records:
|
||||
existing_fios = set(df_absent['fio_clean'].dropna().tolist()) if not df_absent.empty else set()
|
||||
manual_rows = []
|
||||
for r in manual_records:
|
||||
fc = r['fio_clean']
|
||||
if fc not in existing_fios:
|
||||
label = "Мест. командир." if r['absence_type'] == 'LOCAL_TRIP' else "Иное"
|
||||
manual_rows.append({
|
||||
'fio_clean': fc,
|
||||
'Вид_отсутствия': label
|
||||
})
|
||||
existing_fios.add(fc)
|
||||
if manual_rows:
|
||||
df_absent = pd.concat([df_absent, pd.DataFrame(manual_rows)], ignore_index=True)
|
||||
print(f" [✓] Реестры 'Мест. командир.' / 'Иное': добавлено {len(manual_rows)} чел. в отчет за {date_str}")
|
||||
except Exception as e:
|
||||
print(f" [⚠️] Ошибка применения manual_absences: {e}")
|
||||
|
||||
return df_absent if not df_absent.empty else None
|
||||
|
||||
|
||||
|
||||
|
||||
def load_1c_data_smart(date_str, use_db=False):
|
||||
df_staff = None
|
||||
df_absent = None
|
||||
|
||||
Reference in New Issue
Block a user