Skip to content

Commit

Permalink
Merge pull request #30 from Nickz22/only-activate-on-outbound-activat…
Browse files Browse the repository at this point in the history
…ions

only-activate-on-outbound-activations
  • Loading branch information
Nickz22 authored Sep 7, 2024
2 parents 6c5ef3e + 0717379 commit b3ae8ea
Show file tree
Hide file tree
Showing 5 changed files with 668 additions and 452 deletions.
10 changes: 5 additions & 5 deletions server/app/engine/activation_engine.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,16 +59,16 @@ def update_activation_states():
pluck(fetch_accounts_not_in_ids(active_account_ids).data, "id")
)

tasks_by_filter_name = fetch_criteria_tasks_by_account_ids_from_date(
outbound_prospecting_tasks_by_filter_name = fetch_criteria_tasks_by_account_ids_from_date(
activatable_account_ids,
f"{get_threshold_date_for_activatable_tasks(settings)}T00:00:00Z",
settings.criteria,
[criteria for criteria in settings.criteria if criteria.direction.lower() == "outbound"],
salesforce_user_ids,
).data

contact_ids = set()
for criteria_name in tasks_by_filter_name:
contact_ids.update(pluck(tasks_by_filter_name[criteria_name], WHO_ID))
for criteria_name in outbound_prospecting_tasks_by_filter_name:
contact_ids.update(pluck(outbound_prospecting_tasks_by_filter_name[criteria_name], WHO_ID))

contacts = (
fetch_contacts_by_ids_and_non_null_accounts(list(contact_ids)).data
Expand All @@ -77,7 +77,7 @@ def update_activation_states():
)

new_activations = compute_activated_accounts(
tasks_by_filter_name, contacts, settings
outbound_prospecting_tasks_by_filter_name, contacts, settings
).data

if len(new_activations) > 0:
Expand Down
1 change: 0 additions & 1 deletion server/app/salesforce_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,6 @@ def fetch_accounts_not_in_ids(account_ids):

return api_response


def fetch_criteria_tasks_by_account_ids_from_date(
account_ids: list[str],
start: str,
Expand Down
17 changes: 14 additions & 3 deletions server/app/services/activation_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -543,8 +543,8 @@ def compute_activated_accounts(tasks_by_criteria, contacts, settings):

is_account_active_for_tracking_period = (
len(active_contact_ids) >= settings.contacts_per_account
or qualifying_event
or qualifying_opportunity
or bool(qualifying_event)
or bool(qualifying_opportunity)
)
if not is_account_active_for_tracking_period:
continue
Expand All @@ -553,7 +553,7 @@ def compute_activated_accounts(tasks_by_criteria, contacts, settings):
task.get("CreatedDate")
).date()

is_active_via_meeting_or_opportunity = len(active_contact_ids) == 0
is_active_via_meeting_or_opportunity = len(active_contact_ids) < settings.contacts_per_account
active_contact_ids = (
list(valid_task_ids_by_who_id.keys())
if is_active_via_meeting_or_opportunity
Expand Down Expand Up @@ -779,6 +779,17 @@ def create_activation(
)
)

if not any(pe.status == activation.status for pe in prospecting_efforts):
prospecting_efforts.append(
create_prospecting_effort(
activation.id,
activation.status,
activation.activated_date,
[],
{}
)
)

activation.prospecting_effort = prospecting_efforts

return activation
Expand Down
34 changes: 34 additions & 0 deletions server/app/tests/mocks.py
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,40 @@ def get_n_mock_tasks_per_x_contacts_for_unique_values_content_criteria_query(
cloned_tasks.append(task_copy)
return cloned_tasks

def get_n_mock_tasks_for_contacts_for_unique_values_content_criteria_query(
n, contacts, assignee_id
):
if n > 3:
raise ValueError("Number of tasks exceeds the number of mock tasks")
cloned_tasks = []
for i, contact in enumerate(contacts):
for j in range(n):
task_copy = copy.deepcopy(
mock_tasks_for_criteria_with_unique_values_content[j]
)
task_copy["Id"] = f"mock_task_id_{i}_{j}"
task_copy["WhoId"] = contact["Id"]
task_copy["OwnerId"] = assignee_id
cloned_tasks.append(task_copy)
return cloned_tasks

def get_n_mock_tasks_per_contact_for_contains_content_crieria_query(
n, contacts, assignee_id
):
if len(contacts) > len(MOCK_CONTACT_IDS):
raise ValueError("Number of contacts exceeds the number of mock contact")
if n > 3:
raise ValueError("Number of tasks exceeds the number of mock tasks")
cloned_tasks = []
for i in range(len(contacts)):
for j in range(n):
task_copy = copy.deepcopy(mock_tasks_for_criteria_with_contains_content[j])
task_copy["Id"] = f"mock_task_id_{i}_{j}"
task_copy["WhoId"] = contacts[i]["Id"]
task_copy["OwnerId"] = assignee_id
cloned_tasks.append(task_copy)
return cloned_tasks


def get_three_mock_tasks_per_two_contacts_for_contains_content_criteria_query(
assignee_id,
Expand Down
Loading

0 comments on commit b3ae8ea

Please sign in to comment.