Application.getMessagingFactory().sendMessage(new ImportMessage(umsatz));
created++;
}
catch (Exception e2)
{
Application.getMessagingFactory().sendMessage(new StatusBarMessage(i18n.tr("Nicht alle empfangenen Ums�tze konnten gespeichert werden. Bitte pr�fen Sie das System-Protokoll"),StatusBarMessage.TYPE_ERROR));
Logger.error("error while adding umsatz, skipping this one",e2);
}
}
Logger.info("done. new entries: " + created + ", skipped entries (already in database): " + skipped);
}
else
{
Logger.info("got no new booked entries");
}
//
////////////////////////////////////////////////////////////////////////////
duplicates.clear();
////////////////////////////////////////////////////////////////////////////
// Vorgemerkte Umsaetze
if (fetchUnbooked)
{
// Den Abgleich gegen die Vormerkbuchungen machen wir gegen alle
// vorhandenen Vormerkbuchungen, nicht nur gegen die aus dem Zeitraum
// der aktuellen Lieferung. Denn hier wollen wir nicht nur Doppler
// vermeiden sondern ausserdem auch die loeschen, die von der Bank nicht
// mehr geliefert werden. Die sind zwischenzeitlich valutiert worden
// und muessen in Hibiscus geloescht werden.
DBIterator existingUnbooked = konto.getUmsaetze(null,null);
existingUnbooked.addFilter("flags = " + Umsatz.FLAG_NOTBOOKED);
if (unbooked != null && unbooked.size() > 0)
{
List<Umsatz> fetched = new ArrayList<Umsatz>();
int created = 0;
int skipped = 0;
Logger.info("applying not-booked (vorgemerkte) entries");
for (int i=0;i<unbooked.size();++i)
{
final Umsatz umsatz = Converter.HBCIUmsatz2HibiscusUmsatz((GVRKUms.UmsLine)unbooked.get(i));
umsatz.setFlags(Umsatz.FLAG_NOTBOOKED);
umsatz.setSaldo(0d); // Muss gemacht werden, weil der Saldo beim naechsten Mal anders lauten koennte
umsatz.setKonto(konto);
fetched.add(umsatz);
Umsatz fromDB = null;
// Anzahl der vorhandenen Umsaetze in der DB zaehlen
int counter = 0;
existingUnbooked.begin();
for (int j = 0; j<existingUnbooked.size(); j++)
{
GenericObject dbObject = existingUnbooked.next();
if (dbObject.equals(umsatz))
{
counter++;
fromDB = (Umsatz) dbObject; //wir merken uns immer den letzten Umsatz
}
}
if (fromDB != null)
{
// Wir duerfen den Umsatz nur dann ueberspringen, wenn er bereits
// OFT GENUG in der Datenbank ist. Andernfalls ist er tatsaechlich
// neu. Dazu zaehlen wir mit, wie oft wir gerade einen "gleichen"
// Umsatz empfangen haben.
Integer countInCurrentJobResult = duplicates.get(fromDB);
if (countInCurrentJobResult == null)
{
duplicates.put(fromDB, 1);
skipped++;
continue;
}
else if (countInCurrentJobResult <= counter)
{
// In der Datenbank sind mehr als bislang abgerufen -> Ueberspringen
duplicates.put(fromDB, countInCurrentJobResult+1);
skipped++;
continue;
}
}
// Vormerkposten neu anlegen
try
{
umsatz.store();
Application.getMessagingFactory().sendMessage(new ImportMessage(umsatz));
created++;
}
catch (Exception e2)
{
Application.getMessagingFactory().sendMessage(new StatusBarMessage(i18n.tr("Nicht alle empfangenen Ums�tze konnten gespeichert werden. Bitte pr�fen Sie das System-Protokoll"),StatusBarMessage.TYPE_ERROR));
Logger.error("error while adding umsatz, skipping this one",e2);
}
}
// Jetzt loeschen wir all die vorgemerkten Umsaetze des