Я создаю приложение для управления счетами с использованием Grails и испытываю проблемы с наследованием.
Если я намерен, чтобы каждый счет-фактура содержал коллекцию строк / элементов и чтобы при форматировании счета-фактуры для печати элементы сортировались по дате, разделялись на списки по категориям, а затем рассчитывалась цена каждой строки. по-разному для каждого конкретного типа (временные элементы будут проверяться ежечасно в свойстве тарифов, ценовым элементам назначается цена при создании).
Узел-счет-фактура имеет свойство "items", представляющее собой коллекцию объектов Item.
Источник классов моего домена:
class Invoice {
static constraints = {
}
String client
Date dateCreated
Date lastUpdated
CostProfile rates
def relatesToMany = [items : Item]
Set items = new HashSet()
}
abstract class Item{
static constraints = {
}
String description
Date date
enum category {SERVICE,GOODS,OTHER}
def belongsTo = Invoice
Invoice invoice
}
class TimedItem extends Item{
static constraints = {
}
int minutes
}
class PricedItem extends Item{
static constraints = {
}
BigDecimal cost
BigDecimal taxrate
}
Источник проблемного кода:
invoiceInstance.items.add(new TimedItem(description:"waffle", minutes:60, date:new Date(),category:"OTHER"))
def firstList = []
def lastList = []
invoiceInstance.items.sort{it.date}
invoiceInstance.items.each(){
switch(((Item)it).category){
case "LETTER":
firstList.add(it)
break;
default:
lastList.add(it)
}
}
Сообщение об ошибке:
groovy.lang.MissingPropertyException: Нет такого свойства: категория для класса: TimedItem
Stacktrace указывает 6-ю строку приведенного выше примера.