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

        # SF Layout: 1%CLUB Project Detail section.
        sfproject.amount_at_the_moment = "%01.2f" % (project.amount_donated / 100)
        sfproject.amount_requested = "%01.2f" % (project.amount_asked / 100)
        sfproject.amount_still_needed = "%01.2f" % (project.amount_needed / 100)
        if project.status == ProjectPhase.objects.get(slug="campaign"):
            sfproject.date_project_deadline = project.deadline

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

        sfproject.project_name = project.title
        sfproject.status_project = project.status__name

        # SF Layout: Summary Project Details section.

        if project.country:
            sfproject.country_in_which_the_project_is_located = project.country.name
        sfproject.describe_the_project_in_one_sentence = project.pitch[:5000]
        sfproject.extensive_project_description = project.description

        # Set pitch status dates
        if project.status == ProjectPhase.objects.get(slug="plan-new") and not sfproject.date_pitch_created:
            sfproject.date_pitch_created = project.created
        elif project.status == ProjectPhase.objects.get(slug="plan-submitted") and not sfproject.date_pitch_submitted:
            sfproject.date_pitch_submitted = project.updated
        elif project.status == ProjectPhase.objects.get(slug="campaign") and not sfproject.date_pitch_approved:
            sfproject.date_pitch_approved = project.updated
        elif project.status == ProjectPhase.objects.get(slug="plan-rejected") and not sfproject.date_pitch_created:
            sfproject.date_pitch_rejected = project.updated

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

        sfproject.target_group_s_of_the_project = project.for_who
        sfproject.number_of_people_reached_direct = project.reach
        sfproject.describe_where_the_money_is_needed_for = project.amount_needed
        sfproject.sustainability = project.future
        sfproject.contribution_project_in_reducing_poverty = project.effects

        # Set plan status dates
        if project.status == ProjectPhase.objects.get(slug="plan-submitted") and not sfproject.date_plan_submitted:
            sfproject.date_plan_submitted = project.updated
        elif project.status == ProjectPhase.objects.get(slug="campaign") and not sfproject.date_plan_approved:
            sfproject.date_plan_approved = project.updated
        elif project.status == ProjectPhase.objects.get(slug="plan-rejected") and not sfproject.date_plan_rejected:
            sfproject.date_plan_rejected = project.updated

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

        sfproject.project_url = "http://www.onepercentclub.com/en/#!/projects/{0}".format(project.slug)

        # Unknown: sfproject.third_half_project =
        # Unknown: sfproject.earth_charther_project =

        #TODO: this doesn't make a lot of sense since act, realized and results are the same status now (done-completed)
        # Set project status dates
        sfproject.project_created_date = project.created
        if project.phase == ProjectPhase.objects.get(slug="done-completed") and not sfproject.date_project_act:
            sfproject.date_project_act = project.updated
        elif project.phase == ProjectPhase.objects.get(slug="done-completed") and not sfproject.date_project_realized:
            sfproject.date_project_realized = project.updated
        elif project.phase == ProjectPhase.objects.get(slug="done-stopped") and not sfproject.date_project_failed:
            sfproject.date_project_failed = project.updated
        elif project.phase == ProjectPhase.objects.get(slug="done-completed") and not sfproject.date_project_result:
            sfproject.date_project_result = project.updated

        # SF Layout: Other section.
        sfproject.external_id = project.id

        # 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
Exemplo n.º 2
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()

        # SF Layout: 1%CLUB Project Detail section.
        try:
            project_campaign = ProjectCampaign.objects.get(project=project)
        except ProjectCampaign.DoesNotExist:
            pass
        else:
            sfproject.amount_at_the_moment = "%01.2f" % (project_campaign.money_donated / 100)
            sfproject.amount_requested = "%01.2f" % (project_campaign.money_asked / 100)
            sfproject.amount_still_needed = "%01.2f" % (project_campaign.money_needed / 100)
            if project.phase == ProjectPhases.campaign:
                sfproject.date_project_deadline = project_campaign.deadline

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

        sfproject.project_name = project.title
        sfproject.status_project = ProjectPhases.values[project.phase].title()

        # SF Layout: Summary Project Details section.
        try:
            project_pitch = ProjectPitch.objects.get(project=project)
        except ProjectPitch.DoesNotExist:
            pass
        else:
            if project_pitch.country:
                sfproject.country_in_which_the_project_is_located = project_pitch.country.name
            sfproject.describe_the_project_in_one_sentence = project_pitch.pitch[:5000]
            sfproject.extensive_project_description = project_pitch.description

            # Set pitch status dates
            if project_pitch.status == ProjectPitch.PitchStatuses.new and not sfproject.date_pitch_created:
                sfproject.date_pitch_created = project_pitch.created
            elif project_pitch.status == ProjectPitch.PitchStatuses.submitted and not sfproject.date_pitch_submitted:
                sfproject.date_pitch_submitted = project_pitch.updated
            elif project_pitch.status == ProjectPitch.PitchStatuses.approved and not sfproject.date_pitch_approved:
                sfproject.date_pitch_approved = project_pitch.updated
            elif project_pitch.status == ProjectPitch.PitchStatuses.rejected and not sfproject.date_pitch_created:
                sfproject.date_pitch_created = project_pitch.updated

            sfproject.tags = ""
            for tag in project_pitch.tags.all():
                sfproject.tags = str(tag) + ", " + sfproject.tags

        try:
            project_plan = ProjectPlan.objects.get(project=project)
        except ProjectPlan.DoesNotExist:
            sfproject.organization_account = None
        else:
            sfproject.target_group_s_of_the_project = project_plan.for_who
            sfproject.number_of_people_reached_direct = project_plan.reach
            sfproject.describe_where_the_money_is_needed_for = project_plan.money_needed
            sfproject.sustainability = project_plan.future
            sfproject.contribution_project_in_reducing_poverty = project_plan.effects

            # Set plan status dates
            if project_plan.status == ProjectPlan.PlanStatuses.submitted and not sfproject.date_plan_submitted:
                sfproject.date_plan_submitted = project_plan.updated
            elif project_plan.status == ProjectPlan.PlanStatuses.approved and not sfproject.date_plan_approved:
                sfproject.date_plan_approved = project_plan.updated
            elif project_plan.status == ProjectPlan.PlanStatuses.rejected and not sfproject.date_plan_rejected:
                sfproject.date_plan_rejected = project_plan.updated

            # Project referrals (ambassador) - expected are three or less related values
            try:
                project_ambs = ProjectAmbassador.objects.filter(project_plan=project_plan)
                if project_ambs.count() > 0:
                    sfproject.name_referral_1 = project_ambs[0].name
                    sfproject.description_referral_1 = project_ambs[0].description
                    sfproject.email_address_referral_1 = project_ambs[0].email
                if project_ambs.count() > 1:
                    sfproject.name_referral_2 = project_ambs[1].name
                    sfproject.description_referral_2 = project_ambs[1].description
                    sfproject.email_address_referral_2 = project_ambs[1].email
                if project_ambs.count() > 2:
                    sfproject.name_referral_3 = project_ambs[2].name
                    sfproject.description_referral_3 = project_ambs[2].description
                    sfproject.email_address_referral_3 = project_ambs[2].email
            except ProjectAmbassador.DoesNotExist:
                pass

            # TODO: determine what should be in project number_of_people_reached_indirect?
            # sfproject.number_of_people_reached_indirect = (project.fundphase.impact_indirect_male +
            #                                                project.fundphase.impact_indirect_female)
            if project_plan.organization:
                try:
                    sfproject.organization_account = SalesforceOrganization.objects.get(
                        external_id=project_plan.organization.id
                    )
                except SalesforceOrganization.DoesNotExist:
                    logger.error(
                        "Unable to find organization id {0} in Salesforce for project id {1}".format(
                            project_plan.organization.id, project.id
                        )
                    )

        sfproject.project_url = "http://www.onepercentclub.com/en/#!/projects/{0}".format(project.slug)

        # Unknown: sfproject.third_half_project =
        # Unknown: sfproject.earth_charther_project =

        # Set project status dates
        sfproject.project_created_date = project.created
        if project.phase == ProjectPhases.act and not sfproject.date_project_act:
            sfproject.date_project_act = project.updated
        elif project.phase == ProjectPhases.realized and not sfproject.date_project_realized:
            sfproject.date_project_realized = project.updated
        elif project.phase == ProjectPhases.failed and not sfproject.date_project_failed:
            sfproject.date_project_failed = project.updated
        elif project.phase == ProjectPhases.results and not sfproject.date_project_result:
            sfproject.date_project_result = project.updated

        # SF Layout: Other section.
        sfproject.external_id = project.id

        # 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
def sync_projects(test_run):
    global error_count
    global success_count
    projects = Project.objects.all()
    logger.info("Syncing {0} Project objects.".format(projects.count()))

    for project in projects:
        logger.info("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()

        # SF Layout: 1%CLUB Project Detail section.
        try:
            project_campaign = ProjectCampaign.objects.get(project=project)
        except ProjectCampaign.DoesNotExist:
            pass
        else:
            sfproject.amount_at_the_moment = project_campaign.money_donated
            sfproject.amount_requested = project_campaign.money_asked
            sfproject.amount_still_needed = project_campaign.money_needed

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

        sfproject.project_name = project.title

        # TODO: Confirm that this is the correct project status to take
        sfproject.status_project = project.phase

        # SF Layout: Summary Project Details section.
        try:
            project_pitch = ProjectPitch.objects.get(project=project)
        except ProjectPitch.DoesNotExist:
            pass
        else:
            if project_pitch.country:
                sfproject.country_in_which_the_project_is_located = project_pitch.country.name
            sfproject.describe_the_project_in_one_sentence = project_pitch.title


        try:
            project_plan = ProjectPlan.objects.get(project=project)
        except ProjectPlan.DoesNotExist:
            sfproject.organization_account = None
        else:
            # TODO: determine what should be in project target_group?
            # sfproject.target_group = project.fundphase.impact_group
            sfproject.number_of_people_reached_direct = project_plan.reach
            # TODO: determine what should be in project number_of_people_reached_indirect?
            # sfproject.number_of_people_reached_indirect = (project.fundphase.impact_indirect_male +
            #                                                project.fundphase.impact_indirect_female)
            try:
                sfproject.organization_account = SalesforceOrganization.objects.get(external_id=project_plan.organization.id)
            except SalesforceOrganization.DoesNotExist:
                logger.error("Unable to find organization id {0} in Salesforce for project id {1}".format(project_plan.organization.id, project.id))

        # SF Layout: Extensive project information section.
        # TODO: Determine extended project information details
        # Unknown error: sfproject.describe_where_the_money_is_needed_for =
        # Unknown error: sfproject.project_url = project.get_absolute_url
        # Unknown: sfproject.third_half_project =
        # Unknown: sfproject.comments =
        # Unknown: sfproject.contribution_project_in_reducing_poverty =
        # Unknown: sfproject.earth_charther_project =
        # Unknown: sfproject.extensive_project_description =
        # Unknown: sfproject.project_goals =
        # Unknown: sfproject.sustainability =
        # sfproject.starting_date_of_the_project = project.planned_start_date
        # Unknown - Multipicklist: ?? - sfproject.millennium_goals =
        # Note: Not used like contact?-  sfproject.tags =

        # SF Layout: Project planning and budget section.
        # TODO: Determine project budget details
        # Unknown: sfproject.additional_explanation_of_budget =
        # sfproject.end_date_of_the_project = project.planned_end_date
        # Unknown: sfproject.expected_funding_through_other_resources =
        # Unknown: sfproject.expected_project_results =
        # Unknown: sfproject.funding_received_through_other_resources =
        # Unknown: sfproject.need_for_volunteers =
        # Unknown: sfproject.other_way_people_can_contribute =
        # Unknown: sfproject.project_activities_and_timetable =

        # SF Layout: Referrals section.
        # TODO: Determine project referral section integration
        # Unknown: sfproject.name_referral_1 = project.referral.name
        # Unknown: sfproject.name_referral_2 =
        # Unknown: sfproject.name_referral_3 =
        # Unknown: sfproject.description_referral_1 = project.referral.description
        # Unknown: sfproject.description_referral_2 =
        # Unknown: sfproject.description_referral_3 =
        # Unknown: sfproject.email_address_referral_1 = project.referral.email
        # Unknown: sfproject.email_address_referral_2 =
        # Unknown: sfproject.email_address_referral_3 =
        # Unknown: sfproject.relation_referral_1_with_project_org =
        # Unknown: sfproject.relation_referral_2_with_project_org =
        # Unknown: sfproject.relation_referral_3_with_project_org =

        # SF Layout: Project Team Information section.
        sfproject.project_created_date = project.created

        # SF Layout: Other section.
        sfproject.external_id = project.id

        # Save the object to Salesforce
        if not test_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))
Exemplo n.º 4
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
Exemplo n.º 5
0
def sync_projects(test_run):
    projects = Project.objects.all()
    logger.info("Syncing {0} Project objects.".format(projects.count()))

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

        # Find the corresponding SF project.
        try:
            sfproject = SalesforceProject.objects.filter(external_id=project.id).get()
        except SalesforceProject.DoesNotExist:
            sfproject = SalesforceProject()

        # SF Layout: 1%CLUB Project Detail section.
        sfproject.amount_at_the_moment = project.money_safe
        sfproject.amount_requested = project.money_asked
        sfproject.amount_still_needed = project.money_needed
        sfproject.project_name = project.title
        sfproject.project_owner = SalesforceContact.objects.filter(external_id=project.owner.id).get()
        # -- Not the same as (closed,created, done validated)
        #  -- fund, idea,act, result (if ...else...?)
        sfproject.status_project = project.phase
        # Unknown: sfproject.target_group_s_of_the_project =

        # SF Layout: Summary Project Details section.
        #sfproject.country_in_which_the_project_is_located = project.country
        sfproject.describe_the_project_in_one_sentence = project.description
        # Unknown error: sfproject.describe_where_the_money_is_needed_for =
        # Unknown error: sfproject.project_url = project.get_absolute_url

        # SF Layout: Extensive project information section.
        # Unknown: sfproject.third_half_project =
        sfproject.organization_account = SalesforceOrganization.objects.filter(external_id=project.organization.id).get()
        # Unknown: sfproject.comments =
        # Unknown: sfproject.contribution_project_in_reducing_poverty =
        # Unknown: sfproject.earth_charther_project =
        # Unknown: sfproject.extensive_project_description =
        # Unknown: sfproject.project_goals =
        # Unknown: sfproject.sustainability =

        # SF Layout: Project planning and budget section.
        # Unknown: sfproject.additional_explanation_of_budget =
        sfproject.end_date_of_the_project = project.planned_end_date
        # Unknown: sfproject.expected_funding_through_other_resources =
        # Unknown: sfproject.expected_project_results =
        # Unknown: sfproject.funding_received_through_other_resources =
        # Unknown: sfproject.need_for_volunteers =
        # Unknown: sfproject.other_way_people_can_contribute =
        # Unknown: sfproject.project_activities_and_timetable =
        sfproject.starting_date_of_the_project = project.planned_start_date

        # SF Layout: Millennium Goals section.
        # Unknown - Multipicklist: ?? - sfproject.millennium_goals =

        # SF Layout: Tags section.
        # Note: Not used like contact?-  sfproject.tags =

        # SF Layout: Referrals section.
        # Unknown: sfproject.name_referral_1 = project.referral.name
        # Unknown: sfproject.name_referral_2 =
        # Unknown: sfproject.name_referral_3 =
        # Unknown: sfproject.description_referral_1 = project.referral.description
        # Unknown: sfproject.description_referral_2 =
        # Unknown: sfproject.description_referral_3 =
        # Unknown: sfproject.email_address_referral_1 = project.referral.email
        # Unknown: sfproject.email_address_referral_2 =
        # Unknown: sfproject.email_address_referral_3 =
        # Unknown: sfproject.relation_referral_1_with_project_org =
        # Unknown: sfproject.relation_referral_2_with_project_org =
        # Unknown: sfproject.relation_referral_3_with_project_org =

        # SF Layout: Project Team Information section.
        sfproject.project_created_date = project.created

        # SF Layout: International Payment section.

        # SF Layout: Other section.
        sfproject.external_id = project.id

        # Save the SF project.
        if not test_run:
            sfproject.save()