def close_request(request_id, reason = "", user_id = None): req = get_obj("Request", request_id) change_request_status(request_id, "Closed") # Create a note to capture closed information: create_note(request_id, reason, user_id) generate_prr_emails(request_id = request_id, notification_type = "Request closed") add_staff_participant(request_id = request_id, user_id = user_id)
def request_extension(request_id, extension_reasons, user_id): req = Request.query.get(request_id) req.extension() text = "Request extended:" for reason in extension_reasons: text = text + reason + "</br>" add_staff_participant(request_id = request_id, user_id = user_id) return add_note(request_id = request_id, text = text, user_id = user_id, passed_spam_filter = True) # Bypass spam filter because they are logged in.
def add_link(request_id, url, description, user_id): """ Creates a record with link attributes """ record_id = create_record(url = url, request_id = request_id, user_id = user_id, description = description) if record_id: change_request_status(request_id, "A response has been added.") generate_prr_emails(request_id = request_id, notification_type = "City response added") add_staff_participant(request_id = request_id, user_id = user_id) return record_id return False
def add_offline_record(request_id, description, access, user_id): """ Creates a record with offline attributes """ record_id = create_record(request_id = request_id, user_id = user_id, access = access, description = description) # To create an offline record, we need to know the request ID to which it will be added, the user ID for the person adding the record, how it can be accessed, and a description/title of the record. if record_id: change_request_status(request_id, "A response has been added.") generate_prr_emails(request_id = request_id, notification_type = "City response added") add_staff_participant(request_id = request_id, user_id = user_id) return record_id return False
def ask_a_question(request_id, user_id, question): """ City staff can ask a question about a request they are confused about.""" req = get_obj("Request", request_id) qa_id = create_QA(request_id = request_id, question = question, user_id = user_id) if qa_id: change_request_status(request_id, "Pending") requester = req.requester() if requester: generate_prr_emails(request_id, notification_type = "Question asked", user_id = requester.user_id) add_staff_participant(request_id = request_id, user_id = user_id) return qa_id return False
def add_note(request_id, text, user_id = None, passed_spam_filter = False): if not text or text == "" or (not passed_spam_filter): return False note_id = create_note(request_id = request_id, text = text, user_id = user_id) if note_id: change_request_status(request_id, "A response has been added.") if user_id: add_staff_participant(request_id = request_id, user_id = user_id) generate_prr_emails(request_id = request_id, notification_type = "City response added") else: generate_prr_emails(request_id = request_id, notification_type = "Public note added") return note_id return False
def add_resource(resource, request_body, current_user_id = None): fields = request_body if "extension" in resource: if not fields.getlist('extend_reason') and not fields.getlist('extend_reasons'): return "You must select a reason for the extension." return request_extension(int(fields['request_id']), fields.getlist('extend_reason'), current_user_id) if "note" in resource: return add_note(request_id = int(fields['request_id']), text = fields['note_text'], user_id = current_user_id, passed_spam_filter = True) # Bypass spam filter because they are logged in. elif "record" in resource: if fields['record_description'] == "": return "When uploading a record, please fill out the 'summary' field." if 'record_access' in fields and fields['record_access'] != "": return add_offline_record(int(fields['request_id']), fields['record_description'], fields['record_access'], current_user_id) elif 'link_url' in fields and fields['link_url'] != "": return add_link(request_id = int(fields['request_id']), url = fields['link_url'], description = fields['record_description'], user_id = current_user_id) # else: # document = None # try: # document = request.files['record'] # except: # app.logger.info("\n\nNo file passed in") # return upload_record(request_id = int(fields['request_id']), document = document, description = fields['record_description'], user_id = current_user_id) elif "qa" in resource: return ask_a_question(request_id = int(fields['request_id']), user_id = current_user_id, question = fields['question_text']) elif "owner" in resource: participant_id, new = add_staff_participant(request_id = fields['request_id'], email = fields['owner_email'], reason = fields['owner_reason']) if new: generate_prr_emails(request_id = fields['request_id'], notification_type = "Staff participant added", user_id = get_attribute("user_id", obj_id = participant_id, obj_type = "Owner")) return participant_id elif "subscriber" in resource: return add_subscriber(request_id=fields['request_id'], email = fields['follow_email']) else: return False
def upload_record(request_id, description, user_id, document = None): """ Creates a record with upload/download attributes """ try: doc_id, filename = scribd_helpers.upload_file(document = document, request_id = request_id) except: return "The upload timed out, please try again." if doc_id == False: return "Extension type '%s' is not allowed." % filename else: if str(doc_id).isdigit(): record_id = create_record(doc_id = doc_id, request_id = request_id, user_id = user_id, description = description, filename = filename, url = app.config['HOST_URL'] + doc_id) change_request_status(request_id, "A response has been added.") generate_prr_emails(request_id = request_id, notification_type = "City response added") add_staff_participant(request_id = request_id, user_id = user_id) return record_id return "There was an issue with your upload."
def assign_owner(request_id, reason, email=None): """ Called any time a new owner is assigned. This will overwrite the current owner.""" req = get_obj("Request", request_id) past_owner_id = None # If there is already an owner, unassign them: if req.point_person(): past_owner_id = req.point_person().id past_owner = get_obj("Owner", req.point_person().id) update_obj(attribute="is_point_person", val=False, obj=past_owner) owner_id, is_new_owner = add_staff_participant(request_id=request_id, reason=reason, email=email, is_point_person=True) if (past_owner_id == owner_id ): # Already the current owner, so don't send any e-mails return owner_id app.logger.info("\n\nA new owner has been assigned: Owner: %s" % owner_id) new_owner = get_obj("Owner", owner_id) # Update the associated department on request update_obj(attribute="department_id", val=new_owner.user.department, obj=req) user_id = get_attribute(attribute="user_id", obj_id=owner_id, obj_type="Owner") # Send notifications if is_new_owner: generate_prr_emails(request_id=request_id, notification_type="Request assigned", user_id=user_id) return owner_id
def upload_record(request_id, description, user_id, document=None): """ Creates a record with upload/download attributes """ try: doc_id, filename = scribd_helpers.upload_file(document=document, request_id=request_id) except: return "The upload timed out, please try again." if doc_id == False: return "Extension type '%s' is not allowed." % filename else: if str(doc_id).isdigit(): record_id = create_record(doc_id=doc_id, request_id=request_id, user_id=user_id, description=description, filename=filename, url=app.config['HOST_URL'] + doc_id) change_request_status(request_id, "A response has been added.") generate_prr_emails(request_id=request_id, notification_type="City response added") add_staff_participant(request_id=request_id, user_id=user_id) return record_id return "There was an issue with your upload."
def assign_owner(request_id, reason, email = None): """ Called any time a new owner is assigned. This will overwrite the current owner.""" req = get_obj("Request", request_id) past_owner_id = None # If there is already an owner, unassign them: if req.point_person(): past_owner_id = req.point_person().id past_owner = get_obj("Owner", req.point_person().id) update_obj(attribute = "is_point_person", val = False, obj = past_owner) owner_id, is_new_owner = add_staff_participant(request_id = request_id, reason = reason, email = email, is_point_person = True) if (past_owner_id == owner_id): # Already the current owner, so don't send any e-mails return owner_id app.logger.info("\n\nA new owner has been assigned: Owner: %s" % owner_id) new_owner = get_obj("Owner", owner_id) # Update the associated department on request update_obj(attribute = "department_id", val = new_owner.user.department_id, obj = req) user_id = get_attribute(attribute = "user_id", obj_id = owner_id, obj_type = "Owner") # Send notifications if is_new_owner: generate_prr_emails(request_id = request_id, notification_type = "Request assigned", user_id = user_id) return owner_id
def close_request_spam(user_id, request_id, reason = "This is spam"): req = get_obj("Request", request_id) change_request_status(request_id, "Closed") # Create a note to capture closed information: create_note(request_id, reason, user_id) add_staff_participant(request_id = request_id, user_id = user_id)