e81cdf541d
* Allow SetAccountCurrency after SetCash without throwing Previously, calling SetAccountCurrency after SetCash threw an InvalidOperationException. The portfolio manager now switches the base account currency in place: the previous Cash entry (and its balance) is preserved in the CashBook, and a notice is logged. When the new account currency matches the existing one, an optional startingCash overrides the previously set amount and the override is logged. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * Simplify SetAccountCurrency remarks and drop unused message Tightens the XML remarks to two cases (different currency: keep previous in its own entry; matching currency: override). Also removes the now unused CannotChangeAccountCurrencyAfterSettingCash string since the portfolio no longer throws. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * Simplify in-line comment in SetAccountCurrency Drops the "Undo that migration" wording (residue from a previous fix attempt) and just describes what the branch does: keep the previous balance in its own currency entry while the new account currency starts at zero. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * Differentiate implicit vs explicit SetCash on account currency switch SetCash(decimal) is currency-agnostic: the amount is "this many units of the (eventual) account currency". Switching the account currency now re-labels the amount onto the new currency instead of preserving the previous one. SetCash(symbol, ...) for the current account currency keeps the old behaviour of preserving the balance in its own CashBook entry. Splits the existing tests by overload and adds a starting-cash variant for the explicit case. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * Mark base cash explicit on any SetCash(symbol, ...) call Broaden _baseCashSymbolSetExplicitly so any call to the explicit-currency overload signals the user is committing to named currencies, not just calls whose symbol matches the current account currency. SetAccountCurrency then preserves the previous base-currency balance in its own CashBook entry whenever the user has touched the explicit overload at all. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>