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)