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)
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)
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)
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)
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))