* Speichert den Geld-Transfer.
* @return true, wenn das Speichern erfolgreich war, sonst false.
*/
public synchronized boolean handleStore()
{
SepaLastschrift t = null;
try
{
t = this.getTransfer();
if (t.ausgefuehrt())
return true;
t.transactionBegin();
Double d = (Double) getBetrag().getValue();
t.setBetrag(d == null ? Double.NaN : d.doubleValue());
Konto k = (Konto)getKontoAuswahl().getValue();
t.setKonto(k);
t.setZweck((String)getZweck().getValue());
t.setTermin((Date) getTermin().getValue());
t.setEndtoEndId((String) getEndToEndId().getValue());
t.setPmtInfId((String) getPmtInfId().getValue());
t.setCreditorId((String) getCreditorId().getValue());
t.setMandateId((String) getMandateId().getValue());
t.setSignatureDate((Date) getSignatureDate().getValue());
t.setSequenceType((SepaLastSequenceType)getSequenceType().getValue());
t.setType((SepaLastType)getType().getValue());
t.setTargetDate((Date) getTargetDate().getValue());
String kto = (String)getEmpfaengerKonto().getValue();
String name = getEmpfaengerName().getText();
String bic = (String) getEmpfaengerBic().getValue();
t.setGegenkontoNummer(kto);
t.setGegenkontoName(name);
t.setGegenkontoBLZ(bic);
t.store();
// Reminder-Intervall speichern
ReminderIntervalInput input = this.getReminderInterval();
if (input.containsInterval())
ReminderUtil.apply(t,(ReminderInterval) input.getValue(), input.getEnd());
Boolean store = (Boolean) getStoreEmpfaenger().getValue();
if (store.booleanValue())
{
HibiscusAddress e = (HibiscusAddress) Settings.getDBService().createObject(HibiscusAddress.class,null);
e.setIban(kto);
e.setName(name);
e.setBic(bic);
// Zu schauen, ob die Adresse bereits existiert, ueberlassen wir der Action
new EmpfaengerAdd().handleAction(e);
// wenn sie in der Action gespeichert wurde, sollte sie jetzt eine ID haben und wir koennen die Meta-Daten dran haengen
if (e.getID() != null)
this.address = e;
}
// Glaeubiger-ID im Konto speichern, damit wir sie beim naechsten Mal parat haben
MetaKey.SEPA_CREDITOR_ID.set(k,t.getCreditorId());
// Daten des Mandats als Meta-Daten an der Adresse speichern
if (this.address != null)
{
MetaKey.SEPA_MANDATE_ID.set(this.address,t.getMandateId());
MetaKey.SEPA_SEQUENCE_CODE.set(this.address,t.getSequenceType().name());
MetaKey.SEPA_MANDATE_SIGDATE.set(this.address,DateUtil.DEFAULT_FORMAT.format(t.getSignatureDate()));
// Adress-ID am Auftrag speichern, damit wir nach erfolgreicher Ausfuehrung des Auftrages den
// Sequence-Typ von FRST auf RCUR setzen koennen
MetaKey.ADDRESS_ID.set(t,this.address.getID());
}
t.transactionCommit();
Application.getMessagingFactory().sendMessage(new StatusBarMessage(i18n.tr("Auftrag gespeichert"),StatusBarMessage.TYPE_SUCCESS));
MessageBus.send("hibiscus.transfer.check",t);
return true;
}
catch (Exception e)
{
if (t != null) {
try {
t.transactionRollback();
}
catch (Exception xe) {
Logger.error("rollback failed",xe);
}
}