class InventoryItemPurchase {

    Person enteredBy
    Person lastUpdatedBy
    InventoryItem inventoryItem
    CostCode costCode
    InventoryItemPurchaseType inventoryItemPurchaseType
    Supplier supplier
    TaskBudgetStatus taskBudgetStatus

    Date date = new Date()
    Date lastUpdated // autoTimestamp
    Date dateCreated // autoTimestamp

    Integer quantity
    String purchaseOrderNumber = ''
    BigDecimal orderValueAmount
    Currency orderValueCurrency
    String invoiceNumber = ''
    String comment = ""

    Boolean receivedComplete = false
    Boolean invoicePaymentApproved = false

//     hasMany = []

    static belongsTo = [InventoryItem]

    static constraints = {
        quantity(min:0)
        purchaseOrderNumber(blank:false, maxSize:50, validator: {val, obj ->
            // For orders the purchaseOrderNumber must be unique for an inventoryItem.
            if(obj.inventoryItemPurchaseType.id == 1L) {
                def list = InventoryItemPurchase.withCriteria {
                    eq('inventoryItem', obj.inventoryItem)
                    eq('purchaseOrderNumber', obj.purchaseOrderNumber)
                    eq('inventoryItemPurchaseType', obj.inventoryItemPurchaseType)
                    if(obj.id)
                        notEqual('id', obj.id)
                }
                if(list.size() > 0)
                    return 'not.unique.for.inventory.item.order'
            }
            // Success.
            return true
        })
        invoiceNumber(maxSize:50)
        orderValueAmount(max: new BigDecimal(1000000000000))
        orderValueCurrency()
        comment(maxSize:255)
        lastUpdatedBy(nullable: true)
    }

    String toString() {
        "${this.quantity} x ${inventoryItem} - ${this.inventoryItemPurchaseType} "
    }

}