most feedback applied.

This commit is contained in:
2025-11-06 22:00:43 -08:00
parent dd13ed1711
commit 0022bb5abe
9 changed files with 1473 additions and 81 deletions

53
app.py
View File

@@ -3,7 +3,7 @@ import os
from functools import wraps
from datetime import datetime, timedelta
from flask import Flask, render_template, request, redirect, url_for, session, abort, jsonify
from flask import Flask, render_template, request, redirect, url_for, session, abort, jsonify
from dotenv import load_dotenv
import firebase_admin
from firebase_admin import credentials, auth as fb_auth, firestore
@@ -129,8 +129,28 @@ def fetch_all_projects():
fees_and_costs = fetch_form(bearer, pid, "feesAndCosts") or {}
lease_info_np = fetch_form(bearer, pid, "leaseInfoNP") or {}
completed_tasks = [x.get("body") for x in fetch_project_tasks(bearer, pid).get("items") if x.get("isCompleted")]
pending_tasks = [x.get("body") for x in fetch_project_tasks(bearer, pid).get("items") if not x.get("isCompleted")]
completed_tasks = [{"description": x.get("body") ,
"completed": x.get("completedDate")}
for x in fetch_project_tasks(bearer, pid).get("items")
if x.get("isCompleted")]
pending_tasks = [{"description": x.get("body") ,
"completed": x.get("completedDate")}
for x in fetch_project_tasks(bearer, pid).get("items")
if not x.get("isCompleted")]
team = fetch_project_team(bearer, pid)
assigned_attorney = next((m.get('fullname')
for m in team
if ('Assigned Attorney' in [r.get('name') for r in m.get('teamOrgRoles')])
), '')
primary_contact = next((m.get('fullname')
for m in team
if ('Primary' in [r.get('name') for r in m.get('teamOrgRoles')])
), '')
secondary_paralegal = next((m.get('fullname')
for m in team
if ('Secondary Paralegal' in [r.get('name') for r in m.get('teamOrgRoles')])
), '')
# Extract notice service and expiration dates
notice_service_date = new_file_review.get("noticeServiceDate") or ''
@@ -141,6 +161,7 @@ def fetch_all_projects():
# Extract default date
default_date = dates_and_deadlines.get("defaultDate") or ''
case_filed_date = dates_and_deadlines.get("dateCaseFiled") or ''
# Extract motion hearing dates
demurrer_hearing_date = dates_and_deadlines.get("demurrerHearingDate") or ''
@@ -195,16 +216,16 @@ def fetch_all_projects():
"notice_type": new_file_review.get("noticeType", '') or '',
"case_number": dates_and_deadlines.get('caseNumber', '') or '',
"premises_address": property_info.get("premisesAddressWithUnit") or '',
"premises_city": property_info.get("premisisCity") or '',
"client_email": "", # TODO
"responsible_attorney": matter_overview.get("signingAttorney"),
"staff_person": project_overview.get("teamLead"), # TODO
"staff_person_2": project_overview.get("teamLead"), # TODO
"premises_city": property_info.get("premisesCity") or '',
"responsible_attorney": assigned_attorney,
"staff_person": primary_contact,
"staff_person_2": secondary_paralegal,
"phase_name": p.get("phaseName"),
"completed_tasks": completed_tasks,
"pending_tasks": pending_tasks,
"notice_service_date": notice_service_date,
"notice_expiration_date": notice_expiration_date,
"case_field_date": case_filed_date,
"daily_rent_damages": daily_rent_damages,
"default_date": default_date,
"demurrer_hearing_date": demurrer_hearing_date,
@@ -232,7 +253,7 @@ def fetch_all_projects():
"date_possession_recovered": date_possession_recovered,
"attorney_fees": attorney_fees,
"costs": costs,
"documents_url": matter_overview.get('documentShareFolderURL') or '',
"service_attempt_date_1": next(iter(service_info), {}).get('serviceDate'),
"contacts": cs,
"ProjectEmailAddress": p.get("projectEmailAddress"),
@@ -395,6 +416,20 @@ def fetch_project_detail(bearer: str, project_id_native: int):
r.raise_for_status()
return r.json()
def fetch_project_team(bearer: str, project_id_native: int):
url = f"https://api.filevineapp.com/fv-app/v2/Projects/{project_id_native}/team?limit=1000"
headers = {
"Accept": "application/json",
"Authorization": f"Bearer {bearer}",
"x-fv-orgid": str(FV_ORG_ID),
"x-fv-userid": str(FV_USER_ID),
}
r = requests.get(url, headers=headers, timeout=30)
r.raise_for_status()
from pprint import pprint
pprint( r.json().get('items') or [])
return r.json().get('items') or []
def fetch_project_tasks(bearer: str, project_id_native: int):
url = f"https://api.filevineapp.com/fv-app/v2/Projects/{project_id_native}/tasks"
headers = {