. ***********************************************************************/ function next_depreciation_date($depreciation_date) { $start = strtotime($depreciation_date); $y = date('Y', $start); $m = date('n', $start) + 1; if ($m > 12) { $m = 1; $y++; } return strtotime("$y-$m-1"); } function depreciation_months($depreciation_start) { // assume that depreciation start is the same fiscal year //$start = strtotime($depreciation_start); //$end = strtotime($year['end']); $start = next_depreciation_date($depreciation_start); return 12 - date('n', $start) + 1; //$d1 = date('j', $start); // day of the month //$d2 = date('t', $start); // number of days in month //if ($d2 > $d1) //$months++; } function months_between_dates($start, $end) { $start = strtotime($start); $end = strtotime($end); $y1 = date('Y', $start); $m1 = date('n', $start); $y2 = date('Y', $end); $m2 = date('n', $end); return 12 * ($y2 - $y1) + $m2 - $m1; } function compute_gl_rows_for_depreciation($item, $no_months, $period) { $rows = array(); $year = get_current_fiscalyear(); $y = date('Y', strtotime($year['end'])); switch ($item['depreciation_method']) { case 'D': $line_value = $item['purchase_cost']*$item['depreciation_rate']/100/12; $value = $item['material_cost'] * $item['depreciation_rate'] * $item['depreciation_factor']/100/12; if ($value < $line_value) $value = $line_value; break; case 'S': // purchase_cost stores start cost of item $done_months = months_between_dates($item['depreciation_start'], $item['depreciation_date']); $remaining_months = 12.0 * 100.0/$item['depreciation_rate'] - $done_months; $value = $item['purchase_cost']*$item['depreciation_rate']/100/12; break; case 'N': $N = $item['depreciation_rate']; $done_years = months_between_dates($item['depreciation_start'], $item['depreciation_date'])/12; $value = $item['purchase_cost']* ($N-$done_years)/($N*($N+1)/2)/12; break; case 'O': $value = $item['material_cost']; break; } $next = next_depreciation_date($item['depreciation_date']); $m = date('n', $next); $total = 0; $cnt = 0; for ($i=$m; $i < $m + $no_months; $i++) { if ($item['depreciation_method'] == 'S') { if ($cnt >= $remaining_months) $value = 0; } $date = sql2date(date("$y-$i-t", strtotime("$y-$i-1"))); $total += $value; if (FA_YEARLY == $period) { // yearly if ($i == $m + $no_months - 1) $rows[] = array('date' => $date, 'value' => $total); /*else $rows[] = array('date' => $date, 'value' => 0); */ } else { // monthly $rows[] = array('date' => $date, 'value' => $value); } $cnt++; if ($item['depreciation_method'] == 'O') { // depreciate only in the first month $value = 0; } } return $rows; }