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