diff --git a/test_tabel_check.py b/test_tabel_check.py index 5308a84..aa92820 100644 --- a/test_tabel_check.py +++ b/test_tabel_check.py @@ -1,12 +1,12 @@ #!/usr/bin/env python3 """ Проверка подключения к SQL Server и загрузки данных табеля -за последние 5 месяцев для конкретного сотрудника. +за последние 5 месяцев для ds.krivochenko@sibcem.ru. -Поиск сотрудника: - 1. Ищем в AD по email (ds.krivochenko@sibcem.ru) → получаем extensionAttribute2 = CARD_ID - 2. По CARD_ID ищем в SQL (UOV_SELFSERVICE_PR_EMP) → получаем EMP_ID - 3. По EMP_ID загружаем табель (UOV_SELFSERVICE_TB_TABEL) за 5 месяцев +Цепочка поиска сотрудника (как в LK модуле бота): + 1. AD: search_by_user_id(email) → extensionAttribute2 = CARD_ID + 2. SQL: SELECT ID FROM UOV_SELFSERVICE_PR_EMP WHERE CARD_ID = %s → EMP_ID + 3. SQL: SELECT ... FROM UOV_SELFSERVICE_TB_TABEL WHERE EMP_ID = %s → табель Запуск: cd /opt/trueconf_bot @@ -81,7 +81,6 @@ except ImportError: except Exception as e: print(f"⚠️ Ошибка Passwork: {e}") -# Фоллбэк на переменные окружения if not DB_PASSWORD: DB_PASSWORD = os.getenv("DB_PASSWORD", "").strip() DB_USER = os.getenv("DB_USER", DB_USER).strip() @@ -139,26 +138,23 @@ except Exception as e: sys.exit(1) # ============================================================ -# 6. Поиск сотрудника в AD по email → CARD_ID +# 6. Поиск сотрудника в AD по email → CARD_ID (как в LK модуле) # ============================================================ print() print("=" * 60) print(" Поиск сотрудника в Active Directory") print("=" * 60) -# Email для поиска TARGET_EMAIL = "ds.krivochenko@sibcem.ru" print(f" Ищем: {TARGET_EMAIL}") -# Импортируем ldap3 и ищем try: from ldap3 import Server, Connection, ALL - from ldap3.utils.conv import escape_filter_chars server = Server(AD_SERVER, get_info=ALL) ldap_conn = Connection(server, user=AD_USER, password=AD_PASSWORD, auto_bind=True) - # Строим фильтр как в ad_search.py + # Как в ad_search.py: ищем по mail, userPrincipalName, sAMAccountName short_username = TARGET_EMAIL.split("@")[0] if "@" in TARGET_EMAIL else TARGET_EMAIL or_parts = [ @@ -173,7 +169,6 @@ try: print(f" LDAP-фильтр: {search_filter}") card_id_from_ad = None - ldap_entry = None for base in AD_BASES: ldap_conn.search( @@ -182,17 +177,17 @@ try: attributes=["cn", "sAMAccountName", "mail", "userPrincipalName", "extensionAttribute2"], ) if ldap_conn.entries: - ldap_entry = ldap_conn.entries[0] + entry = ldap_conn.entries[0] print(f" ✅ Найден в OU: {base}") - print(f" CN : {ldap_entry.cn}") - print(f" sAMAccountName: {ldap_entry.sAMAccountName}") - print(f" mail : {ldap_entry.mail}") - ext2 = str(ldap_entry.extensionAttribute2) if hasattr(ldap_entry, 'extensionAttribute2') and ldap_entry.extensionAttribute2 else "(не задан)" + print(f" CN : {entry.cn}") + print(f" sAMAccountName : {entry.sAMAccountName}") + print(f" mail : {entry.mail}") + ext2 = str(entry.extensionAttribute2) if hasattr(entry, 'extensionAttribute2') and entry.extensionAttribute2 else "(не задан)" print(f" extensionAttribute2: {ext2}") card_id_from_ad = ext2 break - if not ldap_entry: + if not ldap_conn.entries: print(f" ❌ Сотрудник не найден в AD по email {TARGET_EMAIL}") except ImportError: @@ -203,11 +198,11 @@ except Exception as e: sys.exit(1) # ============================================================ -# 7. Поиск EMP_ID по CARD_ID в SQL +# 7. Поиск EMP_ID по CARD_ID в SQL (как в LK модуле) # ============================================================ print() print("=" * 60) -print(" Поиск сотрудника в SQL Server") +print(" Поиск EMP_ID по CARD_ID в SQL") print("=" * 60) emp_id = None @@ -216,49 +211,15 @@ card_id = None if card_id_from_ad: card_id = card_id_from_ad print(f" CARD_ID из AD: {card_id}") - cursor.execute("SELECT e.ID, e.CARD_ID FROM UOV_SELFSERVICE_PR_EMP e WHERE e.CARD_ID = %s", (card_id,)) + + # Как в info_service.py: SELECT e.ID FROM UOV_SELFSERVICE_PR_EMP e WHERE e.CARD_ID = %s + cursor.execute("SELECT e.ID FROM UOV_SELFSERVICE_PR_EMP e WHERE e.CARD_ID = %s", (card_id,)) row = cursor.fetchone() if row: emp_id = row[0] - print(f" ✅ Найден: emp_id={emp_id}, CARD_ID={row[1]}") + print(f" ✅ Найден: emp_id={emp_id}") else: - print(f" ⚠️ Сотрудник с CARD_ID={card_id} не найден в UOV_SELFSERVICE_PR_EMP") - -# Если не нашли по CARD_ID из AD — пробуем по email через SQL -if not emp_id: - print(f" ⚠️ Пробуем поиск по email через SQL...") - cursor.execute( - "SELECT e.ID, e.CARD_ID, e.EMAIL FROM UOV_SELFSERVICE_PR_EMP e WHERE e.EMAIL LIKE %s OR e.EMAIL LIKE %s ORDER BY e.ID LIMIT 1", - (f"%{TARGET_EMAIL}%", f"%{short_username}@%") - ) - row = cursor.fetchone() - if row: - emp_id = row[0] - card_id = row[1] - print(f" ✅ Найден: emp_id={emp_id}, CARD_ID={card_id}") - else: - print(f" ❌ Сотрудник не найден") - -# Если нашли — выводим инфу -if emp_id: - cursor.execute( - "SELECT f.SNAME, d.NAME, appoint.NAME, e.EMAIL " - "FROM UOV_SELFSERVICE_PR_EMP e " - "JOIN UOV_SELFSERVICE_PR_TRANS t ON t.EMP_ID = e.ID " - "JOIN UOV_SELFSERVICE_HR_FIRM f ON f.ID = e.FIRM_ID " - "JOIN UOV_SELFSERVICE_HR_DEPT d ON d.ID = t.DEPT_ID " - "JOIN UOV_SELFSERVICE_ST_APPOINT appoint ON appoint.ID = t.APPOINT_ID " - "WHERE e.CARD_ID = %s AND t.D_FROM <= CAST(GETDATE() AS DATE) " - "AND (t.D_TO >= CAST(GETDATE() AS DATE) OR t.D_TO = CAST('1999-12-31' AS DATE))", - (card_id,) - ) - row = cursor.fetchone() - if row: - print(f"\n 📋 Информация о сотруднике:") - print(f" Компания : {row[0]}") - print(f" Отдел : {row[1]}") - print(f" Должность: {row[2]}") - print(f" Email : {row[3]}") + print(f" ❌ Сотрудник с CARD_ID={card_id} не найден в UOV_SELFSERVICE_PR_EMP") # ============================================================ # 8. Загрузка табеля за последние 5 месяцев