Logik Upgrade / Downgrade

Bitte aktiviere JavaScript!
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?
 
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) {

....????
 
Indem du ganz schnell Date vergisst und stattdessen mit java.time arbeitest :)

Dann z.B: Duration.between(date1, date2)
 
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?
 
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 €
 
Danke, ich würde es aber gerne sekundengenau machen.
Wie würde es hier aussehen? Zudem müsste man noch Schaltjahre berücksichtigen?
 
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?
 
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?
 
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.
 
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.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben