Exemplo n.º 1
0
def survey_list_json(request, survey_type):
    start_str = request.GET.get('start', '0')
    limit_str = request.GET.get('limit', '1')
    start = int(start_str)
    limit = int(limit_str)
    survey_type_int = int(survey_type)
    end = start + limit
    objects = SurveySettings.objects(
        survey_type=survey_type_int).order_by("-_id")[start:end]
    rows = objects_to_array(objects)
    for key in range(0, len(rows)):
        row = rows[key]
        if 'publishTime' in row.keys():
            if row["publishTime"] is None:
                rows[key]["state"] = '未发布'
            else:
                rows[key]["state"] = '已发布'
                if 'endTime' in row.keys():
                    if row["endTime"] is not None:
                        rows[key]["state"] = '已结束'
        else:
            rows[key]["state"] = '未发布'

    num = SurveySettings.objects(survey_type=survey_type_int).count()
    data = {"success": True, "message": "", "rows": rows, "total": num}
    return success(data)
Exemplo n.º 2
0
def survey_issue(request):
    message = ''
    success_state = False
    post = request.POST
    _id = post.get('_id', '')
    survey_type = post.get('survey_type', '')
    message2 = ''
    if _id != '' and survey_type != '':
        if survey_type == "1":
            # 课后调研类型时,查询是否存在已经发布的
            survey_old = SurveySettings.objects(
                publish_time__ne=None, end_time=None,
                survey_type=survey_type).limit(1)
            if survey_old:
                message = '请结束已经发布的调研'

        if message == "":
            object_id = ObjectId(_id)
            survey = SurveySettings.objects(_id=object_id,
                                            survey_type=survey_type).first()
            if survey:
                if survey.publish_time is not None:
                    message = '此调研已发布,请勿重复发布'
                if message == "":
                    # 用户
                    get_user = auth.get_user(request)
                    survey["publish_time"] = datetime.utcnow()
                    if get_user:
                        survey[
                            "user_name"] = get_user.first_name + get_user.last_name  # user.username

                    if survey_type == '0':  # 修改问卷调研班级表
                        survey_courses_obs = SurveyCourses.objects(sid=_id)
                        for survey_course in survey_courses_obs:
                            # 查询当前lessson的id
                            lesson = Lesson.objects(
                                start_time__lte=survey["publish_time"],
                                course_id=survey_course.course_id).order_by(
                                    "-start_time").first()
                            lesson_id = "0"
                            if lesson:
                                lesson_id = lesson.lesson_id
                            if lesson_id is not survey_course.current_lesson_id:
                                survey_course.current_lesson_id = lesson_id
                                # 执行修改
                                survey_course.save()
                                message2 = '执行修改'

                    row_count = survey.save()
                    if row_count > 0:
                        success_state = True
                        message = '发布成功'
            else:
                message = '发布失败,此调研不存在或已删除'

    else:
        message = '参数有误'
    data = {"success": success_state, "message": message, "message2": message2}
    return success(data)
Exemplo n.º 3
0
def survey_end(request):
    message = ''
    success_state = False
    post = request.POST
    _id = post.get('_id', '')

    if _id != '':
        # 查询是否已经结束
        object_id = ObjectId(_id)
        survey_ob = SurveySettings.objects(_id=object_id).first()
        if survey_ob:
            if survey_ob.publish_time is not None:
                if survey_ob.end_time is not None:
                    message = '此调研已经结束'
            else:
                message = '结束调研失败,此调研未发布'
            if message == '':
                survey_ob["end_time"] = datetime.utcnow()
                row_count = survey_ob.save()
                if row_count > 0:
                    success_state = True
                    message = '结束调研成功'
        else:
            message = '结束调研失败,此调研不存在或已删除'
    else:
        message = '参数有误'
    if success_state is False and message == '':
        message = '结束调研失败'
    data = {"success": success_state, "message": message}
    return success(data)
Exemplo n.º 4
0
def results_export_csv(request, survey_id):
    from django.http import HttpResponse
    import csv
    import sys

    response = HttpResponse(content_type='text/csv')
    response[
        'Content-Disposition'] = 'attachment; filename="survey_results.csv"'
    writer = csv.writer(response)

    # 字段标题
    columns = ['userName', 'tel', 'postTime', 'course', 'lesson', 'teacher']
    titles = ["客户", "联系方式", "提交时间", "所在课程", "所在课程讲次", "授课老师"]
    objects = SurveyResults.objects(sid=survey_id)
    rows = objects_to_array(objects)
    _id = ObjectId(survey_id)
    survey_settings = SurveySettings.objects(_id=_id).first()
    if survey_settings:
        questions_array = survey_settings.questions
        for key in range(0, len(questions_array)):
            if "question" in questions_array[key].keys():
                columns.append("questions" + str(key))
                titles.append(questions_array[key]["question"])

    for key in range(0, len(rows)):
        row = rows[key]
        answers_array = row["answers"]
        for key2 in range(0, len(answers_array)):
            value = answers_array[key2]
            if isinstance(value, list):
                value2 = ''
                for key3 in range(0, len(value)):
                    if key3 is not len(value) - 1:
                        value2 += (value[key3] + ",")
                    else:
                        value2 += value[key3]
                rows[key]["questions" + str(key2)] = value2
            else:
                rows[key]["questions" + str(key2)] = value

    reload(sys)
    sys.setdefaultencoding("gb2312")
    writer.writerow(titles)
    for row in rows:
        array = []
        for column in columns:
            value = ''
            if column in row.keys():
                value = row[column]
            array.append(value)
        writer.writerow(array)

    return response
Exemplo n.º 5
0
def results_list_json(request, survey_id):
    message = ''
    start_str = request.GET.get('start', '0')
    limit_str = request.GET.get('limit', '1')
    start = int(start_str)
    limit = int(limit_str)

    end = start + limit
    survey_settings = SurveySettings.objects(_id=ObjectId(survey_id)).first()
    questions = []
    if survey_settings:
        questions_array = survey_settings.questions
        for key in range(0, len(questions_array)):
            if "question" in questions_array[key].keys():
                question = questions_array[key]["question"]
                questions.append({"questions" + str(key): question})

    num = SurveyResults.objects(sid=survey_id).count()
    if num < end:
        end = num
    results_obs = SurveyResults.objects(
        sid=survey_id).order_by("-_id")[start:end]
    # objects = SurveySettings.objects(survey_id=ObjectId(survey_id)).first()
    rows = objects_to_array(results_obs)
    for key in range(0, len(rows)):
        row = rows[key]
        rows[key]["realName"] = Users.get_real_name(row["userName"])
        answers_array = row["answers"]
        for key2 in range(0, len(answers_array)):
            rows[key]["questions" + str(key2)] = answers_array[key2]

    num = SurveyResults.objects(sid=survey_id).count()
    if num == 0:
        message = '无数据'
        success_state = False
    else:
        success_state = True

    data = {
        "success": success_state,
        "message": message,
        "rows": rows,
        "total": num,
        "questions": questions
    }
    return success(data)
Exemplo n.º 6
0
def survey_get(request, survey_type, survey_id):
    message = ''
    success_state = False
    survey_settings = {}
    if survey_id != '':
        _id = ObjectId(survey_id)
        objects = SurveySettings.objects(_id=_id,
                                         survey_type=survey_type).limit(1)
        if objects:
            success_state = True
            survey_settings = objects_to_array(objects)[0]
            if survey_settings["questions"]:
                survey_settings["questions"] = objects_to_array(
                    survey_settings["questions"])
                survey_settings["questionsStr"] = data_to_json(
                    survey_settings["questions"])

            # 获取已选择适用班级
            survey_courses_objects = SurveyCourses.objects(sid=survey_id)
            ssurvey_courses_array = objects_to_array(survey_courses_objects)
            survey_settings["surveyCourses"] = []
            survey_course_data = []
            for key in range(0, len(ssurvey_courses_array)):
                row = ssurvey_courses_array[key]
                if 'courseId' in row.keys():
                    survey_course_obs = Course.objects(
                        course_id=row["courseId"]).limit(1)
                    if survey_course_obs:
                        survey_course = objects_to_array(survey_course_obs)[0]
                        if survey_course:
                            survey_settings["surveyCourses"].append(
                                survey_course["name"])
                            survey_course_data.append(survey_course["id"])

            survey_settings["survey_course"] = data_to_json(survey_course_data)
        else:
            message = "问卷数据查询失败"
    else:
        message = "参数有误"
    data = {
        "success": success_state,
        "data": survey_settings,
        "message": message
    }
    return success(data)
Exemplo n.º 7
0
def survey_destroy(request):
    # message = ''
    success_state = False

    post = request.POST
    _id = post.get('_id', '')
    if _id != '':
        object_id = ObjectId(_id)
        lesson = SurveySettings.objects(_id=object_id).first()
        if lesson:
            lesson.delete()
            success_state = True
            message = '删除成功'
        else:
            message = '删除失败,此讲次不存在'
    else:
        message = '参数有误'

    data = {"success": success_state, "message": message}
    return success(data)
Exemplo n.º 8
0
def results_export(request, survey_id):
    _id = ObjectId(survey_id)
    survey_settings = SurveySettings.objects(_id=_id).first()
    if survey_settings:
        import xlwt

        # 字段标题
        columns = [
            'userName', 'realName', 'tel', 'postTime', 'course', 'lesson',
            'teacher'
        ]
        titles = ["客户", "姓名", "联系方式", "提交时间", "所在课程", "所在课程讲次", "授课老师"]

        objects = SurveyResults.objects(sid=survey_id)
        rows = objects_to_array(objects)
        questions_array = survey_settings.questions
        for key in range(0, len(questions_array)):
            if "question" in questions_array[key].keys():
                columns.append("questions" + str(key))
                titles.append(questions_array[key]["question"])

        for key in range(0, len(rows)):
            row = rows[key]
            rows[key]["realName"] = Users.get_real_name(row["userName"])
            answers_array = row["answers"]
            for key2 in range(0, len(answers_array)):
                value = answers_array[key2]
                if isinstance(value, list):
                    value2 = ''
                    for key3 in range(0, len(value)):
                        if key3 is not len(value) - 1:
                            value2 += (value[key3] + ",")
                        else:
                            value2 += value[key3]
                    rows[key]["questions" + str(key2)] = value2
                else:
                    rows[key]["questions" + str(key2)] = value

        now = get_beijing_time().strftime('%Y-%m-%d %H.%M')
        name = 'attachment; filename="%s--调研结果--%s.xls"' % (
            survey_settings.title, now)

        response = HttpResponse(content_type='application/ms-excel')
        response['Content-Disposition'] = name.encode('cp936')

        wb = xlwt.Workbook()
        ws = wb.add_sheet('调研结果')
        row_x = 0

        # 冻结标题行
        ws.set_panes_frozen(True)
        ws.set_horz_split_pos(row_x + 1)

        head_style = xlwt.easyxf(
            'font: bold on; align: vert centre, horiz center',
            num_format_str='@')

        for col, item in enumerate(titles):
            ws.write(row_x, col, item, head_style)
        row_x += 1
        style = xlwt.easyxf(num_format_str='@')
        for row in rows:
            array = []
            for column in columns:
                value = ''
                if column in row.keys():
                    value = row[column]
                array.append(value)

            for col, item in enumerate(array):
                ws.write(row_x, col, item, style)
            row_x += 1
        wb.save(response)
        return response
    return fail('参数错误')
Exemplo n.º 9
0
def survey_detail_get(request, survey_type, survey_id):
    message = ''
    success_state = False
    survey_settings = {}
    if survey_id != '':
        _id = ObjectId(survey_id)
        objects = SurveySettings.objects(_id=_id,
                                         survey_type=survey_type).limit(1)
        if objects:
            success_state = True

            survey_settings = objects_to_array(objects)[0]
            if 'publishTime' in survey_settings.keys():
                if survey_settings["publishTime"] is None:
                    survey_settings["state"] = '未发布'
                else:
                    survey_settings["state"] = '已发布'
                    if 'endTime' in survey_settings.keys():
                        if survey_settings["endTime"] is not None:
                            survey_settings["state"] = '已结束'
            else:
                survey_settings["state"] = '未发布'

            survey_settings["surveyTypeStr"] = "课中调研"
            if survey_type == '1':
                survey_settings["surveyTypeStr"] = "课后调研"
            survey_settings["questionsStr"] = ''
            if survey_settings["questions"]:
                survey_settings["questions"] = objects_to_array(
                    survey_settings["questions"])
                for key in range(0, len(survey_settings["questions"])):
                    question = survey_settings["questions"][key]
                    options_str = ''
                    option_sc = ["A", "B", "C", "D", "E"]
                    if "option" in question.keys():
                        for i in range(0, len(question["option"])):
                            options_str += (option_sc[i] + '&nbsp;' +
                                            question["option"][i] +
                                            '&nbsp;&nbsp;&nbsp;&nbsp;')
                    survey_settings[
                        "questionsStr"] += """<div class='view_html'><p>{0}、{1}</p>
                    <p class='p_option'>{2}</p></div>""".format(
                            (key + 1), question["question"], options_str)

            # 获取已选择适用班级
            survey_courses_objects = SurveyCourses.objects(sid=survey_id)
            ssurvey_courses_array = objects_to_array(survey_courses_objects)
            survey_settings["surveyCourses"] = []

            for key in range(0, len(ssurvey_courses_array)):
                row = ssurvey_courses_array[key]
                if 'courseId' in row.keys():
                    survey_course_obs = Course.objects(
                        course_id=row["courseId"]).limit(1)
                    if survey_course_obs:
                        survey_course = objects_to_array(survey_course_obs)[0]
                        if survey_course:
                            survey_settings["surveyCourses"].append(
                                survey_course["name"])
        else:
            message = "问卷数据查询失败"
    else:
        message = "参数有误"
    data = {
        "success": success_state,
        "data": survey_settings,
        "message": message
    }
    return success(data)
Exemplo n.º 10
0
def survey_save(request, form):
    message = ''
    success_state = False
    post = request.POST
    # 获取form参数
    # title:调研标题 count:调研次数 surveyType:调研类型(0:课中调研,1:课后调研)questions:问卷中的问题
    title = post.get('title', '')
    count_str = post.get('count', '0')
    questions_str = post.get('questionsStr', '[]')

    count = int(count_str)
    questions = str_to_data(questions_str)

    _id = post.get('_id', '')
    if _id != '':
        object_id = ObjectId(_id)
    else:
        object_id = ObjectId()
    survey = {}

    if _id != '':
        survey = SurveySettings.objects(_id=object_id).first()
        if survey:
            if survey.publish_time is not None:
                message = '已发布的调研不能修改'
        else:
            message = '参数有误'

    if message == '':
        if _id != '':
            message = '修改'
        else:
            message = '添加'

        if survey:
            survey.title = title
            survey.count = count
            survey.questions = questions
        else:
            survey_type_str = post.get('surveyType')
            survey = SurveySettings(_id=object_id,
                                    title=title,
                                    survey_type=int(survey_type_str),
                                    count=count,
                                    questions=questions)

        effect_rows = survey.save()

        if effect_rows > 0:
            # 保存适用班级
            # 班级id
            courses_ids_str = post.get('survey_course', '')
            if courses_ids_str:
                _id = str(object_id)
                effect_rows2 = 0
                course_ids = str_to_data(courses_ids_str)
                survey_courses_ids = []
                # SurveyCourses
                for key in range(0, len(course_ids)):
                    course_id = str(course_ids[key])
                    # 是否已经存在此课程
                    survey_course_old = SurveyCourses.objects(
                        sid=_id, course_id=course_id).limit(1)
                    if not survey_course_old:
                        # 保存
                        survey_courses_id = ObjectId()
                        survey_course = SurveyCourses(_id=survey_courses_id,
                                                      sid=_id,
                                                      course_id=course_id)
                        effect_rows20 = survey_course.save()
                        if effect_rows20 > 0:
                            effect_rows2 += 1
                    else:
                        survey_courses_id = str(survey_course_old[0].id)
                        effect_rows2 += 1

                    survey_courses_ids.append(survey_courses_id)

                if effect_rows2 > 0:  # 班级保存成功
                    not_survey_course = SurveyCourses.objects(
                        course_id__nin=course_ids, sid=_id)
                    # 删除之前的班级
                    if not_survey_course:
                        not_survey_course.delete()

            success_state = True
            message += '成功'
        else:
            message += '失败'

    data = {"success": success_state, "message": message}
    return success(data)