Browse Source

Merge remote-tracking branch 'upstream/main' into bugfix/average-unit-price-line-alignment

# Conflicts:
#	CHANGELOG.md
pull/7937/head
GabeSilvaDev 1 week ago
parent
commit
f201fad46d
  1. 4
      CHANGELOG.md
  2. 1
      apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts
  3. 12
      apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts
  4. 16
      apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
  5. 2
      libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/interfaces/interfaces.ts
  6. 4
      libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts
  7. 4
      package-lock.json
  8. 2
      package.json

4
CHANGELOG.md

@ -9,9 +9,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed ### Fixed
- Fixed the visibility of the asset class, asset sub class, fee and quantity fields of a valuable in the create activity dialog
- Fixed the missing mapping for Aland Islands in the country weightings of the _Financial Modeling Prep_ service
- Fixed the alignment of the average price in the chart of the holding detail dialog for custom asset profiles - Fixed the alignment of the average price in the chart of the holding detail dialog for custom asset profiles
## 3.80.1 - 2026-10-05 ## 3.80.2 - 2026-10-06
### Added ### Added

1
apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts

@ -54,6 +54,7 @@ export class FinancialModelingPrepService
implements DataProviderInterface, OnModuleInit implements DataProviderInterface, OnModuleInit
{ {
private static countriesMapping = { private static countriesMapping = {
'Aland Islands': 'AX',
'Congo (Dem. Rep. of the)': 'CD', 'Congo (Dem. Rep. of the)': 'CD',
'Congo (Rep. of)': 'CG', 'Congo (Rep. of)': 'CG',
'Czech Republic': 'CZ', 'Czech Republic': 'CZ',

12
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts

@ -488,10 +488,18 @@ export class GfCreateOrUpdateActivityDialogComponent {
} }
protected async onSubmit() { protected async onSubmit() {
const isAssetClassApplicable =
this.activityForm.get('type')?.value === 'VALUABLE' ||
this.mode === 'update';
const activity: CreateOrderDto | UpdateOrderDto = { const activity: CreateOrderDto | UpdateOrderDto = {
accountId: this.activityForm.get('accountId')?.value, accountId: this.activityForm.get('accountId')?.value,
assetClass: this.activityForm.get('assetClass')?.value, assetClass: isAssetClassApplicable
assetSubClass: this.activityForm.get('assetSubClass')?.value, ? this.activityForm.get('assetClass')?.value
: undefined,
assetSubClass: isAssetClassApplicable
? this.activityForm.get('assetSubClass')?.value
: undefined,
comment: getStringOrNull(this.activityForm.get('comment')?.value), comment: getStringOrNull(this.activityForm.get('comment')?.value),
currency: this.activityForm.get('currency')?.value, currency: this.activityForm.get('currency')?.value,
customCurrency: this.activityForm.get('currencyOfUnitPrice')?.value, customCurrency: this.activityForm.get('currencyOfUnitPrice')?.value,

16
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html

@ -157,8 +157,8 @@
[class.d-none]=" [class.d-none]="
activityForm.get('type')?.value === 'FEE' || activityForm.get('type')?.value === 'FEE' ||
activityForm.get('type')?.value === 'INTEREST' || activityForm.get('type')?.value === 'INTEREST' ||
activityForm.get('type')?.value === 'ITEM' || activityForm.get('type')?.value === 'LIABILITY' ||
activityForm.get('type')?.value === 'LIABILITY' activityForm.get('type')?.value === 'VALUABLE'
" "
> >
<mat-form-field appearance="outline" class="w-100"> <mat-form-field appearance="outline" class="w-100">
@ -180,10 +180,10 @@
@case ('INTEREST') { @case ('INTEREST') {
<ng-container i18n>Value</ng-container> <ng-container i18n>Value</ng-container>
} }
@case ('ITEM') { @case ('LIABILITY') {
<ng-container i18n>Value</ng-container> <ng-container i18n>Value</ng-container>
} }
@case ('LIABILITY') { @case ('VALUABLE') {
<ng-container i18n>Value</ng-container> <ng-container i18n>Value</ng-container>
} }
@default { @default {
@ -231,8 +231,8 @@
class="mb-3" class="mb-3"
[class.d-none]=" [class.d-none]="
activityForm.get('type')?.value === 'INTEREST' || activityForm.get('type')?.value === 'INTEREST' ||
activityForm.get('type')?.value === 'ITEM' || activityForm.get('type')?.value === 'LIABILITY' ||
activityForm.get('type')?.value === 'LIABILITY' activityForm.get('type')?.value === 'VALUABLE'
" "
> >
<mat-form-field appearance="outline" class="w-100"> <mat-form-field appearance="outline" class="w-100">
@ -262,7 +262,7 @@
</div> </div>
<div <div
class="mb-3" class="mb-3"
[class.d-none]="activityForm.get('type')?.value !== 'ITEM'" [class.d-none]="activityForm.get('type')?.value !== 'VALUABLE'"
> >
<mat-form-field appearance="outline" class="w-100"> <mat-form-field appearance="outline" class="w-100">
<mat-label i18n>Asset Class</mat-label> <mat-label i18n>Asset Class</mat-label>
@ -281,7 +281,7 @@
</div> </div>
<div <div
class="mb-3" class="mb-3"
[class.d-none]="activityForm.get('type')?.value !== 'ITEM'" [class.d-none]="activityForm.get('type')?.value !== 'VALUABLE'"
> >
<mat-form-field appearance="outline" class="w-100"> <mat-form-field appearance="outline" class="w-100">
<mat-label i18n>Asset Sub Class</mat-label> <mat-label i18n>Asset Sub Class</mat-label>

2
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/interfaces/interfaces.ts

@ -2,7 +2,7 @@ import { User } from '@ghostfolio/common/interfaces';
import { DataSource } from '@ghostfolio/prisma/enums'; import { DataSource } from '@ghostfolio/prisma/enums';
export interface HistoricalMarketDataEditorDialogParams { export interface HistoricalMarketDataEditorDialogParams {
currency: string; currency?: string;
dataSource: DataSource; dataSource: DataSource;
dateString: string; dateString: string;
marketPrice?: number; marketPrice?: number;

4
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts

@ -66,9 +66,9 @@ export class GfHistoricalMarketDataEditorComponent
DATE_FORMAT DATE_FORMAT
)};123.45`; )};123.45`;
@Input() currency: string; @Input() currency?: string;
@Input() dataSource: DataSource; @Input() dataSource: DataSource;
@Input() dateOfFirstActivity: Date; @Input() dateOfFirstActivity?: Date;
@Input() symbol: string; @Input() symbol: string;
@Input() user: User; @Input() user: User;

4
package-lock.json

@ -1,12 +1,12 @@
{ {
"name": "ghostfolio", "name": "ghostfolio",
"version": "3.80.1", "version": "3.80.2",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "ghostfolio", "name": "ghostfolio",
"version": "3.80.1", "version": "3.80.2",
"hasInstallScript": true, "hasInstallScript": true,
"license": "AGPL-3.0", "license": "AGPL-3.0",
"dependencies": { "dependencies": {

2
package.json

@ -1,6 +1,6 @@
{ {
"name": "ghostfolio", "name": "ghostfolio",
"version": "3.80.1", "version": "3.80.2",
"homepage": "https://ghostfol.io", "homepage": "https://ghostfol.io",
"license": "AGPL-3.0", "license": "AGPL-3.0",
"repository": "https://github.com/ghostfolio/ghostfolio", "repository": "https://github.com/ghostfolio/ghostfolio",

Loading…
Cancel
Save