示例#1
0
文件: forms.py 项目: lxp20201/lxp
    def _validate_program(self):
        """
        Verify that selected mode is available for program and all courses in the program
        """
        program = self.cleaned_data.get(self.Fields.PROGRAM)
        if not program:
            return

        course_runs = get_course_runs_from_program(program)
        try:
            client = CourseCatalogApiClient(self._user,
                                            self._enterprise_customer.site)
            available_modes = client.get_common_course_modes(course_runs)
            course_mode = self.cleaned_data.get(self.Fields.COURSE_MODE)
        except (HttpClientError, HttpServerError):
            raise ValidationError(
                ValidationMessages.FAILED_TO_OBTAIN_COURSE_MODES.format(
                    program_title=program.get("title")))

        if not course_mode:
            raise ValidationError(
                ValidationMessages.COURSE_WITHOUT_COURSE_MODE)
        if course_mode not in available_modes:
            raise ValidationError(
                ValidationMessages.COURSE_MODE_NOT_AVAILABLE.format(
                    mode=course_mode,
                    program_title=program.get("title"),
                    modes=", ".join(available_modes)))
示例#2
0
    def enroll_users_in_program(cls, enterprise_customer, program_details, course_mode, emails):
        """
        Enroll existing users in all courses in a program, and create pending enrollments for nonexisting users.

        Args:
            enterprise_customer: The EnterpriseCustomer which is sponsoring the enrollment
            program_details: The details of the program in which we're enrolling
            course_mode (str): The mode with which we're enrolling in the program
            emails: An iterable of email addresses which need to be enrolled

        Returns:
            successes: A list of users who were successfully enrolled in all courses of the program
            pending: A list of PendingEnterpriseCustomerUsers who were successfully linked and had
                pending enrollments created for them in the database
            failures: A list of users who could not be enrolled in the program
        """
        existing_users, unregistered_emails = cls.get_users_by_email(emails)
        course_ids = get_course_runs_from_program(program_details)

        successes = []
        pending = []
        failures = []

        for user in existing_users:
            succeeded = cls.enroll_user(enterprise_customer, user, course_mode, *course_ids)
            if succeeded:
                successes.append(user)
            else:
                failures.append(user)

        for email in unregistered_emails:
            pending_user = cls.enroll_user_pending_registration(enterprise_customer, email, course_mode, *course_ids)
            pending.append(pending_user)

        return successes, pending, failures
 def test_get_course_runs_from_program_no_keys(self):
     program = {
         "courses": [
             {"course_runs": []},
             {"course_runs": []},
         ]
     }
     result = get_course_runs_from_program(program)
     assert result == set()
 def test_get_course_runs_from_program_normal(self):
     program = {
         "courses": [
             {"course_runs": [
                 {"key": "1"},
                 {"key": None}
             ]},
             {"course_runs": [
                 {"key": "CourseRunKey"}
             ]},
         ]
     }
     result = get_course_runs_from_program(program)
     assert result == {"1", "CourseRunKey"}
 def test_get_course_runs_from_program_no_courses(self):
     program = {}
     result = get_course_runs_from_program(program)
     assert result == set()
示例#6
0
    def enroll_users_in_program(
            cls,
            enterprise_customer,
            program_details,
            course_mode,
            emails,
            cohort=None,
            enrollment_requester=None,
            enrollment_reason=None
    ):
        """
        Enroll existing users in all courses in a program, and create pending enrollments for nonexisting users.

        Args:
            enterprise_customer: The EnterpriseCustomer which is sponsoring the enrollment
            program_details: The details of the program in which we're enrolling
            course_mode (str): The mode with which we're enrolling in the program
            emails: An iterable of email addresses which need to be enrolled

        Returns:
            successes: A list of users who were successfully enrolled in all courses of the program
            pending: A list of PendingEnterpriseCustomerUsers who were successfully linked and had
                pending enrollments created for them in the database
            failures: A list of users who could not be enrolled in the program
        """
        existing_users, unregistered_emails = cls.get_users_by_email(emails)
        course_ids = get_course_runs_from_program(program_details)

        successes = []
        pending = []
        failures = []

        for user in existing_users:
            succeeded = cls.enroll_user(enterprise_customer, user, course_mode, *course_ids)
            if succeeded:
                successes.append(user)
                if enrollment_requester and enrollment_reason:
                    for course_id in course_ids:
                        create_manual_enrollment_audit(
                            enrollment_requester,
                            user.email,
                            UNENROLLED_TO_ENROLLED,
                            enrollment_reason,
                            course_id,
                            role=MANUAL_ENROLLMENT_ROLE,
                        )
            else:
                failures.append(user)

        for email in unregistered_emails:
            pending_user = enterprise_customer.enroll_user_pending_registration(
                email,
                course_mode,
                *course_ids,
                cohort=cohort,
                enrollment_source=EnterpriseEnrollmentSource.get_source(EnterpriseEnrollmentSource.MANUAL)
            )
            pending.append(pending_user)
            if enrollment_requester and enrollment_reason:
                for course_id in course_ids:
                    create_manual_enrollment_audit(
                        enrollment_requester,
                        email,
                        UNENROLLED_TO_ALLOWEDTOENROLL,
                        enrollment_reason,
                        course_id,
                        role=MANUAL_ENROLLMENT_ROLE,
                    )

        return successes, pending, failures