fix: inherit person name from page 1 during confirmation for multi-page PDFs
- Move first_name validation after document load so page 2+ can inherit - Resolve page 1's confirmed person and auto-fill name/father/family/registry - Fixes 'First name is required' error on subsequent PDF pages
This commit is contained in:
+31
-12
@@ -281,8 +281,6 @@ async def confirm_document(doc_id: int, request: Request):
|
|||||||
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="Invalid properties payload")
|
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="Invalid properties payload")
|
||||||
|
|
||||||
first_name = (person_data.get("first_name") or "").strip()
|
first_name = (person_data.get("first_name") or "").strip()
|
||||||
if not first_name:
|
|
||||||
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="First name is required")
|
|
||||||
|
|
||||||
registry_number = (person_data.get("registry_number") or "").strip() or None
|
registry_number = (person_data.get("registry_number") or "").strip() or None
|
||||||
|
|
||||||
@@ -295,6 +293,36 @@ async def confirm_document(doc_id: int, request: Request):
|
|||||||
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Document not found")
|
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Document not found")
|
||||||
|
|
||||||
current_doc = dict(current_doc)
|
current_doc = dict(current_doc)
|
||||||
|
|
||||||
|
# For multi-page PDFs (page 2+), resolve page 1's person and inherit name if needed
|
||||||
|
page1_person_id = None
|
||||||
|
is_subsequent_page = (
|
||||||
|
current_doc.get("pdf_group_id")
|
||||||
|
and (current_doc.get("page_number") or 0) > 1
|
||||||
|
)
|
||||||
|
if is_subsequent_page:
|
||||||
|
page1_doc = conn.execute(
|
||||||
|
"""SELECT d.person_id, p.first_name, p.father_name, p.family_name,
|
||||||
|
p.registry_number
|
||||||
|
FROM documents d
|
||||||
|
LEFT JOIN persons p ON p.id = d.person_id
|
||||||
|
WHERE d.pdf_group_id=? AND d.page_number=1 AND d.person_id IS NOT NULL""",
|
||||||
|
(current_doc["pdf_group_id"],),
|
||||||
|
).fetchone()
|
||||||
|
if page1_doc and page1_doc["person_id"]:
|
||||||
|
page1_person_id = page1_doc["person_id"]
|
||||||
|
# Inherit name from page 1's person if not provided
|
||||||
|
if not first_name and page1_doc["first_name"]:
|
||||||
|
first_name = page1_doc["first_name"]
|
||||||
|
person_data["first_name"] = first_name
|
||||||
|
# Also inherit other person fields if empty
|
||||||
|
for field in ("father_name", "family_name", "registry_number"):
|
||||||
|
if not (person_data.get(field) or "").strip() and page1_doc[field]:
|
||||||
|
person_data[field] = page1_doc[field]
|
||||||
|
registry_number = (person_data.get("registry_number") or "").strip() or None
|
||||||
|
|
||||||
|
if not first_name:
|
||||||
|
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="First name is required")
|
||||||
if current_doc["status"] == "pending":
|
if current_doc["status"] == "pending":
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
status_code=status.HTTP_409_CONFLICT,
|
status_code=status.HTTP_409_CONFLICT,
|
||||||
@@ -345,16 +373,7 @@ async def confirm_document(doc_id: int, request: Request):
|
|||||||
|
|
||||||
person_id = None
|
person_id = None
|
||||||
|
|
||||||
# For multi-page PDFs (page 2+), auto-link to page 1's person
|
# page1_person_id already resolved above for multi-page PDFs
|
||||||
page1_person_id = None
|
|
||||||
if current_doc.get("pdf_group_id") and (current_doc.get("page_number") or 0) > 1:
|
|
||||||
page1 = conn.execute(
|
|
||||||
"""SELECT person_id FROM documents
|
|
||||||
WHERE pdf_group_id=? AND page_number=1 AND person_id IS NOT NULL""",
|
|
||||||
(current_doc["pdf_group_id"],),
|
|
||||||
).fetchone()
|
|
||||||
if page1:
|
|
||||||
page1_person_id = page1["person_id"]
|
|
||||||
|
|
||||||
# Option 1: User explicitly chose to merge with an existing person
|
# Option 1: User explicitly chose to merge with an existing person
|
||||||
if merge_person_id:
|
if merge_person_id:
|
||||||
|
|||||||
Reference in New Issue
Block a user