50 lines
1.7 KiB
TypeScript
50 lines
1.7 KiB
TypeScript
import type { QcWorkOrder } from '@/api/qc-work-order'
|
|
import { resolveGateWorkOrderForSampleGroup } from '@/utils/qc-work-order-groups'
|
|
|
|
export type InboundSampleSpecialMarkTarget = {
|
|
receptionSource: 'cell_storage' | 'research_donation'
|
|
protocolSampleId: string
|
|
sampleCode: string
|
|
isSpecial: boolean
|
|
specialRemark: string
|
|
}
|
|
|
|
export function canEditInboundSampleSpecialMark(row: QcWorkOrder): boolean {
|
|
const source = (row.receptionSource || '').trim()
|
|
if (source !== 'cell_storage' && source !== 'research_donation') return false
|
|
return !!(row.protocolSampleId || '').trim()
|
|
}
|
|
|
|
export function resolveInboundSampleSpecialMarkTarget(
|
|
workOrders: QcWorkOrder[]
|
|
): InboundSampleSpecialMarkTarget | null {
|
|
const gate = resolveGateWorkOrderForSampleGroup(workOrders)
|
|
if (!gate || !canEditInboundSampleSpecialMark(gate)) return null
|
|
const source = (gate.receptionSource || 'cell_storage').trim() as
|
|
| 'cell_storage'
|
|
| 'research_donation'
|
|
return {
|
|
receptionSource: source,
|
|
protocolSampleId: String(gate.protocolSampleId || '').trim(),
|
|
sampleCode: String(gate.sampleCode || '').trim(),
|
|
isSpecial: !!gate.isSpecial,
|
|
specialRemark: String(gate.specialRemark || '').trim()
|
|
}
|
|
}
|
|
|
|
export function resolveInboundSampleSpecialMarkTargetFromRow(
|
|
row: QcWorkOrder
|
|
): InboundSampleSpecialMarkTarget | null {
|
|
if (!canEditInboundSampleSpecialMark(row)) return null
|
|
const source = (row.receptionSource || 'cell_storage').trim() as
|
|
| 'cell_storage'
|
|
| 'research_donation'
|
|
return {
|
|
receptionSource: source,
|
|
protocolSampleId: String(row.protocolSampleId || '').trim(),
|
|
sampleCode: String(row.sampleCode || '').trim(),
|
|
isSpecial: !!row.isSpecial,
|
|
specialRemark: String(row.specialRemark || '').trim()
|
|
}
|
|
}
|