@Override
protected void onSaveOrModify(final RechnungDO obj)
{
if (obj.getTyp() == RechnungTyp.GUTSCHRIFTSANZEIGE_DURCH_KUNDEN) {
if (obj.getNummer() != null) {
throw new UserException("fibu.rechnung.error.gutschriftsanzeigeDarfKeineRechnungsnummerHaben");
}
} else {
if (obj.getNummer() == null) {
throw new UserException("validation.required.valueNotPresent", new MessageParam("fibu.rechnung.nummer", MessageParamType.I18N_KEY));
}
if (obj.getId() == null) {
// Neue Rechnung
final Integer next = getNextNumber(obj);
if (next.intValue() != obj.getNummer().intValue()) {
throw new UserException("fibu.rechnung.error.rechnungsNummerIstNichtFortlaufend");
}
} else {
final List<RechnungDO> list = getHibernateTemplate().find("from RechnungDO r where r.nummer = ? and r.id <> ?",
new Object[] { obj.getNummer(), obj.getId()});
if (list != null && list.size() > 0) {
throw new UserException("fibu.rechnung.error.rechnungsNummerBereitsVergeben");
}
}
}
if (obj.getZahlBetrag() != null) {
obj.setZahlBetrag(obj.getZahlBetrag().setScale(2, RoundingMode.HALF_UP));
}
obj.recalculate();
if (CollectionUtils.isEmpty(obj.getPositionen()) == true) {
throw new UserException("fibu.rechnung.error.rechnungHatKeinePositionen");
}
final int size = obj.getPositionen().size();
for (int i = size - 1; i > 0; i--) {
// Don't remove first position, remove only the last empty positions.
final RechnungsPositionDO position = obj.getPositionen().get(i);