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


from flask import Flask, render_template, request, abort
import psycopg2
import traceback

app = Flask(__name__)

# -------------------- Настройки подключения --------------------
DB_HOST = "172.16.1.28"
DB_PORT = 5432
DB_NAME = "test"          
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)


<!DOCTYPE html>
<html>
<head><title>Список работников</title></head>
<body>
    <h2>Работники</h2>
    <!-- Форма поиска -->
    <form method="get" action="/">
        <label>Таб. номер: <input type="text" name="tabnum" value="{{ search_tabnum }}"></label>
        <label>Фамилия: <input type="text" name="fam" value="{{ search_fam }}"></label>
        <button type="submit">Поиск</button>
        <a href="/"><button type="button">Сброс</button></a>
    </form>
    <br>

    {% if rows %}
    <table border="1">
        <tr>
            {% for col in columns %}
            <th>{{ col }}</th>
            {% endfor %}
            <th>Действие</th>
        </tr>
        {% for row in rows %}
        <tr>
            {% for cell in row %}
            <td>{{ cell }}</td>
            {% endfor %}
            <td><a href="/employee/{{ row[0] }}/children"><button>Выбрать</button></a></td>
        </tr>
        {% endfor %}
    </table>
    {% else %}
    <p>Нет данных для отображения.</p>
    {% endif %}
</body>
</html>


<!DOCTYPE html>
<html>
<head><title>Пособия (дети) работника</title></head>
<body>
    <h2>Пособия (дети) сотрудника</h2>
    <p>
        <strong>{{ worker[0] }} {{ worker[1] }} {{ worker[2] }}</strong>
        (таб. № {{ worker[3] }})<br>
        Должность: {{ worker[4] }}
    </p>

    {% if children_rows %}
    <table border="1">
        <tr>
            {% for col in children_columns %}
            <th>{{ col }}</th>
            {% endfor %}
        </tr>
        {% for row in children_rows %}
        <tr>
            {% for cell in row %}
            <td>{{ cell }}</td>
            {% endfor %}
        </tr>
        {% endfor %}
    </table>
    {% else %}
    <p>У данного работника нет записей о пособиях (детях).</p>
    {% endif %}

    <br>
    <a href="/">← Назад к списку работников</a>
</body>
</html>