Files
shanxia2.0/backend/app/services/pl_quota_contract_query.py
T

39 lines
2.3 KiB
Python

"""证件视角的合同范围查询,复用 CRM 全角色数据权限。"""
from app.crud.crm.data_scope_helpers import apply_crm_owner_scope
from app.models.crm_models import CrmContract, CrmContractProduct
from app.models.pl_quota_models import PlContractCertLink
from app.services.pl_quota_cert_service import _get_row
from app.services.pl_quota_contract_service import _contract, get_contract_bindings
def contract_options(db, user, keyword=None):
query = db.query(CrmContract).filter(
CrmContract.tenant_no == user.tenant_no, CrmContract.del_flag == 0,
CrmContract.status.in_(('approved', 'executing')),
CrmContract.contract_type.in_(('sale', 'purchase', 'framework_sale', 'framework_purchase')),
)
query = apply_crm_owner_scope(query, CrmContract, user.to_user_info(), db, user.tenant_no)
if keyword:
query = query.filter((CrmContract.contract_no.contains(keyword)) | (CrmContract.contract_name.contains(keyword)))
return [{'id': r.id, 'contractNo': r.contract_no, 'contractName': r.contract_name,
'contractType': r.contract_type} for r in query.order_by(CrmContract.create_time.desc()).limit(100).all()]
def contract_products(db, user, contract_id):
_contract(db, user, contract_id)
rows = db.query(CrmContractProduct).filter_by(tenant_no=user.tenant_no, contract_id=contract_id, del_flag=0)
return [{'id': r.id, 'productId': r.product_id, 'productName': r.product_name,
'model': r.model, 'unit': r.unit, 'quantity': r.quantity}
for r in rows.order_by(CrmContractProduct.create_time.desc()).all()]
def certificate_contracts(db, user, cert_type, cert_id):
_get_row(db, user, cert_type, cert_id)
linked = db.query(PlContractCertLink.contract_id).filter_by(
tenant_no=user.tenant_no, cert_type=cert_type, cert_id=cert_id, del_flag=0)
query = db.query(CrmContract).filter(CrmContract.tenant_no == user.tenant_no,
CrmContract.del_flag == 0, CrmContract.id.in_(linked))
query = apply_crm_owner_scope(query, CrmContract, user.to_user_info(), db, user.tenant_no)
return [{'id': row.id, 'contractNo': row.contract_no, 'contractName': row.contract_name}
for row in query.order_by(CrmContract.create_time.desc()).all()]