Spaces:
Running
Running
| """ | |
| Report fields helpers – normalize, extract text/attachment, build stored values. | |
| Shared logic used by admin and report routes. | |
| """ | |
| from lib.utils import slugify, sanitize_field_type | |
| def create_default_report_field(overrides: dict | None = None) -> dict: | |
| base = { | |
| "label": "Nội dung", | |
| "key": "noi_dung", | |
| "type": "text", | |
| "required": False, | |
| "allowEvidenceUpload": False, | |
| "generateEvidenceLink": False, | |
| } | |
| if overrides: | |
| base.update(overrides) | |
| return base | |
| def normalize_report_fields(fields_input, default_overrides: dict | None = None) -> list: | |
| rows = fields_input if isinstance(fields_input, list) else [] | |
| clean = [] | |
| for idx, f in enumerate(rows): | |
| if not isinstance(f, dict): | |
| continue | |
| label = str(f.get("label") or "").strip() | |
| raw_key = str(f.get("key") or "").strip() or label | |
| key = slugify(raw_key) or f"field_{idx + 1}" | |
| if not label: | |
| continue | |
| allow = bool(f.get("allowEvidenceUpload")) | |
| clean.append({ | |
| "key": key, | |
| "label": label, | |
| "type": sanitize_field_type(f.get("type")), | |
| "required": bool(f.get("required")), | |
| "allowEvidenceUpload": allow, | |
| "generateEvidenceLink": allow and bool(f.get("generateEvidenceLink")), | |
| }) | |
| if clean: | |
| return clean | |
| return [create_default_report_field(default_overrides)] | |
| def get_report_value_text(value) -> str: | |
| if isinstance(value, dict): | |
| return str(value.get("value") or "") | |
| return str(value or "") | |
| def get_report_value_attachment(value) -> dict: | |
| if not isinstance(value, dict): | |
| return {"evidenceUrl": "", "evidenceFileName": ""} | |
| return { | |
| "evidenceUrl": str(value.get("evidenceUrl") or ""), | |
| "evidenceFileName": str(value.get("evidenceFileName") or ""), | |
| } | |
| def build_stored_report_value(text_value: str, upload_result: dict | None = None): | |
| text = (text_value or "").strip() | |
| if not upload_result: | |
| return text | |
| return { | |
| "value": text, | |
| "evidenceUrl": str(upload_result.get("url") or ""), | |
| "evidenceFileName": str(upload_result.get("fileName") or ""), | |
| } | |