def update_unit_mark(db, unit, user, threshold, new_mark_unit=None, new_mark_normalized_unit=None): from moocng.courses.marks import calculate_unit_mark if not new_mark_unit or not new_mark_normalized_unit: new_mark_unit, new_mark_normalized_unit, use_unit_in_total = calculate_unit_mark(unit, user) if not use_unit_in_total: return (False, False) data_unit = {} data_unit['user_id'] = user.pk data_unit['course_id'] = unit.course_id data_unit['unit_id'] = unit.pk marks_unit = db.get_collection('marks_unit') mark_unit_item = marks_unit.find_one(data_unit) if mark_unit_item: updated_unit_mark = (new_mark_unit != mark_unit_item['mark'] or new_mark_normalized_unit != mark_unit_item['relative_mark']) if updated_unit_mark: marks_unit.update( data_unit, {'$set': {'mark': new_mark_unit, 'relative_mark': new_mark_normalized_unit}}, safe=True ) else: updated_unit_mark = True data_unit['mark'] = new_mark_unit data_unit['relative_mark'] = new_mark_normalized_unit marks_unit.insert(data_unit) return updated_unit_mark, has_passed_now(new_mark_unit, mark_unit_item, threshold)
def update_mark(submitted): from moocng.courses.marks import calculate_kq_mark, calculate_unit_mark, calculate_course_mark updated_kq_mark = updated_unit_mark = updated_course_mark = False passed_kq = passed_unit = passed_course = False kq = KnowledgeQuantum.objects.get(pk=submitted['kq_id']) unit = kq.unit course = kq.unit.course user = User.objects.get(pk=submitted['user_id']) mark_kq, mark_normalized_kq = calculate_kq_mark(kq, user) db = get_db() # KQ updated_kq_mark, passed_kq = update_kq_mark(db, kq, user, course.threshold, new_mark_kq=mark_kq, new_mark_normalized_kq=mark_normalized_kq) # UNIT if not updated_kq_mark: return (updated_kq_mark, updated_unit_mark, updated_course_mark, passed_kq, passed_unit, passed_course) mark_unit, mark_normalized_unit = calculate_unit_mark(kq.unit, user) updated_unit_mark, passed_unit = update_unit_mark(db, unit, user, course.threshold, new_mark_unit=mark_unit, new_mark_normalized_unit=mark_normalized_unit) # COURSE if not updated_unit_mark: return (updated_kq_mark, updated_unit_mark, updated_course_mark, passed_kq, passed_unit, passed_course) mark_course, units_info = calculate_course_mark(unit.course, user) updated_course_mark, passed_course = update_course_mark(db, course, user, mark_course) return (updated_kq_mark, updated_unit_mark, updated_course_mark, passed_kq, passed_unit, passed_course)
def update_unit_mark(db, unit, user, threshold, new_mark_unit=None, new_mark_normalized_unit=None): from moocng.courses.marks import calculate_unit_mark if not new_mark_unit or not new_mark_normalized_unit: new_mark_unit, new_mark_normalized_unit = calculate_unit_mark(unit, user) data_unit = {} data_unit['user_id'] = user.pk data_unit['course_id'] = unit.course_id data_unit['unit_id'] = unit.pk marks_unit = db.get_collection('marks_unit') mark_unit_item = marks_unit.find_one(data_unit) if mark_unit_item: updated_unit_mark = (new_mark_unit != mark_unit_item['mark'] or new_mark_normalized_unit != mark_unit_item['relative_mark']) if updated_unit_mark: marks_unit.update( data_unit, {'$set': {'mark': new_mark_unit, 'relative_mark': new_mark_normalized_unit}}, safe=True ) else: updated_unit_mark = True data_unit['mark'] = new_mark_unit data_unit['relative_mark'] = new_mark_normalized_unit marks_unit.insert(data_unit) # check if user completed this unit unit_kqs = unit.knowledgequantum_set.all() completed = True for kq in unit_kqs: if not kq.is_completed(user): completed = False today = date.today() if completed: # badge unique unit badges = BadgeByCourse.objects.filter(course_id=unit.course_id, criteria_type=2, criteria=unit.id) for badge in badges: win = False if(badge.note <= new_mark_unit): gotBadge = get_db().get_collection('badge').find_one({'id_badge': badge.id, "id_user": user.pk}) if(not gotBadge): get_db().get_collection('badge').insert({"id_badge":badge.id, "id_user":user.pk, "title":badge.title, "description":badge.description, "color":badge.color, "date": today.isoformat()}) return updated_unit_mark, has_passed_now(new_mark_unit, mark_unit_item, threshold)
def update_mark(submitted): from moocng.courses.marks import calculate_kq_mark, calculate_unit_mark, calculate_course_mark updated_kq_mark = updated_unit_mark = updated_course_mark = False passed_kq = passed_unit = passed_course = False kq = KnowledgeQuantum.objects.get(pk=submitted['kq_id']) unit = kq.unit course = kq.unit.course user = User.objects.get(pk=submitted['user_id']) mark_kq, mark_normalized_kq = calculate_kq_mark(kq, user) db = get_db() # KQ updated_kq_mark, passed_kq = update_kq_mark( db, kq, user, course.threshold, new_mark_kq=mark_kq, new_mark_normalized_kq=mark_normalized_kq) # UNIT if not updated_kq_mark: return (updated_kq_mark, updated_unit_mark, updated_course_mark, passed_kq, passed_unit, passed_course) mark_unit, mark_normalized_unit = calculate_unit_mark(kq.unit, user) updated_unit_mark, passed_unit = update_unit_mark( db, unit, user, course.threshold, new_mark_unit=mark_unit, new_mark_normalized_unit=mark_normalized_unit) # COURSE if not updated_unit_mark: return (updated_kq_mark, updated_unit_mark, updated_course_mark, passed_kq, passed_unit, passed_course) mark_course, units_info = calculate_course_mark(unit.course, user) updated_course_mark, passed_course = update_course_mark( db, course, user, mark_course) return (updated_kq_mark, updated_unit_mark, updated_course_mark, passed_kq, passed_unit, passed_course)
def update_unit_mark(db, unit, user, threshold, new_mark_unit=None, new_mark_normalized_unit=None): from moocng.courses.marks import calculate_unit_mark if not new_mark_unit or not new_mark_normalized_unit: new_mark_unit, new_mark_normalized_unit = calculate_unit_mark( unit, user) data_unit = {} data_unit['user_id'] = user.pk data_unit['course_id'] = unit.course_id data_unit['unit_id'] = unit.pk marks_unit = db.get_collection('marks_unit') mark_unit_item = marks_unit.find_one(data_unit) if mark_unit_item: updated_unit_mark = ( new_mark_unit != mark_unit_item['mark'] or new_mark_normalized_unit != mark_unit_item['relative_mark']) if updated_unit_mark: marks_unit.update(data_unit, { '$set': { 'mark': new_mark_unit, 'relative_mark': new_mark_normalized_unit } }, safe=True) else: updated_unit_mark = True data_unit['mark'] = new_mark_unit data_unit['relative_mark'] = new_mark_normalized_unit marks_unit.insert(data_unit) return updated_unit_mark, has_passed_now(new_mark_unit, mark_unit_item, threshold)