diff --git a/asset_list/AssetList.py b/asset_list/AssetList.py
index 25a40f99..ed1cdf2c 100644
--- a/asset_list/AssetList.py
+++ b/asset_list/AssetList.py
@@ -347,6 +347,8 @@ class AssetList:
self.work_type_breakdowns = {}
self.flat_data = None
self.duplicated_addresses = None
+ self.contact_details = None
+ self.contact_detail_fields = None
# We detect the presence of the non-intrusive columns
self.non_intrusives_present = True if "CIGA Check Required" in self.raw_asset_list.columns else False
@@ -1528,7 +1530,70 @@ class AssetList:
self.flat_data = flat_data
- def prepare_for_crm(self, contact_details, company_domain, crm_pipeline_name, first_dealstage, assigned_surveyors):
+ @staticmethod
+ def split_full_name(x):
+ if pd.isnull(x):
+ return None, None, None
+ x = x.lower()
+ titles = ["mr", "mrs", "ms", "miss", "dr", "prof"]
+ # Remove titles
+ detected_title = [title for title in titles if x.startswith(title)]
+ if detected_title:
+ for title in detected_title:
+ x = x.replace(title, "")
+ x = x.strip()
+ first_name, last_name = x.split(" ")[0], x.split(" ")[-1]
+ title = detected_title[0].title() if detected_title else None
+ return title, first_name.title(), last_name.title()
+
+ def load_contact_details(
+ self,
+ local_filepath,
+ sheet_name,
+ landlord_property_id,
+ phone_number_column=None,
+ email_column=None,
+ fullname_column=None,
+ firstname_column=None,
+ lastname_column=None
+ ):
+
+ self.contact_detail_fields = {
+ "landlord_property_id": landlord_property_id,
+ "phone_number": phone_number_column,
+ "email": email_column,
+ "fullname": fullname_column,
+ "firstname": firstname_column,
+ "lastname": lastname_column
+ }
+
+ details_colnames = [
+ phone_number_column, email_column, fullname_column, firstname_column, lastname_column
+ ]
+ # We'll fill them
+ none_details = [x for x in details_colnames if x is None]
+ details_colnames = [x for x in details_colnames if x is not None]
+
+ contact_details = pd.read_excel(
+ local_filepath, sheet_name=sheet_name
+ )[[self.contact_detail_fields["landlord_property_id"]] + details_colnames]
+ contact_details = contact_details[
+ ~pd.isnull(contact_details[self.contact_detail_fields["landlord_property_id"]])
+ ]
+ # Fill anything we don't have
+ for detail in none_details:
+ contact_details[detail] = None
+
+ if fullname_column and not (firstname_column and lastname_column):
+ contact_details["title"], contact_details["first_name"], contact_details["last_name"] = zip(
+ *contact_details[fullname_column].apply(self.split_full_name)
+ )
+ else:
+ raise NotImplementedError("Implement me")
+
+ self.contact_details = contact_details
+
+ def prepare_for_crm(self, company_domain, crm_pipeline_name, first_dealstage, assigned_surveyors):
"""
This function prepares the data for upload into Hubspot
:return:
@@ -1589,7 +1654,7 @@ class AssetList:
# Merge on the contact details
programme_data = programme_data.merge(
- contact_details,
+ self.contact_details,
how="left",
left_on=self.STANDARD_LANDLORD_PROPERTY_ID,
right_on=self.landlord_property_id,
@@ -1655,10 +1720,18 @@ class AssetList:
schema_mappings = {
'Name
': self.DOMNA_PROPERTY_ID, # TODO: Maybe change this?
'Company Domain Name ': 'Company Domain Name ',
- 'Email ': 'email', # TODO: Review
- 'First Name ': 'first name', # TODO: Review
- 'Last Name ': 'last name', # TODO: Review
- 'Phone ': 'phone', # TODO: Review
+ 'Email ': (
+ self.contact_detail_fields["email"] if self.contact_detail_fields["email"] else None
+ ), # TODO: Review
+ 'First Name ': (
+ self.contact_detail_fields["firstname"] if self.contact_detail_fields["firstname"] else None
+ ), # TODO: Review
+ 'Last Name ': (
+ self.contact_detail_fields["lastname"] if self.contact_detail_fields["lastname"] else None
+ ), # TODO: Review
+ 'Phone ': (
+ self.contact_detail_fields["phone_number"] if self.contact_detail_fields["phone_number"] else None
+ ), # TODO: Review
'Full Address ': self.STANDARD_FULL_ADDRESS,
'Address 1 ': self.STANDARD_ADDRESS_1,
'Address 2 ': None, # TODO: Don't have this for the moment
diff --git a/asset_list/app.py b/asset_list/app.py
index 475bd7b3..ba3a1b82 100644
--- a/asset_list/app.py
+++ b/asset_list/app.py
@@ -472,23 +472,23 @@ def app():
asset_list.flat_analysis()
- # Convert to a format suitable for CRM
- contact_details = pd.DataFrame(
- [
- {
- asset_list.landlord_property_id: "EXETEMORH0100010",
- "first name": "Khalim",
- "last name": "Conn-Kowlessar",
- "email": "kconnkowlessar@gmail.com",
- "phone": "075399248"
- }
- ]
+ asset_list.load_contact_details(
+ local_filepath=os.path.join(data_folder, "Full property list wth D&V report V look up 12.2.25.xlsx"),
+ sheet_name="Report 1",
+ landlord_property_id=asset_list.landlord_property_id,
+ phone_number_column='Property Current Tel. Number',
+ fullname_column='Proeprty Current Occupant',
+ firstname_column=None,
+ lastname_column=None,
+ email_column=None, # TODO - we need this
)
+ # Convert to a format suitable for CRM
+ # TODO: TEMP
assigned_surveyors = pd.DataFrame(
[
{
- asset_list.landlord_property_id: "EXETEMORH0100010",
+ asset_list.landlord_property_id: "02610001",
"surveyor_name": "Khalim Conn-Kowlessar",
"surveyor_email": "khalim@domna.homes",
}
@@ -501,17 +501,14 @@ def app():
crm_pipeline_name = "Survey Management"
first_dealstage = "READY TO BEGIN SCHEDULING"
# TODO - temp, upload to either SharePoint or AWS
- hubspot_template = pd.read_csv("~/Downloads/Hubspot Upload Template - Demo V2(Template).csv")
- hubspot_schema = hubspot_template.columns.tolist()
asset_list.prepare_for_crm(
- contact_details=contact_details,
assigned_surveyors=assigned_surveyors,
company_domain=company_domain,
crm_pipeline_name=crm_pipeline_name,
first_dealstage=first_dealstage
)
- hubspt_data = asset_list.hubspot_data
+ hubspot_data = asset_list.hubspot_data
# Store as an excel
filename = os.path.join(data_folder, ".".join(data_filename.split(".")[:-1])) + " - Standardised.xlsx"
@@ -520,3 +517,6 @@ def app():
with pd.ExcelWriter(filename) as writer:
asset_list.standardised_asset_list.to_excel(writer, sheet_name="Standardised Asset List", index=False)
asset_list.flat_data.to_excel(writer, sheet_name="Flat Data", index=False)
+
+ # Store the Hubspot export as a csv
+ hubspot_data.to_csv(os.path.join(data_folder, "Hubspot Export.csv"), index=False)
diff --git a/backend/app/plan/utils.py b/backend/app/plan/utils.py
index 07d4642d..34fb02e7 100644
--- a/backend/app/plan/utils.py
+++ b/backend/app/plan/utils.py
@@ -1,9 +1,5 @@
-import pandas as pd
-from backend.Property import Property
from utils.s3 import read_from_s3
-from recommendations.recommendation_utils import get_wall_u_value, get_floor_u_value, get_roof_u_value
-
from backend.app.config import get_settings
import msgpack