{
final List<IColumn<AuftragDO, String>> columns = new ArrayList<IColumn<AuftragDO, String>>();
final CellItemListener<AuftragDO> cellItemListener = new CellItemListener<AuftragDO>() {
public void populateItem(final Item<ICellPopulator<AuftragDO>> item, final String componentId, final IModel<AuftragDO> rowModel)
{
final AuftragDO auftrag = rowModel.getObject();
if (auftrag.getAuftragsStatus() == null) {
// Should not occur:
return;
}
final boolean isDeleted = auftrag.isDeleted() == true
|| auftrag.getAuftragsStatus().isIn(AuftragsStatus.ABGELEHNT, AuftragsStatus.ERSETZT) == true;
appendCssClasses(item, auftrag.getId(), auftrag.isDeleted());
if (isDeleted) {
// Do nothing further.
} else if (auftrag.isAbgeschlossenUndNichtVollstaendigFakturiert() == true || auftrag.isZahlplanAbgeschlossenUndNichtVollstaendigFakturiert() == true) {
appendCssClasses(item, RowCssClass.IMPORTANT_ROW);
} else if (auftrag.getAuftragsStatus().isIn(AuftragsStatus.BEAUFTRAGT, AuftragsStatus.LOI) == true) {
appendCssClasses(item, RowCssClass.SUCCESS_ROW);
} else if (auftrag.getAuftragsStatus().isIn(AuftragsStatus.ESKALATION) == true) {
appendCssClasses(item, RowCssClass.IMPORTANT_ROW);
}
}
};
columns.add(new CellItemListenerPropertyColumn<AuftragDO>(new Model<String>(getString("fibu.auftrag.nummer.short")), "nummer",
"nummer", cellItemListener) {
@Override
public void populateItem(final Item<ICellPopulator<AuftragDO>> item, final String componentId, final IModel<AuftragDO> rowModel)
{
final AuftragDO auftrag = rowModel.getObject();
item.add(new ListSelectActionPanel(componentId, rowModel, AuftragEditPage.class, auftrag.getId(), returnToPage, String
.valueOf(auftrag.getNummer())));
cellItemListener.populateItem(item, componentId, rowModel);
addRowClick(item);
}
});
columns.add(new CellItemListenerPropertyColumn<AuftragDO>(getString("fibu.kunde"), "kundeAsString", "kundeAsString", cellItemListener));
columns.add(new CellItemListenerPropertyColumn<AuftragDO>(getString("fibu.projekt"), "projekt.name", "projekt.name", cellItemListener));
columns.add(new CellItemListenerPropertyColumn<AuftragDO>(getString("fibu.auftrag.titel"), "titel", "titel", cellItemListener));
columns.add(new AbstractColumn<AuftragDO, String>(new Model<String>(getString("label.position.short"))) {
public void populateItem(final Item<ICellPopulator<AuftragDO>> cellItem, final String componentId, final IModel<AuftragDO> rowModel)
{
final AuftragDO auftrag = rowModel.getObject();
auftragDao.calculateInvoicedSum(auftrag);
final List<AuftragsPositionDO> list = auftrag.getPositionen();
final Label label = new Label(componentId, new Model<String>("#" + list.size()));
if (list != null) {
final StringBuffer buf = new StringBuffer();
final Iterator<AuftragsPositionDO> it = list.iterator();
while (it.hasNext() == true) {
final AuftragsPositionDO pos = it.next();
buf.append("#").append(pos.getNumber()).append(": ");
if (pos.getPersonDays() != null && pos.getPersonDays().compareTo(BigDecimal.ZERO) != 0) {
buf.append("(").append(NumberFormatter.format(pos.getPersonDays())).append(" ")
.append(getString("projectmanagement.personDays.short")).append(") ");
}
if (pos.getNettoSumme() != null) {
buf.append(CurrencyFormatter.format(pos.getNettoSumme()));
if (StringUtils.isNotBlank(pos.getTitel()) == true) {
buf.append(": ").append(pos.getTitel());
}
buf.append(": ");
}
if (pos.getTaskId() != null) {
buf.append(taskFormatter.getTaskPath(pos.getTaskId(), false, OutputType.HTML));
} else {
buf.append(getString("fibu.auftrag.position.noTaskGiven"));
}
if (pos.getStatus() != null) {
buf.append(", ").append(getString(pos.getStatus().getI18nKey()));
}
if (it.hasNext() == true) {
buf.append("\n");
}
}
WicketUtils.addTooltip(label, NumberFormatter.format(auftrag.getPersonDays())
+ " "
+ getString("projectmanagement.personDays.short"), buf.toString());
}
cellItem.add(label);
cellItemListener.populateItem(cellItem, componentId, rowModel);
}
});
columns.add(new CellItemListenerPropertyColumn<AuftragDO>(getString("projectmanagement.personDays.short"), "personDays", "personDays",
cellItemListener) {
@Override
public void populateItem(final Item<ICellPopulator<AuftragDO>> item, final String componentId, final IModel<AuftragDO> rowModel)
{
item.add(new Label(componentId, NumberFormatter.format(rowModel.getObject().getPersonDays())));
item.add(AttributeModifier.append("style", new Model<String>("text-align: right;")));
cellItemListener.populateItem(item, componentId, rowModel);
}
});
columns
.add(new CellItemListenerPropertyColumn<AuftragDO>(getString("fibu.common.reference"), "referenz", "referenz", cellItemListener));
columns.add(new UserPropertyColumn<AuftragDO>(getString("contactPerson"), "contactPerson.fullname", "contactPerson", cellItemListener)
.withUserFormatter(userFormatter));
columns.add(new CellItemListenerPropertyColumn<AuftragDO>(getString("date"), "angebotsDatum", "angebotsDatum",
cellItemListener));
// columns
// .add(new CellItemListenerPropertyColumn<AuftragDO>(new Model<String>(getString("fibu.auftrag.bindungsFrist")), "bindungsFrist",
// "bindungsFrist", cellItemListener));
columns.add(new CurrencyPropertyColumn<AuftragDO>(getString("fibu.auftrag.nettoSumme"), "nettoSumme", "nettoSumme", cellItemListener));
columns.add(new CurrencyPropertyColumn<AuftragDO>(getString("fibu.auftrag.commissioned"), "beauftragtNettoSumme", "beauftragtNettoSumme", cellItemListener));
columns.add(new CurrencyPropertyColumn<AuftragDO>(getString("fibu.fakturiert"), "fakturiertSum", "fakturiertSum", cellItemListener)
.setSuppressZeroValues(true));
columns
.add(new CellItemListenerPropertyColumn<AuftragDO>(new Model<String>(getString("fibu.rechnungen")), null, null, cellItemListener) {
@Override
public void populateItem(final Item<ICellPopulator<AuftragDO>> item, final String componentId, final IModel<AuftragDO> rowModel)
{
final AuftragDO auftrag = rowModel.getObject();
final Set<RechnungsPositionVO> invoicePositionsByOrderPositionId = rechnungCache.getRechnungsPositionVOSetByAuftragId(auftrag.getId());
if (CollectionUtils.isEmpty(invoicePositionsByOrderPositionId) == true) {
item.add(AbstractUnsecureBasePage.createInvisibleDummyComponent(componentId));
} else {
final InvoicePositionsPanel panel = new InvoicePositionsPanel(componentId) {
@Override