Procházet zdrojové kódy

feat(crm): expose quote approver setting get/save APIs

Co-authored-by: Cursor <cursoragent@cursor.com>
zlwu před 3 měsíci
rodič
revize
8646f33587
1 změnil soubory, kde provedl 39 přidání a 1 odebrání
  1. 39 1
      backend/app/api/crm_quote_routes.py

+ 39 - 1
backend/app/api/crm_quote_routes.py

@@ -7,7 +7,7 @@ from fastapi import Depends
 from sqlalchemy.orm import Session
 from sqlalchemy.orm import Session
 
 
 from app.core.database import get_db
 from app.core.database import get_db
-from app.core.menu_guard import require_admin_or_super_admin
+from app.core.menu_guard import require_admin_or_super_admin, require_menu_code
 from app.core.response import error_response, success_response
 from app.core.response import error_response, success_response
 from app.core.tenant_context import get_tenant_no
 from app.core.tenant_context import get_tenant_no
 from app.crud.crm.data_scope_helpers import crm_user_info
 from app.crud.crm.data_scope_helpers import crm_user_info
@@ -33,6 +33,7 @@ from app.crud.crm.quote import (
     total_pages as quote_total_pages,
     total_pages as quote_total_pages,
     update_quote,
     update_quote,
 )
 )
+from app.crud.crm.quote_approver_setting import get_setting, save_setting
 from app.crud.crm.quote_approval import (
 from app.crud.crm.quote_approval import (
     approve_quote,
     approve_quote,
     list_quote_approvals,
     list_quote_approvals,
@@ -46,6 +47,7 @@ from app.crud.crm.quote_product import (
     update_quote_product,
     update_quote_product,
 )
 )
 from app.crud.crm.quote_share_log import list_share_logs, share_log_statistics
 from app.crud.crm.quote_share_log import list_share_logs, share_log_statistics
+from app.schemas.crm.quote_approver_setting import QuoteApproverSettingSaveBody
 from app.schemas.crm.quote import (
 from app.schemas.crm.quote import (
     QuoteAcceptBody,
     QuoteAcceptBody,
     QuoteApprovalApproveBody,
     QuoteApprovalApproveBody,
@@ -711,3 +713,39 @@ def register_quote_routes(router):
             return error_response(400, str(e))
             return error_response(400, str(e))
         except Exception as e:
         except Exception as e:
             return error_response(500, str(e))
             return error_response(500, str(e))
+
+    @router.post("/quote-approver-setting/get")
+    async def quote_approver_setting_get(
+        _user: dict = Depends(require_admin_or_super_admin),
+        db: Session = Depends(get_db),
+    ):
+        try:
+            tenant_no = get_tenant_no(db, _user)
+            data = get_setting(db, tenant_no=tenant_no)
+            return success_response(data or {"approverIds": [], "status": "1"})
+        except Exception as e:
+            return error_response(500, str(e))
+
+    @router.post("/quote-approver-setting/save")
+    async def quote_approver_setting_save(
+        body: QuoteApproverSettingSaveBody,
+        _user: dict = Depends(require_menu_code("crm:quote:approverSetting")),
+        db: Session = Depends(get_db),
+    ):
+        try:
+            tenant_no = get_tenant_no(db, _user)
+            user_id = _user.get("user_id", "") or _user.get("id", "")
+            dept_id = _user.get("dept_id", "") or _user.get("create_dept_id", "") or ""
+            data = save_setting(
+                db,
+                tenant_no=tenant_no,
+                approver_ids=body.approverIds or [],
+                status=body.status or "0",
+                user_id=user_id,
+                dept_id=dept_id,
+            )
+            return success_response(data, message="保存成功")
+        except ValueError as e:
+            return error_response(400, str(e))
+        except Exception as e:
+            return error_response(500, str(e))