"""合同业务逻辑层:意向单→正式单流转。""" from sqlalchemy.ext.asyncio import AsyncSession from huamenchuang.models.contract import Contract from huamenchuang.models.user import User from huamenchuang.repositories.contract_repo import ContractRepository class ContractService: def __init__(self, db: AsyncSession) -> None: self.repo = ContractRepository(db) async def create(self, user: User, data: dict) -> Contract: contract = await self.repo.create(Contract( company_id=user.company_id, user_id=user.id, contract_no=await self.repo.next_contract_no(user.company_id), **data, )) return contract async def update(self, user: User, contract_id: int, data: dict) -> Contract: contract = await self.repo.get(contract_id, user.company_id) if contract is None: raise KeyError("合同不存在") for k, v in data.items(): setattr(contract, k, v) return contract async def convert_to_formal(self, user: User, contract_id: int) -> Contract: """意向单转正式单(对齐目标站 convert-contract 语义)。""" contract = await self.repo.get(contract_id, user.company_id) if contract is None: raise KeyError("合同不存在") if contract.status != 0: raise ValueError("仅意向单可转正式单") contract.status = 1 return contract async def delete(self, user: User, contract_id: int) -> None: contract = await self.repo.get(contract_id, user.company_id) if contract is None: raise KeyError("合同不存在") await self.repo.delete(contract)