Compare commits

..

5 Commits

Author SHA1 Message Date
41cf36e7a5 refactoring 2022-11-05 14:06:09 +03:00
3e31a404e8 reworked 2022-11-05 12:22:07 +03:00
58dc4d8302 add route to all forms 2022-11-03 21:35:02 +03:00
5fa299d2db add features 2022-11-03 20:35:01 +03:00
1d97230941 add requirements.txt 2022-11-02 19:45:43 +03:00
6 changed files with 169 additions and 92 deletions

69
app.py
View File

@@ -1,7 +1,6 @@
from flask import Flask, render_template from flask import Flask, render_template, request, redirect, url_for
from models import db from models import db
from models import * from models import User, Progul
app = Flask(__name__) app = Flask(__name__)
@@ -10,14 +9,70 @@ app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db.init_app(app) db.init_app(app)
@app.route('/') @app.route('/')
def index(): def index():
return render_template('index.html') allUsetrs = User.query.order_by(User.FIO).all()
s = {}
for user in allUsetrs:
dates = []
data = {}
u = db.session.query(User.id).filter(User.id == user.id).subquery()
if len(Progul.query.filter(Progul.user_id.in_(u)).all()) > 0:
for pr in Progul.query.filter(Progul.user_id.in_(u)).all():
dates.append(pr.progulDate)
data['dates'] = dates
data['kolvo'] = len(dates)
s[user.FIO] = data
else:
data['dates'] = ''
data['kolvo'] = '0'
s[user.FIO] = data
@app.route('/admin')
def admipage():
return render_template('adminpage.html')
return render_template('index.html', users = s )
@app.route('/admin', methods=['GET', 'POST'])
def adminpage():
usersQuery = User.query.all()
users = {}
for user in usersQuery:
users[user.id] = user.FIO
return render_template('adminpage.html', users={k: v for k, v in sorted(users.items(), key=lambda item: item[1])}, methods=['GET', 'POST'])
@app.route('/adduser', methods=['GET', 'POST'])
def useradd():
if request.method == 'POST':
fio = request.form['fio']
dolgn = request.form['dolgnost']
userAdd = User(FIO=fio, dolgnost=dolgn)
db.session.add(userAdd)
db.session.commit()
return redirect(url_for('adminpage'))
@app.route('/addprogul', methods=['GET', 'POST'])
def addprogul():
if request.method == 'POST':
dataproeba = request.form['dateprogul']
sotrId = request.form['sotrudnik']
p = Progul(progulDate=str(dataproeba), user_id=sotrId)
db.session.add(p)
db.session.commit()
return redirect(url_for('adminpage'))
if __name__ == '__main__': if __name__ == '__main__':
app.run(host='0.0.0.0', port='3800', debug=True) app.run(host='0.0.0.0', port='3800', debug=True)

View File

@@ -2,8 +2,12 @@ from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy() db = SQLAlchemy()
class PrintedDetal(db.Model): class User(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True) id = db.Column(db.Integer, primary_key=True, autoincrement=True)
imgpath = db.Column(db.String(3000)) FIO = db.Column(db.String(300))
stlpath = db.Column(db.String(3000)) dolgnost = db.Column(db.String(3000))
isprinted = db.Column(db.Boolean())
class Progul(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
progulDate = db.Column(db.String(100))
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

BIN
requirements.txt Normal file

Binary file not shown.

View File

@@ -1,4 +1,3 @@
body { body {
margin: 0; margin: 0;
padding: 0; padding: 0;
@@ -11,11 +10,11 @@ header {
.h1header { .h1header {
margin: 0; margin: 0;
background-color: #4a849f; background-color: #1b3440;
height: 100px; height: 100px;
line-height: 100px; line-height: 100px;
text-align: center; text-align: center;
color: black; color: #f8f7f4;
} }
@@ -23,41 +22,39 @@ header {
text-align: center; text-align: center;
} }
.tg { .card {
padding-top: 35px; background-color: #b4d6c6;
border-collapse: collapse; border-radius: 12px;
border-spacing: 0; box-shadow: 0px 5px 10px 2px rgba(27, 52, 64, 0.3);
} }
.tg td { .card-main{
border-color: black; height: 150px;
border-style: solid;
border-width: 1px;
font-family: Arial, sans-serif;
font-size: 14px;
overflow: hidden;
padding: 10px 5px;
word-break: normal;
} }
.tg th {
border-color: black;
border-style: solid; .row {
border-width: 1px; margin-top: 20px;
font-family: Arial, sans-serif;
font-size: 14px;
font-weight: normal;
overflow: hidden;
padding: 10px 5px;
word-break: normal;
} }
.tg .tg-0pky {
border-color: inherit; .col-md-3 {
text-align: left; margin-bottom: 25px;
vertical-align: top margin-right: 25px;
} }
.card{ .btn {
margin-top: 40px; background-color: #1b3440;
border-color: #1b3440;
margin-top: 10px;
margin-bottom: 10px;
}
.btn:hover {
background-color: #f2845c;
border-color: #f2845c;
} }

View File

@@ -17,46 +17,62 @@
</h1> </h1>
</header> </header>
<div class="container">
<div class="row">
<div class="card col-md-12">
<div class="card-body">
<h2 class="card-title">
Добавить прогул
</h2>
<form method="POST" enctype=multipart/form-data action="/addprogul">
<div class="container card ">
<h2>Добавить прогул</h2>
<label> Выберите сотрудника из списка ниже </label> <label> Выберите сотрудника из списка ниже </label>
<select class="form-select" aria-label="Default select example"> <select class="form-select" name="sotrudnik">
<option value="1">Сальный А.Г.</option> {% for key, value in users.items() %}
<option value="2">Талыкова К.Б.</option> <option value="{{key}}">{{value}}</option>
<option value="3">Ким Н.А.</option> {% endfor %}
</select> </select>
<label for="startDate">Выберите дату прогула</label> <label for="startDate">Выберите дату прогула</label>
<input id="startDate" class="form-control" type="date" /> <input id="startDate" class="form-control" type="date" name='dateprogul' />
<button type="button" class="btn btn-primary">Добавить</button> <button type="submit" class="btn btn-primary">Добавить</button>
</div>
<div class="container card">
<h2>
Добавить сотрудника
<form>
<div class="mb-3">
<label for="exampleInputEmail1" class="form-label">ФИО сотрудника</label>
<input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp">
</div>
<div class="mb-3">
<label for="exampleInputPassword1" class="form-label">Должность</label>
<select class="form-select" aria-label="Default select example">
<option value="laborant">Лаборант</option>
<option value="ingener">Инженер</option>
<option value="vedingener">Ведущий инженер</option>
<option value="4">Сальный</option>
</select>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form> </form>
</h2>
</div> </div>
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="card col-md-12">
<div class="card-body">
<h2 class="card-title">
Добавить сотрудника
</h2>
<form method="POST" enctype=multipart/form-data action="/adduser">
<label>
ФИО сотрудника
</label>
<input class="form-control" name='fio' />
<label>
Должность
</label>
<select class="form-select" name="dolgnost">
<option value="laborant">Лаборнт</option>
<option value="ingener">Инженер</option>
<option value="vedingener">Ведущий инженер</option>
</select>
<button type="submit" class="btn btn-primary">Добавить</button>
</form>
</div>
</div>
</div>
</div>
</body> </body>

View File

@@ -13,27 +13,32 @@
<header> <header>
<h1 class="h1header"> Пропущенные дежурства АСУ </h1> <h1 class="h1header"> Пропущенные дежурства АСУ </h1>
</header> </header>
<div class="container">
<h1>Количество и даты пропущенных дежурств УВП кафедры АСУ </h1>
</div>
<div class="container">
<table class="table ">
<thead>
<tr>
<th>ФИО</th>
<th>Кол-во дежурств</th>
<th>Даты</th>
</tr>
</thead>
<tbody>
<tr>
<td>Сальный А.Г.</td>
<td>0</td>
<td></td>
</tr>
</tbody>
</table>
<div class="container">
<div class="row">
{% for key, value in users.items() %}
<div class="card card-main col-md-3">
<div class="card-body">
<h2 class="card-title">
{{key}}
</h2>
<div class="t1">
Количество прогулов: {{value['kolvo']}}
</div>
<div class="t1">
Даты прогулов:
{% for i in value['dates'] %}
{{i}},
{% endfor %}
</div>
</div>
</div>
</card>
{% endfor %}
</div>
</div> </div>
</body> </body>
</html> </html>