48 lines
1.4 KiB
TypeScript
48 lines
1.4 KiB
TypeScript
import { isPlInternalCustomerName } from '@/utils/pl-internal-customer'
|
|
|
|
export type PlanContractDisplayLine = {
|
|
side: string
|
|
no: string
|
|
contractId?: string
|
|
pending?: boolean
|
|
}
|
|
|
|
type PlanContractLike = {
|
|
contractId?: string
|
|
contractNo?: string
|
|
}
|
|
|
|
type PlanContractParties = {
|
|
supplierName?: string | null
|
|
customerName?: string | null
|
|
supplierContracts?: PlanContractLike[]
|
|
demanderContracts?: PlanContractLike[]
|
|
}
|
|
|
|
/** 单侧:有编号显示编号;非内置缺合同「待补充」;内置缺合同「—」 */
|
|
export function planContractSideLines(
|
|
side: '供' | '需',
|
|
contracts: PlanContractLike[] | undefined,
|
|
customerName?: string | null
|
|
): PlanContractDisplayLine[] {
|
|
const lines: PlanContractDisplayLine[] = []
|
|
for (const item of contracts || []) {
|
|
const contractId = item.contractId ? String(item.contractId) : undefined
|
|
const no = item.contractNo || contractId
|
|
if (no) lines.push({ side, no: String(no), contractId })
|
|
}
|
|
if (lines.length) return lines
|
|
if (isPlInternalCustomerName(customerName)) {
|
|
return [{ side, no: '—' }]
|
|
}
|
|
return [{ side, no: '待补充', pending: true }]
|
|
}
|
|
|
|
/** 合同列:供/需各至少一行 */
|
|
export function planContractLines(plan: PlanContractParties): PlanContractDisplayLine[] {
|
|
return [
|
|
...planContractSideLines('供', plan.supplierContracts, plan.supplierName),
|
|
...planContractSideLines('需', plan.demanderContracts, plan.customerName)
|
|
]
|
|
}
|