feat(bot): centralize defaults, refine ambiguity lifecycle, improve entity resolution and auto-create new projects
This commit is contained in:
+55
-3
@@ -210,6 +210,20 @@ def quote_review_text(payload: dict, missing: list[dict], status_note: str | Non
|
||||
if cat_name:
|
||||
lines.append(f"\n🏷️ موضوع: {cat_name}")
|
||||
|
||||
# 🏗️ پروژه(ها)
|
||||
p_names = payload.get("project_names") or ([payload["project_name"]] if payload.get("project_name") else [])
|
||||
resolved_projects = payload.get("resolved_projects") or {}
|
||||
if p_names:
|
||||
if len(p_names) == 1:
|
||||
p = p_names[0]
|
||||
badge = " ✅" if (p in resolved_projects or payload.get("project_id")) else " ✨ (پروژه جدید)"
|
||||
lines.append(f"\n🏗️ پروژه: {p}{badge}")
|
||||
else:
|
||||
lines.append(f"\n🏗️ پروژهها ({fa_num(len(p_names))} مورد):")
|
||||
for p in p_names:
|
||||
badge = " ✅" if p in resolved_projects else " ✨ (پروژه جدید)"
|
||||
lines.append(f"▫️ {p}{badge}")
|
||||
|
||||
# 📦 اقلام
|
||||
items = payload.get("items") or []
|
||||
total_amount = 0.0
|
||||
@@ -232,7 +246,10 @@ def quote_review_text(payload: dict, missing: list[dict], status_note: str | Non
|
||||
# Project
|
||||
item_proj = it.get("project_name") or default_proj
|
||||
if item_proj:
|
||||
lines.append(f" 🏗️ {item_proj}")
|
||||
p_badge = ""
|
||||
if item_proj not in resolved_projects and not (payload.get("project_id") and len(p_names) <= 1):
|
||||
p_badge = " ✨ (پروژه جدید)"
|
||||
lines.append(f" 🏗️ {item_proj}{p_badge}")
|
||||
else:
|
||||
lines.append(" 🏗️ پروژه مشخص نشده")
|
||||
|
||||
@@ -368,7 +385,7 @@ def material_review_text(payload: dict, missing: list[dict]) -> str:
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
def quote_committed_report(created: dict, payload: dict, remaining: list[str]) -> str:
|
||||
def quote_committed_report(created: dict, payload: dict, remaining: list[str], newly_created: dict | None = None) -> str:
|
||||
lines = [f"✅ ثبت شد — استعلام #{esc(created.get('id'))}"]
|
||||
sup = (created.get("supplier") or {}).get("name") or payload.get("supplier_name")
|
||||
if sup:
|
||||
@@ -379,8 +396,21 @@ def quote_committed_report(created: dict, payload: dict, remaining: list[str]) -
|
||||
sheets = created.get("termsheets") or []
|
||||
if sheets:
|
||||
lines.append(f"شرایط پرداخت: {len(sheets)}")
|
||||
if payload.get("project_id"):
|
||||
if payload.get("project_id") or payload.get("project_ids"):
|
||||
lines.append("پروژه: پیوست شد")
|
||||
|
||||
if newly_created:
|
||||
new_lines = []
|
||||
if newly_created.get("supplier"):
|
||||
new_lines.append(f"🏢 تأمینکننده جدید ثبت شد: {esc(newly_created['supplier'])}")
|
||||
if newly_created.get("projects"):
|
||||
new_lines.append(f"🏗️ پروژه(های) جدید ثبت شد: {esc('، '.join(newly_created['projects']))}")
|
||||
if newly_created.get("materials"):
|
||||
new_lines.append(f"📦 کالای جدید ثبت شد: {esc('، '.join(newly_created['materials']))}")
|
||||
if new_lines:
|
||||
lines.append("\n✨ موارد جدید ایجادشده:")
|
||||
lines += new_lines
|
||||
|
||||
if remaining:
|
||||
lines.append("\nخالی ماندهها (بعداً میتوانی در برنامه تکمیل کنی):")
|
||||
lines += [f"⚠️ {esc(r)}" for r in remaining]
|
||||
@@ -388,6 +418,19 @@ def quote_committed_report(created: dict, payload: dict, remaining: list[str]) -
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
def project_review_text(payload: dict, missing: list[dict]) -> str:
|
||||
lines = ["🏗️ پیشنویس پروژه جدید", f"نام: {esc(payload.get('name'))}"]
|
||||
if payload.get("description"):
|
||||
lines.append(f"توضیحات: {esc(payload['description'])}")
|
||||
lines.append("\nوضعیت فیلدها:")
|
||||
lines.append(missing_block(missing))
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
def project_committed_report(created: dict) -> str:
|
||||
return f"✅ پروژه ثبت شد — {esc(created.get('name'))}"
|
||||
|
||||
|
||||
def supplier_committed_report(created: dict) -> str:
|
||||
return (
|
||||
f"✅ تأمینکننده ثبت شد — {esc(created.get('name'))}\n"
|
||||
@@ -430,3 +473,12 @@ def status_report(kind: str, quotes: list[dict], extra_note: str | None = None)
|
||||
lines.append(extra_note)
|
||||
lines += [f"• {quote_line(q)}" for q in quotes[:10]]
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
def ambiguity_message_text(title: str, details: str) -> str:
|
||||
return (
|
||||
f"🤔 آیا نظر شما این بود؟\n"
|
||||
f"موضوع: {title}\n\n"
|
||||
f"{details}"
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user