From 4425918f2c2613d9783493907d789a00c1821271 Mon Sep 17 00:00:00 2001 From: raskanskyz Date: Fri, 12 May 2023 14:16:38 +0300 Subject: [PATCH 1/4] chore: create prisma migration --- prisma/migrations/20230511210534_added_drip_type/migration.sql | 2 ++ prisma/schema.prisma | 1 + 2 files changed, 3 insertions(+) create mode 100644 prisma/migrations/20230511210534_added_drip_type/migration.sql diff --git a/prisma/migrations/20230511210534_added_drip_type/migration.sql b/prisma/migrations/20230511210534_added_drip_type/migration.sql new file mode 100644 index 000000000..ec5b2f662 --- /dev/null +++ b/prisma/migrations/20230511210534_added_drip_type/migration.sql @@ -0,0 +1,2 @@ +-- AlterEnum +ALTER TYPE "Type" ADD VALUE 'DRIP'; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index cb6749929..212210520 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -238,6 +238,7 @@ enum Type { DIVIDEND ITEM SELL + DRIP } enum ViewMode { From 0dcae23624ad57d1d4cb5377a2802b48bdb30c55 Mon Sep 17 00:00:00 2001 From: raskanskyz Date: Fri, 12 May 2023 14:17:39 +0300 Subject: [PATCH 2/4] chore: add "DRIP" selection to activities page + table --- .../create-or-update-activity-dialog.html | 1 + .../lib/activities-table/activities-table.component.html | 9 +++++++-- .../lib/activities-table/activities-table.component.scss | 4 ++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html index 5bbf30ac3..66051ed57 100644 --- a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html +++ b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -15,6 +15,7 @@ Dividend Item Sell + DRIP diff --git a/libs/ui/src/lib/activities-table/activities-table.component.html b/libs/ui/src/lib/activities-table/activities-table.component.html index 45551305b..aa9f94432 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.html +++ b/libs/ui/src/lib/activities-table/activities-table.component.html @@ -143,11 +143,16 @@ buy: element.type === 'BUY', dividend: element.type === 'DIVIDEND', item: element.type === 'ITEM', - sell: element.type === 'SELL' + sell: element.type === 'SELL', + drip: element.type === 'DRIP' }" > Date: Sat, 13 May 2023 14:29:12 +0300 Subject: [PATCH 3/4] chore(order.service): support creating "DRIP" order --- apps/api/src/app/order/order.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/api/src/app/order/order.service.ts b/apps/api/src/app/order/order.service.ts index b3f27c221..875e544cb 100644 --- a/apps/api/src/app/order/order.service.ts +++ b/apps/api/src/app/order/order.service.ts @@ -178,7 +178,7 @@ export class OrderService { .plus(data.fee) .toNumber(); - if (data.type === 'BUY') { + if (data.type === 'BUY' || data.type === 'DRIP') { amount = new Big(amount).mul(-1).toNumber(); } From b5c299ad927426a065973cf9b9602b281bf8b884 Mon Sep 17 00:00:00 2001 From: raskanskyz Date: Sat, 13 May 2023 14:31:54 +0300 Subject: [PATCH 4/4] chore(order.service): support "DRIP" dividends --- apps/api/src/app/portfolio/portfolio-calculator.ts | 5 +++-- apps/api/src/app/portfolio/portfolio.service.ts | 10 ++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/apps/api/src/app/portfolio/portfolio-calculator.ts b/apps/api/src/app/portfolio/portfolio-calculator.ts index f71597e14..d8d772dcf 100644 --- a/apps/api/src/app/portfolio/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/portfolio-calculator.ts @@ -92,7 +92,7 @@ export class PortfolioCalculator { let investment = new Big(0); if (newQuantity.gt(0)) { - if (order.type === 'BUY') { + if (order.type === 'BUY' || order.type === 'DRIP') { investment = oldAccumulatedSymbol.investment.plus( order.quantity.mul(unitPrice) ); @@ -901,6 +901,7 @@ export class PortfolioCalculator { switch (type) { case 'BUY': + case 'DRIP': factor = 1; break; case 'SELL': @@ -1126,7 +1127,7 @@ export class PortfolioCalculator { } const transactionInvestment = - order.type === 'BUY' + order.type === 'BUY' || order.type === 'DRIP' ? order.quantity.mul(order.unitPrice).mul(this.getFactor(order.type)) : totalUnits.gt(0) ? totalInvestment diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 7755146f1..cba905b41 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -223,7 +223,7 @@ export class PortfolioService { const activities = await this.orderService.getOrders({ filters, userId, - types: ['DIVIDEND'], + types: ['DIVIDEND', 'DRIP'], userCurrency: this.request.user.Settings.settings.baseCurrency }); @@ -710,7 +710,9 @@ export class PortfolioService { .filter((order) => { tags = tags.concat(order.tags); - return order.type === 'BUY' || order.type === 'SELL'; + return ( + order.type === 'BUY' || order.type === 'SELL' || order.type === 'DRIP' + ); }) .map((order) => ({ currency: order.SymbolProfile.currency, @@ -1623,7 +1625,7 @@ export class PortfolioService { committedFunds: committedFunds.toNumber(), emergencyFund: emergencyFund.toNumber(), ordersCount: activities.filter(({ type }) => { - return type === 'BUY' || type === 'SELL'; + return type === 'BUY' || type === 'SELL' || type === 'DRIP'; }).length }; } @@ -1652,7 +1654,7 @@ export class PortfolioService { userCurrency, userId, withExcludedAccounts, - types: ['BUY', 'SELL'] + types: ['BUY', 'SELL', 'DRIP'] }); if (orders.length <= 0) {