diff -r e338eaeccad7 -r 39f83b4cf557 taskapp/events/request.py --- a/taskapp/events/request.py Fri Jan 14 00:57:39 2011 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,130 +0,0 @@ -from datetime import datetime -from pytask.taskapp.models import Profile -from pytask.taskapp.events.task import addReviewer -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 - create_notification(request_obj.role, receiving_user, replied_by, reply, task, request_obj.remarks, requested_by, receiving_user, pynts) - if receiving_user != requested_by: - create_notification(request_obj.role, requested_by, replied_by, reply, 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 reviewer for this task and give him learn more link - create_notification("NT", request_obj.replied_by, task=task) - - ## now check if there are such similar requests and mark them as invalid - ## they cannot be of type PY and so we can use the replied_by to get requests - pending_requests = replied_by.request_sent_to.filter(is_valid=True, is_replied=False, role="MT",task=task) - for req in pending_requests: - create_notification("MT", req.sent_by, replied_by, False, task=req.task, remarks = "User has already accepted one such request and is a reviewer.", requested_by = req.sent_by) - req.is_valid = False - req.save() - - ## alert all the reviewers including who made request and all assigned users - for a_reviewer in task.reviewers.all(): - create_notification(request_obj.role, a_reviewer, 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) - - addReviewer(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 == "DV": - if reply: - ## here we look for requests that are similar => requesting for DV and make them invalid - ## also we drop a notification to user who made request - pending_requests = request_obj.replied_by.request_sent_to.filter(is_valid=True,is_replied=False,role="DV") - for req in pending_requests: - req.is_valid = False - req.save() - create_notification(role = req.role, sent_to = req.sent_by, sent_from = replied_by, reply = False, \ - remarks = "User has accepted a similar request and has rights same or higher privileged than the request", \ - requested_by = req.sent_by ) - - ## tell only the user who made him a DV - ## drop a welcome message to that fucker - create_notification(request_obj.role, request_obj.sent_by, request_obj.replied_by, reply, requested_by=request_obj.sent_by) - create_notification("ND", request_obj.replied_by, requested_by=request_obj.sent_by) - changeRole(role=request_obj.role, user=request_obj.replied_by) - - else: - create_notification(request_obj.role, request_obj.sent_by, request_obj.replied_by, reply, remarks=request_obj.remarks, requested_by=request_obj.sent_by) - - elif request_obj.role == "MG": - if reply: - ## tell all the MG and AD - alerting_users = Profile.objects.filter(user__is_active=True).exclude(rights="CT").exclude(rights="DV") - for a_profile in alerting_users: - create_notification(request_obj.role, a_profile.user, request_obj.replied_by, reply, requested_by=request_obj.sent_by) - - ## here we look for requests that less or similar => requesting for DV or MG and make them invalid - ## also we drop a notification to user who made request - active_requests = request_obj.replied_by.request_sent_to.filter(is_valid=True,is_replied=False) - pending_requests = active_requests.filter(role="DV") | active_requests.filter(role="MG") - for req in pending_requests: - req.is_valid = False - req.save() - create_notification(role = req.role, sent_to = req.sent_by, sent_from = replied_by, reply = False, \ - remarks = "User has accepted a similar request and has rights same or higher privileged than the request", \ - requested_by = req.sent_by ) - - ## drop a welcome message to that fucker - create_notification("NG", request_obj.replied_by, requested_by=request_obj.sent_by) - changeRole(role=request_obj.role, user=request_obj.replied_by) - - else: - create_notification(request_obj.role, request_obj.sent_by, request_obj.replied_by, reply, remarks=request_obj.remarks, requested_by=request_obj.sent_by) - - elif request_obj.role == "AD": - if reply: - - ## here we look for requests that less or similar => requesting for DV or MG or AD and make them invalid - ## also we drop a notification to user who made request - active_requests = request_obj.replied_by.request_sent_to.filter(is_valid=True,is_replied=False) - pending_requests = active_requests.filter(role="DV") | active_requests.filter(role="MG") | active_requests.filter(role="AD") - for req in pending_requests: - req.is_valid = False - req.save() - create_notification(role = req.role, sent_to = req.sent_by, sent_from = replied_by, reply = False, \ - remarks = "User has accepted a similar request and has rights same or higher privileged than the request", \ - requested_by = req.sent_by ) - ## tell all the AD - alerting_users = Profile.objects.filter(user__is_active=True).filter(rights="AD") - for a_profile in alerting_users: - create_notification(request_obj.role, a_profile.user, request_obj.replied_by, reply, requested_by=request_obj.sent_by) - - ## drop a welcome message to that fucker - create_notification("NA", request_obj.replied_by, requested_by=request_obj.sent_by) - changeRole(role=request_obj.role, user=request_obj.replied_by) - - else: - create_notification(request_obj.role, request_obj.sent_by, request_obj.replied_by, reply, remarks=request_obj.remarks, requested_by=request_obj.sent_by) - - return True #Reply has been added successfully - return False #Already replied