added notifications for approval and rejection of a mentor.
from datetime import datetime
from pytask.taskapp.events.task import addCredits, addMentor
from pytask.taskapp.events.user import changeRole
from pytask.taskapp.utilities.notification import create_notification
def reply_to_request(request_obj, reply, replied_by):
"""
makes a request replied with the given reply.
arguments:
request_obj - Request object for which change is intended
reply - a boolean value to be given as reply (True/False)
replied_by - the user object who replies to the request
"""
if not request_obj.is_replied:
request_obj.reply = reply
request_obj.is_replied = True
request_obj.reply_date = datetime.now()
request_obj.replied_by = replied_by
request_obj.save()
if request_obj.role == "PY":
## note that we are not doing any check. we make requests invalid when an event like closing task happens.
task = request_obj.task
pynts = request_obj.pynts
receiving_user = request_obj.receiving_user
requested_by = request_obj.sent_by
for a_mentor in task.mentors.all():
if reply:
addCredits(task, request_obj.sent_by, request_obj.receiving_user, pynts)
create_notification(request_obj.role, a_mentor, replied_by, True, task, request_obj.remarks, requested_by, receiving_user, pynts)
else:
create_notification(request_obj.role, a_mentor, replied_by, False, task, request_obj.remarks, requested_by, receiving_user, pynts)
elif request_obj.role == "MT":
task = request_obj.task
requested_by = request_obj.sent_by
if reply:
## tell the replied user that he is mentor for this task and give him learn more link
create_notification("NT", request_obj.replied_by, task=task)
## alert all the mentors including who made request and all assigned users
for a_mentor in task.mentors.all():
create_notification(request_obj.role, a_mentor, replied_by, True, task, request_obj.remarks, requested_by)
for a_user in task.assigned_users.all():
create_notification(request_obj.role, a_user, replied_by, True, task, request_obj.remarks, requested_by)
addMentor(task, request_obj.replied_by)
else:
## tell the requested user that his request was rejected due to these reasons.
create_notification(request_obj.role, requested_by, replied_by, False, task, request_obj.remarks, requested_by)
elif request_obj.role in ["AD", "MG", "DV"]:
if reply:
## make him the role
## here we check for rights just in case to be fine with demoted users. we change only the user who made request has that rights.
changeRole(role=request_obj.role, user=request_obj.replied_by)
else:
## notify request_obj.sent_by that it has been rejected
pass
return True #Reply has been added successfully
return False #Already replied