if (source.length == 0)
throw new ApplicationException(i18n.tr("Bitte w�hlen Sie einen oder mehrere Auftr�ge aus"));
SepaSammelUeberweisung tx = null;
try
{
HBCIDBService service = Settings.getDBService();
Map<String,SepaSammelUeberweisung> map = new HashMap<String,SepaSammelUeberweisung>();
boolean inDb = false;
////////////////////////////////////////
// 1. Iterieren ueber die Auftraege, um herauszufinden, wieviele Sammel-Auftraege es werden
for (AuslandsUeberweisung l:source)
{
inDb |= !l.isNewObject();
String key = this.createKey(l);
SepaSammelUeberweisung s = map.get(key);
if (s == null)
{
s = (SepaSammelUeberweisung) service.createObject(SepaSammelUeberweisung.class,null);
s.setKonto(l.getKonto());
s.setBezeichnung(i18n.tr("SEPA-Sammel�berweisung vom {0}",HBCI.LONGDATEFORMAT.format(new Date())));
map.put(key,s);
}
}
// Abfrage anzeigen, ob die Einzelauftraege geloescht werden sollen
// a) wenn mindestens einer in der DB existierte
// b) oder mehr als ein Sammelauftrag entsteht.
boolean delete = false;
int count = map.size();
if (count > 1 || inDb)
{
SepaUeberweisungMergeDialog dialog = new SepaUeberweisungMergeDialog(SepaUeberweisungMergeDialog.POSITION_CENTER,count,inDb);
Object o = dialog.open();
if (o != null)
delete = ((Boolean)o).booleanValue();
}
// OK, wir duerfen weiter machen. Erstmal die Sammelauftraege anlegen
Iterator<SepaSammelUeberweisung> list = map.values().iterator();
while (list.hasNext())
{
SepaSammelUeberweisung s = list.next();
if (tx == null)
{
tx = s;
tx.transactionBegin();
}
s.store();
Application.getMessagingFactory().sendMessage(new ImportMessage(s));
}
// jetzt iterieren wir nochmal ueber die Einzelauftraege und ordnen sie den
// Sammelauftraegen zu
for (AuslandsUeberweisung l:source)
{
String key = this.createKey(l);
SepaSammelUeberweisung s = map.get(key);
if (s == null) // WTF?
{
Logger.error("unable to find sepa transfer for key " + key);
continue;
}
SepaSammelUeberweisungBuchung b = s.createBuchung();
b.setBetrag(l.getBetrag());
b.setEndtoEndId(l.getEndtoEndId());
b.setGegenkontoBLZ(l.getGegenkontoBLZ());
b.setGegenkontoName(l.getGegenkontoName());
b.setGegenkontoNummer(l.getGegenkontoNummer());