From 8e97e40c385e7f2f1b9abd8961dd7ff44ab7e091 Mon Sep 17 00:00:00 2001 From: Andrei Date: Mon, 13 Feb 2023 18:43:15 +0500 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20=D0=BE?= =?UTF-8?q?=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D1=87,=20=D0=BD=D0=B0=20=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D0=B5=20=D0=BF=D1=80=D0=BE=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=B0=20=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=BB=20requirements.txt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- functions.py | 30 ++++++++++ main.py | 13 ++++- requirements.txt | Bin 550 -> 736 bytes static/css/project.css | 125 +++++++++++++++++++++++++++++++++++++++++ static/js/project.js | 9 ++- templates/project.html | 62 +++++++++++++++++++- 6 files changed, 233 insertions(+), 6 deletions(-) diff --git a/functions.py b/functions.py index f565fd0..4f8630b 100644 --- a/functions.py +++ b/functions.py @@ -1,3 +1,4 @@ +import datetime import smtplib from json import loads from email.message import EmailMessage @@ -6,6 +7,7 @@ from data.users import User from data.staff_projects import StaffProjects from data import db_session import uuid +import pymorphy2 def check_password(password=''): @@ -90,3 +92,31 @@ def save_project_logo(photo): with open(filename, 'wb') as f: photo.save(f) return filename + + +def overdue_quest_project(quest): + if str(quest.deadline.date()) == str(datetime.datetime.now().date()): + quest.overdue = 'today' + elif quest.deadline < datetime.datetime.now(): + quest.overdue = 'yes' + quest.time_left = 'Просрочено на' + round_date(quest.deadline) + else: + quest.overdue = 'no' + quest.time_left = 'Еще есть: ' + round_date(quest.deadline) + return quest + + +def round_date(date_time): + morph = pymorphy2.MorphAnalyzer() + difference = abs(date_time - datetime.datetime.now()).days + resp = '' + if difference // 365: + resp += f'{difference // 365} {morph.parse("год")[0].make_agree_with_number(difference // 365).word}' + difference -= 365 * (difference // 365) + if difference // 30: + resp += ', ' if resp else ' ' + f'{difference // 30}' \ + f' {morph.parse("месяц")[0].make_agree_with_number(difference // 30).word}' + difference -= 30 * (difference // 30) + if difference: + resp += ', ' if resp else ' ' + f'{difference} {morph.parse("день")[0].make_agree_with_number(difference).word}' + return f'{resp}' diff --git a/main.py b/main.py index 8e7b561..575d75b 100644 --- a/main.py +++ b/main.py @@ -11,7 +11,8 @@ from itsdangerous import URLSafeTimedSerializer, SignatureExpired from sqlalchemy import or_ from json import loads -from functions import check_password, mail, init_db_default, get_projects_data, get_user_data, save_project_logo +from functions import check_password, mail, init_db_default, get_projects_data, get_user_data, save_project_logo, \ + overdue_quest_project from forms.edit_profile import EditProfileForm from forms.login import LoginForm from forms.find_project import FindProjectForm @@ -115,7 +116,15 @@ def project(id_project): if current_user.id == current_project.creator or current_user.id in list(map(lambda x: x.user, staff)): staff = list(map(lambda x: get_user_data(x), data_session.query(User).filter( User.id.in_(list(map(lambda x: x.user, staff)))).all())) if staff else [] - return render_template('project.html', project=current_project, title=current_project.name, staff=staff) + quests = data_session.query(Quests).filter(Quests.project == current_project.id).all() + if quests: + quests.sort(key=lambda x: (x.realized, x.deadline)) + quests = list(map(lambda x: overdue_quest_project(x), quests)) + return render_template('project.html', + project=current_project, + title=current_project.name, + staff=staff, + quests=quests) else: abort(403) else: diff --git a/requirements.txt b/requirements.txt index be128f6d155166cc13ce2da8b1b68ce6444600b7..dcd1a72ad6c92b0d38cc57cb7c6477424ba32cd0 100644 GIT binary patch delta 208 zcmZ3+@_=

Задачи

- p + {% for quest in quests %} +
+
+

+ +

+
+
+ {% if quest.realized == 0 %} +
+
+

Описание

+
+

{{ quest.description }}

+
+
+ +
+ {% else %} + + {% endif %} +
+
+
+
+ {% endfor %}