From 432aa850b99822425024bdb8218b7ffb8c662691 Mon Sep 17 00:00:00 2001 From: Thomas <4159106+dtslvr@users.noreply.github.com> Date: Sat, 10 Dec 2022 20:31:40 +0100 Subject: [PATCH] Improve asset profile details dialog --- .../api/src/services/symbol-profile.service.ts | 14 ++++++++++++++ .../admin-market-data-detail.component.ts | 11 ++++++++++- .../admin-market-data.component.ts | 18 ++---------------- .../admin-market-data/admin-market-data.html | 2 +- .../asset-profile-dialog.component.ts | 4 ++-- .../asset-profile-dialog.html | 10 +++++----- .../interfaces/interfaces.ts | 1 - .../enhanced-symbol-profile.interface.ts | 1 + 8 files changed, 35 insertions(+), 26 deletions(-) diff --git a/apps/api/src/services/symbol-profile.service.ts b/apps/api/src/services/symbol-profile.service.ts index 6cbbd8a4e..75c386bd0 100644 --- a/apps/api/src/services/symbol-profile.service.ts +++ b/apps/api/src/services/symbol-profile.service.ts @@ -36,6 +36,13 @@ export class SymbolProfileService { _count: { select: { Order: true } }, + Order: { + orderBy: { + date: 'asc' + }, + select: { date: true }, + take: 1 + }, SymbolProfileOverrides: true }, where: { @@ -118,6 +125,9 @@ export class SymbolProfileService { private getSymbols( symbolProfiles: (SymbolProfile & { _count: { Order: number }; + Order?: { + date: Date; + }[]; SymbolProfileOverrides: SymbolProfileOverrides; })[] ): EnhancedSymbolProfile[] { @@ -128,6 +138,7 @@ export class SymbolProfileService { countries: this.getCountries( symbolProfile?.countries as unknown as Prisma.JsonArray ), + dateOfFirstActivity: undefined, scraperConfiguration: this.getScraperConfiguration(symbolProfile), sectors: this.getSectors(symbolProfile), symbolMapping: this.getSymbolMapping(symbolProfile) @@ -136,6 +147,9 @@ export class SymbolProfileService { item.activitiesCount = symbolProfile._count.Order; delete item._count; + item.dateOfFirstActivity = symbolProfile.Order?.[0]?.date; + delete item.Order; + if (item.SymbolProfileOverrides) { item.assetClass = item.SymbolProfileOverrides.assetClass ?? item.assetClass; diff --git a/apps/client/src/app/components/admin-market-data-detail/admin-market-data-detail.component.ts b/apps/client/src/app/components/admin-market-data-detail/admin-market-data-detail.component.ts index eb5f8207f..b448e4b5a 100644 --- a/apps/client/src/app/components/admin-market-data-detail/admin-market-data-detail.component.ts +++ b/apps/client/src/app/components/admin-market-data-detail/admin-market-data-detail.component.ts @@ -20,11 +20,14 @@ import { addDays, format, isBefore, + isDate, isSameDay, + isToday, isValid, parse, parseISO } from 'date-fns'; +import { last } from 'lodash'; import { DeviceDetectorService } from 'ngx-device-detector'; import { Subject, takeUntil } from 'rxjs'; @@ -106,9 +109,15 @@ export class AdminMarketDataDetailComponent implements OnChanges, OnInit { } } + const marketDataItems = [...missingMarketData, ...this.marketData]; + + if (!isToday(last(marketDataItems)?.date)) { + marketDataItems.push({ date: new Date() }); + } + this.marketDataByMonth = {}; - for (const marketDataItem of [...missingMarketData, ...this.marketData]) { + for (const marketDataItem of marketDataItems) { const currentDay = parseInt(format(marketDataItem.date, 'd'), 10); const key = format(marketDataItem.date, 'yyyy-MM'); diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts index 856382e5b..a45703562 100644 --- a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts +++ b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts @@ -13,12 +13,11 @@ import { ActivatedRoute, Router } from '@angular/router'; import { AdminService } from '@ghostfolio/client/services/admin.service'; import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; -import { DATE_FORMAT, getDateFormatString } from '@ghostfolio/common/helper'; +import { getDateFormatString } from '@ghostfolio/common/helper'; import { Filter, UniqueAsset, User } from '@ghostfolio/common/interfaces'; import { AdminMarketDataItem } from '@ghostfolio/common/interfaces/admin-market-data.interface'; import { translate } from '@ghostfolio/ui/i18n'; import { AssetSubClass, DataSource } from '@prisma/client'; -import { format, parseISO } from 'date-fns'; import { DeviceDetectorService } from 'ngx-device-detector'; import { Subject } from 'rxjs'; import { distinctUntilChanged, switchMap, takeUntil } from 'rxjs/operators'; @@ -98,7 +97,6 @@ export class AdminMarketDataComponent implements OnDestroy, OnInit { ) { this.openAssetProfileDialog({ dataSource: params['dataSource'], - dateOfFirstActivity: params['dateOfFirstActivity'], symbol: params['symbol'] }); } @@ -195,18 +193,9 @@ export class AdminMarketDataComponent implements OnDestroy, OnInit { .subscribe(() => {}); } - public onOpenAssetProfileDialog({ - dataSource, - dateOfFirstActivity, - symbol - }: UniqueAsset & { dateOfFirstActivity: string }) { - try { - dateOfFirstActivity = format(parseISO(dateOfFirstActivity), DATE_FORMAT); - } catch {} - + public onOpenAssetProfileDialog({ dataSource, symbol }: UniqueAsset) { this.router.navigate([], { queryParams: { - dateOfFirstActivity, dataSource, symbol, assetProfileDialog: true @@ -221,11 +210,9 @@ export class AdminMarketDataComponent implements OnDestroy, OnInit { private openAssetProfileDialog({ dataSource, - dateOfFirstActivity, symbol }: { dataSource: DataSource; - dateOfFirstActivity: string; symbol: string; }) { this.userService @@ -238,7 +225,6 @@ export class AdminMarketDataComponent implements OnDestroy, OnInit { autoFocus: false, data: { dataSource, - dateOfFirstActivity, symbol, deviceType: this.deviceType, locale: this.user?.settings?.locale diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.html b/apps/client/src/app/components/admin-market-data/admin-market-data.html index cea4bd684..0471ddfc5 100644 --- a/apps/client/src/app/components/admin-market-data/admin-market-data.html +++ b/apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -176,7 +176,7 @@ *matRowDef="let row; columns: displayedColumns" class="cursor-pointer" mat-row - (click)="onOpenAssetProfileDialog({ dateOfFirstActivity: row.date, dataSource: row.dataSource, symbol: row.symbol })" + (click)="onOpenAssetProfileDialog({ dataSource: row.dataSource, symbol: row.symbol })" > diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts index 3d7a539b3..9c126862f 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts @@ -87,8 +87,8 @@ export class AssetProfileDialog implements OnDestroy, OnInit { } this.assetProfileForm.setValue({ - comment: this.assetProfile?.comment, - symbolMapping: JSON.stringify(this.assetProfile?.symbolMapping) + comment: this.assetProfile?.comment ?? '', + symbolMapping: JSON.stringify(this.assetProfile?.symbolMapping ?? {}) }); this.assetProfileForm.markAsPristine(); diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html index e4ada64d6..7cd4f4d07 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -44,7 +44,7 @@ First Buy DateFirst Activity
@@ -67,7 +67,7 @@ size="medium" [locale]="data.locale" [value]="assetProfile?.activitiesCount ?? 0" - >TransactionsActivities
diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/interfaces/interfaces.ts index 05c70f749..c230a39ee 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/interfaces/interfaces.ts +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/interfaces/interfaces.ts @@ -1,7 +1,6 @@ import { DataSource } from '@prisma/client'; export interface AssetProfileDialogParams { - dateOfFirstActivity: string; dataSource: DataSource; deviceType: string; locale: string; diff --git a/libs/common/src/lib/interfaces/enhanced-symbol-profile.interface.ts b/libs/common/src/lib/interfaces/enhanced-symbol-profile.interface.ts index 499e638a4..d2053bb7c 100644 --- a/libs/common/src/lib/interfaces/enhanced-symbol-profile.interface.ts +++ b/libs/common/src/lib/interfaces/enhanced-symbol-profile.interface.ts @@ -13,6 +13,7 @@ export interface EnhancedSymbolProfile { createdAt: Date; currency: string | null; dataSource: DataSource; + dateOfFirstActivity?: Date; id: string; name: string | null; scraperConfiguration?: ScraperConfiguration | null;