Exemplo n.º 1
0
def sync_projects(dry_run, sync_from_datetime, loglevel):
    logger.setLevel(loglevel)
    error_count = 0
    success_count = 0

    projects = Project.objects.all()

    if sync_from_datetime:
        projects = projects.filter(updated__gte=sync_from_datetime)

    logger.info("Syncing {0} Project objects.".format(projects.count()))

    for project in projects:
        logger.debug("Syncing Project: {0}".format(project.id))

        # Find the corresponding SF project.
        try:
            sfproject = SalesforceProject.objects.get(external_id=project.id)
        except SalesforceProject.DoesNotExist:
            sfproject = SalesforceProject()
        except Exception as e:
            logger.error("Error while loading sfproject id {0} - stopping: ".format(project.id) + str(e))
            return success_count, error_count+1

        # Populate the data
        sfproject.external_id = project.id
        sfproject.project_name = project.title
        sfproject.describe_the_project_in_one_sentence = project.pitch[:5000]

        sfproject.video_url = project.video_url

        sfproject.date_project_deadline = project.deadline or None
        sfproject.is_campaign = project.is_campaign
        sfproject.amount_at_the_moment = "%01.2f" % (project.amount_donated or 0)
        sfproject.amount_requested = "%01.2f" % (project.amount_asked or 0)
        sfproject.amount_still_needed = "%01.2f" % (project.amount_needed or 0)
        sfproject.allow_overfunding = project.allow_overfunding
        sfproject.story = project.story

        sfproject.date_plan_submitted = project.date_submitted
        sfproject.date_started = project.campaign_started
        sfproject.date_ended = project.campaign_ended
        sfproject.date_funded = project.campaign_funded

        sfproject.picture_location = ""
        if project.image:
            sfproject.picture_location = str(project.image)

        try:
            sfproject.project_owner = SalesforceContact.objects.get(external_id=project.owner.id)
        except SalesforceContact.DoesNotExist:
            logger.error("Unable to find contact id {0} in Salesforce for project id {1}".format(project.owner.id,
                                                                                                 project.id))
        if project.organization:
            try:
                sfproject.organization_account = SalesforceOrganization.objects.get(
                    external_id=project.organization_id)
            except SalesforceOrganization.DoesNotExist:
                logger.error("Unable to find organization id {0} in Salesforce for project id {1}".format(
                    project.organization.id, project.id))

        if project.country:
            sfproject.country_in_which_the_project_is_located = project.country.name.encode("utf-8")
            sfproject.sub_region = project.country.subregion.name.encode("utf-8")
            sfproject.region = project.country.subregion.region.name.encode("utf-8")

        sfproject.theme = ""
        if project.theme:
            sfproject.theme = project.theme.name

        if project.status:
            sfproject.status_project = project.status.name.encode("utf-8")

        sfproject.project_created_date = project.created
        sfproject.project_updated_date = project.updated

        sfproject.tags = ""
        for tag in project.tags.all():
            sfproject.tags = str(tag) + ", " + sfproject.tags
        sfproject.tags = sfproject.tags[:255]

        sfproject.partner_organization = "-"
        if project.partner_organization:
            sfproject.partner_organization = project.partner_organization.name

        sfproject.slug = project.slug

        sfproject.donation_total = "%01.2f" % (project.get_money_total(['paid', 'pending']))
        sfproject.donation_oo_total = "%01.2f" % (project.get_money_total(['paid', 'pending']))
        sfproject.supporter_count = project.supporters_count()
        sfproject.supporter_oo_count = project.supporters_count(True)

        # Save the object to Salesforce
        if not dry_run:
            try:
                sfproject.save()
                success_count += 1
            except Exception as e:
                error_count += 1
                logger.error("Error while saving project id {0}: ".format(project.id) + str(e))

    return success_count, error_count