def get_feedbacks(user, status, priority, type, search=None): feedbacks = [] if type == ALL or type is None: type_filter = get_list_from_set(FEEDBACK_TYPE) else: type_filter = [type] if priority == ALL or priority is None: priority_filter = get_list_from_set(DEMO_PRIORITY) else: priority_filter = [priority] if status is None or status == 'active': status_filter = ['Open', 'Pending', 'In Progress'] else: if status == ALL: status_filter = get_list_from_set(FEEDBACK_STATUS) else: status_filter = [status] sa_id_list = [] if user.groups.filter(name=Roles.DEALERS).exists(): sa_list = get_model('ServiceAdvisor').objects.active_under_dealer(user) if sa_list: for sa in sa_list: sa_id_list.append(sa.service_advisor_id) sa_id_list.append(user) feedbacks = get_model('Feedback').objects.filter(reporter__name__in=sa_id_list, status__in=status_filter, priority__in=priority_filter, type__in=type_filter ).order_by('-created_date') if user.groups.filter(name=Roles.DEALERADMIN).exists(): dealers = get_model('Dealer').objects.all() for dealer in dealers: sa_id_list.append(dealer.dealer_id) sa_id_list.append(user) feedbacks = get_model('Feedback').objects.filter(reporter__name__in=sa_id_list, status__in=status_filter, priority__in=priority_filter, type__in=type_filter ).order_by('-created_date') if user.groups.filter(name=Roles.ASCS).exists(): sa_list = get_model('ServiceAdvisor').objects.active_under_asc(user) sa_id_list = [] if sa_list: for sa in sa_list: sa_id_list.append(sa.service_advisor_id) sa_id_list.append(user) feedbacks = get_model('Feedback').objects.filter(reporter__name__in=sa_id_list, status__in=status_filter, priority__in=priority_filter, type__in=type_filter ).order_by('-created_date') if user.groups.filter(name=Roles.SDMANAGERS).exists(): feedbacks = get_model('Feedback').objects.filter(status__in=status_filter, priority__in=priority_filter, type__in=type_filter).order_by('-created_date') if user.groups.filter(name=Roles.SDOWNERS).exists(): user_profile = get_model('UserProfile').objects.filter(user=user) servicedesk_user = get_model('ServiceDeskUser').objects.filter(user_profile=user_profile[0]) feedbacks = get_model('Feedback').objects.filter(assignee=servicedesk_user[0], status__in=status_filter, priority__in=priority_filter, type__in=type_filter).order_by('-created_date') return feedbacks
def modify_servicedesk_tickets(request, feedback_id): host = get_current_site(request) group_name = request.user.groups.filter(name__in=[Roles.SDMANAGERS, Roles.SDOWNERS, Roles.DEALERS, Roles.ASCS, Roles.SDREADONLY, Roles.FSCADMINS]) status = get_list_from_set(FEEDBACK_STATUS) priority_types = get_list_from_set(PRIORITY) feedback_types = get_list_from_set(FEEDBACK_TYPE) root_cause = get_list_from_set(ROOT_CAUSE) feedback_obj = get_feedback(feedback_id, request.user) servicedesk_users = get_servicedesk_users(designation=[Roles.SDOWNERS,Roles.SDMANAGERS, Roles.SDREADONLY] ) comments = get_comments(feedback_id) if request.method == 'POST': host = request.get_host() modify_feedback(feedback_obj, request.POST, request.user, host) if feedback_obj: return render(request, 'service-desk/ticket_modify.html',\ {"feedback": feedback_obj, "FEEDBACK_STATUS": status,\ "PRIORITY": priority_types,\ "FEEDBACK_TYPE": feedback_types,\ "ROOT_CAUSE" : root_cause,\ "group": group_name[0].name,\ 'servicedeskuser': servicedesk_users,\ 'comments': comments,\ 'user':request.user }) else: return HttpResponseNotFound()
def get_servicedesk_tickets(request): groups = utils.stringify_groups(request.user) status = request.GET.get('status') priority = request.GET.get('priority') type = request.GET.get('type') search = request.GET.get('search') count = request.GET.get('count') or BY_DEFAULT_RECORDS_PER_PAGE page_details = {} feedback_obects = get_feedbacks(request.user, status, priority, type, search) paginator = Paginator(feedback_obects, count) page = request.GET.get('page', 1) feedbacks = paginator.page(page) page_details['total_objects'] = paginator.count page_details['from'] = feedbacks.start_index() page_details['to'] = feedbacks.end_index() training_material = models.Service.objects.filter(service_type__name=Services.SERVICE_DESK) if len(training_material)>0: training_material = training_material[0].training_material_url else: training_material = None return render(request, 'service-desk/tickets.html', {"feedbacks" : feedbacks, "status": utils.get_list_from_set(FEEDBACK_STATUS), "types": utils.get_list_from_set(FEEDBACK_TYPE), "priorities": utils.get_list_from_set(PRIORITY), "pagination_links": PAGINATION_LINKS, "page_details": page_details, "record_showing_counts": RECORDS_PER_PAGE, "training_material" : training_material, "groups":groups[0], "filter_params": {'status': status, 'priority': priority, 'type': type, 'count': str(count), 'search': search}} )
def dehydrate(self, bundle): if PRIORITIES.has_key(settings.BRAND): priority = PRIORITIES[settings.BRAND] else: priority = PRIORITIES['bajaj'] bundle.data['STATUS'] = get_list_from_set(FEEDBACK_STATUS) bundle.data['PRIORITY'] = get_list_from_set(priority) comments = models.Comment.objects.filter(feedback_object=bundle.data['id']) bundle.data['comments'] = [model_to_dict_for_datetime(c) for c in comments] return bundle
def service_desk(request): status = request.GET.get('status') priority = request.GET.get('priority') type = request.GET.get('type') search = request.GET.get('search') count = request.GET.get('count') or BY_DEFAULT_RECORDS_PER_PAGE page_details = {} feedback_obects = get_feedbacks(request.user, status, priority, type, search) paginator = Paginator(feedback_obects, count) page = request.GET.get('page', 1) feedbacks = paginator.page(page) page_details['total_objects'] = paginator.count page_details['from'] = feedbacks.start_index() page_details['to'] = feedbacks.end_index() groups = utils.stringify_groups(request.user) training_material = models.Service.objects.filter(service_type__name=Services.SERVICE_DESK) if len(training_material)>0: training_material = training_material[0].training_material_url else: training_material = None if request.method == 'GET': template = 'service-desk/feedback_details.html' data = None if request.user.groups.filter(name=Roles.DEALERS).exists(): data = models.ServiceAdvisor.objects.active_under_dealer(request.user) else: data = models.ServiceAdvisor.objects.active_under_asc(request.user) dealer_asc_details = models.UserProfile.objects.get(user__username=request.user) return render(request, template, {"feedbacks" : feedbacks, 'active_menu': 'support', "data": data, 'groups': groups, "status": utils.get_list_from_set(FEEDBACK_STATUS), "pagination_links": PAGINATION_LINKS, "page_details": page_details, "record_showing_counts": RECORDS_PER_PAGE, "types": utils.get_list_from_set(FEEDBACK_TYPE), "priorities": utils.get_list_from_set(PRIORITY), "training_material" : training_material, "dealer_asc" : dealer_asc_details, "filter_params": {'status': status, 'priority': priority, 'type': type, 'count': str(count), 'search': search}} ) elif request.method == 'POST': try: data = save_help_desk_data(request) return HttpResponse(content=json.dumps(data), content_type='application/json') except Exception as ex: LOG.error('Exception while saving data : {0}'.format(ex)) return HttpResponseBadRequest() else: return HttpResponseBadRequest()
def service_desk(request): status = request.GET.get('status') priority = request.GET.get('priority') type = request.GET.get('type') search = request.GET.get('search') count = request.GET.get('count') or BY_DEFAULT_RECORDS_PER_PAGE page_details = {} feedback_obects = get_feedbacks(request.user, status, priority, type, search) paginator = Paginator(feedback_obects, count) page = request.GET.get('page', 1) feedbacks = paginator.page(page) page_details['total_objects'] = paginator.count page_details['from'] = feedbacks.start_index() page_details['to'] = feedbacks.end_index() groups = utils.stringify_groups(request.user) brand_departments = get_brand_departments() training_material = get_model('Service').objects.filter(service_type__name=Services.SERVICE_DESK) department_sub_categories= get_subcategories() if len(training_material)>0: training_material = training_material[0].training_material_url else: training_material = None if request.method == 'GET': template = 'portal/feedback_details.html' data = None if request.user.groups.filter(name=Roles.DEALERS).exists(): data = get_model('ServiceAdvisor').objects.active_under_dealer(request.user) else: data = get_model('ServiceAdvisor').objects.active_under_asc(request.user) dealer_asc_details = get_model('UserProfile').objects.get(user__username=request.user) return render(request, template, {"feedbacks" : feedbacks, 'active_menu': 'support', "data": data, 'groups': groups, "status": utils.get_list_from_set(FEEDBACK_STATUS), "pagination_links": PAGINATION_LINKS, "page_details": page_details, "departments": brand_departments, "department_sub_categories" : department_sub_categories, "record_showing_counts": RECORDS_PER_PAGE, "types": utils.get_list_from_set(FEEDBACK_TYPE), "priorities": utils.get_list_from_set(DEMO_PRIORITY), "training_material" : training_material, "dealer_asc" : dealer_asc_details, "filter_params": {'status': status, 'priority': priority, 'type': type, 'count': str(count), 'search': search}} ) else: return HttpResponseBadRequest()
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 test_get_list_from_set(self): data = get_list_from_set(FEEDBACK_TYPE) self.assertEqual(len(data), 4) data = get_list_from_set(PRIORITY) self.assertEqual(len(data), 4)