littleyoda / hibiscus.depotviewer

Depotviewer Plugin für Hibiscus
31 stars 15 forks source link

Negativer Kurs beim Abrufen von DKB #64

Closed sicherha closed 4 years ago

sicherha commented 7 years ago

Ich habe ein Depot bei der DKB mit genau einer Kauforder. Sagen wir mal, die Order umfasst 42 Anteile mit Kurs 123,456 €.

Beim Abrufen bekomme ich eine Exception um die Ohren geworfen: "Der Kurs muss immer positiv sein."

Wenn ich mich mit jdb reinhänge, sehe ich Folgendes:

bg-task:Worker[1] print getAnzahl()
 getAnzahl() = "42"
bg-task:Worker[1] print getKurs()
 getKurs() = "-123.4560000000000123456789"

Die Anzahl passt also, aber der Kurs ist genau umgedreht!

sicherha commented 7 years ago

Hier ein Stack-Trace und die Ausgabe des Ergebnisses des HBCI-Abrufs:

bg-task:Worker[1] where
  [1] de.open4me.depot.datenobj.server.UmsatzImpl.store (UmsatzImpl.java:234)
  [2] de.open4me.depot.abruf.utils.Utils.addUmsatz (Utils.java:162)
  [3] de.open4me.depot.hbcijobs.HBCIDepotUmsatzJob.parseDepotUmsatz (HBCIDepotUmsatzJob.java:154)
  [4] de.open4me.depot.hbcijobs.HBCIDepotUmsatzJob.markExecuted (HBCIDepotUmsatzJob.java:102)
  [5] de.willuhn.jameica.hbci.server.hbci.AbstractHBCIJob.markExecutedInternal (AbstractHBCIJob.java:326)
  [6] de.willuhn.jameica.hbci.server.hbci.AbstractHBCIJob.handleResult (AbstractHBCIJob.java:267)
  [7] de.willuhn.jameica.hbci.synchronize.hbci.HBCISynchronizeBackend$HBCIJobGroup.sync (HBCISynchronizeBackend.java:339)
  [8] de.willuhn.jameica.hbci.synchronize.AbstractSynchronizeBackend$Worker.run (AbstractSynchronizeBackend.java:396)
  [9] de.willuhn.jameica.gui.GUI$7.run (GUI.java:1,057)
bg-task:Worker[1] up 5
bg-task:Worker[6] print result
 result = "Entry #0:
timestamp: Fri Aug 18 09:10:11 CEST 2017
depot: Wertpapier-Depot HANS DAMPF 123456789 BLZ 12030000 (Deutsche Kreditbank Berlin) [DE] (EUR)
====> Instrument 0:
isin: XX1234567890
wkn: XYZ123
name: WERTVOLLE WERTPAPIERE AUS WERTVOLLEM PAPIER 
startSaldo: 42  Stück
endSaldo: null
preis: 123.456 EUR 
preisdatum: Tue Aug 01 00:00:00 CEST 2017
--> Transaction 0:
kundenreferenz: NONREF
anzahl: 42  Stück
betrag: -5185.15 EUR
stueckzinsen: null
stueckzins_tage: 0
transaction_indicator: 1: Settlement/Clearing
richtung: 2: Erhalt
bezahlung: 2: frei
ccp_eligibility: false
datum: Tue Aug 01 00:00:00 CEST 2017
datum_valuta: Fri Aug 18 00:00:00 CEST 2017
storno: false
gegenpartei: null
freitext_details: Kauf
000001234567890

<--
<====

rest:"

Der Kurs wird in de.open4me.depot.hbcijobs.HBCIDepotUmsatzJob.parseDepotUmsatz (Frame 3) folgendermaßen berechnet: einzelbetrag = gesamtbetrag / t.anzahl.getValue().doubleValue(); Da gesamtbetrag eine negative Zahl ist, ist das Ergebnis ein negativer einzelbetrag.

Dieser negative Betrag kommt offenbar schon per HBCI so rein!

Die simpelste Lösung wäre, dass man das Minuszeichen ignoriert und einfach mit dem Absolutwert weiterrechnet. Ein Kauf oder Verkauf mit negativem Betrag sollte ja in der Realität nie auftreten können, oder?

sicherha commented 7 years ago

Der obige Commit löst mein Problem.

Dass hier mit Geldbeträgen in Fließkommadarstellung hantiert wird, macht mir zwar ein bisschen Angst - aber das ist ja hoffentlich nur für Anzeigezwecke.