def METHOD_NAME(self, user, no_scaling=False):
    total_points = 0
    tc_max_points = self.target_category_maxpoints
    max_points = self.max_points
    if tc_max_points == 0:
        return None
    timing, _d1 = self.get_timing([user.userprofile],timezone.now())
    if timing in (
        self.TIMING.CLOSED_AFTER,
        self.TIMING.ARCHIVED,
        self.TIMING.CLOSED_BEFORE,
        self.TIMING.UNOFFICIAL,
    ):
        return None
    for exercise in self.exercises:
        summary = UserExerciseSummary(exercise, user)
        if summary.best_submission is not None:
            total_points += summary.best_submission.grade
    if timing == self.TIMING.LATE:
        total_points = round(total_points * (1 - self.course_module.late_submission_penalty))
    if tc_max_points == max_points or no_scaling:
        return total_points
    total_points = total_points / (tc_max_points / max_points)
    return total_points