Skip to content

Instantly share code, notes, and snippets.

@Dalboz
Last active March 12, 2024 20:45
Show Gist options
  • Save Dalboz/a6b606027c5c8e819a0664afc9a0f787 to your computer and use it in GitHub Desktop.
Save Dalboz/a6b606027c5c8e819a0664afc9a0f787 to your computer and use it in GitHub Desktop.
depreciation calculation
function Calculate-Amortization {
param (
[int]$assetNumber,
[double]$acquisitionCost,
[int]$usefulLife,
[string]$usefulLifeUnits,
[string]$depreciationStartDate,
[string]$capitalizationDate
)
# Convert date strings to DateTime objects
$depreciationStartDate = Get-Date $depreciationStartDate
$capitalizationDate = Get-Date $capitalizationDate
# Calculate annual depreciation
switch ($usefulLifeUnits) {
"months" { $annualDepreciation = $acquisitionCost / ($usefulLife / 12) }
"quarters" { $annualDepreciation = $acquisitionCost / ($usefulLife / 4) }
"days" { $annualDepreciation = $acquisitionCost / $usefulLife }
default { $annualDepreciation = $acquisitionCost / $usefulLife }
}
# Initialize an empty DataTable
$amortizationTable = New-Object System.Data.DataTable
$null = $amortizationTable.Columns.Add("Asset Number", [int])
$null = $amortizationTable.Columns.Add("Date", [DateTime])
$null = $amortizationTable.Columns.Add("Accumulated Depreciation", [double])
$null = $amortizationTable.Columns.Add("Depreciation Expense", [double])
$null = $amortizationTable.Columns.Add("Net Book Value", [double])
$null = $amortizationTable.Columns.Add("Fiscal Year", [int])
for ($period = 1; $period -le $usefulLife; $period++) {
# Calculate depreciation expense for the current period
switch ($usefulLifeUnits) {
"years" { $depreciationExpense = $annualDepreciation }
"months" { $depreciationExpense = $annualDepreciation / 12 }
"quarters" { $depreciationExpense = $annualDepreciation / 4 }
"days" { $depreciationExpense = $acquisitionCost / $usefulLife }
default { $depreciationExpense = $annualDepreciation }
}
# Calculate accumulated depreciation
$accumulatedDepreciation = $depreciationExpense * $period
# Calculate the date based on the useful life unit
switch ($usefulLifeUnits) {
"years" { $date = $capitalizationDate.AddYears($period - 1) }
"months" { $date = $capitalizationDate.AddMonths([int](365 / 12) * ($period - 1)) }
"quarters" { $date = $capitalizationDate.AddDays([int](365 / 4) * ($period - 1)) }
"days" { $date = $capitalizationDate.AddDays($period - 1) }
default { $date = $capitalizationDate.AddYears($period - 1) }
}
# Calculate net book value
$netBookValue = $acquisitionCost - $accumulatedDepreciation
# Calculate fiscal year
$fiscalYear = (1 + ($date.Month -ge 10)) + $date.Year
# Add row to the DataTable
$newRow = $amortizationTable.NewRow()
$newRow["Asset Number"] = $assetNumber
$newRow["Date"] = $date
$newRow["Accumulated Depreciation"] = $accumulatedDepreciation
$newRow["Depreciation Expense"] = $depreciationExpense
$newRow["Net Book Value"] = $netBookValue
$newRow["Fiscal Year"] = $fiscalYear
$null = $amortizationTable.Rows.Add($newRow)
}
return $amortizationTable
}
# Example usage
$assetNumber = 1
$acquisitionCost = 10000.0
$usefulLife = 60
$usefulLifeUnits = "months"
$depreciationStartDate = '2021-01-01'
$capitalizationDate = '2021-01-01'
# Calculate amortization table
$amortizationTable = Calculate-Amortization -assetNumber $assetNumber -acquisitionCost $acquisitionCost -usefulLife $usefulLife -usefulLifeUnits $usefulLifeUnits -depreciationStartDate $depreciationStartDate -capitalizationDate $capitalizationDate
# Display the amortization table
Write-Host "`nAmortization Table:"
$amortizationTable | Format-Table
from datetime import datetime, timedelta
import pandas as pd
def calculate_amortization(asset_number, acquisition_cost, useful_life, useful_life_units, depreciation_start_date, capitalization_date):
# Convert date strings to datetime objects
depreciation_start_date = datetime.strptime(depreciation_start_date, '%Y-%m-%d')
capitalization_date = datetime.strptime(capitalization_date, '%Y-%m-%d')
# Calculate annual depreciation
if useful_life_units == "months":
annual_depreciation = acquisition_cost / (useful_life / 12)
elif useful_life_units == "quarters":
annual_depreciation = acquisition_cost / (useful_life / 4)
elif useful_life_units == "days":
annual_depreciation = acquisition_cost / useful_life
else:
annual_depreciation = acquisition_cost / useful_life
# Initialize an empty DataFrame
amortization_table = pd.DataFrame(columns=['Asset Number', 'Date', 'Accumulated Depreciation', 'Depreciation Expense', 'Net Book Value', 'Fiscal Year'])
for period in range(1, useful_life + 1):
# Calculate depreciation expense for the current period
if useful_life_units == 'years':
depreciation_expense = annual_depreciation
elif useful_life_units == 'months':
depreciation_expense = annual_depreciation / 12
elif useful_life_units == 'quarters':
depreciation_expense = annual_depreciation / 4
elif useful_life_units == 'days':
depreciation_expense = acquisition_cost / useful_life # Adjust depreciation for 1 day useful life
else:
# Add more cases for other units if needed
depreciation_expense = annual_depreciation
# Calculate accumulated depreciation
accumulated_depreciation = depreciation_expense * period
# Calculate the date based on the useful life unit
if useful_life_units == 'years':
date = capitalization_date + timedelta(days=365 * (period - 1))
elif useful_life_units == 'months':
date = capitalization_date + timedelta(days=int((365 / 12) * (period - 1)))
elif useful_life_units == 'quarters':
date = capitalization_date + timedelta(days=int((365 / 4) * (period - 1)))
elif useful_life_units == 'days':
date = capitalization_date + timedelta(days=period - 1)
else:
# Add more cases for other units if needed
date = capitalization_date + timedelta(days=365 * (period - 1))
# Calculate net book value
net_book_value = acquisition_cost - accumulated_depreciation
# Calculate fiscal year
fiscal_year = (1 if date.month >= 10 else 0) + date.year
# Append values to the table
row_data = pd.DataFrame({
'Asset Number': [asset_number],
'Date': [date],
'Accumulated Depreciation': [accumulated_depreciation],
'Depreciation Expense': [depreciation_expense],
'Net Book Value': [net_book_value],
'Fiscal Year': [fiscal_year]
})
amortization_table = pd.concat([amortization_table, row_data], ignore_index=True)
return amortization_table
# Example usage
asset_number = 1
acquisition_cost = 10000.0
useful_life = 60
useful_life_units = "months"
depreciation_start_date = '2021-01-01'
capitalization_date = '2021-01-01'
# Calculate amortization table
amortization_table = calculate_amortization(asset_number, acquisition_cost, useful_life, useful_life_units, depreciation_start_date, capitalization_date)
# Display the amortization table
print("\nAmortization Table:")
print(amortization_table)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment