mirror of
https://github.com/Hestia-Homes/insight.git
synced 2026-06-08 11:17:25 +00:00
add code to main
This commit is contained in:
parent
10512cf8a2
commit
c994060916
1 changed files with 86 additions and 63 deletions
|
|
@ -61,75 +61,62 @@ class jsonReader:
|
|||
def _return_df_from_deal_info(self, deal, product_type):
|
||||
rows = []
|
||||
if deal["company_info"]["name"] != "Apple":
|
||||
if deal["attempts"]:
|
||||
# Multiple attempts => multiple rows
|
||||
for attempt in deal["attempts"]:
|
||||
rows.append({
|
||||
"submission_date": self.to_date_only(attempt["submission_date"]),
|
||||
"hubspot_id": deal["deal_properties"]["deal_id"],
|
||||
"expected_commencement_date": self.to_date_only(attempt["expected_commencement_date"]),
|
||||
"work_type": product_type,
|
||||
"price": next(
|
||||
(item["price"] for item in deal["line_items"] if product_type in item["name"]),
|
||||
None
|
||||
),
|
||||
"deal_name": deal["deal_properties"]["dealname"],
|
||||
"company_name": deal["company_info"]["name"],
|
||||
})
|
||||
else:
|
||||
def historical_ecd_value_processes(timestamp):
|
||||
if timestamp is None or timestamp == '':
|
||||
return None
|
||||
dt = datetime.strptime(timestamp, "%Y-%m-%d")
|
||||
return dt.strftime("%Y-%m-%d")
|
||||
history = deal["deal_properties"]["expected_commencement_history"]
|
||||
if deal["attempts"]:
|
||||
# Multiple attempts => multiple rows
|
||||
for attempt in deal["attempts"]:
|
||||
data = {
|
||||
"submission_date": self.to_date_only(attempt["submission_date"]),
|
||||
"hubspot_id": deal["deal_properties"]["deal_id"],
|
||||
"expected_commencement_date": self.to_date_only(attempt["expected_commencement_date"]),
|
||||
"work_type": product_type,
|
||||
"price": next(
|
||||
(item["price"] for item in deal["line_items"] if product_type in item["name"]),
|
||||
None
|
||||
),
|
||||
"deal_name": deal["deal_properties"]["dealname"],
|
||||
"company_name": deal["company_info"]["name"],
|
||||
}
|
||||
data = self._use_different_expected_commencement_data(data, deal)
|
||||
rows.append(data)
|
||||
else:
|
||||
def historical_ecd_value_processes(timestamp):
|
||||
if timestamp is None or timestamp == '':
|
||||
return None
|
||||
dt = datetime.strptime(timestamp, "%Y-%m-%d")
|
||||
return dt.strftime("%Y-%m-%d")
|
||||
history = deal["deal_properties"]["expected_commencement_history"]
|
||||
|
||||
# ---- SORT HISTORY: latest first ----
|
||||
history_sorted = sorted(
|
||||
history,
|
||||
key=lambda h: datetime.strptime(h["timestamp"].split("T")[0], "%Y-%m-%d"),
|
||||
reverse=True
|
||||
)
|
||||
# ---- SORT HISTORY: latest first ----
|
||||
history_sorted = sorted(
|
||||
history,
|
||||
key=lambda h: datetime.strptime(h["timestamp"].split("T")[0], "%Y-%m-%d"),
|
||||
reverse=True
|
||||
)
|
||||
|
||||
# Extract latest expected commencement date
|
||||
if history_sorted:
|
||||
latest = history_sorted[0]
|
||||
latest_ecd = historical_ecd_value_processes(latest["value"]) # returns YYYY-MM-DD or None
|
||||
# Extract latest expected commencement date
|
||||
if history_sorted:
|
||||
latest = history_sorted[0]
|
||||
latest_ecd = historical_ecd_value_processes(latest["value"]) # returns YYYY-MM-DD or None
|
||||
|
||||
# Convert submission date
|
||||
raw_submission_date = deal["deal_properties"].get("last_submission_date")
|
||||
submission_date = self.to_date_only(raw_submission_date) if raw_submission_date else None
|
||||
# Convert submission date
|
||||
raw_submission_date = deal["deal_properties"].get("last_submission_date")
|
||||
submission_date = self.to_date_only(raw_submission_date) if raw_submission_date else None
|
||||
|
||||
# Convert both to datetime for comparison
|
||||
if submission_date and latest_ecd:
|
||||
dt_sub = datetime.strptime(submission_date, "%Y-%m-%d")
|
||||
dt_ecd = datetime.strptime(latest_ecd, "%Y-%m-%d")
|
||||
# Convert both to datetime for comparison
|
||||
if submission_date and latest_ecd:
|
||||
dt_sub = datetime.strptime(submission_date, "%Y-%m-%d")
|
||||
dt_ecd = datetime.strptime(latest_ecd, "%Y-%m-%d")
|
||||
|
||||
# Only keep submission date if submission_date > latest ECD
|
||||
if dt_sub <= dt_ecd:
|
||||
# Only keep submission date if submission_date > latest ECD
|
||||
if dt_sub <= dt_ecd:
|
||||
submission_date = None
|
||||
else:
|
||||
submission_date = None
|
||||
else:
|
||||
submission_date = None
|
||||
|
||||
# 1️⃣ Add latest expected commencement date WITH conditional submission date
|
||||
rows.append({
|
||||
"submission_date": submission_date,
|
||||
"expected_commencement_date": latest_ecd,
|
||||
"hubspot_id": deal["deal_properties"]["deal_id"],
|
||||
"work_type": product_type,
|
||||
"price": next(
|
||||
(item["price"] for item in deal["line_items"] if product_type in item["name"]),
|
||||
None
|
||||
),
|
||||
"deal_name": deal["deal_properties"]["dealname"],
|
||||
"company_name": deal["company_info"]["name"],
|
||||
})
|
||||
|
||||
# 2️⃣ Add the remaining history WITHOUT submission date
|
||||
for attempt in history_sorted[1:]:
|
||||
rows.append({
|
||||
"submission_date": None,
|
||||
"expected_commencement_date": historical_ecd_value_processes(attempt["value"]),
|
||||
# 1️⃣ Add latest expected commencement date WITH conditional submission date
|
||||
data = {
|
||||
"submission_date": submission_date,
|
||||
"expected_commencement_date": latest_ecd,
|
||||
"hubspot_id": deal["deal_properties"]["deal_id"],
|
||||
"work_type": product_type,
|
||||
"price": next(
|
||||
|
|
@ -138,10 +125,46 @@ class jsonReader:
|
|||
),
|
||||
"deal_name": deal["deal_properties"]["dealname"],
|
||||
"company_name": deal["company_info"]["name"],
|
||||
})
|
||||
}
|
||||
data = self._use_different_expected_commencement_data(data, deal)
|
||||
rows.append(data)
|
||||
|
||||
# 2️⃣ Add the remaining history WITHOUT submission date
|
||||
for attempt in history_sorted[1:]:
|
||||
data = {
|
||||
"submission_date": None,
|
||||
"expected_commencement_date": historical_ecd_value_processes(attempt["value"]),
|
||||
"hubspot_id": deal["deal_properties"]["deal_id"],
|
||||
"work_type": product_type,
|
||||
"price": next(
|
||||
(item["price"] for item in deal["line_items"] if product_type in item["name"]),
|
||||
None
|
||||
),
|
||||
"deal_name": deal["deal_properties"]["dealname"],
|
||||
"company_name": deal["company_info"]["name"],
|
||||
}
|
||||
data = self._use_different_expected_commencement_data(data, deal)
|
||||
rows.append(data)
|
||||
|
||||
|
||||
|
||||
|
||||
# Return a DataFrame or None
|
||||
return pd.DataFrame(rows) if rows else None
|
||||
|
||||
def _use_different_expected_commencement_data(self, org_data, deal):
|
||||
work_type = org_data['work_type'].lower()
|
||||
if "Coordination Stage".lower() in work_type:
|
||||
org_data.update({
|
||||
"expected_commencement_date": self.to_date_only(deal["deal_properties"]["mtp_planned_week"]),
|
||||
"submission_date": self.to_date_only(deal["deal_properties"]["mtp_completion_date"]),
|
||||
})
|
||||
elif "Design".lower() in work_type:
|
||||
org_data.update({
|
||||
"expected_commencement_date": self.to_date_only(deal["deal_properties"]["design_planned_week"]),
|
||||
"submission_date": self.to_date_only(deal["deal_properties"]["design_completion_date"]),
|
||||
})
|
||||
return org_data
|
||||
|
||||
def find_all_job_with_line_item(self):
|
||||
for i, deal in enumerate(self.raw_data):
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue