Skip to content

Commit

Permalink
`Revert "Revert "feat: Optimize Contacts Sync (#271)" (#272)"
Browse files Browse the repository at this point in the history
This reverts commit ef16cd2.
  • Loading branch information
labhvam5 committed Nov 21, 2023
1 parent 7cb77e1 commit 29b07fd
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 54 deletions.
96 changes: 43 additions & 53 deletions apps/xero/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,12 +68,20 @@ def get_suppliers(self):
tenant_mapping = TenantMapping.objects.get(workspace_id=self.workspace_id)
self.connection.set_tenant_id(tenant_mapping.tenant_id)

suppliers_generator = self.connection.contacts.list_all_generator()
params = {

Check warning on line 71 in apps/xero/utils.py

View check run for this annotation

Codecov / codecov/patch

apps/xero/utils.py#L71

Added line #L71 was not covered by tests
'where': 'IsSupplier=true',
'includeArchived': 'false',
}

suppliers_generator = self.connection.contacts.list_all_generator(**params)

Check warning on line 76 in apps/xero/utils.py

View check run for this annotation

Codecov / codecov/patch

apps/xero/utils.py#L76

Added line #L76 was not covered by tests
merchant_names: List[str] = []

for suppliers in suppliers_generator:
for supplier in suppliers["Contacts"]:
if supplier["IsSupplier"] and supplier["ContactStatus"] == "ACTIVE":
merchant_names.append(supplier["Name"])
merchant_names.append(supplier["Name"])

Check warning on line 81 in apps/xero/utils.py

View check run for this annotation

Codecov / codecov/patch

apps/xero/utils.py#L81

Added line #L81 was not covered by tests

sleep(1)

Check warning on line 83 in apps/xero/utils.py

View check run for this annotation

Codecov / codecov/patch

apps/xero/utils.py#L83

Added line #L83 was not covered by tests

return merchant_names

def get_or_create_contact(
Expand Down Expand Up @@ -268,8 +276,13 @@ def sync_contacts(self):

updated_at = get_last_synced_at(self.workspace_id, "CONTACT")

params = {
'where': 'IsCustomer=false',
'includeArchived': 'true'
}

contacts_generator = self.connection.contacts.list_all_generator(
modified_after=updated_at
modified_after=updated_at, **params
)

for contacts in contacts_generator:
Expand All @@ -288,12 +301,14 @@ def sync_contacts(self):
"value": contact["Name"],
"destination_id": contact["ContactID"],
"detail": detail,
"active": True if contact["ContactStatus"] == "ACTIVE" else False,
}
)

DestinationAttribute.bulk_create_or_update_destination_attributes(
contact_attributes, "CONTACT", self.workspace_id, True
)
sleep(1)

return []

Expand All @@ -305,61 +320,36 @@ def sync_customers(self):

self.connection.set_tenant_id(tenant_mapping.tenant_id)

customers_generator = self.connection.contacts.list_all_generator()

customer_attributes = []

destination_attributes = DestinationAttribute.objects.filter(
workspace_id=self.workspace_id,
attribute_type="CUSTOMER",
display_name="Customer",
).values("destination_id", "value", "detail")

disabled_fields_map = {}
params = {
'where': 'IsCustomer=true',
'includeArchived': 'true',
}

for destination_attribute in destination_attributes:
disabled_fields_map[destination_attribute["destination_id"]] = {
"value": destination_attribute["value"],
"detail": destination_attribute["detail"],
}
customers_generator = self.connection.contacts.list_all_generator(**params)

for customers in customers_generator:
for customer in customers["Contacts"]:
if customer["IsCustomer"]:
customer_attributes.append(
{
"attribute_type": "CUSTOMER",
"display_name": "Customer",
"value": customer["Name"],
"destination_id": customer["ContactID"],
"detail": {
"email": customer["EmailAddress"]
if "EmailAddress" in customer
else None
},
"active": True if customer["ContactStatus"] == "ACTIVE" else False,
}
)
customer_attributes = []

if (customer["ContactStatus"] == "ACTIVE" and customer["ContactID"] in disabled_fields_map):
disabled_fields_map.pop(customer["ContactID"])
sleep(0.5)
for customer in customers["Contacts"]:
customer_attributes.append(
{
"attribute_type": "CUSTOMER",
"display_name": "Customer",
"value": customer["Name"],
"destination_id": customer["ContactID"],
"detail": {
"email": customer["EmailAddress"]
if "EmailAddress" in customer
else None
},
"active": True if customer["ContactStatus"] == "ACTIVE" else False,
}
)

for destination_id in disabled_fields_map:
customer_attributes.append(
{
"attribute_type": "CUSTOMER",
"display_name": "customer",
"value": disabled_fields_map[destination_id]["value"],
"destination_id": destination_id,
"active": False,
"detail": disabled_fields_map[destination_id]["detail"],
}
DestinationAttribute.bulk_create_or_update_destination_attributes(
customer_attributes, "CUSTOMER", self.workspace_id, True
)

DestinationAttribute.bulk_create_or_update_destination_attributes(
customer_attributes, "CUSTOMER", self.workspace_id, True
)
sleep(1)

return []

Expand Down
2 changes: 1 addition & 1 deletion tests/test_xero/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ def test_sync_customers(mocker, db):
new_customers_count = DestinationAttribute.objects.filter(
workspace_id=workspace_id, attribute_type="CUSTOMER"
).count()
assert new_customers_count == 14
assert new_customers_count == 62


def test_sync_tracking_categories(mocker, db):
Expand Down

0 comments on commit 29b07fd

Please sign in to comment.