def create_context(email_template_name, feedback_obj, comment_obj=None): ''' feedback due date not defined when ticket is created''' if comment_obj: comment = comment_obj.comment else: comment = "" created_date = convert_utc_to_local_time(feedback_obj.created_date, True) try: assignee = feedback_obj.assignee.user_profile.user.username except: assignee = "" try: due_date = feedback_obj.due_date.strftime(DATE_FORMAT) except: due_date = "" if settings.BRAND == 'bajaj': type = feedback_obj.type else: type = "feedback" data = get_email_template(email_template_name, settings.BRAND) data['newsubject'] = data['subject'].format(id = feedback_obj.id) data['content'] = data['body'].format(id=feedback_obj.id, type = type, reporter = feedback_obj.reporter.user_profile.user.username, message = feedback_obj.description, created_date = created_date, assign_to = assignee , priority = feedback_obj.priority, comment = comment, root_cause = feedback_obj.root_cause, resolution = feedback_obj.resolution, due_date = due_date, resolution_time=total_time_spent(feedback_obj)) return data
def format_product_object(product_obj): purchase_date = convert_utc_to_local_time(product_obj.purchase_date).strftime('%d/%m/%Y') return {'id': product_obj.customer_id, 'phone': get_phone_number_format(str(product_obj.customer_phone_number)), 'name': product_obj.customer_name, 'purchased': purchase_date, 'vin': product_obj.product_id}
def set_wait_time(feedback_data): start_date = feedback_data.pending_from end_date = datetime.datetime.now() start_date = convert_utc_to_local_time(start_date) start_date = start_date.strftime(TIME_FORMAT) end_date = end_date.strftime(TIME_FORMAT) start_date = datetime.datetime.strptime(start_date, TIME_FORMAT) end_date = datetime.datetime.strptime(end_date, TIME_FORMAT) wait = end_date - start_date wait_time = wait.total_seconds() previous_wait = feedback_data.wait_time get_model('Feedback').objects.filter(id = feedback_data.id).update(wait_time = wait_time+previous_wait)
def total_time_spent(feedback_obj): wait_time = feedback_obj.wait_time if feedback_obj.resolved_date: start_date = convert_utc_to_local_time(feedback_obj.created_date) end_date = feedback_obj.resolved_date start_date, end_date = get_start_and_end_date(start_date, end_date, TIME_FORMAT) wait = end_date - start_date wait_time = wait.total_seconds() wait_time = wait_time - feedback_obj.wait_time minutes, seconds = divmod(wait_time, 60) hours, minutes = divmod(minutes, 60) days, hours = divmod(hours, 24) weeks, days = divmod(days, 7) return " {0} days ,{1}:{2}:{3}" .format(int(days),int(hours),int(minutes),int(seconds))
def send_feedback_sms(template_name, phone_number, feedback_obj, comment_obj=None): created_date = convert_utc_to_local_time(feedback_obj.created_date) try: message = templates.get_template(template_name).format( type=feedback_obj.type, reporter=feedback_obj.reporter, message=feedback_obj.message, created_date=created_date, assign_to=feedback_obj.assign_to, priority=feedback_obj.priority) if comment_obj and template_name == 'SEND_MSG_TO_ASSIGNEE': message = message + 'Note :' + comment_obj.comments except Exception as ex: message = templates.get_template('SEND_INVALID_MESSAGE') finally: LOG.info("Send complain message received successfully with {0}".format(message)) phone_number = utils.get_phone_number_format(phone_number) sms_log(settings.BRAND, receiver=phone_number, action=AUDIT_ACTION, message=message) send_job_to_queue(send_servicedesk_feedback_detail, {"phone_number":phone_number, "message":message, "sms_client":settings.SMS_CLIENT}) return {'status': True, 'message': message}
def send_sms(template_name, phone_number, feedback_obj, comment_obj=None, brand=None): created_date = convert_utc_to_local_time(feedback_obj.created_date, True) try: assignee = feedback_obj.assignee.user_profile.user.username except: assignee = "" try: due_date = feedback_obj.due_date.strftime(DATE_FORMAT) except: due_date = "" reporter = None try: if feedback_obj.reporter: reporter = feedback_obj.reporter.user_profile message = templates.get_template(template_name, brand).format( type=feedback_obj.type, reporter=reporter, message=feedback_obj.description, created_date=created_date, assign_to=assignee, priority=feedback_obj.priority, due_date=due_date, id=feedback_obj.id, ) if comment_obj and template_name == "SEND_MSG_TO_ASSIGNEE": message = message + "Note :" + comment_obj.comment except Exception as ex: logger.info("send_sms: {0}".format(ex)) message = templates.get_template("SEND_INVALID_MESSAGE", brand) finally: logger.info("Send complain message received successfully with %s" % message) phone_number = utils.get_phone_number_format(phone_number) sms_log(brand, receiver=phone_number, action=AUDIT_ACTION, message=message) send_job_to_queue( send_servicedesk_feedback_detail, {"phone_number": phone_number, "message": message, "sms_client": settings.SMS_CLIENT}, ) return {"status": True, "message": message}
def modify_feedback(feedback_obj, data, user, host): try: status = get_list_from_set(FEEDBACK_STATUS) comment_object = None assign_status = False pending_status = False reporter_email_id = get_reporter_details(feedback_obj.reporter, "email") reporter_phone_number = get_reporter_details(feedback_obj.reporter) previous_status = feedback_obj.status dealer_asc_obj = get_dealer_asc_email(feedback_obj) # check if status is pending if feedback_obj.status == status[4]: pending_status = True if feedback_obj.assignee: assign_number = feedback_obj.assignee.user_profile.phone_number else: assign_number = None assign = feedback_obj.assignee if data['status'] == status[0] and previous_status == (status[1] or status[2]): feedback_obj.fcr = False if feedback_obj.due_date: due_date = convert_utc_to_local_time(feedback_obj.due_date) feedback_obj.due_date = data['due_date'] feedback_obj.due_date = datetime.datetime.strptime(data['due_date'], '%Y-%m-%d %H:%M:%S') feedback_obj.save(using=settings.BRAND) if due_date != feedback_obj.due_date: update_feedback_activities(feedback_obj, SDActions.DUE_DATE, due_date, feedback_obj.due_date, user) if reporter_email_id: send_mail_to_reporter(reporter_email_id, feedback_obj, 'DUE_DATE_MAIL_TO_INITIATOR') else: LOG.info("Reporter emailId not found.") if dealer_asc_obj.user.email: send_mail_to_dealer(feedback_obj, dealer_asc_obj.user.email, 'DUE_DATE_MAIL_TO_DEALER') else: LOG.info("Dealer / Asc emailId not found.") if reporter_phone_number: send_sms('INITIATOR_FEEDBACK_DUE_DATE_CHANGE', reporter_phone_number, feedback_obj) if feedback_obj.priority: priority = feedback_obj.priority feedback_obj.priority = data['Priority'] feedback_obj.save(using=settings.BRAND) if priority != feedback_obj.priority: due_date = feedback_obj.due_date date = set_due_date(data['Priority'], feedback_obj) feedback_obj.due_date = date['due_date'] feedback_obj.reminder_date = date['reminder_date'] feedback_obj.save(using=settings.BRAND) update_feedback_activities(feedback_obj, SDActions.PRIORITY, priority, feedback_obj.priority, user) update_feedback_activities(feedback_obj, SDActions.DUE_DATE, due_date, feedback_obj.due_date, user) if due_date != convert_utc_to_local_time(feedback_obj.due_date): if reporter_email_id: send_mail_to_reporter(reporter_email_id, feedback_obj, 'DUE_DATE_MAIL_TO_INITIATOR') else: LOG.info("Reporter emailId not found.") if dealer_asc_obj.user.email: send_mail_to_dealer(feedback_obj, dealer_asc_obj.user.email, 'DUE_DATE_MAIL_TO_DEALER') else: LOG.info("Dealer / Asc emailId not found.") if reporter_phone_number: send_sms('INITIATOR_FEEDBACK_DUE_DATE_CHANGE', reporter_phone_number, feedback_obj) if assign is None: assign_status = True if data['assign_to'] == '': feedback_obj.status = data['status'] feedback_obj.priority = data['Priority'] feedback_obj.assignee = None else: if json.loads(data.get('reporter_status')): feedback_obj.previous_assignee = feedback_obj.assignee feedback_obj.assign_to_reporter = True feedback_obj.assignee = feedback_obj.reporter else: if data['assign_to'] : servicedesk_user = get_model('ServiceDeskUser').objects.filter(user_profile__user__username=str(data['assign_to'])) feedback_obj.assignee = servicedesk_user[0] feedback_obj.assign_to_reporter = False feedback_obj.status = data['status'] feedback_obj.priority = data['Priority'] # check if status is pending if data['status'] == status[4]: feedback_obj.pending_from = datetime.datetime.now() # check if status is progress if data['status'] == status[3]: if previous_status == 'Pending': feedback_obj.assignee = feedback_obj.previous_assignee # check if status is closed if data['status'] == status[1]: feedback_obj.closed_date = datetime.datetime.now() feedback_obj.save(using=settings.BRAND) if assign_status and feedback_obj.assignee: feedback_obj.previous_assignee = feedback_obj.assignee feedback_obj.assignee_created_date = datetime.datetime.now() date = set_due_date(data['Priority'], feedback_obj) feedback_obj.due_date = date['due_date'] feedback_obj.reminder_date = date['reminder_date'] feedback_obj.save(using=settings.BRAND) update_feedback_activities(feedback_obj, SDActions.STATUS, None, data['status'], user) context = create_context('INITIATOR_FEEDBACK_MAIL_DETAIL', feedback_obj) if reporter_email_id: mail.send_email_to_initiator_after_issue_assigned(context, reporter_email_id) else: LOG.info("Reporter emailId not found.") if dealer_asc_obj.user.email: context = create_context('INITIATOR_FEEDBACK_MAIL_DETAIL_TO_DEALER', feedback_obj) mail.send_email_to_dealer_after_issue_assigned(context, dealer_asc_obj.user.email) else: LOG.info("Dealer / Asc emailId not found.") if reporter_phone_number: send_sms('INITIATOR_FEEDBACK_DETAILS', reporter_phone_number, feedback_obj) if data['comments']: comment_object = get_model('Comment')( comment=data['comments'], user=user, created_date=datetime.datetime.now(), modified_date=datetime.datetime.now(), feedback_object=feedback_obj) comment_object.save(using=settings.BRAND) update_feedback_activities(feedback_obj, SDActions.COMMENT, None, data['comments'], user) # check if status is resolved if feedback_obj.status == status[2]: if previous_status == status[0]: feedback_obj.fcr = True servicedesk_obj_all = User.objects.filter(groups__name=Roles.SDMANAGERS) feedback_obj.resolved_date = datetime.datetime.now() feedback_obj.resolved_date = datetime.datetime.now() feedback_obj.root_cause = data['rootcause'] feedback_obj.resolution = data['resolution'] feedback_obj.save(using=settings.BRAND) comments = get_model('Comment').objects.filter(feedback_object=feedback_obj.id).order_by('-created_date') if reporter_email_id: context = create_context('INITIATOR_FEEDBACK_RESOLVED_MAIL_DETAIL', feedback_obj, comments[0]) mail.send_email_to_initiator_after_issue_resolved(context, feedback_obj, host, reporter_email_id) else: LOG.info("Reporter emailId not found.") if dealer_asc_obj.user.email: context = create_context('FEEDBACK_RESOLVED_MAIL_TO_DEALER', feedback_obj) mail.send_email_to_dealer_after_issue_assigned(context, dealer_asc_obj.user.email) else: LOG.info("Dealer / Asc emailId not found.") context = create_context('TICKET_RESOLVED_DETAIL_TO_BAJAJ', feedback_obj) mail.send_email_to_brand_after_issue_resolved(context) context = create_context('TICKET_RESOLVED_DETAIL_TO_MANAGER', feedback_obj) mail.send_email_to_manager_after_issue_resolved(context, servicedesk_obj_all[0]) if reporter_phone_number: send_sms('INITIATOR_FEEDBACK_STATUS', reporter_phone_number, feedback_obj) if previous_status != feedback_obj.status: update_feedback_activities(feedback_obj, SDActions.STATUS, previous_status, feedback_obj.status, user) if pending_status: set_wait_time(feedback_obj) if feedback_obj.assignee: if assign_number != feedback_obj.assignee.user_profile.phone_number: update_feedback_activities(feedback_obj, SDActions.ASSIGNEE, assign_number, feedback_obj.assignee.user_profile.phone_number, user) context = create_context('ASSIGNEE_FEEDBACK_MAIL_DETAIL', feedback_obj) mail.send_email_to_assignee(context, feedback_obj.assignee.user_profile.user.email) send_sms('SEND_MSG_TO_ASSIGNEE', feedback_obj.assignee.user_profile.phone_number, feedback_obj, comment_object) return True except Exception as ex: exc_type, exc_obj, exc_tb = sys.exc_info() fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1] error = "{0} {1} {2}".format(exc_type, fname, exc_tb.tb_lineno) LOG.error('Exception while modifying ticket details : {0} {1}'.format(ex, error)) return False