def add_task(): orderer = Worker.get_by_username(g.current_invest.id, current_user.username) if not orderer.id: flash("Choose investment first.") return redirect(url_for("tasks.tasks")) form = TaskForm() if form.validate_on_submit(): executor = Worker.get_by_username(g.current_invest.id, form.executor_name.data) db.session.add( Task( description=form.description.data, deadline=form.deadline.data, priority=form.priority.data, orderer=orderer, executor=executor, progress=0, investment_id=g.current_invest.id, ) ) db.session.commit() flash("You have created the task successfully.") notification = create_notification( worker_id=executor.id, n_type="task", description=f"You have a new task: '{form.description.data}' from {orderer.users.username}", ) add_notification(r, notification) return redirect(url_for("tasks.tasks")) return render_template("tasks/form.html", title="Add Task", form=form)
def deputed_tasks(): # TODO wrap queries in functions tasks_in_progress = ( Worker.get_by_username( invest_id=g.current_invest.id, username=current_user.username ) .deputed_tasks.filter(Task.progress != 100) .order_by(Task.deadline) .order_by(Task.priority.desc()) .all() ) realized_tasks = ( Worker.get_by_username( invest_id=g.current_invest.id, username=current_user.username ) .deputed_tasks.filter(Task.progress == 100) .order_by(Task.deadline) .order_by(Task.priority.desc()) .all() ) admin = Worker.is_admin(user_id=current_user.id, investment_id=g.current_invest.id) next_page = url_for("tasks.deputed_tasks") return render_template( "tasks/tasks.html", title="Deputed Tasks", tasks_in_progress=tasks_in_progress, realized_tasks=realized_tasks, admin=admin, next_page=next_page, )
def edit_task(): _id = request.args.get("_id") next_page = request.args.get("next_page") if not next_page: next_page = url_for("tasks.tasks") task = Task.query.get(int(_id)) if task: form = TaskForm() if form.validate_on_submit(): task.description = form.description.data task.deadline = form.deadline.data task.priority = form.priority.data if form.executor_name != task.executor.users.username: task.executor = Worker.get_by_username( invest_id=g.current_invest.id, username=form.executor_name.data ) db.session.commit() flash("You have edited the task successfully.") return redirect(next_page) elif request.method == "GET": form.description.data = task.description form.deadline.data = task.deadline form.priority.data = task.priority form.executor_name.data = task.executor.users.username return render_template("tasks/form.html", title="Edit Task", form=form) return redirect(next_page)
def validate_executor_name(self, executor_name): if not Worker.get_by_username(g.current_invest.id, executor_name.data).id: raise ValidationError( "We can not find worker with this name. Check typing and try again." )
def before_request(): if current_user.is_authenticated: current_user.update_last_activity() g.current_invest = current_user.get_current_invest() g.current_worker = Worker.get_by_username(g.current_invest.id, current_user.username)
def test_get_coming_tasks(add_tasks): user = User.query.filter_by(username="******").first() investment = Investment.query.filter_by(name="Test Invest").first() worker = Worker.get_by_username(investment.id, user.username) task = Task.query.filter_by(description="test task 2").first() assert worker.get_coming_tasks() == [task]
def test_get_new_tasks(add_tasks): user = User.query.filter_by(username="******").first() investment = Investment.query.filter_by(name="Test Invest").first() worker = Worker.get_by_username(investment.id, user.username) assert worker.last_time_tasks_displayed assert worker.get_new_tasks()