from flask import Flask, render_template, request, abort
import psycopg2
import traceback
app = Flask(__name__)
# -------------------- Настройки подключения --------------------
DB_HOST = "172.16.2.38"
DB_PORT = 5432
DB_NAME = "dev_intern" # уточните имя вашей БД
DB_USER = "dev_intern"
DB_PASSWORD = "Cneltynbr33"
def get_db_connection():
"""Создаёт и возвращает соединение с PostgreSQL."""
return psycopg2.connect(
host=DB_HOST,
port=DB_PORT,
dbname=DB_NAME,
user=DB_USER,
password=DB_PASSWORD
)
# -------------------- Главная страница (работники + поиск) --------------------
@app.route("/")
def index():
search_tabnum = request.args.get("tabnum", "").strip()
search_fam = request.args.get("fam", "").strip()
try:
conn = get_db_connection()
cur = conn.cursor()
# Запрос с возможностью фильтрации
query = "SELECT Tabnum, fam, imja, otch, nam_dol FROM rabotnik WHERE 1=1"
params = []
if search_tabnum:
query += " AND Tabnum = %s"
params.append(search_tabnum)
if search_fam:
query += " AND fam ILIKE %s"
params.append(f"%{search_fam}%")
query += " ORDER BY fam, imja"
cur.execute(query, params)
rows = cur.fetchall()
columns = [desc[0] for desc in cur.description]
cur.close()
conn.close()
return render_template("index.html", rows=rows, columns=columns,
search_tabnum=search_tabnum, search_fam=search_fam)
except Exception as e:
return f"<h2>Ошибка загрузки работников</h2><pre>{traceback.format_exc()}</pre>"
# -------------------- Страница пособий (детей) конкретного работника --------------------
@app.route("/employee/<tabnum>/children")
def employee_children(tabnum):
try:
conn = get_db_connection()
cur = conn.cursor()
# Информация о работнике
cur.execute("SELECT fam, imja, otch, Tabnum, nam_dol FROM rabotnik WHERE Tabnum = %s", (tabnum,))
worker = cur.fetchone()
if not worker:
return f"<h2>Работник с табельным номером {tabnum} не найден</h2><a href='/'>Назад</a>"
# Дети (пособия), привязанные к этому таб. номеру
cur.execute("""
SELECT id, tabnum, step_rod, fam_rod, imja_rod, otch_rod, pol_rod, drog_rod
FROM deti
WHERE tabnum = %s
ORDER BY id
""", (tabnum,))
children_rows = cur.fetchall()
children_columns = [desc[0] for desc in cur.description]
cur.close()
conn.close()
return render_template("employee_children.html",
worker=worker,
children_rows=children_rows,
children_columns=children_columns)
except Exception as e:
return f"<h2>Ошибка загрузки пособий</h2><pre>{traceback.format_exc()}</pre>"
# -------------------- Отладочные маршруты (можно удалить) --------------------
@app.route("/rabotnik")
def show_rabotnik():
# ... (код из предыдущего ответа)
pass # оставлен для совместимости, можно удалить
@app.route("/deti")
def show_deti():
pass
@app.route("/join")
def join_data():
pass
# -------------------- Запуск --------------------
if __name__ == "__main__":
app.run(debug=True, host="0.0.0.0", port=5000)