Example #1
0
def send_assestment(student_assessment):

    token = create_token(student_assessment.user, hours_length=48)
    data = {
        "SUBJECT":
        student_assessment.assessment.title,
        "LINK":
        f"https://assessment.breatheco.de/{student_assessment.id}?token={token.key}"
    }
    send_email_message("assessment", student_assessment.user.email, data)

    logger.info(f"Survey was sent for user: {str(student_assessment.user.id)}")

    student_assessment.status = "SENT"
    student_assessment.save()

    return True
    # keep track of sent survays until they get answered


# def answer_survey(user, data):
#     answer = Answer.objects.create(**{ **data, "user": user })

# log = SurveyLog.objects.filter(
#     user__id=user.id,
#     cohort__id=answer.cohort.id,
#     academy__id=answer.academy.id,
#     mentor__id=answer.academy.id
# )
Example #2
0
def send_cohort_survey(self, user_id, survey_id):
    logger.debug("Starting send_cohort_survey")
    survey = Survey.objects.filter(id=survey_id).first()
    if survey is None:
        logger.error("Survey not found")
        return False

    user = User.objects.filter(id=user_id).first()
    if user is None:
        logger.error("User not found")
        return False

    utc_now = timezone.now()
    if utc_now > survey.created_at + survey.duration:
        logger.error("This survey has already expired")
        return False

    cu = CohortUser.objects.filter(cohort=survey.cohort,
                                   role="STUDENT",
                                   user=user).first()
    if cu is None:
        raise ValidationException(
            "This student does not belong to this cohort", 400)

    answers = generate_user_cohort_survey_answers(user, survey, status='SENT')

    has_slackuser = hasattr(user, 'slackuser')
    if not user.email and not has_slackuser:
        message = f'Author not have email and slack, this survey cannot be send by {str(user.id)}'
        logger.info(message)
        raise Exception(message)

    token = create_token(user, hours_length=48)
    data = {
        "SUBJECT": strings[survey.lang]["survey_subject"],
        "MESSAGE": strings[survey.lang]["survey_message"],
        "SURVEY_ID": survey_id,
        "BUTTON": strings[survey.lang]["button_label"],
        "LINK":
        f"https://nps.breatheco.de/survey/{survey_id}?token={token.key}",
    }

    if user.email:
        send_email_message("nps_survey", user.email, data)

    if hasattr(user, 'slackuser') and hasattr(survey.cohort.academy,
                                              'slackteam'):
        send_slack("nps_survey",
                   user.slackuser,
                   survey.cohort.academy.slackteam,
                   data=data)
Example #3
0
def send_assestment(user_assessment):

    token = create_token(user_assessment.user, hours_length=48)
    data = {
        "SUBJECT":
        user_assessment.assessment.title,
        "LINK":
        f"https://assessment.breatheco.de/{user_assessment.id}?token={token.key}"
    }
    send_email_message("assessment", user_assessment.user.email, data)

    logger.info(f"Survey was sent for user: {str(user_assessment.user.id)}")

    user_assessment.status = "SENT"
    user_assessment.save()

    return True
Example #4
0
def send_question(user, cohort=None):
    answer = Answer(user=user)
    if cohort is not None:
        answer.cohort = cohort
    else:
        cohorts = CohortUser.objects.filter(
            user__id=user.id).order_by("-cohort__kickoff_date")
        _count = cohorts.count()
        if _count == 1:
            _cohort = cohorts.first().cohort
            answer.cohort = _cohort

    if answer.cohort is None:
        message = 'Impossible to determine the student cohort, maybe it has more than one, or cero.'
        logger.info(message)
        raise Exception(message)
    else:
        answer.lang = answer.cohort.language
        answer.save()

    has_slackuser = hasattr(user, 'slackuser')

    if not user.email and not has_slackuser:
        message = f'User not have email and slack, this survey cannot be send: {str(user.id)}'
        logger.info(message)
        raise Exception(message)

    # if not answer.cohort.syllabus.certificate.name:
    if not answer.cohort.syllabus:
        message = 'Cohort not have one Syllabus'
        logger.info(message)
        raise Exception(message)

        # if not answer.cohort.syllabus.certificate.name:
    if not answer.cohort.syllabus.certificate:
        message = f'Syllabus not have one Certificate'
        logger.info(message)
        raise Exception(message)

    question_was_sent_previously = Answer.objects.filter(
        cohort=answer.cohort, user=user, status='SENT').count()

    question = build_question(answer)

    if question_was_sent_previously:
        answer = Answer.objects.filter(cohort=answer.cohort,
                                       user=user,
                                       status='SENT').first()
        Token.objects.filter(id=answer.token_id).delete()

    else:
        answer.title = question["title"]
        answer.lowest = question["lowest"]
        answer.highest = question["highest"]
        answer.lang = answer.cohort.language
        answer.save()

    token = create_token(user, hours_length=48)

    token_id = Token.objects.filter(key=token).values_list('id',
                                                           flat=True).first()
    answer.token_id = token_id
    answer.save()

    data = {
        "QUESTION": question['title'],
        "HIGHEST": answer.highest,
        "LOWEST": answer.lowest,
        "SUBJECT": question['title'],
        "ANSWER_ID": answer.id,
        "BUTTON": strings[answer.cohort.language]["button_label"],
        "LINK": f"https://nps.breatheco.de/{answer.id}?token={token.key}",
    }

    if user.email:
        send_email_message("nps", user.email, data)

    if hasattr(user, 'slackuser') and hasattr(answer.cohort.academy,
                                              'slackteam'):
        send_slack("nps",
                   user.slackuser,
                   answer.cohort.academy.slackteam,
                   data=data)

    # keep track of sent survays until they get answered
    if not question_was_sent_previously:
        logger.info(f"Survey was sent for user: {str(user.id)}")
        answer.status = "SENT"
        answer.save()
        return True

    else:
        logger.info(f"Survey was resent for user: {str(user.id)}")
        return True