def send_reminders_for_servicedesk(*args, **kwargs): manager_obj = User.objects.get(groups__name="sdm") time = datetime.now() """ send mail when reminder_date is less than current date or when due date is less than current date """ brand = kwargs.get("brand", None) feedback_obj = get_model("Feedback", brand).objects.filter( reminder_date__lte=time, reminder_flag=False ) or get_model("Feedback", brand).objects.filter(due_date__lte=time, resolution_flag=False) for feedback in feedback_obj: if not feedback.reminder_flag: context = utils.create_context("DUE_DATE_EXCEEDED_MAIL_TO_AGENT", feedback) send_due_date_reminder(context, feedback.assignee.user_profile.user.email) context = utils.create_context("DUE_DATE_REMINDER_MAIL_TO_MANAGER", feedback) send_due_date_reminder(context, manager_obj.email) feedback.reminder_flag = False if not feedback.resolution_flag: context = utils.create_context("DUE_DATE_EXCEEDED_MAIL_TO_MANAGER", feedback) escalation_list = get_model("UserProfile", brand).objects.filter(user__groups__name=Roles.SDESCALATION) escalation_list_detail = utils.get_escalation_mailing_list(escalation_list) send_due_date_exceeded(context, escalation_list_detail["mail"]) for phone_number in escalation_list_detail["sms"]: send_sms("DUE_DATE_EXCEEDED_ESCALATION", phone_number, feedback, brand) feedback.resolution_flag = False feedback.save()
def create_feedback(sms_dict, phone_number, email, name, dealer_email, with_detail=False): ''' Save the feedback or complain from SA and sends SMS for successfully receive ''' manager_obj = User.objects.get(groups__name=Roles.SDMANAGERS) try: servicedesk_user = create_servicedesk_user(name, phone_number, email) if with_detail: gladminds_feedback_object = models.Feedback(reporter=servicedesk_user, type=sms_dict['type'], summary=sms_dict['summary'], description=sms_dict['description'], status="Open", created_date=datetime.datetime.now() ) else: gladminds_feedback_object = models.Feedback(reporter=servicedesk_user, message=sms_dict['message'], status="Open", created_date=datetime.datetime.now() ) gladminds_feedback_object.save() if sms_dict['file_location']: file_obj = sms_dict['file_location'] filename_prefix = gladminds_feedback_object.id filename_suffix = str(uuid.uuid4()) ext = file_obj.name.split('.')[-1] file_obj.name = 'GM'+str(filename_prefix)+'_'+'_'+filename_suffix+'.'+ext destination = settings.SDFILE_DIR.format(settings.ENV) bucket = settings.SDFILE_BUCKET path = utils.upload_file(destination, bucket, file_obj, logger_msg="SDFile") gladminds_feedback_object.file_location = path gladminds_feedback_object.save() message = templates.get_template('SEND_RCV_FEEDBACK').format(type=gladminds_feedback_object.type) except Exception as ex: LOG.error(ex) message = templates.get_template('SEND_INVALID_MESSAGE') finally: LOG.info("Send complain message received successfully with %s" % message) if phone_number: 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}) if dealer_email: context = utils.create_context('FEEDBACK_DETAIL_TO_DEALER', gladminds_feedback_object) send_dealer_feedback(context, dealer_email) context = utils.create_context('FEEDBACK_DETAIL_TO_ADIM', gladminds_feedback_object) send_feedback_received(context, manager_obj.email) context = utils.create_context('FEEDBACK_CONFIRMATION', gladminds_feedback_object) send_servicedesk_feedback(context, get_reporter_details(gladminds_feedback_object.reporter, "email")) 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
def send_mail_to_dealer(feedback_obj, email_id, template): context = create_context(template, feedback_obj) mail.send_email_to_dealer_after_issue_assigned(context, email_id)
def send_mail_to_reporter(reporter_email_id, feedback_obj, template): context = create_context(template, feedback_obj) mail.send_email_to_initiator_when_due_date_is_changed(context, reporter_email_id)
def create_feedback(sms_dict, phone_number, email, name, dealer_email, user, with_detail=False): ''' Save the feedback or complain from SA and sends SMS for successfully receive ''' manager_obj = User.objects.get(groups__name=Roles.SDMANAGERS) try: servicedesk_user = create_servicedesk_user(name, phone_number, email) sub_category = get_model('DepartmentSubCategories').objects.get(id=sms_dict['sub-department']) if json.loads(sms_dict['sub-department-assignee']): sub_department_assignee = get_model('ServiceDeskUser').objects.filter(id=sms_dict['sub-department-assignee']) else: sub_department_assignee = '' if len(sub_department_assignee)>0: gladminds_feedback_object = get_model('Feedback')(reporter=servicedesk_user, type=sms_dict['type'], summary=sms_dict['summary'], description=sms_dict['description'], status="Open", created_date=datetime.datetime.now(), priority=sms_dict['priority'], sub_department = sub_category, assignee=sub_department_assignee[0] ) else: gladminds_feedback_object = get_model('Feedback')(reporter=servicedesk_user, type=sms_dict['type'], summary=sms_dict['summary'], description=sms_dict['description'], status="Open", created_date=datetime.datetime.now(), priority=sms_dict['priority'], sub_department = sub_category ) gladminds_feedback_object.save(using=settings.BRAND) update_feedback_activities(gladminds_feedback_object, SDActions.STATUS, None, gladminds_feedback_object.status, user) if gladminds_feedback_object.assignee: date = set_due_date(sms_dict['priority'], gladminds_feedback_object) gladminds_feedback_object.due_date = date['due_date'] gladminds_feedback_object.reminder_date = date['reminder_date'] gladminds_feedback_object.save(using=settings.BRAND) if sms_dict['file_location']: file_obj = sms_dict['file_location'] filename_prefix = gladminds_feedback_object.id filename_suffix = str(uuid.uuid4()) ext = file_obj.name.split('.')[-1] file_obj.name = 'GM'+str(filename_prefix)+'_'+'_'+filename_suffix+'.'+ext destination = settings.SDFILE_DIR.format(settings.ENV) bucket = settings.SDFILE_BUCKET path = utils.upload_file(destination, bucket, file_obj, logger_msg="SDFile") gladminds_feedback_object.file_location = path gladminds_feedback_object.save(using=settings.BRAND) message = templates.get_template('SEND_RCV_FEEDBACK').format(type="feedback") except Exception as ex: LOG.error(ex) message = templates.get_template('SEND_INVALID_MESSAGE') finally: LOG.info("Send complain message received successfully with %s" % message) if phone_number: phone_number = utils.get_phone_number_format(phone_number) sms_log(settings.BRAND, receiver=phone_number, action=AUDIT_ACTION, message=message) LOG.info("[create_feedback]: {0}".format(settings.SMS_CLIENT)) send_job_to_queue(send_servicedesk_feedback_detail, {"phone_number":phone_number, "message":message, "sms_client":settings.SMS_CLIENT}) if dealer_email: context = utils.create_context('FEEDBACK_DETAIL_TO_DEALER', gladminds_feedback_object) send_dealer_feedback(context, dealer_email) context = utils.create_context('FEEDBACK_DETAIL_TO_ADIM', gladminds_feedback_object) send_feedback_received(context, manager_obj.email) context = utils.create_context('FEEDBACK_CONFIRMATION', gladminds_feedback_object) send_servicedesk_feedback(context, get_reporter_details(gladminds_feedback_object.reporter, "email")) return {'status': True, 'message': message}