Browse Source

Feature/stock splits setup (part 2) (#7523)

Improve stock splits setup
pull/7518/head^2
Thomas Kaul 5 days ago
committed by GitHub
parent
commit
75e3d032ab
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 2
      apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts
  2. 2
      apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts
  3. 12
      apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts
  4. 31
      apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html

2
apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts

@ -142,6 +142,8 @@ export class AssetProfilesController {
});
return this.assetProfilesService.createSplit({
dataSource,
symbol,
symbolProfileId,
date: parseISO(data.date),
denominator: data.denominator,

2
apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts

@ -8,6 +8,7 @@ import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-
import { ExchangeRateDataModule } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.module';
import { MarketDataModule } from '@ghostfolio/api/services/market-data/market-data.module';
import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module';
import { DataGatheringQueueModule } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.module';
import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module';
import { Module } from '@nestjs/common';
@ -23,6 +24,7 @@ import { AssetProfilesService } from './asset-profiles.service';
ApiModule,
AssetProfileSplitModule,
BenchmarkModule,
DataGatheringQueueModule,
DataProviderModule,
ExchangeRateDataModule,
MarketDataModule,

12
apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts

@ -5,6 +5,7 @@ import { DataProviderService } from '@ghostfolio/api/services/data-provider/data
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service';
import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
import { DataGatheringService } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.service';
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service';
import { UpdateAssetProfileDataDto } from '@ghostfolio/common/dtos';
import {
@ -33,6 +34,7 @@ export class AssetProfilesService {
private readonly activitiesService: ActivitiesService,
private readonly assetProfileSplitService: AssetProfileSplitService,
private readonly benchmarkService: BenchmarkService,
private readonly dataGatheringService: DataGatheringService,
private readonly dataProviderService: DataProviderService,
private readonly exchangeRateDataService: ExchangeRateDataService,
private readonly marketDataService: MarketDataService,
@ -41,22 +43,28 @@ export class AssetProfilesService {
) {}
public async createSplit({
dataSource,
date,
denominator,
numerator,
symbol,
symbolProfileId
}: {
date: Date;
denominator: number;
numerator: number;
symbolProfileId: string;
}) {
return this.assetProfileSplitService.upsert({
} & AssetProfileIdentifier) {
const assetProfileSplit = await this.assetProfileSplitService.upsert({
date,
denominator,
numerator,
symbolProfileId
});
await this.dataGatheringService.gatherSymbol({ dataSource, symbol });
return assetProfileSplit;
}
public async deleteSplit({

31
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html

@ -514,10 +514,6 @@
<div class="container mt-3 p-0">
<div class="no-gutters row w-100">
<div class="col-12">
<p class="text-muted" i18n>
Splits are stored for this asset profile, but are not applied
to the portfolio calculation yet.
</p>
@if (splits.length > 0) {
<table class="gf-table mb-3 w-100">
<thead>
@ -580,7 +576,11 @@
</mat-datepicker-toggle>
<mat-datepicker #dateOfSplit />
</mat-form-field>
<mat-form-field appearance="outline" class="mb-3 w-100">
<div class="align-items-center d-flex mb-3">
<mat-form-field
appearance="outline"
class="w-100 without-hint"
>
<mat-label i18n>Shares After</mat-label>
<input
formControlName="numerator"
@ -588,15 +588,12 @@
step="1"
type="number"
/>
<mat-hint
><ng-container i18n>Numerator</ng-container>,
<ng-container i18n
>e.g. 4 for a 4:1 split or 1 for a 1:10 reverse
split</ng-container
></mat-hint
>
</mat-form-field>
<mat-form-field appearance="outline" class="mb-3 w-100">
<div class="mx-2">:</div>
<mat-form-field
appearance="outline"
class="w-100 without-hint"
>
<mat-label i18n>Shares Before</mat-label>
<input
formControlName="denominator"
@ -604,14 +601,8 @@
step="1"
type="number"
/>
<mat-hint
><ng-container i18n>Denominator</ng-container>,
<ng-container i18n
>e.g. 1 for a 4:1 split or 10 for a 1:10 reverse
split</ng-container
></mat-hint
>
</mat-form-field>
</div>
<div class="text-right">
<button
color="primary"

Loading…
Cancel
Save