Browse Source

Activity fee, unitPrice in symbol curreny added

csehatt741 2 weeks ago
committed by Attila Cseh
parent
commit
6fd99d1228
  1. 2
      apps/api/src/app/import/import.service.ts
  2. 2
      apps/api/src/app/order/interfaces/activities.interface.ts
  3. 14
      apps/api/src/app/order/order.service.ts
  4. 8
      apps/api/src/app/portfolio/calculator/portfolio-calculator.ts
  5. 12
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts
  6. 8
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts
  7. 4
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts
  8. 8
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts
  9. 4
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts
  10. 4
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts
  11. 4
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-item.spec.ts
  12. 4
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-liability.spec.ts
  13. 8
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts
  14. 4
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts
  15. 4
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts

2
apps/api/src/app/import/import.service.ts

@ -122,6 +122,7 @@ export class ImportService {
createdAt: undefined, createdAt: undefined,
fee: 0, fee: 0,
feeInBaseCurrency: 0, feeInBaseCurrency: 0,
feeInSymbolCurrency: 0,
id: assetProfile.id, id: assetProfile.id,
isDraft: false, isDraft: false,
SymbolProfile: assetProfile, SymbolProfile: assetProfile,
@ -135,6 +136,7 @@ export class ImportService {
userCurrency, userCurrency,
date date
), ),
unitPriceInSymbolCurrency: marketPrice,
updatedAt: undefined, updatedAt: undefined,
userId: Account?.userId, userId: Account?.userId,
valueInBaseCurrency: valueInBaseCurrency:

2
apps/api/src/app/order/interfaces/activities.interface.ts

@ -12,9 +12,11 @@ export interface Activity extends Order {
Account?: AccountWithPlatform; Account?: AccountWithPlatform;
error?: ActivityError; error?: ActivityError;
feeInBaseCurrency: number; feeInBaseCurrency: number;
feeInSymbolCurrency: number;
SymbolProfile?: EnhancedSymbolProfile; SymbolProfile?: EnhancedSymbolProfile;
tags?: Tag[]; tags?: Tag[];
unitPriceInBaseCurrency: number; unitPriceInBaseCurrency: number;
unitPriceInSymbolCurrency: number;
updateAccountBalance?: boolean; updateAccountBalance?: boolean;
value: number; value: number;
valueInBaseCurrency: number; valueInBaseCurrency: number;

14
apps/api/src/app/order/order.service.ts

@ -541,6 +541,13 @@ export class OrderService {
userCurrency, userCurrency,
order.date order.date
), ),
feeInSymbolCurrency:
await this.exchangeRateDataService.toCurrencyAtDate(
order.fee,
order.currency ?? order.SymbolProfile.currency,
order.SymbolProfile.currency,
order.date
),
SymbolProfile: assetProfile, SymbolProfile: assetProfile,
unitPriceInBaseCurrency: unitPriceInBaseCurrency:
await this.exchangeRateDataService.toCurrencyAtDate( await this.exchangeRateDataService.toCurrencyAtDate(
@ -549,6 +556,13 @@ export class OrderService {
userCurrency, userCurrency,
order.date order.date
), ),
unitPriceInSymbolCurrency:
await this.exchangeRateDataService.toCurrencyAtDate(
order.unitPrice,
order.currency ?? order.SymbolProfile.currency,
order.SymbolProfile.currency,
order.date
),
valueInBaseCurrency: valueInBaseCurrency:
await this.exchangeRateDataService.toCurrencyAtDate( await this.exchangeRateDataService.toCurrencyAtDate(
value, value,

8
apps/api/src/app/portfolio/calculator/portfolio-calculator.ts

@ -112,12 +112,12 @@ export abstract class PortfolioCalculator {
.map( .map(
({ ({
date, date,
feeInBaseCurrency, feeInSymbolCurrency,
quantity, quantity,
SymbolProfile, SymbolProfile,
tags = [], tags = [],
type, type,
unitPriceInBaseCurrency unitPriceInSymbolCurrency
}) => { }) => {
if (isBefore(date, dateOfFirstActivity)) { if (isBefore(date, dateOfFirstActivity)) {
dateOfFirstActivity = date; dateOfFirstActivity = date;
@ -134,9 +134,9 @@ export abstract class PortfolioCalculator {
tags, tags,
type, type,
date: format(date, DATE_FORMAT), date: format(date, DATE_FORMAT),
fee: new Big(feeInBaseCurrency), fee: new Big(feeInSymbolCurrency),
quantity: new Big(quantity), quantity: new Big(quantity),
unitPrice: new Big(unitPriceInBaseCurrency) unitPrice: new Big(unitPriceInSymbolCurrency)
}; };
} }
) )

12
apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts

@ -91,7 +91,7 @@ describe('PortfolioCalculator', () => {
{ {
...activityDummyData, ...activityDummyData,
date: new Date('2021-11-22'), date: new Date('2021-11-22'),
feeInBaseCurrency: 1.55, feeInSymbolCurrency: 1.55,
quantity: 2, quantity: 2,
SymbolProfile: { SymbolProfile: {
...symbolProfileDummyData, ...symbolProfileDummyData,
@ -101,12 +101,12 @@ describe('PortfolioCalculator', () => {
symbol: 'BALN.SW' symbol: 'BALN.SW'
}, },
type: 'BUY', type: 'BUY',
unitPriceInBaseCurrency: 142.9 unitPriceInSymbolCurrency: 142.9
}, },
{ {
...activityDummyData, ...activityDummyData,
date: new Date('2021-11-30'), date: new Date('2021-11-30'),
feeInBaseCurrency: 1.65, feeInSymbolCurrency: 1.65,
quantity: 1, quantity: 1,
SymbolProfile: { SymbolProfile: {
...symbolProfileDummyData, ...symbolProfileDummyData,
@ -116,12 +116,12 @@ describe('PortfolioCalculator', () => {
symbol: 'BALN.SW' symbol: 'BALN.SW'
}, },
type: 'SELL', type: 'SELL',
unitPriceInBaseCurrency: 136.6 unitPriceInSymbolCurrency: 136.6
}, },
{ {
...activityDummyData, ...activityDummyData,
date: new Date('2021-11-30'), date: new Date('2021-11-30'),
feeInBaseCurrency: 0, feeInSymbolCurrency: 0,
quantity: 1, quantity: 1,
SymbolProfile: { SymbolProfile: {
...symbolProfileDummyData, ...symbolProfileDummyData,
@ -131,7 +131,7 @@ describe('PortfolioCalculator', () => {
symbol: 'BALN.SW' symbol: 'BALN.SW'
}, },
type: 'SELL', type: 'SELL',
unitPriceInBaseCurrency: 136.6 unitPriceInSymbolCurrency: 136.6
} }
]; ];

8
apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts

@ -91,7 +91,7 @@ describe('PortfolioCalculator', () => {
{ {
...activityDummyData, ...activityDummyData,
date: new Date('2021-11-22'), date: new Date('2021-11-22'),
feeInBaseCurrency: 1.55, feeInSymbolCurrency: 1.55,
quantity: 2, quantity: 2,
SymbolProfile: { SymbolProfile: {
...symbolProfileDummyData, ...symbolProfileDummyData,
@ -101,12 +101,12 @@ describe('PortfolioCalculator', () => {
symbol: 'BALN.SW' symbol: 'BALN.SW'
}, },
type: 'BUY', type: 'BUY',
unitPriceInBaseCurrency: 142.9 unitPriceInSymbolCurrency: 142.9
}, },
{ {
...activityDummyData, ...activityDummyData,
date: new Date('2021-11-30'), date: new Date('2021-11-30'),
feeInBaseCurrency: 1.65, feeInSymbolCurrency: 1.65,
quantity: 2, quantity: 2,
SymbolProfile: { SymbolProfile: {
...symbolProfileDummyData, ...symbolProfileDummyData,
@ -116,7 +116,7 @@ describe('PortfolioCalculator', () => {
symbol: 'BALN.SW' symbol: 'BALN.SW'
}, },
type: 'SELL', type: 'SELL',
unitPriceInBaseCurrency: 136.6 unitPriceInSymbolCurrency: 136.6
} }
]; ];

4
apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts

@ -91,7 +91,7 @@ describe('PortfolioCalculator', () => {
{ {
...activityDummyData, ...activityDummyData,
date: new Date('2021-11-30'), date: new Date('2021-11-30'),
feeInBaseCurrency: 1.55, feeInSymbolCurrency: 1.55,
quantity: 2, quantity: 2,
SymbolProfile: { SymbolProfile: {
...symbolProfileDummyData, ...symbolProfileDummyData,
@ -101,7 +101,7 @@ describe('PortfolioCalculator', () => {
symbol: 'BALN.SW' symbol: 'BALN.SW'
}, },
type: 'BUY', type: 'BUY',
unitPriceInBaseCurrency: 136.6 unitPriceInSymbolCurrency: 136.6
} }
]; ];

8
apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts

@ -105,7 +105,7 @@ describe('PortfolioCalculator', () => {
{ {
...activityDummyData, ...activityDummyData,
date: new Date('2015-01-01'), date: new Date('2015-01-01'),
feeInBaseCurrency: 0, feeInSymbolCurrency: 0,
quantity: 2, quantity: 2,
SymbolProfile: { SymbolProfile: {
...symbolProfileDummyData, ...symbolProfileDummyData,
@ -115,12 +115,12 @@ describe('PortfolioCalculator', () => {
symbol: 'BTCUSD' symbol: 'BTCUSD'
}, },
type: 'BUY', type: 'BUY',
unitPriceInBaseCurrency: 320.43 unitPriceInSymbolCurrency: 320.43
}, },
{ {
...activityDummyData, ...activityDummyData,
date: new Date('2017-12-31'), date: new Date('2017-12-31'),
feeInBaseCurrency: 0, feeInSymbolCurrency: 0,
quantity: 1, quantity: 1,
SymbolProfile: { SymbolProfile: {
...symbolProfileDummyData, ...symbolProfileDummyData,
@ -130,7 +130,7 @@ describe('PortfolioCalculator', () => {
symbol: 'BTCUSD' symbol: 'BTCUSD'
}, },
type: 'SELL', type: 'SELL',
unitPriceInBaseCurrency: 14156.4 unitPriceInSymbolCurrency: 14156.4
} }
]; ];

4
apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts

@ -91,7 +91,7 @@ describe('PortfolioCalculator', () => {
{ {
...activityDummyData, ...activityDummyData,
date: new Date('2021-09-01'), date: new Date('2021-09-01'),
feeInBaseCurrency: 49, feeInSymbolCurrency: 49,
quantity: 0, quantity: 0,
SymbolProfile: { SymbolProfile: {
...symbolProfileDummyData, ...symbolProfileDummyData,
@ -101,7 +101,7 @@ describe('PortfolioCalculator', () => {
symbol: '2c463fb3-af07-486e-adb0-8301b3d72141' symbol: '2c463fb3-af07-486e-adb0-8301b3d72141'
}, },
type: 'FEE', type: 'FEE',
unitPriceInBaseCurrency: 0 unitPriceInSymbolCurrency: 0
} }
]; ];

4
apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts

@ -104,7 +104,7 @@ describe('PortfolioCalculator', () => {
{ {
...activityDummyData, ...activityDummyData,
date: new Date('2023-01-03'), date: new Date('2023-01-03'),
feeInBaseCurrency: 1, feeInSymbolCurrency: 1,
quantity: 1, quantity: 1,
SymbolProfile: { SymbolProfile: {
...symbolProfileDummyData, ...symbolProfileDummyData,
@ -114,7 +114,7 @@ describe('PortfolioCalculator', () => {
symbol: 'GOOGL' symbol: 'GOOGL'
}, },
type: 'BUY', type: 'BUY',
unitPriceInBaseCurrency: 89.12 unitPriceInSymbolCurrency: 89.12
} }
]; ];

4
apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-item.spec.ts

@ -91,7 +91,7 @@ describe('PortfolioCalculator', () => {
{ {
...activityDummyData, ...activityDummyData,
date: new Date('2022-01-01'), date: new Date('2022-01-01'),
feeInBaseCurrency: 0, feeInSymbolCurrency: 0,
quantity: 1, quantity: 1,
SymbolProfile: { SymbolProfile: {
...symbolProfileDummyData, ...symbolProfileDummyData,
@ -101,7 +101,7 @@ describe('PortfolioCalculator', () => {
symbol: 'dac95060-d4f2-4653-a253-2c45e6fb5cde' symbol: 'dac95060-d4f2-4653-a253-2c45e6fb5cde'
}, },
type: 'ITEM', type: 'ITEM',
unitPriceInBaseCurrency: 500000 unitPriceInSymbolCurrency: 500000
} }
]; ];

4
apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-liability.spec.ts

@ -91,7 +91,7 @@ describe('PortfolioCalculator', () => {
{ {
...activityDummyData, ...activityDummyData,
date: new Date('2023-01-01'), // Date in future date: new Date('2023-01-01'), // Date in future
feeInBaseCurrency: 0, feeInSymbolCurrency: 0,
quantity: 1, quantity: 1,
SymbolProfile: { SymbolProfile: {
...symbolProfileDummyData, ...symbolProfileDummyData,
@ -101,7 +101,7 @@ describe('PortfolioCalculator', () => {
symbol: '55196015-1365-4560-aa60-8751ae6d18f8' symbol: '55196015-1365-4560-aa60-8751ae6d18f8'
}, },
type: 'LIABILITY', type: 'LIABILITY',
unitPriceInBaseCurrency: 3000 unitPriceInSymbolCurrency: 3000
} }
]; ];

8
apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts

@ -104,7 +104,7 @@ describe('PortfolioCalculator', () => {
{ {
...activityDummyData, ...activityDummyData,
date: new Date('2021-09-16'), date: new Date('2021-09-16'),
feeInBaseCurrency: 19, feeInSymbolCurrency: 19,
quantity: 1, quantity: 1,
SymbolProfile: { SymbolProfile: {
...symbolProfileDummyData, ...symbolProfileDummyData,
@ -114,12 +114,12 @@ describe('PortfolioCalculator', () => {
symbol: 'MSFT' symbol: 'MSFT'
}, },
type: 'BUY', type: 'BUY',
unitPriceInBaseCurrency: 298.58 unitPriceInSymbolCurrency: 298.58
}, },
{ {
...activityDummyData, ...activityDummyData,
date: new Date('2021-11-16'), date: new Date('2021-11-16'),
feeInBaseCurrency: 0, feeInSymbolCurrency: 0,
quantity: 1, quantity: 1,
SymbolProfile: { SymbolProfile: {
...symbolProfileDummyData, ...symbolProfileDummyData,
@ -129,7 +129,7 @@ describe('PortfolioCalculator', () => {
symbol: 'MSFT' symbol: 'MSFT'
}, },
type: 'DIVIDEND', type: 'DIVIDEND',
unitPriceInBaseCurrency: 0.62 unitPriceInSymbolCurrency: 0.62
} }
]; ];

4
apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts

@ -105,7 +105,7 @@ describe('PortfolioCalculator', () => {
...activityDummyData, ...activityDummyData,
...activity, ...activity,
date: parseDate(activity.date), date: parseDate(activity.date),
feeInBaseCurrency: activity.fee, feeInSymbolCurrency: activity.fee,
SymbolProfile: { SymbolProfile: {
...symbolProfileDummyData, ...symbolProfileDummyData,
currency: activity.currency, currency: activity.currency,
@ -113,7 +113,7 @@ describe('PortfolioCalculator', () => {
name: 'Novartis AG', name: 'Novartis AG',
symbol: activity.symbol symbol: activity.symbol
}, },
unitPriceInBaseCurrency: activity.unitPrice unitPriceInSymbolCurrency: activity.unitPrice
})); }));
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({ const portfolioCalculator = portfolioCalculatorFactory.createCalculator({

4
apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts

@ -105,7 +105,7 @@ describe('PortfolioCalculator', () => {
...activityDummyData, ...activityDummyData,
...activity, ...activity,
date: parseDate(activity.date), date: parseDate(activity.date),
feeInBaseCurrency: activity.fee, feeInSymbolCurrency: activity.fee,
SymbolProfile: { SymbolProfile: {
...symbolProfileDummyData, ...symbolProfileDummyData,
currency: activity.currency, currency: activity.currency,
@ -113,7 +113,7 @@ describe('PortfolioCalculator', () => {
name: 'Novartis AG', name: 'Novartis AG',
symbol: activity.symbol symbol: activity.symbol
}, },
unitPriceInBaseCurrency: activity.unitPrice unitPriceInSymbolCurrency: activity.unitPrice
})); }));
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({ const portfolioCalculator = portfolioCalculatorFactory.createCalculator({

Loading…
Cancel
Save