items
This commit is contained in:
86
app/main.py
86
app/main.py
@@ -196,10 +196,15 @@ def validate_csv_headers(headers: List[str], expected_fields: Dict[str, str]) ->
|
||||
if not matched:
|
||||
result['errors'].append(f"Unknown header: '{csv_header}'")
|
||||
|
||||
# Check for required fields
|
||||
# Check for required fields (case-insensitive)
|
||||
required_fields = ['id'] # Most imports need some form of ID
|
||||
for required in required_fields:
|
||||
if required not in result['field_mapping']:
|
||||
found = False
|
||||
for mapped_field in result['field_mapping']:
|
||||
if mapped_field.lower() == required.lower():
|
||||
found = True
|
||||
break
|
||||
if not found:
|
||||
result['missing_fields'].append(required)
|
||||
|
||||
if result['missing_fields'] or result['errors']:
|
||||
@@ -263,15 +268,26 @@ def import_rolodex_data(db: Session, file_path: str) -> Dict[str, Any]:
|
||||
}
|
||||
|
||||
expected_fields = {
|
||||
'rolodex_id': 'Client ID',
|
||||
'first_name': 'First Name',
|
||||
'middle_initial': 'Middle Initial',
|
||||
'last_name': 'Last Name',
|
||||
'company': 'Company/Organization',
|
||||
'address': 'Address Line 1',
|
||||
'city': 'City',
|
||||
'state': 'State',
|
||||
'zip_code': 'ZIP Code'
|
||||
'Id': 'Client ID',
|
||||
'Prefix': 'Name Prefix',
|
||||
'First': 'First Name',
|
||||
'Middle': 'Middle Initial',
|
||||
'Last': 'Last Name',
|
||||
'Suffix': 'Name Suffix',
|
||||
'Title': 'Company/Organization',
|
||||
'A1': 'Address Line 1',
|
||||
'A2': 'Address Line 2',
|
||||
'A3': 'Address Line 3',
|
||||
'City': 'City',
|
||||
'Abrev': 'State Abbreviation',
|
||||
'St': 'State',
|
||||
'Zip': 'ZIP Code',
|
||||
'Email': 'Email Address',
|
||||
'DOB': 'Date of Birth',
|
||||
'SS#': 'Social Security Number',
|
||||
'Legal_Status': 'Legal Status',
|
||||
'Group': 'Group',
|
||||
'Memo': 'Memo/Notes'
|
||||
}
|
||||
|
||||
try:
|
||||
@@ -404,12 +420,35 @@ def import_files_data(db: Session, file_path: str) -> Dict[str, Any]:
|
||||
}
|
||||
|
||||
expected_fields = {
|
||||
'file_no': 'File Number',
|
||||
'status': 'Status',
|
||||
'case_type': 'File Type',
|
||||
'description': 'Regarding',
|
||||
'open_date': 'Opened Date',
|
||||
'close_date': 'Closed Date'
|
||||
'File_No': 'File Number',
|
||||
'Status': 'Status',
|
||||
'File_Type': 'File Type',
|
||||
'Regarding': 'Regarding',
|
||||
'Opened': 'Opened Date',
|
||||
'Closed': 'Closed Date',
|
||||
'Id': 'Client ID',
|
||||
'Empl_Num': 'Employee Number',
|
||||
'Rate_Per_Hour': 'Rate Per Hour',
|
||||
'Footer_Code': 'Footer Code',
|
||||
'Opposing': 'Opposing Party',
|
||||
'Hours': 'Hours',
|
||||
'Hours_P': 'Hours (Previous)',
|
||||
'Trust_Bal': 'Trust Balance',
|
||||
'Trust_Bal_P': 'Trust Balance (Previous)',
|
||||
'Hourly_Fees': 'Hourly Fees',
|
||||
'Hourly_Fees_P': 'Hourly Fees (Previous)',
|
||||
'Flat_Fees': 'Flat Fees',
|
||||
'Flat_Fees_P': 'Flat Fees (Previous)',
|
||||
'Disbursements': 'Disbursements',
|
||||
'Disbursements_P': 'Disbursements (Previous)',
|
||||
'Credit_Bal': 'Credit Balance',
|
||||
'Credit_Bal_P': 'Credit Balance (Previous)',
|
||||
'Total_Charges': 'Total Charges',
|
||||
'Total_Charges_P': 'Total Charges (Previous)',
|
||||
'Amount_Owing': 'Amount Owing',
|
||||
'Amount_Owing_P': 'Amount Owing (Previous)',
|
||||
'Transferable': 'Transferable',
|
||||
'Memo': 'Memo'
|
||||
}
|
||||
|
||||
try:
|
||||
@@ -1180,11 +1219,6 @@ async def case_detail(
|
||||
async def case_update(
|
||||
request: Request,
|
||||
case_id: int,
|
||||
status: str = None,
|
||||
case_type: str = None,
|
||||
description: str = None,
|
||||
open_date: str = None,
|
||||
close_date: str = None,
|
||||
db: Session = Depends(get_db),
|
||||
) -> RedirectResponse:
|
||||
"""
|
||||
@@ -1197,6 +1231,9 @@ async def case_update(
|
||||
if not user:
|
||||
return RedirectResponse(url="/login", status_code=302)
|
||||
|
||||
# Get form data
|
||||
form = await request.form()
|
||||
|
||||
# Fetch the case
|
||||
case_obj = db.query(Case).filter(Case.id == case_id).first()
|
||||
if not case_obj:
|
||||
@@ -1208,6 +1245,7 @@ async def case_update(
|
||||
update_data = {}
|
||||
|
||||
# Status validation
|
||||
status = form.get("status")
|
||||
if status is not None:
|
||||
if status not in ["active", "closed"]:
|
||||
errors.append("Status must be 'active' or 'closed'")
|
||||
@@ -1215,13 +1253,16 @@ async def case_update(
|
||||
update_data["status"] = status
|
||||
|
||||
# Case type and description (optional)
|
||||
case_type = form.get("case_type")
|
||||
if case_type is not None:
|
||||
update_data["case_type"] = case_type.strip() if case_type.strip() else None
|
||||
|
||||
description = form.get("description")
|
||||
if description is not None:
|
||||
update_data["description"] = description.strip() if description.strip() else None
|
||||
|
||||
# Date validation and parsing
|
||||
open_date = form.get("open_date")
|
||||
if open_date is not None:
|
||||
if open_date.strip():
|
||||
try:
|
||||
@@ -1231,6 +1272,7 @@ async def case_update(
|
||||
else:
|
||||
update_data["open_date"] = None
|
||||
|
||||
close_date = form.get("close_date")
|
||||
if close_date is not None:
|
||||
if close_date.strip():
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user