initial version
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
import Foundation
|
||||
|
||||
struct MonthlySummary {
|
||||
let periodLabel: String
|
||||
let startDate: Date
|
||||
let endDate: Date
|
||||
let startingValue: Decimal
|
||||
let endingValue: Decimal
|
||||
let contributions: Decimal
|
||||
let netPerformance: Decimal
|
||||
|
||||
var netPerformancePercentage: Double {
|
||||
let base = startingValue + contributions
|
||||
guard base > 0 else { return 0 }
|
||||
return NSDecimalNumber(decimal: netPerformance / base).doubleValue * 100
|
||||
}
|
||||
|
||||
var formattedStartingValue: String {
|
||||
CurrencyFormatter.format(startingValue, style: .currency, maximumFractionDigits: 0)
|
||||
}
|
||||
|
||||
var formattedEndingValue: String {
|
||||
CurrencyFormatter.format(endingValue, style: .currency, maximumFractionDigits: 0)
|
||||
}
|
||||
|
||||
var formattedContributions: String {
|
||||
CurrencyFormatter.format(contributions, style: .currency, maximumFractionDigits: 0)
|
||||
}
|
||||
|
||||
var formattedNetPerformance: String {
|
||||
let prefix = netPerformance >= 0 ? "+" : ""
|
||||
let value = CurrencyFormatter.format(netPerformance, style: .currency, maximumFractionDigits: 0)
|
||||
return prefix + value
|
||||
}
|
||||
|
||||
var formattedNetPerformancePercentage: String {
|
||||
let prefix = netPerformance >= 0 ? "+" : ""
|
||||
return String(format: "\(prefix)%.2f%%", netPerformancePercentage)
|
||||
}
|
||||
|
||||
static var empty: MonthlySummary {
|
||||
MonthlySummary(
|
||||
periodLabel: "This Month",
|
||||
startDate: Date(),
|
||||
endDate: Date(),
|
||||
startingValue: 0,
|
||||
endingValue: 0,
|
||||
contributions: 0,
|
||||
netPerformance: 0
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
struct PortfolioChange {
|
||||
let absolute: Decimal
|
||||
let percentage: Double
|
||||
let label: String
|
||||
|
||||
var formattedAbsolute: String {
|
||||
let prefix = absolute >= 0 ? "+" : ""
|
||||
let value = CurrencyFormatter.format(absolute, style: .currency, maximumFractionDigits: 0)
|
||||
return prefix + value
|
||||
}
|
||||
|
||||
var formattedPercentage: String {
|
||||
let prefix = absolute >= 0 ? "+" : ""
|
||||
return String(format: "\(prefix)%.2f%%", percentage)
|
||||
}
|
||||
|
||||
static var empty: PortfolioChange {
|
||||
PortfolioChange(absolute: 0, percentage: 0, label: "since last update")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user