Files
strepsiades 4a9c444b10 first commit
2026-03-09 16:31:42 +08:00

76 lines
3.6 KiB
Python

"""
contract_change相关schemea
"""
from ..common.validators import DateStr
from pydantic import BaseModel, Field
from typing import Optional
from ..common.base import BaseResponseWithID
from pydantic import field_validator
from fastapi import HTTPException
class ContractChangeResponse(BaseResponseWithID):
"""
合同变更模型
"""
id: Optional[str] = Field(default=None, description="合同变更ID")
project_id : Optional[str] = Field(None, description="所属项目ID")
contract_id: Optional[str] = Field(None, description="关联合同ID")
name: Optional[str] = Field(None, description="合同名称")
sub_name: Optional[str] = Field(None, description="合同子标题(epc合同和pc合同会有子标题)")
sign_company:Optional[str] = Field(None, description="签约公司")
title: Optional[str] = Field(None, description="变更事项")
reason: Optional[str] = Field(None, description="变更理由")
before_amount: Optional[float] = Field(None, description="变更前金额")
after_amount: Optional[float] = Field(None, description="变更后金额")
change_count: Optional[float] = Field(None, description="变更金额")
change_rate: Optional[str] = Field(None, description="变更比例")
change_time: Optional[str] = Field(None, description="变更时间(格式:YYYY-MM-DD)")
attachment_ids:Optional[list] = Field(None, description="附件ID列表")
attachment_names:Optional[list] = Field(None, description="附件名称列表")
created_at:Optional[str]=Field(None, description="创建时间")
created_by_name: Optional[str] = Field(None, description="创建人名称")
class PostContractChange(BaseModel):
"""
合同变更请求(水火抽蓄气电)
PROJECT_CONTRACT_CHANGE = "project.contract-change"
"""
id: str = Field(..., description="合同变更ID,更新时传入,创建时不传")
project_id: str = Field(..., description="所属项目ID")
contract_id: str = Field(..., description="合同ID")
title: str = Field(..., description="变更事项")
reason: str = Field(..., description="变更理由")
before_amount: float = Field(..., description="变更前金额")
after_amount: float = Field(..., description="变更后金额")
change_time: DateStr = Field(..., description="变更时间(格式:YYYY-MM-DD)")
attachment_ids: list = Field(..., description="附件ID列表")
@field_validator("after_amount")
def validate_after_amount(cls, v: float) -> float:
if v < 0:
raise HTTPException(status_code=400, detail="变更后金额必须小于等于0")
return v
class CreateContractChange(BaseModel):
"""
创建合同变更请求(水火抽蓄气电)
PROJECT_CONTRACT_CHANGE = "project.contract-change"
"""
project_id: str = Field(..., description="所属项目ID")
contract_id: str = Field(..., description="合同ID")
title: str = Field(..., description="变更事项")
reason: str = Field(..., description="变更理由")
before_amount: float = Field(..., description="变更前金额")
after_amount: float = Field(..., description="变更后金额")
change_time: DateStr = Field(..., description="变更时间(格式:YYYY-MM-DD)")
attachment_ids: list = Field(..., description="附件ID列表")
@field_validator("after_amount")
def validate_after_amount(cls, v: float) -> float:
if v < 0:
raise HTTPException(status_code=400, detail="变更后金额不能小于0")
return v