Загрузка данных
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)