Example #1
0
 /**
  * AMORLINC
  *
  * Returns the depreciation for each accounting period.
  * This function is provided for the French accounting system. If an asset is purchased in
  * the middle of the accounting period, the prorated depreciation is taken into account.
  *
  * Excel Function:
  *        AMORLINC(cost,purchased,firstPeriod,salvage,period,rate[,basis])
  *
  * @access    public
  * @category Financial Functions
  * @param    float    cost        The cost of the asset.
  * @param    mixed    purchased    Date of the purchase of the asset.
  * @param    mixed    firstPeriod    Date of the end of the first period.
  * @param    mixed    salvage        The salvage value at the end of the life of the asset.
  * @param    float    period        The period.
  * @param    float    rate        Rate of depreciation.
  * @param    integer    basis        The type of day count to use.
  *                                        0 or omitted    US (NASD) 30/360
  *                                        1                Actual/actual
  *                                        2                Actual/360
  *                                        3                Actual/365
  *                                        4                European 30/360
  * @return    float
  */
 public static function AMORLINC($cost, $purchased, $firstPeriod, $salvage, $period, $rate, $basis = 0)
 {
     $cost = Functions::flattenSingleValue($cost);
     $purchased = Functions::flattenSingleValue($purchased);
     $firstPeriod = Functions::flattenSingleValue($firstPeriod);
     $salvage = Functions::flattenSingleValue($salvage);
     $period = Functions::flattenSingleValue($period);
     $rate = Functions::flattenSingleValue($rate);
     $basis = is_null($basis) ? 0 : (int) Functions::flattenSingleValue($basis);
     $fOneRate = $cost * $rate;
     $fCostDelta = $cost - $salvage;
     //    Note, quirky variation for leap years on the YEARFRAC for this function
     $purchasedYear = DateTime::YEAR($purchased);
     $yearFrac = DateTime::YEARFRAC($purchased, $firstPeriod, $basis);
     if ($basis == 1 && $yearFrac < 1 && DateTime::isLeapYear($purchasedYear)) {
         $yearFrac *= 365 / 366;
     }
     $f0Rate = $yearFrac * $rate * $cost;
     $nNumOfFullPeriods = intval(($cost - $salvage - $f0Rate) / $fOneRate);
     if ($period == 0) {
         return $f0Rate;
     } elseif ($period <= $nNumOfFullPeriods) {
         return $fOneRate;
     } elseif ($period == $nNumOfFullPeriods + 1) {
         return $fCostDelta - $fOneRate * $nNumOfFullPeriods - $f0Rate;
     } else {
         return 0.0;
     }
 }