most feedback applied.
This commit is contained in:
51
app.py
51
app.py
@@ -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 = {
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -3,7 +3,7 @@
|
||||
"url": "https://api.filevineapp.com/fv-app/v2/Projects/15974631/Forms/newFileReview",
|
||||
"headers": {
|
||||
"Accept": "application/json",
|
||||
"Authorization": "Bearer eyJhbGciOiJSUzUxMiIsImtpZCI6Ijg2NjRFMkY0MDNCQjIxMzk2MzQ4NUFDOEI0MzVGMEJBOTgxNTBFN0RSUzUxMiIsInR5cCI6ImF0K2p3dCIsIng1dCI6ImhtVGk5QU83SVRsalNGckl0RFh3dXBnVkRuMCJ9.eyJuYmYiOjE3NjIzOTk2NzAsImV4cCI6MTc2MjQwMTQ3MCwiaXNzIjoiaHR0cHM6Ly9pZGVudGl0eS5maWxldmluZS5jb20iLCJhdWQiOlsiZmlsZXZpbmUudjIuYXBpIiwiZnYuYXBpLmdhdGV3YXkiLCJmdi5hdXRoIl0sImNsaWVudF9pZCI6IjRGMTg3MzhDLTEwN0EtNEI4Mi1CRkFDLTMwOEYxQjZBNjI2QSIsInN1YiI6ImY3MDQ4NGZmLTQ5MjItNDliMy05MWFkLTE2YjA5Mjk5MGIzMCIsImF1dGhfdGltZSI6MTc2MjM5OTY3MCwiaWRwIjoibG9jYWwiLCJwYXRfaWQiOiJoQll0K013VUJ4bm9xOTNYNVNUdnpyY0xwVFQ2M09HVHhudVcrZGFyZTVJPSIsInBhdF9uYW1lIjoiQnJ5Y2UgQ292ZXJ0IiwicGF0X3ZlcnNpb24iOiIxIiwidGVuYW50X2ZybiI6ImZybjpmaWxldmluZTp1cy1wcm9kOmZpbGV2aW5lLWFwcDo6OnRlbmFudFxcMGJlOGFhOGItZmEyOS00MjQ0LWI1YzItMDE5NzIzMWExNWY5IiwidGVuYW50X2lkIjoiMGJlOGFhOGItZmEyOS00MjQ0LWI1YzItMDE5NzIzMWExNWY5IiwianRpIjoiN0UwRkMxMTBDMjM5QjAzREM4MzFGODIwRDU3RTY0NTgiLCJpYXQiOjE3NjIzOTk2NzAsInNjb3BlIjpbImVtYWlsIiwiZmlsZXZpbmUudjIuYXBpLioiLCJmdi5hcGkuZ2F0ZXdheS5hY2Nlc3MiLCJmdi5hdXRoLnRlbmFudC5yZWFkIiwib3BlbmlkIiwidGVuYW50Il0sImFtciI6WyJwZXJzb25hbF9hY2Nlc3NfdG9rZW4iXX0.BqS5GigC1BtZnMOrjduP3Oa_0UdEIPwYdO0EaYUYIVerB4tl5ryiJBxK0KOVqlE8uODpz04bIBy6JdLp3cjoVpzg7Zx3xG7zP_HOWNdVnVmKDbLgwWT0CLpqOE6H5EdZIC_lS5eKiwBCCAbBrYsD6afVsA3r1qEb5iFt_1ra3QyxrtyP-rWtTjHF3ifuyOqwImaTI7L1e1Fu1MHRyM0a9FnkQZmDpUKfopNftCz9nRv93ebjAbkipWNM9zPt-73BmSbEfpcnFWOjkIOqKzU-4GvElUlNj72_ek_QPSlr4Dx_uLsx0-3Mlp8S6wPp2me0PcqSSmm8aaHdGaoGPiyUPQ",
|
||||
"Authorization": "Bearer eyJhbGciOiJSUzUxMiIsImtpZCI6Ijk5MDg4NENGRTRCRTgyQzU4QzA0MDJBQjc5MkE2Rjc5NkI5MUQ2MTBSUzUxMiIsInR5cCI6ImF0K2p3dCIsIng1dCI6Im1RaUV6LVMtZ3NXTUJBS3JlU3B2ZVd1UjFoQSJ9.eyJuYmYiOjE3NjI0OTM4MjQsImV4cCI6MTc2MjQ5NTYyNCwiaXNzIjoiaHR0cHM6Ly9pZGVudGl0eS5maWxldmluZS5jb20iLCJhdWQiOlsiZmlsZXZpbmUudjIuYXBpIiwiZnYuYXBpLmdhdGV3YXkiLCJmdi5hdXRoIl0sImNsaWVudF9pZCI6IjRGMTg3MzhDLTEwN0EtNEI4Mi1CRkFDLTMwOEYxQjZBNjI2QSIsInN1YiI6ImY3MDQ4NGZmLTQ5MjItNDliMy05MWFkLTE2YjA5Mjk5MGIzMCIsImF1dGhfdGltZSI6MTc2MjQ5MzgyMywiaWRwIjoibG9jYWwiLCJwYXRfaWQiOiJoQll0K013VUJ4bm9xOTNYNVNUdnpyY0xwVFQ2M09HVHhudVcrZGFyZTVJPSIsInBhdF9uYW1lIjoiQnJ5Y2UgQ292ZXJ0IiwicGF0X3ZlcnNpb24iOiIxIiwidGVuYW50X2ZybiI6ImZybjpmaWxldmluZTp1cy1wcm9kOmZpbGV2aW5lLWFwcDo6OnRlbmFudFxcMGJlOGFhOGItZmEyOS00MjQ0LWI1YzItMDE5NzIzMWExNWY5IiwidGVuYW50X2lkIjoiMGJlOGFhOGItZmEyOS00MjQ0LWI1YzItMDE5NzIzMWExNWY5IiwianRpIjoiNEVDREE2MUQ5OUQ3QzFDQTAyMERDMTBFOEE4MzZCOEUiLCJpYXQiOjE3NjI0OTM4MjQsInNjb3BlIjpbImVtYWlsIiwiZmlsZXZpbmUudjIuYXBpLioiLCJmdi5hcGkuZ2F0ZXdheS5hY2Nlc3MiLCJmdi5hdXRoLnRlbmFudC5yZWFkIiwib3BlbmlkIiwidGVuYW50Il0sImFtciI6WyJwZXJzb25hbF9hY2Nlc3NfdG9rZW4iXX0.QjcCcKhW_Nu2pTT5csgOouwpgt-Wz4GmagHmUE3gME-Z2BtsjFG60uUXzuaEuJov5N7EC6IPI-eqcG8wz9vLj7rTZ1B4Nb0Poy9v9g1kyc5-Glc9VtCRM9EPyYkW2Ykw-FJvISZ4Y4n3NwakhDBZ1WrYz_ytHKAnFglXMrnl8LVehE6A9JjuHBXI1p8bpo1OGL4niyFtvxXLV5JwWgnopUIcULX-mfKFavAs-3Lmt_lv7jcdhzWMwhlDyerUOdW8YUpBYft68xY57c6yaHEAQYQbvvCGSKYoSUn3M3UpdzBIsMOj2GIkinyTeVvCn0JFi41N_brz7hAmRM6MPjS0Mw",
|
||||
"x-fv-orgid": "9227",
|
||||
"x-fv-userid": "100510"
|
||||
},
|
||||
@@ -133,7 +133,7 @@
|
||||
},
|
||||
"xxx": "b'{\"newFileBriefDescription\":null,\"newFileDetailedDescription\":null,\"noticeType\":\"Notice to Pay or Quit (NP)\",\"newFileNoticeToPrepNotes\":null,\"attorneyNewFileReviewNotes\":null,\"noticePrepNotesForReviewer\":null,\"noticeServiceDate\":\"2025-08-06T00:00:00Z\",\"noticeExpirationDate\":null,\"tenantCompliedWithNTCNTP\":null,\"tenantVacatedPerNotice\":null,\"nTCNTPViolationAfterNotic\":null,\"subpoenaNonStaffWitnesses\":null,\"attorneyFeesBaseFees\":null,\"attorneyFeesNTC\":null,\"actionUnder11612\":true,\"actionUnder11611\":null,\"actionUnder11613Curable\":null,\"actionUnder11613Incurabl\":null,\"actionUnder11614Subletti\":null,\"actionUnder11614Nuisance\":null,\"actionUnder11615\":null,\"actionUnder11614Crime\":null,\"actionUnder1161A\":null,\"116115CaseType\":null,\"194612CaseType\":null,\"1161ACaseType\":null,\"showMMOTerms\":null,\"mmoVacateDate\":null,\"mmoPaymentsIncluded\":null,\"mmoPaymentAmount1\":null,\"mmoPaymentDate1\":null,\"mmoRelocationPayments\":null,\"mmoWaiverOfClaims\":null,\"noticeIsRentOnly\":null,\"noticeNotes\":null,\"noticeDays\":null,\"noticeResult\":null,\"noticeDateSpecifiedToVacate\":null,\"mutualTerminationAgreementT\":null,\"secondCauseOfAction\":null,\"includeSecondCauseOfAction\":null,\"secondCauseOfActionType\":null,\"secondCauseNoticeServiceDate\":null,\"amountDemandedInNotice\":6461.00000000,\"dailyRentDamagesBegin\":\"2025-09-06T00:00:00Z\",\"commRentAcceptedAfterNotice\":null,\"noticeDaysAndAmounts\":null,\"secondCauseNoticeDaysPerform\":null,\"secondCauseNoticeDaysVacate\":null,\"secondCauseNoticeExhibitNum\":null,\"noticeDaysToPayOrPerform\":3,\"noticeDaysToVacate\":30,\"employmentTerminationDate\":null,\"causeOfAction\":null,\"mMOSignedOn\":null,\"noticeToCorrectServedPrior\":null,\"commercialRentStillOwing\":6461.00000000,\"ourServerToServeTheNotice\":null,\"attorneyNoticeServiceTaskList\":null,\"sendNTCToClientToServe\":null,\"sendNTCToClientToReview\":null,\"noticeSubmissionAndService\":null,\"billNTC\":null,\"attorneyFeesNTC_1\":null,\"billResidentialNonmonetary\":null,\"billCommercialNonmonetary\":null,\"uDBaseFeeResidentialNonmo\":null,\"uDBaseFeeCommercialNonmon\":null,\"billForMMOLetterContract\":null,\"attorneyFeesLetterMMOCo\":null,\"bILLING\":null,\"billForNoticePrepOnly\":null,\"attorneyFeesNoticeOnly\":null,\"billForNPReviewAndPrepOnly\":null,\"attorneyFeesNonpaymentRevi\":null,\"billForTenantBuyOutAgreementOnly\":null,\"attorneyFeesTenantBuyOut\":null,\"billForServiceOfNotice\":null,\"costsServiceOfNotice\":null,\"isThisACaseTakeover\":null,\"caseTakeoverAdditionalFee\":null,\"typeOfTenancy\":null,\"emailProcessServerRequestingPhotoOfPosting\":null,\"operativeNotice\":{\"id\":492890225,\"orgID\":9227,\"projectID\":15974631,\"filename\":\"S. Whelan Proof of Service.pdf\",\"uploadDate\":\"2025-11-04T20:41:38.54Z\",\"templateID\":null,\"templateName\":null,\"reportFusionID\":null,\"reportFusionName\":null,\"contractID\":null,\"canEditInPlace\":true,\"lockedByUserID\":null,\"lockedTime\":null,\"lockExpirationTime\":null,\"lockedByUserFullName\":null,\"isPending\":false,\"isProtected\":false,\"isProtectedPlaceholder\":false,\"contract\":null,\"antivirusScanResult\":[],\"docKey\":\"26a2320e/Ocr-c6614e8966514338ab80ebb9f9c28912.Pdf\"},\"areThereNotesForTheReview\":null,\"noticePrepperNotes\":null,\"sendNTPToCLIENTTOSERVE\":null,\"sendNTPToClientToReview\":null,\"sendNTQToCLIENTTOSERVE\":null,\"sendNTQToClientToReview\":null,\"sendNTVToCLIENTTOSERVE\":null,\"sendNTVToClientToReview\":null,\"sendNTTToCLIENTTOSERVE\":null,\"sendNTTToClientToReview\":null,\"sendMMOToCLIENTTOSIGN\":null}'",
|
||||
"headers": {
|
||||
"Date": "Thu, 06 Nov 2025 03:27:50 GMT",
|
||||
"Date": "Fri, 07 Nov 2025 05:37:04 GMT",
|
||||
"Content-Type": "application/json; charset=utf-8",
|
||||
"Transfer-Encoding": "chunked",
|
||||
"Connection": "keep-alive",
|
||||
@@ -146,16 +146,16 @@
|
||||
"ratelimit-remaining": "9;r=3300;w=60;c=Customer Temp",
|
||||
"content-security-policy": "default-src 'self';child-src https://fv-prod-us-shard-h-images.s3.amazonaws.com https://fv-prod-us-shard-h-docs.s3.amazonaws.com https://app.vinesign.com https://fv-prod-us-shard-h-report-export.s3.us-west-2.amazonaws.com https://medchron-results-prod.s3.us-east-1.amazonaws.com *.amazonaws.com https://app.pendo.io https://feedback.us.pendo.io docs.google.com https://feedback.filevine.com *.newrelic.com *.filev.io *.flvn.io filev.io flvn.io 'self';connect-src *.filevinedev.com *.filevineapp.com *.filevine.ca *.filevine.com *.filevinegov.com *.fvauth.com https://app.vinesign.com https://fv-prod-us-shard-h-docs.s3.amazonaws.com https://fv-prod-us-shard-h-report-export.s3.us-west-2.amazonaws.com https://medchron-results-prod.s3.us-east-1.amazonaws.com *.amazonaws.com *.nr-data.net *.pendo.io *.pdftron.com *.typeform.com *.newrelic.com https://app.pendo.io https://data.pendo.io https://pendo-static-5683967597215744.storage.googleapis.com https://pendo-io-static.storage.googleapis.com https://localhost:8080 *.filev.io *.flvn.io filev.io flvn.io 'self' blob: wss:;font-src *.bootstrapcdn.com fonts.gstatic.com *.typekit.net *.typeform.com 'self' data: blob:;frame-src *;frame-ancestors https://*.filevineapp.com https://app.pendo.io 'self';img-src *.typekit.net *.typeform.com https://app.pendo.io https://cdn.pendo.io https://data.pendo.io https://pendo-static-5683967597215744.storage.googleapis.com https://pendo-io-static.storage.googleapis.com https://fv-prod-us-shard-h-images.s3.amazonaws.com https://fv-prod-us-shard-h-images.s3.us-west-2.amazonaws.com https://fv-globalproducts-prod-us-logos.s3.us-west-2.amazonaws.com https://us.fv-globalproducts-logos.prod.filevine.com https://fv-prod-us-shard-h-fv-internal-image.s3.amazonaws.com https://fv-prod-us-shard-h-fv-internal-image.s3.us-west-2.amazonaws.com https://fv-prod-us-shard-h-docs.s3.amazonaws.com https://fv-prod-us-shard-h-docs.s3.us-west-2.amazonaws.com https://medchron-results-prod.s3.amazonaws.com https://medchron-results-prod.s3.us-east-1.amazonaws.com *.filev.io *.flvn.io filev.io flvn.io *.kaywa.com www.googletagmanager.com 'self' data: blob: cid:;manifest-src 'self';media-src https://fv-prod-us-shard-h-images.s3.amazonaws.com https://fv-prod-us-shard-h-images.s3.us-west-2.amazonaws.com https://fv-prod-us-shard-h-docs.s3.amazonaws.com https://fv-prod-us-shard-h-docs.s3.us-west-2.amazonaws.com https://medchron-results-prod.s3.amazonaws.com https://medchron-results-prod.s3.us-east-1.amazonaws.com https://fv-prod-us-shard-h-report-export.s3.us-west-2.amazonaws.com https://us-shard-h-discussions.filevineapp.com *.filev.io *.flvn.io filev.io flvn.io 'self';object-src https://fv-prod-us-shard-h-images.s3.amazonaws.com https://fv-prod-us-shard-h-images.s3.us-west-2.amazonaws.com https://fv-prod-us-shard-h-docs.s3.amazonaws.com https://fv-prod-us-shard-h-docs.s3.us-west-2.amazonaws.com https://medchron-results-prod.s3.amazonaws.com https://medchron-results-prod.s3.us-east-1.amazonaws.com https://fv-prod-us-shard-h-report-export.s3.us-west-2.amazonaws.com *.filev.io *.flvn.io filev.io flvn.io 'self';script-src *.bootstrapcdn.com *.typekit.net *.typeform.com *.newrelic.com *.nr-data.net https://app.pendo.io https://cdn.pendo.io https://data.pendo.io https://pendo-static-5683967597215744.storage.googleapis.com https://pendo-io-static.storage.googleapis.com https://duuxdetkhlwyv.cloudfront.net https://code.jquery.com https://localhost:8080 https://www.googletagmanager.com 'unsafe-inline' 'unsafe-eval' 'self' blob:;style-src *.bootstrapcdn.com fonts.googleapis.com *.typekit.net *.typeform.com https://app.pendo.io https://pendo-static-5683967597215744.storage.googleapis.com https://pendo-io-static.storage.googleapis.com https://duuxdetkhlwyv.cloudfront.net https://cdn.pendo.io https://data.pendo.io 'unsafe-inline' 'self';worker-src 'self' blob: 'unsafe-inline'",
|
||||
"x-filevine-api-version": "3.3487.15.0",
|
||||
"x-fv-correlation-id": "734e7dcd1fb947e18b7e2872ae07b0bd",
|
||||
"x-fv-correlation-id": "802e4cb7c2814f5ba0faed65142cf10b",
|
||||
"x-aspnet-version": "4.0.30319",
|
||||
"x-powered-by": "ASP.NET",
|
||||
"x-content-type-options": "nosniff",
|
||||
"x-frame-option": "SAMEORIGIN",
|
||||
"x-xss-protection": "1; mode=block",
|
||||
"x-fv-gateway-correlation-id": "734e7dcd1fb947e18b7e2872ae07b0bd",
|
||||
"x-fv-gateway-correlation-id": "802e4cb7c2814f5ba0faed65142cf10b",
|
||||
"cf-cache-status": "DYNAMIC",
|
||||
"Content-Encoding": "gzip",
|
||||
"CF-RAY": "99a17f540b887582-SEA",
|
||||
"CF-RAY": "99aa7a005dbb75d0-SEA",
|
||||
"alt-svc": "h3=\":443\"; ma=86400"
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
1377
examples/project_team.json
Normal file
1377
examples/project_team.json
Normal file
File diff suppressed because one or more lines are too long
@@ -3,7 +3,7 @@
|
||||
"url": "https://api.filevineapp.com/fv-app/v2/ProjectTypes/34111/phases",
|
||||
"headers": {
|
||||
"Accept": "application/json",
|
||||
"Authorization": "Bearer eyJhbGciOiJSUzUxMiIsImtpZCI6Ijg2NjRFMkY0MDNCQjIxMzk2MzQ4NUFDOEI0MzVGMEJBOTgxNTBFN0RSUzUxMiIsInR5cCI6ImF0K2p3dCIsIng1dCI6ImhtVGk5QU83SVRsalNGckl0RFh3dXBnVkRuMCJ9.eyJuYmYiOjE3NjIzOTk2NzEsImV4cCI6MTc2MjQwMTQ3MSwiaXNzIjoiaHR0cHM6Ly9pZGVudGl0eS5maWxldmluZS5jb20iLCJhdWQiOlsiZmlsZXZpbmUudjIuYXBpIiwiZnYuYXBpLmdhdGV3YXkiLCJmdi5hdXRoIl0sImNsaWVudF9pZCI6IjRGMTg3MzhDLTEwN0EtNEI4Mi1CRkFDLTMwOEYxQjZBNjI2QSIsInN1YiI6ImY3MDQ4NGZmLTQ5MjItNDliMy05MWFkLTE2YjA5Mjk5MGIzMCIsImF1dGhfdGltZSI6MTc2MjM5OTY3MSwiaWRwIjoibG9jYWwiLCJwYXRfaWQiOiJoQll0K013VUJ4bm9xOTNYNVNUdnpyY0xwVFQ2M09HVHhudVcrZGFyZTVJPSIsInBhdF9uYW1lIjoiQnJ5Y2UgQ292ZXJ0IiwicGF0X3ZlcnNpb24iOiIxIiwidGVuYW50X2ZybiI6ImZybjpmaWxldmluZTp1cy1wcm9kOmZpbGV2aW5lLWFwcDo6OnRlbmFudFxcMGJlOGFhOGItZmEyOS00MjQ0LWI1YzItMDE5NzIzMWExNWY5IiwidGVuYW50X2lkIjoiMGJlOGFhOGItZmEyOS00MjQ0LWI1YzItMDE5NzIzMWExNWY5IiwianRpIjoiRjI1MENBNjMyRkJGNjZERjFBNDRGNkE4RUFGODkwQ0UiLCJpYXQiOjE3NjIzOTk2NzEsInNjb3BlIjpbImVtYWlsIiwiZmlsZXZpbmUudjIuYXBpLioiLCJmdi5hcGkuZ2F0ZXdheS5hY2Nlc3MiLCJmdi5hdXRoLnRlbmFudC5yZWFkIiwib3BlbmlkIiwidGVuYW50Il0sImFtciI6WyJwZXJzb25hbF9hY2Nlc3NfdG9rZW4iXX0.zBMiSHusFt5F08vjoucT4fFlKUvZ6B5WfChZvEyYs8liaWitNq1X1RqniqE3YEhaRpeSPLWwvMAwgrKwGIO806LsuWXSDdOfrZujUpGVRJ4MIjINm7423qSl_KtdH1G_WGt4wM7Qh4jJRNDsifJO0f2eM-sqGe5RSIGEigYp8B1c8Grsn-h_fgNVTjT5zJV80w1E8w2tltRpn41xBZFpJsJGSLWlj6dh0_ZeSvFzB5cKOjzjg6doWEKb27cYnyOCkvvoGZ1qmEx5_iyNdn_1sFIL1C1GxcKvY3ZlRGAbqjfT_l63E8mbJ27Lat1F1k7KoOgnOQ48XzNhWjmyoA4D8Q",
|
||||
"Authorization": "Bearer eyJhbGciOiJSUzUxMiIsImtpZCI6Ijk5MDg4NENGRTRCRTgyQzU4QzA0MDJBQjc5MkE2Rjc5NkI5MUQ2MTBSUzUxMiIsInR5cCI6ImF0K2p3dCIsIng1dCI6Im1RaUV6LVMtZ3NXTUJBS3JlU3B2ZVd1UjFoQSJ9.eyJuYmYiOjE3NjI0OTM4MjUsImV4cCI6MTc2MjQ5NTYyNSwiaXNzIjoiaHR0cHM6Ly9pZGVudGl0eS5maWxldmluZS5jb20iLCJhdWQiOlsiZmlsZXZpbmUudjIuYXBpIiwiZnYuYXBpLmdhdGV3YXkiLCJmdi5hdXRoIl0sImNsaWVudF9pZCI6IjRGMTg3MzhDLTEwN0EtNEI4Mi1CRkFDLTMwOEYxQjZBNjI2QSIsInN1YiI6ImY3MDQ4NGZmLTQ5MjItNDliMy05MWFkLTE2YjA5Mjk5MGIzMCIsImF1dGhfdGltZSI6MTc2MjQ5MzgyNSwiaWRwIjoibG9jYWwiLCJwYXRfaWQiOiJoQll0K013VUJ4bm9xOTNYNVNUdnpyY0xwVFQ2M09HVHhudVcrZGFyZTVJPSIsInBhdF9uYW1lIjoiQnJ5Y2UgQ292ZXJ0IiwicGF0X3ZlcnNpb24iOiIxIiwidGVuYW50X2ZybiI6ImZybjpmaWxldmluZTp1cy1wcm9kOmZpbGV2aW5lLWFwcDo6OnRlbmFudFxcMGJlOGFhOGItZmEyOS00MjQ0LWI1YzItMDE5NzIzMWExNWY5IiwidGVuYW50X2lkIjoiMGJlOGFhOGItZmEyOS00MjQ0LWI1YzItMDE5NzIzMWExNWY5IiwianRpIjoiRUFEMUY5RDBCOTkzNjVCRTQyMjA0RDNGNkJFMzg5NkEiLCJpYXQiOjE3NjI0OTM4MjUsInNjb3BlIjpbImVtYWlsIiwiZmlsZXZpbmUudjIuYXBpLioiLCJmdi5hcGkuZ2F0ZXdheS5hY2Nlc3MiLCJmdi5hdXRoLnRlbmFudC5yZWFkIiwib3BlbmlkIiwidGVuYW50Il0sImFtciI6WyJwZXJzb25hbF9hY2Nlc3NfdG9rZW4iXX0.W3zXHAKoBQLtblmBIcqTh7Zia0zWKVy9e5A2kUKkcESxTDD47HZhpxHDp62lJbgMN15b96yuf8YTybtNfWVV9W6fkVEebaVs8vWCxwiDXWFhmqIp8XJ_m5TXY6ymefs0YYALWHkxd0ZLR-WOwiIFJOXZoKeQACh9pkkRjXhwvPlisiqFO5LzCAZuyKFl-vIXeAu9gWDw2iCEcAJI8aBphPCNHbzmkuv3BGi0OG6NtpY2keNHu_jVbXHKZeWS16FpcmgIMYVEtPe61gGiNwzhS02EAlEw28WAfHul8bWK24tBI4kAD4L3ajb2TOsWgw9GTrOJhCnr_PgQ8RVBAM98Jw",
|
||||
"x-fv-orgid": "9227",
|
||||
"x-fv-userid": "100510"
|
||||
},
|
||||
@@ -244,7 +244,7 @@
|
||||
},
|
||||
"xxx": "b'{\"count\":24,\"offset\":0,\"limit\":50,\"hasMore\":false,\"requestedFields\":\"*\",\"items\":[{\"phaseId\":{\"native\":209436,\"partner\":null},\"name\":\"Nonpayment File Review\",\"isPermanent\":false,\"links\":{}},{\"phaseId\":{\"native\":209437,\"partner\":null},\"name\":\"Attorney File Review\",\"isPermanent\":false,\"links\":{}},{\"phaseId\":{\"native\":209438,\"partner\":null},\"name\":\"Notice Preparation\",\"isPermanent\":false,\"links\":{}},{\"phaseId\":{\"native\":209439,\"partner\":null},\"name\":\"Notice Pending\",\"isPermanent\":false,\"links\":{}},{\"phaseId\":{\"native\":209440,\"partner\":null},\"name\":\"Notice Expired\",\"isPermanent\":false,\"links\":{}},{\"phaseId\":{\"native\":209442,\"partner\":null},\"name\":\"Preparing and Filing UD\",\"isPermanent\":false,\"links\":{}},{\"phaseId\":{\"native\":209443,\"partner\":null},\"name\":\"Waiting for Answer\",\"isPermanent\":false,\"links\":{}},{\"phaseId\":{\"native\":209444,\"partner\":null},\"name\":\"Archived\",\"isPermanent\":true,\"links\":{}},{\"phaseId\":{\"native\":210761,\"partner\":null},\"name\":\"Service of Process\",\"isPermanent\":false,\"links\":{}},{\"phaseId\":{\"native\":211435,\"partner\":null},\"name\":\"Default\",\"isPermanent\":false,\"links\":{}},{\"phaseId\":{\"native\":211436,\"partner\":null},\"name\":\"Pre-Answer Motion\",\"isPermanent\":false,\"links\":{}},{\"phaseId\":{\"native\":211437,\"partner\":null},\"name\":\"Request for Trial\",\"isPermanent\":false,\"links\":{}},{\"phaseId\":{\"native\":211438,\"partner\":null},\"name\":\"Trial Prep and Trial\",\"isPermanent\":false,\"links\":{}},{\"phaseId\":{\"native\":211439,\"partner\":null},\"name\":\"Writ and Sheriff\",\"isPermanent\":false,\"links\":{}},{\"phaseId\":{\"native\":211440,\"partner\":null},\"name\":\"Lockout Pending\",\"isPermanent\":false,\"links\":{}},{\"phaseId\":{\"native\":211441,\"partner\":null},\"name\":\"Stipulation Preparation\",\"isPermanent\":false,\"links\":{}},{\"phaseId\":{\"native\":211442,\"partner\":null},\"name\":\"Stipulation Pending\",\"isPermanent\":false,\"links\":{}},{\"phaseId\":{\"native\":211443,\"partner\":null},\"name\":\"Stipulation Expired\",\"isPermanent\":false,\"links\":{}},{\"phaseId\":{\"native\":211446,\"partner\":null},\"name\":\"On Hold\",\"isPermanent\":false,\"links\":{}},{\"phaseId\":{\"native\":211466,\"partner\":null},\"name\":\"Request for Monetary Judgment\",\"isPermanent\":false,\"links\":{}},{\"phaseId\":{\"native\":211467,\"partner\":null},\"name\":\"Appeals and Post-Poss. Motions\",\"isPermanent\":false,\"links\":{}},{\"phaseId\":{\"native\":211957,\"partner\":null},\"name\":\"Migrated\",\"isPermanent\":false,\"links\":{}},{\"phaseId\":{\"native\":213691,\"partner\":null},\"name\":\"Close Out/ Invoicing\",\"isPermanent\":false,\"links\":{}},{\"phaseId\":{\"native\":213774,\"partner\":null},\"name\":\"Judgment After Stip & Order\",\"isPermanent\":false,\"links\":{}}],\"links\":{\"self\":\"/projecttypess/34111/sections?name=&offset=0&limit=50&requestedFields=*\",\"prev\":null,\"next\":null}}'",
|
||||
"headers": {
|
||||
"Date": "Thu, 06 Nov 2025 03:27:52 GMT",
|
||||
"Date": "Fri, 07 Nov 2025 05:37:05 GMT",
|
||||
"Content-Type": "application/json; charset=utf-8",
|
||||
"Transfer-Encoding": "chunked",
|
||||
"Connection": "keep-alive",
|
||||
@@ -254,19 +254,19 @@
|
||||
"access-control-allow-origin": "*",
|
||||
"Cache-Control": "no-store, must-revalidate, no-cache, max-age=0, private",
|
||||
"ratelimit-limit": "10;r=3300;w=60;c=Customer Temp",
|
||||
"ratelimit-remaining": "8;r=3300;w=60;c=Customer Temp",
|
||||
"ratelimit-remaining": "9;r=3300;w=60;c=Customer Temp",
|
||||
"content-security-policy": "default-src 'self';child-src https://fv-prod-us-shard-h-images.s3.amazonaws.com https://fv-prod-us-shard-h-docs.s3.amazonaws.com https://app.vinesign.com https://fv-prod-us-shard-h-report-export.s3.us-west-2.amazonaws.com https://medchron-results-prod.s3.us-east-1.amazonaws.com *.amazonaws.com https://app.pendo.io https://feedback.us.pendo.io docs.google.com https://feedback.filevine.com *.newrelic.com *.filev.io *.flvn.io filev.io flvn.io 'self';connect-src *.filevinedev.com *.filevineapp.com *.filevine.ca *.filevine.com *.filevinegov.com *.fvauth.com https://app.vinesign.com https://fv-prod-us-shard-h-docs.s3.amazonaws.com https://fv-prod-us-shard-h-report-export.s3.us-west-2.amazonaws.com https://medchron-results-prod.s3.us-east-1.amazonaws.com *.amazonaws.com *.nr-data.net *.pendo.io *.pdftron.com *.typeform.com *.newrelic.com https://app.pendo.io https://data.pendo.io https://pendo-static-5683967597215744.storage.googleapis.com https://pendo-io-static.storage.googleapis.com https://localhost:8080 *.filev.io *.flvn.io filev.io flvn.io 'self' blob: wss:;font-src *.bootstrapcdn.com fonts.gstatic.com *.typekit.net *.typeform.com 'self' data: blob:;frame-src *;frame-ancestors https://*.filevineapp.com https://app.pendo.io 'self';img-src *.typekit.net *.typeform.com https://app.pendo.io https://cdn.pendo.io https://data.pendo.io https://pendo-static-5683967597215744.storage.googleapis.com https://pendo-io-static.storage.googleapis.com https://fv-prod-us-shard-h-images.s3.amazonaws.com https://fv-prod-us-shard-h-images.s3.us-west-2.amazonaws.com https://fv-globalproducts-prod-us-logos.s3.us-west-2.amazonaws.com https://us.fv-globalproducts-logos.prod.filevine.com https://fv-prod-us-shard-h-fv-internal-image.s3.amazonaws.com https://fv-prod-us-shard-h-fv-internal-image.s3.us-west-2.amazonaws.com https://fv-prod-us-shard-h-docs.s3.amazonaws.com https://fv-prod-us-shard-h-docs.s3.us-west-2.amazonaws.com https://medchron-results-prod.s3.amazonaws.com https://medchron-results-prod.s3.us-east-1.amazonaws.com *.filev.io *.flvn.io filev.io flvn.io *.kaywa.com www.googletagmanager.com 'self' data: blob: cid:;manifest-src 'self';media-src https://fv-prod-us-shard-h-images.s3.amazonaws.com https://fv-prod-us-shard-h-images.s3.us-west-2.amazonaws.com https://fv-prod-us-shard-h-docs.s3.amazonaws.com https://fv-prod-us-shard-h-docs.s3.us-west-2.amazonaws.com https://medchron-results-prod.s3.amazonaws.com https://medchron-results-prod.s3.us-east-1.amazonaws.com https://fv-prod-us-shard-h-report-export.s3.us-west-2.amazonaws.com https://us-shard-h-discussions.filevineapp.com *.filev.io *.flvn.io filev.io flvn.io 'self';object-src https://fv-prod-us-shard-h-images.s3.amazonaws.com https://fv-prod-us-shard-h-images.s3.us-west-2.amazonaws.com https://fv-prod-us-shard-h-docs.s3.amazonaws.com https://fv-prod-us-shard-h-docs.s3.us-west-2.amazonaws.com https://medchron-results-prod.s3.amazonaws.com https://medchron-results-prod.s3.us-east-1.amazonaws.com https://fv-prod-us-shard-h-report-export.s3.us-west-2.amazonaws.com *.filev.io *.flvn.io filev.io flvn.io 'self';script-src *.bootstrapcdn.com *.typekit.net *.typeform.com *.newrelic.com *.nr-data.net https://app.pendo.io https://cdn.pendo.io https://data.pendo.io https://pendo-static-5683967597215744.storage.googleapis.com https://pendo-io-static.storage.googleapis.com https://duuxdetkhlwyv.cloudfront.net https://code.jquery.com https://localhost:8080 https://www.googletagmanager.com 'unsafe-inline' 'unsafe-eval' 'self' blob:;style-src *.bootstrapcdn.com fonts.googleapis.com *.typekit.net *.typeform.com https://app.pendo.io https://pendo-static-5683967597215744.storage.googleapis.com https://pendo-io-static.storage.googleapis.com https://duuxdetkhlwyv.cloudfront.net https://cdn.pendo.io https://data.pendo.io 'unsafe-inline' 'self';worker-src 'self' blob: 'unsafe-inline'",
|
||||
"x-filevine-api-version": "3.3487.15.0",
|
||||
"x-fv-correlation-id": "af523cb9727b41c188375c0df071e2bb",
|
||||
"x-fv-correlation-id": "54f776bd9bd042be9c0e6b06b1e9a47c",
|
||||
"x-aspnet-version": "4.0.30319",
|
||||
"x-powered-by": "ASP.NET",
|
||||
"x-content-type-options": "nosniff",
|
||||
"x-frame-option": "SAMEORIGIN",
|
||||
"x-xss-protection": "1; mode=block",
|
||||
"x-fv-gateway-correlation-id": "af523cb9727b41c188375c0df071e2bb",
|
||||
"x-fv-gateway-correlation-id": "54f776bd9bd042be9c0e6b06b1e9a47c",
|
||||
"cf-cache-status": "DYNAMIC",
|
||||
"Content-Encoding": "gzip",
|
||||
"CF-RAY": "99a17f5c48330879-SEA",
|
||||
"CF-RAY": "99aa7a087a3db0df-SEA",
|
||||
"alt-svc": "h3=\":443\"; ma=86400"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -222,8 +222,22 @@ REQUESTS = [
|
||||
"method": "GET"
|
||||
|
||||
}, "examples/project_type_pahe_list.json"
|
||||
)
|
||||
]
|
||||
),
|
||||
(
|
||||
{
|
||||
"url": f"https://api.filevineapp.com/fv-app/v2/Projects/15914808/team",
|
||||
"headers": {
|
||||
"Accept": "application/json",
|
||||
"Authorization": f"Bearer {get_bearer_token()}",
|
||||
"x-fv-orgid": os.environ.get("FILEVINE_ORG_ID"),
|
||||
"x-fv-userid": os.environ.get("FILEVINE_USER_ID"),
|
||||
},
|
||||
"params": {"limit": 1000},
|
||||
"method": "GET"
|
||||
|
||||
},
|
||||
"examples/project_team.json"
|
||||
)]
|
||||
|
||||
def generate_sample_request_response(request_config):
|
||||
"""Generate a sample request/response pair using the provided request configuration."""
|
||||
|
||||
3
sync.py
3
sync.py
@@ -21,6 +21,9 @@ def main():
|
||||
print(f"Successfully synced {len(projects)} projects to Firestore")
|
||||
except Exception as e:
|
||||
print(f"Error during sync: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
sys.exit(1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
@@ -16,11 +16,10 @@
|
||||
<th class="px-4 py-3">Case Number</th>
|
||||
<th class="px-4 py-3">Premises Address</th>
|
||||
<th class="px-4 py-3">Premises City</th>
|
||||
<th class="px-4 py-3">Client Email (Primary)</th>
|
||||
<th class="px-4 py-3">Responsible Attorney and best contact</th>
|
||||
<th class="px-4 py-3">Staff person currently in charge of your case, with contact info</th>
|
||||
<th class="px-4 py-3">2nd Staff person currently in charge of your case, with contact info</th>
|
||||
<th class="px-4 py-3">Link to Hona Portal</th>
|
||||
<th class="px-4 py-3">Link to Documents</th>
|
||||
<th class="px-4 py-3">Matter Stage</th>
|
||||
<th class="px-4 py-3">Completed Tasks</th>
|
||||
<th class="px-4 py-3">Pending Tasks</th>
|
||||
@@ -56,7 +55,6 @@
|
||||
<th class="px-4 py-3">Date Possession Recovered</th>
|
||||
<th class="px-4 py-3">Attorney's Fees</th>
|
||||
<th class="px-4 py-3">Costs</th>
|
||||
<th class="px-4 py-3">Service Attempt Date 1</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="divide-y">
|
||||
@@ -73,59 +71,25 @@
|
||||
<td class="px-4 py-3 text-sm">{{ r.premises_address }}</td>
|
||||
<td class="px-4 py-3 text-sm">{{ r.premises_city }}</td>
|
||||
<td class="px-4 py-3 text-sm">
|
||||
|
||||
<div class="flex"></div>
|
||||
<div class="rounded-2xl bg-red-50 text-red-900 p-2 text-xs">???</div>
|
||||
</div>
|
||||
{{ r.responsible_attorney }}
|
||||
</td>
|
||||
<td class="px-4 py-3 text-sm">
|
||||
{% if r.responsible_attorney %}
|
||||
<div class="flex gap-4">
|
||||
<div
|
||||
class="relative rounded-full bg-green-100 w-12 h-12 inline-flex items-center justify-center text-strong-600 font-semibold text-sm border border-green-200 shadow-sm">
|
||||
<span>{{- r.responsible_attorney.initials}}</span>
|
||||
</div>
|
||||
|
||||
<div>{{ r.responsible_attorney.fullname }}</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{{ r.staff_person }}
|
||||
</td>
|
||||
<td class="px-4 py-3 text-sm">
|
||||
<div class="flex gap-4">
|
||||
|
||||
{% if r.staff_person %}
|
||||
<div class="flex gap-4">
|
||||
<div
|
||||
class="relative rounded-full bg-green-100 w-12 h-12 inline-flex items-center justify-center text-strong-600 font-semibold text-sm border border-green-200 shadow-sm">
|
||||
<span>{{- r.staff_person.initials}}</span>
|
||||
</div>
|
||||
|
||||
<div>{{ r.staff_person.fullname }}</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="rounded-2xl bg-red-50 text-red-900 p-2 text-xs">???</div>
|
||||
</div>
|
||||
{{ r.staff_person_2 }}
|
||||
</td>
|
||||
<td class="px-4 py-3 text-sm">
|
||||
<div class="flex">
|
||||
<div class="rounded-2xl bg-red-50 text-red-900 p-2 text-xs">???</div>
|
||||
|
||||
</div>
|
||||
</td>
|
||||
<td class="px-4 py-3 text-sm">
|
||||
<div class="flex"></div>
|
||||
<div class="rounded-2xl bg-red-50 text-red-900 p-2 text-xs">???</div>
|
||||
|
||||
</div>
|
||||
|
||||
</td>
|
||||
{% if r.documents_url %}
|
||||
<a href="{{ r.documents_url }}">Documents</a>
|
||||
{% endif %}</td>
|
||||
<td class="px-4 py-3 text-sm"> {{ r.phase_name }}</td>
|
||||
<td class="px-4 py-3 text-sm align-top" x-data="{ showCompletedModal: false}">
|
||||
{% if r.completed_tasks %}
|
||||
<div>
|
||||
<ul class="list-disc list-inside align-top">
|
||||
{% for x in r.completed_tasks[:2] %}
|
||||
<li>{{ x }}</li>
|
||||
<li>{{ x.description }} - {{ x.completed }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% if r.completed_tasks|length > 2 %}
|
||||
@@ -148,7 +112,7 @@
|
||||
</div>
|
||||
<ul class="list-disc list-inside">
|
||||
{% for x in r.completed_tasks %}
|
||||
<li>{{ x }}</li>
|
||||
<li>{{ x.description }} - {{ x.completed }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
@@ -160,7 +124,7 @@
|
||||
<div>
|
||||
<ul class="list-disc list-inside align-top">
|
||||
{% for x in r.pending_tasks[:2] %}
|
||||
<li>{{ x }}</li>
|
||||
<li>{{ x.description }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% if r.pending_tasks|length > 2 %}
|
||||
@@ -183,7 +147,7 @@
|
||||
</div>
|
||||
<ul class="list-disc list-inside">
|
||||
{% for x in r.pending_tasks %}
|
||||
<li>{{ x }}</li>
|
||||
<li>{{ x.description }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
@@ -192,7 +156,7 @@
|
||||
</td>
|
||||
<td class="px-4 py-3 text-sm">{{ r.notice_service_date }}</td>
|
||||
<td class="px-4 py-3 text-sm">{{ r.notice_expiration_date }}</td>
|
||||
<td class="px-4 py-3 text-sm"></td>
|
||||
<td class="px-4 py-3 text-sm">{{ r.case_field_date }}</td>
|
||||
<td class="px-4 py-3 text-sm">{% if r.daily_rent_damages %}${{ "{:,.2f}".format(r.daily_rent_damages) }}{% endif %}</td>
|
||||
<td class="px-4 py-3 text-sm">{{ r.default_date }}</td>
|
||||
<td class="px-4 py-3 text-sm">{{ r.default_entered_on_date }}</td>
|
||||
@@ -222,7 +186,6 @@
|
||||
<td class="px-4 py-3 text-sm">{{ r.date_possession_recovered }}</td>
|
||||
<td class="px-4 py-3 text-sm">{{ r.attorney_fees }}</td>
|
||||
<td class="px-4 py-3 text-sm">{{ r.costs }}</td>
|
||||
<td class="px-4 py-3 text-sm">{{ r.service_attempt_date_1 }}</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr>
|
||||
|
||||
Reference in New Issue
Block a user