package com.ffii.fpsms.modules.stock.entity

import org.springframework.beans.factory.annotation.Value
import java.math.BigDecimal
import java.time.LocalDateTime

interface EscalationLogInfo {
    val id: Long?

    @get:Value("#{target.stockInLine?.stockIn?.purchaseOrder?.id}")
    val poId: Long?

    @get:Value("#{target.stockInLine?.purchaseOrderLine?.id}")
    val polId: Long?
    @get:Value("#{target.stockInLine?.jobOrder?.id}")
    val jobOrderId: Long?
    @get:Value("#{target.stockInLine?.jobOrder?.code}")
    val jobOrderCode: String?
    @get:Value("#{target.stockInLine?.stockIn?.code}")
    val poCode: String?

    @get:Value("#{target.stockInLine?.id}")
    val stockInLineId: Long?

    @get:Value("#{target.stockOutLine?.id}")
    val stockOutLineId: Long?

    @get:Value("#{target.stockInLine?.dnNo}")
    val dnNo: String?

//    @get:Value("#{target.stockInLine?.dnDate}")
//    val dnDate: LocalDateTime?

    @get:Value("#{target.stockInLine?.item?.code} - #{target.stockInLine?.item?.name}")
    val item: String?

    @get:Value("#{target.stockInLine?.item?.code}")
    val itemCode: String?

    @get:Value("#{target.stockInLine?.item?.name}")
    val itemName: String?

    @get:Value("#{target.stockInLine?.demandQty}")
    val demandQty: BigDecimal?

    @get:Value("#{target.stockInLine?.acceptedQty}")
    val acceptedQty: BigDecimal?

    @get:Value("#{target.stockInLine?.item?.itemUoms.^[purchaseUnit == true && deleted == false]?.uom.code}")
    val purchaseUomCode: String?

    @get:Value("#{target.stockInLine?.item?.itemUoms.^[purchaseUnit == true && deleted == false]?.uom.udfudesc}")
    val purchaseUomDesc: String?

    @get:Value("#{target.stockInLine?.item?.itemUoms.^[stockUnit == true && deleted == false]?.uom.code}")
    val stockUomCode: String?

    @get:Value("#{target.stockInLine?.item?.itemUoms.^[stockUnit == true && deleted == false]?.uom.udfudesc}")
    val stockUomDesc: String?

    @get:Value("#{target.handler?.id}")
    val handlerId: Long?
    @get:Value("#{target.handler?.department} - #{target.handler?.title} - #{target.handler?.name}")
    val handler: String?
    @get:Value("#{target.handler?.name}")
    val handlerName: String?
    @get:Value("#{target.handler?.title}")
    val handlerTitle: String?
    @get:Value("#{target.handler?.department}")
    val handlerDepartment: String?

    //    @get:Value("#{target.type}")
//    val escalationLevel: String
    @get:Value("#{target.createdBy}")
    val submitter: String?
    val qcTotalCount: Int?;
    val qcFailCount: Int?;
    val reason: String?;
    val recordDate: LocalDateTime?;
    @get:Value("#{target.status?.value}")
    val status: String?;
}