Logik Upgrade / Downgrade

beta20

Top Contributor
Hallo zusammen,

ich möchte gerne folgendes realisieren und benötige hier auch etwas mathematischen Hintergrund:
Es geht um Upgrading und Downgrading von Verträge.

Als Beispiel:
Ein Kunde schließt am 07.06.2019 ein 1 Jahresvertrag (TarifA) ab für 100 EUR. Die Bezahlung erfolgt jedes Jahr.
Am 20.07.2019 merkt er aber, dass ihm der bestehende Tarif nicht ausreicht und möchte in den nächst höheren TarifB (200 EUR / Jahr) wechseln.
Wie wird das nun genau verrechnet? Der Kunde hat ja schon 100 EUR für 1 Jahr bezahlt. Die Laufzeit ändert sich nicht. Der Vertrag läuft dennoch bis zum 07.06.2020.

Welche Schritte sind hier genau zu tun?
- Ausrechnen der Tage, die er in TarifA hatte (= 43 Tage)
- Ausrechnen der Tage, die er nun in TarifB verbringt = 365-43 = 322 Tage
- Kosten pro Tage je Tarif ausrechnen: TarifA = 100 EUR / 365 Tage = 0,273 EUR / Tag
- Kosten pro Tage je Tarif ausrechnen: TarifB = 200 EUR / 365 Tage = 0,547 EUR / Tag

Kosten:
Tarif1: 43 Tage * 0,27 EUR = 11,61 EUR
Tarif2: 322 Tage * 0,55 EUR = 177,01 EUR

Guthaben - NutzungTarif1
100 EUR - 11,61 EUR = 88,39 EUR

Kosten Nutzung Tarif2 - Restguthaben
177,01 EUR - 88,39 EUR = 88,62 EUR

-> Kunde muss noch 88,62 EUR zahlen?

Stimmt das alles so?
 

beta20

Top Contributor
Danke...

Ich würde das gerne noch sekundengenau machen.
Wie bekomme ich die Sekunden, Minuten, Stunden, Tage, Jahre zwischen zwei Datümer?

Code:
public int getDifference(Date date1, Date date2) {

....????
 

mrBrown

Super-Moderator
Mitarbeiter
Indem du ganz schnell Date vergisst und stattdessen mit java.time arbeitest :)

Dann z.B: Duration.between(date1, date2)
 

mrBrown

Super-Moderator
Mitarbeiter
Kannst in deinem Model trotzdem java.time benutzen, musst dann nur an den Grenzen umwandeln zu Date.

Man müsste aber auch Primefaces mit java.time nutzen können, u.U. mit Converter? Wo hakt's denn da?
 

mihe7

Top Contributor
Wie wird das nun genau verrechnet?
Grundsätzlich: wie Du willst (= mit Deinem Kunden vereinbart). Du könntest z. B. für einzelne Tage anderes Geld verlangen wie für ein Jahr. Wenn es heißt "anteilig", dann würde ich auch anteilig rechnen.

Im ersten Schritt bekommt der Kunde erst einmal seine 100 € auf sein Kundenkonto gut geschrieben. Im zweiten Schritt wird das Kundenkonto mit den neuen Rechnungen belastet:
Code:
1. Tarif A: 100 € x  43 Tage : 365 Tage =  11,78 €
2. Tarif B: 200 € x 322 Tage : 365 Tage = 176,44 €
                                          --------
Belastung Kundenkonto:                    188,22 €
Daraus ergibt sich ein neuer, offener Posten von 88,22 €
 

beta20

Top Contributor
Danke, ich würde es aber gerne sekundengenau machen.
Wie würde es hier aussehen? Zudem müsste man noch Schaltjahre berücksichtigen?
 

White_Fox

Top Contributor
Naja, jetzt schaffst du dir halt das Problem, daß deine Tarife jedes Jahr (und jeden Monat) andere Preise haben. Dann wäre es geschickter, gleich einen Tarif auf Sekundenbasis aufzusetzen.
Das geht dann aber mit konstanten Monatspreisen nicht zusammen.

Mal aus Interesse: Um was geht es denn da genau, wenn du eine Jahresleistung sekündlich abrechnen willst?
 

beta20

Top Contributor
Es geht um Abotarife. Reines Saas Modell.
Naja, so ganz verstehe ich es aber nicht, warum das zu unterschiedlichen Monatspreisen führen soll. Hier mal eine nähere Erklärung:

Ich habe eine Entity "Vertrag", in welcher auch immer das "nächste Abrechnungsdatum" gespeichert wird.
Hierzu nutze ich eine JAVA Methode, die mir immer ein Monat dazu addiert, sobald eine Abrechnung stattgefunden hat.

- Tarif1 = 10,00 EUR / Monat.
- Tarif2 = 20,00 EUR / Monat

Kunde schließt Tarif1 am 07.04.2019 ab.
Am 20.07.2019 wechselt er in Tarif2.

-> Abrechnung erfolgt jeden Monat:
Abrechnung1: 07.04. - 07.05.2019 = 10,00 EUR
Abrechnung2: 07.05.2019 - 07.06.2019 = 10,00 EUR
Abrechnung3: 07.06.2019 - 07.07.2019 = 10,00 EUR
-----------------------------------------------------------------
Abrechnng4: Hier passiert dann das spannende:
a) Berechnung der Sekunden von der Nutzung von Tarif1
b) Berechnung der Sekunden von der Nutzung von Tarif2
-> a) + b) gibt dann die Summe, was der Kunde zahlen muss.

Das ganze sieht bei Jahresverträgen auch nicht anders aus.
Hier wird dann eben der Tarif2 bis "nächste Abrechnungsdatum" berechnet, bzw. die Sekunden bis dahin ermittelt und dazu der entsprechende Betrag ermittelt.

Oder habe ich einen Denkfehler?
 

White_Fox

Top Contributor
Naja, oder du mußt jeweils von einer anderen Anzahl an Sekunden/Jahr, je nach Schaltjahr oder nicht, ausgehen. Ansonsten ist alles wie vorher.

Aber ganz ehrlich: Wenn dein Kunde 200€/a zahlt, dann sind das (bei 365 Tagen) 0,000 006 312 €/s. Oder, dein Kunde kann sich für einen einzelnen Cent 1576,8s (eine knappe halbe Stunde) deiner Leistung leisten.
Du kannst das natürlich nicht nur in Sekunden, sondern gerne auch in Milli- Mikro- oder Nanosekunden ausrechnen. Die Frage ist halt, ob du irgendwann nur noch Blindleistung (Probleme löst die es nicht gibt) erzeugst oder dir nicht gar neue Probleme schaffst.
 

mihe7

Top Contributor
Oder habe ich einen Denkfehler?
Monat und Anzahl der Tage sind unterschiedliche Dinge. Wenn Du mir eine Leistung zu einem Monatspreis verkaufst, dann habe ich den Monat zu bezahlen und ich erhalte den ganzen Monat über die Leistung. Dabei spielt es keine Rolle, ob der Monat nun 28 oder 31 Tage hat. Umgekehrt folgen aus Tagespreisen unterschiedliche Preise für den Monat, abhängig davon, wie viele Tage er hat.

Analog gilt dies natürlich für das Jahr, d. h. es spielt bei einem Jahrespreis keine Rolle, ob es sich um eine Schaltjahr handelt oder nicht.

Jetzt hängt es von Deinem Geschäfts- bzw. Preismodell ab, wie die Laufzeiten sind, ob Du Vertragswechsel während eines Monats/Jahrs überhaupt zulässt und wenn ja, zu welchen Konditionen.

Ein Runterbrechen auf Sekunden ist bei Jahrespreisen von 200 €, wie @White_Fox bereits erwähnt hat, natürlich völlig sinnfrei.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Tic Tac Toe Logik kürzer fassen Java Basics - Anfänger-Themen 8
I Logik Zahlungsprozess - Wann Bestellobjekt anlegen? Java Basics - Anfänger-Themen 2
H Logik Fehler erkennen Java Basics - Anfänger-Themen 21
M Kann mir jemand hier die Logik vermitteln? Java Basics - Anfänger-Themen 3
M Kann mir jemand die Logik erklären? Java Basics - Anfänger-Themen 1
Hias12345 Schach(Springer Logik) Java Basics - Anfänger-Themen 27
C Array-Werte werden gemischt, ohne Logik Java Basics - Anfänger-Themen 2
R Best Practice Logik in der Datenbank oder in Java? Java Basics - Anfänger-Themen 3
I Hilfe bei der Logik Java Basics - Anfänger-Themen 9
A Minesweeper Logik Java Basics - Anfänger-Themen 10
D Logik von GUI trennen Java Basics - Anfänger-Themen 3
Meeresgott OOP Gui, Logik und Datenbank richtig aufbauen Java Basics - Anfänger-Themen 43
V Memory Logik Problem/Denkblockade, bitte helft Java Basics - Anfänger-Themen 1
Z Jump and Run - Grafik,Logik und GUI trennen Java Basics - Anfänger-Themen 4
P fibonacci - do while Statement Logik Fehler Java Basics - Anfänger-Themen 5
Z GUI und Logik - Trennung Java Basics - Anfänger-Themen 2
H Logik Frage Java Basics - Anfänger-Themen 3
X Methoden Logik-Problem mit Schleifen. Java Basics - Anfänger-Themen 7
kaoZ Logik und Gui trennen Java Basics - Anfänger-Themen 3
S Logik knobeln... Java Basics - Anfänger-Themen 4
G Klassen Von Logik auf TextField in der GUI zugreifen Java Basics - Anfänger-Themen 14
V Verstehe die Logik nicht ... Java Basics - Anfänger-Themen 30
S OOP Trennung der GUI von der Logik Java Basics - Anfänger-Themen 11
F While Schleife - Logik ? Java Basics - Anfänger-Themen 5
B Logik von verschachtelten For Schleifen Java Basics - Anfänger-Themen 6
Luk10 Logik/Mathe Problem Java Basics - Anfänger-Themen 6
M Logik in Java Java Basics - Anfänger-Themen 4
K java.util.ConcurrentModificationException problem in der Logik? Quaxli-Tutorial Java Basics - Anfänger-Themen 9
S Frage zu Verständnis und Logik Java Basics - Anfänger-Themen 5
K Logik in if-Bedingung Java Basics - Anfänger-Themen 2
L Wie Trennung von Logik und Ausgabe? Java Basics - Anfänger-Themen 6
T Hilfe - Ein Logik Problem Java Basics - Anfänger-Themen 17
sliwalker Wie löse ich eine "DfB-Pokalauslosung"?Logik fehlt Java Basics - Anfänger-Themen 5
T Problem mit der Logik von Switch und do-while Java Basics - Anfänger-Themen 3
G die Logik für eine Buchung! Java Basics - Anfänger-Themen 3
B Downgrade eines bestehenden Projektes Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben