Загрузка данных


from flask import Flask, render_template, request
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
    )

def create_posobiya_table():
    """Создаёт таблицу posobiya и заполняет 9-ю пособиями, если её нет."""
    conn = get_db_connection()
    try:
        cur = conn.cursor()
        cur.execute("""
            CREATE TABLE IF NOT EXISTS posobiya (
                id SERIAL PRIMARY KEY,
                name VARCHAR(200) NOT NULL UNIQUE
            );
        """)
        пособия = [
            "Пособие по временной нетрудоспособности",
            "Пособие по беременности и родам",
            "Единовременное пособие при рождении ребенка",
            "Ежемесячное пособие по уходу за ребенком до 1.5 лет",
            "Ежемесячное пособие на ребенка",
            "Пособие по безработице",
            "Социальное пособие на погребение",
            "Пособие по уходу за ребенком-инвалидом",
            "Пособие по нетрудоспособности по уходу за ребёнком"
        ]
        for name in пособия:
            cur.execute(
                "INSERT INTO posobiya (name) VALUES (%s) ON CONFLICT (name) DO NOTHING;",
                (name,)
            )
        conn.commit()
        cur.close()
        print("Таблица posobiya готова.")
    except Exception as e:
        print(f"Ошибка создания posobiya: {e}")
        conn.rollback()
    finally:
        conn.close()

# -------------------- Главная страница (все столбцы rabotnik + поиск) --------------------
@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()
        # Используем SELECT *, чтобы показать все колонки таблицы rabotnik
        query = "SELECT * 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>/posobiya")
def employee_posobiya(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"""
            <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
            <div class='container mt-5'><div class='alert alert-warning'>
            Работник с табельным номером {tabnum} не найден.
            </div><a href='/' class='btn btn-secondary'>Назад</a></div>
            """

        # Все виды пособий
        cur.execute("SELECT id, name FROM posobiya ORDER BY id;")
        posobiya = cur.fetchall()
        cur.close()
        conn.close()

        return render_template("employee_posobiya.html", worker=worker, posobiya=posobiya)
    except Exception as e:
        return f"<h2>Ошибка загрузки пособий</h2><pre>{traceback.format_exc()}</pre>"

# -------------------- Запуск --------------------
if __name__ == "__main__":
    with app.app_context():
        create_posobiya_table()
    app.run(debug=True, host="0.0.0.0", port=5000)