* @return der erzeugte und bereits gespeicherte Sammel-Auftrag.
* @throws ApplicationException
*/
SammelTransfer create(Object context) throws ApplicationException
{
I18N i18n = Application.getPluginLoader().getPlugin(HBCI.class).getResources().getI18N();
if (context == null)
throw new ApplicationException(i18n.tr("Bitte w�hlen Sie einen oder mehrere Auftr�ge aus"));
if (!(context instanceof BaseUeberweisung) && !(context instanceof BaseUeberweisung[]))
throw new ApplicationException(i18n.tr("Bitte w�hlen Sie einen oder mehrere Auftr�ge aus"));
BaseUeberweisung[] transfers = null;
if (context instanceof BaseUeberweisung)
transfers = new BaseUeberweisung[]{(BaseUeberweisung) context};
else
transfers = (BaseUeberweisung[]) context;
if (transfers.length == 0)
throw new ApplicationException(i18n.tr("Bitte w�hlen Sie einen oder mehrere Auftr�ge aus"));
SammelTransfer t = null;
try
{
t = (SammelTransfer) Settings.getDBService().createObject(getTransferClass(),null);
// Wenn der Sammel-Transfer noch kein Konto hat, nehmen wir das erste
// der Einzel-Auftraege
if (t.getKonto() == null)
t.setKonto(transfers[0].getKonto());
TransferMergeDialog d = new TransferMergeDialog(t,TransferMergeDialog.POSITION_CENTER);
SammelTransfer existing = (SammelTransfer) d.open();
if (!existing.isNewObject()) // Das ist ein bereits existierender
t = existing;
boolean delete = d.getDelete();
// OK, wir starten die Erzeugung des Auftrages
t.transactionBegin();
if (t.isNewObject())
t.store(); // nur noetig, wenn ein neuer Sammelauftrag erzeugt wird
Class bClass = getBuchungClass();
for (int i=0;i<transfers.length;++i)
{
SammelTransferBuchung buchung = (SammelTransferBuchung) Settings.getDBService().createObject(bClass,null);
buchung.setSammelTransfer(t);
buchung.setBetrag(transfers[i].getBetrag());
buchung.setGegenkontoBLZ(transfers[i].getGegenkontoBLZ());
buchung.setGegenkontoName(transfers[i].getGegenkontoName());
buchung.setGegenkontoNummer(transfers[i].getGegenkontoNummer());
buchung.setZweck(transfers[i].getZweck());
buchung.setZweck2(transfers[i].getZweck2());
buchung.setWeitereVerwendungszwecke(transfers[i].getWeitereVerwendungszwecke());
buchung.setTextSchluessel(transfers[i].getTextSchluessel());
buchung.store();
if (delete)
transfers[i].delete();
}
t.transactionCommit();
Application.getMessagingFactory().sendMessage(new StatusBarMessage(i18n.tr("Sammelauftrag erzeugt"), StatusBarMessage.TYPE_SUCCESS));
return t;
}
catch (ApplicationException ae)
{
if (t != null) {
try {
t.transactionRollback();
} catch (Exception e) {Logger.error("unable to rollback transaction",e);}
}
throw ae;
}
catch (OperationCanceledException oce)
{
if (t != null) {
try {
t.transactionRollback();
} catch (Exception e) {Logger.error("unable to rollback transaction",e);}
}
throw oce;
}
catch (Exception e)
{
if (t != null) {
try {
t.transactionRollback();
} catch (Exception ex) {Logger.error("unable to rollback transaction",ex);}
}
Logger.error("error while exporting transfers",e);
throw new ApplicationException(i18n.tr("Fehler beim Erzeugen des Sammel-Auftrages"));
}
}