Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (C) cedarsoft GmbH. Licensed under the GNU General Public License version 3 (the "License") with Classpath Exception; you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.cedarsoft.org/gpl3ce (GPL 3 with Classpath Exception) This code is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3 only, as published by the Free Software Foundation. cedarsoft GmbH designates this particular file as subject to the "Classpath" exception as provided by cedarsoft GmbH in the LICENSE file that accompanied this code. This code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3 for more details (a copy is included in the LICENSE file that accompanied this code). You should have received a copy of the GNU General Public License version 3 along with this work; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. Please contact cedarsoft GmbH, 72810 Gomaringen, Germany, or visit www.cedarsoft.com if you need additional information or have any questions.
 
 
 package com.cedarsoft.business.calc;
 
 import  org.jetbrains.annotations.NotNull;
 
 import java.util.List;

Calculates the interests for a given InterestRateProvider.
 
   @NotNull
   @NotNull
   @NotNull
   private final TimeSystem timeSystem;

  
Creates a new calculation system

Parameters:
interestRateProvider the interest rate provider
backingCalculationSystem the backing calculation system
timeSystem the time system
 
   public VariableInterestCalculationSystem( @NotNull InterestRateProvider interestRateProvider, @NotNull InterestCalculationSystem backingCalculationSystem, @NotNull TimeSystem timeSystem ) {
     this. = interestRateProvider;
     this. = backingCalculationSystem;
     this. = timeSystem;
   }

  
Calculates the interest for the given amount and dates.

Parameters:
amount the amount the interest is calculated for
begin the begin of the period
end the end of the period
Returns:
the payment rent
 
   @NotNull
   public Rent calculateInterest( @NotNull Money amount, @NotNull LocalDate begin, @NotNull LocalDate end ) {
     //Switch over the validity period
     switch ( getInterestRateProvider().getValidityPeriod() ) {
       case :
         return calculateInterestConstantRateamountbeginend );
       case :
         return calculateInterestMonthlyPeriodamountbeginend );
       default:
         throw new UnsupportedOperationException"not yet implemented for " + getInterestRateProvider().getValidityPeriod() );
     }
   }

  
Calculates the interest for a interest rate provider with monthly changing interest rates.

Parameters:
amount the amount
begin the begin
end the end
Returns:
the interest
 
   @NotNull
   public Rent calculateInterestMonthlyPeriod( @NotNull Money amount, @NotNull LocalDate begin, @NotNull LocalDate end ) {
     List<InterestDetailsinterestDetails = new ArrayList<InterestDetails>();
 
    //Create a runner that represents the begin of the actual month
    //For the first month this may be another day of month than 1
    LocalDate actualMonthBegin = begin;
    //Now iterate over all months
    MutableMoney rentSummer = new MutableMoney();
    while ( actualMonthBegin.isBeforeend ) ) {
      LocalDate actualMonthEnd = actualMonthBegin.plusMonths( 1 );
      //Check if this month is complete --> else only add the rest
      if ( actualMonthEnd.isAfterend ) ) {
        actualMonthEnd = end;
      }
      double monthYears = getTimeSystem().calculateYearsactualMonthBeginactualMonthEnd );
      double monthDays = getTimeSystem().calculateDaysactualMonthBeginactualMonthEnd );
      double monthRate = getInterestRateProvider().getRateactualMonthBegin );
      //add the rent for the rent
      Money baseForMonth = rentSummer.immutable();
      Money compoundInterest;
      if ( getBackingCalculationSystem().isCompoundSystem() && baseForMonth.getValue() != 0 ) {
        compoundInterest = getBackingCalculationSystem().calculateInterestbaseForMonthmonthYearsmonthDaysmonthRate );
        rentSummer.pluscompoundInterest );
      } else {
        compoundInterest = .;
      }
      //add the rent for the amount
      Money interest = getBackingCalculationSystem().calculateInterestamountmonthYearsmonthDaysmonthRate );
      rentSummer.plusinterest );
      //Build the information object (if expected)
      interestDetails.addnew InterestDetailsactualMonthBeginactualMonthEndmonthRatebaseForMonthinterest.pluscompoundInterest ), monthDays ) );
      //Next month --> now we really need the first day of the month
      actualMonthBegin = actualMonthBegin.plusMonths( 1 ).withDayOfMonth( 1 );
    }
    return new RentamountbeginendinterestDetails );
  }

  
Calculates the interest for a interest rate provider with a constant rate

Parameters:
amount the amount
begin the begin
end the end
Returns:
the interest
  @NotNull
  private Rent calculateInterestConstantRate( @NotNull Money amount, @NotNull LocalDate begin, @NotNull LocalDate end ) {
    double years = getTimeSystem().calculateYearsbeginend );
    double days = getTimeSystem().calculateDaysbeginend );
    double rate = getInterestRateProvider().getRatebegin );
    Money interest = getBackingCalculationSystem().calculateInterestamountyearsdaysrate );
    //We need just one interest details since the interest rate is constant
    InterestDetails interestDetails = new InterestDetailsbeginbegin.plusDays( 1 ), rateamountinterestdays );//todo check end date
    return new Rentamountbeginend, Collections.singletonListinterestDetails ) );
  }
  @NotNull
    return ;
  }
  @NotNull
  }
  @NotNull
  public TimeSystem getTimeSystem() {
    return ;
  }
New to GrepCode? Check out our FAQ X