def redemption_request_due_date_escalation(*args, **kwargs):
    time = datetime.now()
    """
    send mail when due date is less than current date for redemption request
    """
    brand = kwargs.get("brand", None)
    args = [Q(due_date__lte=time), Q(resolution_flag=False), ~Q(status="Delivered")]
    redemption_request_obj = get_model("RedemptionRequest", brand).objects.filter(reduce(operator.and_, args))
    for redemption_request in redemption_request_obj:
        data = get_email_template("REDEMPTION_REQUEST_DUE_DATE_EXCEED_MAIL_TO_MANAGER", brand)
        data["newsubject"] = data["subject"].format(id=redemption_request.transaction_id)
        data["content"] = data["body"].format(
            transaction_id=redemption_request.transaction_id, status=redemption_request.status
        )
        escalation_list = get_model("UserProfile", brand).objects.filter(user__groups__name=Roles.REDEEMESCALATION)
        escalation_list_detail = utils.get_escalation_mailing_list(escalation_list)
        send_email_to_redeem_escaltion_group(data, escalation_list_detail)

        message = templates.get_template("LOYALTY_DUE_DATE_EXCEED_ESCALATION", brand).format(
            transaction_id=redemption_request.transaction_id, status=redemption_request.status
        )
        for phone_number in escalation_list_detail["sms"]:
            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_loyalty_escalation_message,
                {"phone_number": phone_number, "message": message, "sms_client": settings.SMS_CLIENT},
            )
        redemption_request.resolution_flag = True
        redemption_request.save()
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()