summaryrefslogtreecommitdiff
path: root/src/Q2/BonusOnSavings.java
blob: d2e8199a492896882ec4a83a59260bdae4dd78f0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package Q2;

public class BonusOnSavings {
  double annualRate = 0.0;
  double quarterlyRate = 0.0;

  public BonusOnSavings() {
    this(0.03, 0.05);
  }

  public BonusOnSavings(double quarterlyRate, double annualRate) {
    this.quarterlyRate = quarterlyRate;
    this.annualRate = annualRate;
  }

  public double computeBonus(double monthlyCommitment, double q1, double q2, double q3, double q4) {
    double quarterlyTarget = monthlyCommitment * 3;
    double annualTarget = monthlyCommitment * 12;

    return this.quarterlyBonus(quarterlyTarget, q1)
        + this.quarterlyBonus(quarterlyTarget, q2)
        + this.quarterlyBonus(quarterlyTarget, q3)
        + this.quarterlyBonus(quarterlyTarget, q4)
        + this.annualBonus(annualTarget, q1 + q2 + q3 + q4);
  }

  private double quarterlyBonus(double target, double actual) {
    return (actual >= target) ? actual * this.quarterlyRate : 0.0;
  }

  private double annualBonus(double target, double actual) {
    if (actual < target) return 0.0;

    return (actual * this.annualRate) + ((actual - target) * 0.25);
  }
}