Esempio n. 1
0
def authoring_organizations_changed(sender, instance, action, **kwargs):  # pylint: disable=unused-argument
    # Only do this after an auth org has been added, the salesforce_id isn't set and it's a draft (new)
    if action == 'post_add' and not instance.salesforce_id and instance.draft:
        partner = instance.partner
        util = get_salesforce_util(partner)
        if util:
            util.create_course(instance)
Esempio n. 2
0
def update_or_create_salesforce_organization(instance, created, **kwargs):  # pylint: disable=unused-argument
    partner = instance.partner
    util = get_salesforce_util(partner)
    if util:
        if not instance.salesforce_id:
            util.create_publisher_organization(instance)
        if not created and requires_salesforce_update('organization', instance):
            util.update_publisher_organization(instance)
Esempio n. 3
0
def update_or_create_salesforce_course_run(instance, created, **kwargs):  # pylint: disable=unused-argument
    partner = instance.course.partner
    util = get_salesforce_util(partner)
    if util:
        if instance.draft:
            util.create_course_run(instance)
        elif not created and not instance.draft:
            created_in_salesforce = False
            if not instance.salesforce_id and instance.draft_version:
                created_in_salesforce = populate_official_with_existing_draft(instance, util)
            if not created_in_salesforce and requires_salesforce_update('course_run', instance):
                util.update_course_run(instance)
Esempio n. 4
0
def update_or_create_salesforce_course(instance, created, **kwargs):  # pylint: disable=unused-argument
    partner = instance.partner
    util = get_salesforce_util(partner)
    # Only bother to create the course if there's a util, and the auth orgs are already set up
    if util and instance.authoring_organizations.first():
        if not created and not instance.draft:
            created_in_salesforce = False
            # Only populate the Official instance if the draft information is ready to go (has auth orgs set)
            if (not instance.salesforce_id and
                    instance.draft_version and
                    instance.draft_version.authoring_organizations.first()):
                created_in_salesforce = populate_official_with_existing_draft(instance, util)
            if not created_in_salesforce and requires_salesforce_update('course', instance):
                util.update_course(instance)
Esempio n. 5
0
def update_or_create_salesforce_course_run(instance, created, **kwargs):  # pylint: disable=unused-argument
    try:
        partner = instance.course.partner
    except (Course.DoesNotExist, Partner.DoesNotExist):
        # exit early in the unusual event that we can't look up the appropriate partner
        return
    util = get_salesforce_util(partner)
    if util:
        if instance.draft:
            util.create_course_run(instance)
        elif not created and not instance.draft:
            created_in_salesforce = False
            if not instance.salesforce_id and instance.draft_version:
                created_in_salesforce = populate_official_with_existing_draft(
                    instance, util)
            if not created_in_salesforce and requires_salesforce_update(
                    'course_run', instance):
                util.update_course_run(instance)
    def handle(self, *args, **options):
        failed_course_runs = []
        partners = Partner.objects.all()
        for partner in partners:
            util = get_salesforce_util(partner)
            if util:
                course_runs = CourseRun.objects.filter(draft=models.Value(0), course__partner=partner).\
                    exclude(salesforce_id__isnull=True)
                for course_run in course_runs:
                    try:
                        util.update_course_run(course_run)
                        logger.info(
                            'Successfully synced the salesforce {key}'.format(
                                key=course_run.key))
                    except Exception:  # pylint: disable=broad-except
                        logger.exception('Failed to sync data for course [%s]',
                                         course_run.key)
                        failed_course_runs.append(course_run.key)

        if failed_course_runs:
            raise CommandError(
                'Following course runs were unable to sync with salesforce  {}'
                .format(failed_course_runs))