* @throws ApplicationException
*/
public final void handleResult() throws ApplicationException, RemoteException
{
HBCIJobResult result = getJobResult();
HBCIStatus status = result.getJobStatus();
// BUGZILLA 964 - nur dann als abgebrochen markieren, wenn wir fuer den Job noch keinen richtigen
// Status haben. Denn wenn der vorliegt, ist es fuer den Abbruch - zumindest fuer diesen Auftrag - zu spaet.
// BUGZILLA 1109 - Wenn im ChipTAN-Dialog abgebrochen wird, haben wir hier ein HBCIStatus.STATUS_OK. Das
// ist ziemlich daemlich. Wegen 964 koennen wir aber nicht pauschal abbrechen, weil wir sonst Jobs
// als abgebrochen markieren, die schon ausgefuehrt wurden. In dem Status steht OK, drin, weil die Bank da
// mit SUCCESS-Statuscode sowas hier geschickt hat: "0030 Auftrag entgegengenommen. Bitte TAN eingeben"
// Rein via Status-Codes sieht alles OK aus. Gemaess "FinTS_3.0_Rueckmeldungscodes_2010-10-27_final_version.pdf"
// steht "0030" fuer "Auftrag empfangen - Sicherheitsfreigabe erforderlich". Wir machen hier also einen
// Sonderfall fuer diesen einen Code.
// TODO Das koennte man vermutlich auch direkt in HBCI4Java implementieren
boolean tanNeeded = false;
HBCIRetVal[] values = status.getSuccess();
if (values != null && values.length > 0)
{
for (HBCIRetVal val:values)
{
if (val.code != null && val.code.equals("0030"))
{
tanNeeded = true;
break;
}
}
}
BeanService service = Application.getBootLoader().getBootable(BeanService.class);
SynchronizeSession session = service.get(HBCISynchronizeBackend.class).getCurrentSession();
if ((tanNeeded || status.getStatusCode() == HBCIStatus.STATUS_UNKNOWN) && session.getStatus() == ProgressMonitor.STATUS_CANCEL) // BUGZILLA 690
{
Logger.warn("hbci session cancelled by user, mark job as cancelled");
markCancelled();
return;
}
////////////////////////////////////////////////////////////////////////////
// Warnungen ausgeben, falls vorhanden - BUGZILLA 899
HBCIRetVal[] warnings = status.getWarnings();
if (warnings != null && warnings.length > 0)
{
// Loggen
ProgressMonitor monitor = session.getProgressMonitor();
monitor.log(" ");
for (HBCIRetVal val:warnings)
monitor.log(" " + val.code + ": " + val.text);
monitor.log(" ");
// Auftrag informieren
hasWarnings(warnings);
}
////////////////////////////////////////////////////////////////////////////
if (result.isOK())
{
// Globaler Status ist OK - Job wurde zweifelsfrei erfolgreich ausgefuehrt
// Wir markieren die Ueberweisung als "ausgefuehrt"
markExecuted();
return;
}
// Globaler Status ist nicht OK. Mal schauen, was der Job-Status sagt
String statusText = getStatusText();
if (status.getStatusCode() == HBCIStatus.STATUS_OK)
{
// Wir haben zwar global einen Fehler. Aber zumindest der Auftrag
// scheint in Ordnung zu sein. Wir markieren ihn sicherheitshalber
// als ausgefuehrt (damit er nicht mehrfach ausgefuhert wird), melden
// den globalen Fehler aber trotzdem weiter