diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products.ts
index 8eddbea16..050ee5383 100644
--- a/apps/client/src/app/pages/resources/personal-finance-tools/products.ts
+++ b/apps/client/src/app/pages/resources/personal-finance-tools/products.ts
@@ -7,6 +7,7 @@ import { CapMonPageComponent } from './products/capmon-page.component';
import { CopilotMoneyPageComponent } from './products/copilot-money-page.component';
import { DeltaPageComponent } from './products/delta-page.component';
import { DivvyDiaryPageComponent } from './products/divvydiary-page.component';
+import { EightFiguresPageComponent } from './products/eightfigures-page.component';
import { ExirioPageComponent } from './products/exirio-page.component';
import { FinaryPageComponent } from './products/finary-page.component';
import { FolisharePageComponent } from './products/folishare-page.component';
@@ -23,6 +24,7 @@ import { PlannixPageComponent } from './products/plannix-page.component';
import { PortfolioDividendTrackerPageComponent } from './products/portfolio-dividend-tracker-page.component';
import { PortseidoPageComponent } from './products/portseido-page.component';
import { ProjectionLabPageComponent } from './products/projectionlab-page.component';
+import { RocketMoneyPageComponent } from './products/rocket-money-page.component';
import { SeekingAlphaPageComponent } from './products/seeking-alpha-page.component';
import { SharesightPageComponent } from './products/sharesight-page.component';
import { SimplePortfolioPageComponent } from './products/simple-portfolio-page.component';
@@ -131,6 +133,15 @@ export const products: Product[] = [
pricingPerYear: '€65',
slogan: 'Your personal Dividend Calendar'
},
+ {
+ alias: '8figures',
+ component: EightFiguresPageComponent,
+ founded: 2022,
+ key: 'eightfigures',
+ name: '8FIGURES',
+ origin: $localize`United States`,
+ slogan: 'Portfolio Tracker Designed by Professional Investors'
+ },
{
component: ExirioPageComponent,
founded: 2020,
@@ -307,6 +318,15 @@ export const products: Product[] = [
pricingPerYear: '$108',
slogan: 'Build Financial Plans You Love.'
},
+ {
+ component: RocketMoneyPageComponent,
+ founded: 2015,
+ hasSelfHostingAbility: false,
+ key: 'rocket-money',
+ name: 'Rocket Money',
+ origin: $localize`United States`,
+ slogan: 'Track your net worth'
+ },
{
component: SeekingAlphaPageComponent,
founded: 2004,
diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/eightfigures-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/eightfigures-page.component.ts
new file mode 100644
index 000000000..3867beaf2
--- /dev/null
+++ b/apps/client/src/app/pages/resources/personal-finance-tools/products/eightfigures-page.component.ts
@@ -0,0 +1,31 @@
+import { CommonModule } from '@angular/common';
+import { Component } from '@angular/core';
+import { MatButtonModule } from '@angular/material/button';
+import { RouterModule } from '@angular/router';
+
+import { products } from '../products';
+
+@Component({
+ host: { class: 'page' },
+ imports: [CommonModule, MatButtonModule, RouterModule],
+ selector: 'gf-eightfigures-page',
+ standalone: true,
+ styleUrls: ['../product-page-template.scss'],
+ templateUrl: '../product-page-template.html'
+})
+export class EightFiguresPageComponent {
+ public product1 = products.find(({ key }) => {
+ return key === 'ghostfolio';
+ });
+
+ public product2 = products.find(({ key }) => {
+ return key === 'eightfigures';
+ });
+
+ public routerLinkAbout = ['/' + $localize`about`];
+ public routerLinkFeatures = ['/' + $localize`features`];
+ public routerLinkResourcesPersonalFinanceTools = [
+ '/' + $localize`resources`,
+ 'personal-finance-tools'
+ ];
+}
diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/rocket-money-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/rocket-money-page.component.ts
new file mode 100644
index 000000000..cbf2599e8
--- /dev/null
+++ b/apps/client/src/app/pages/resources/personal-finance-tools/products/rocket-money-page.component.ts
@@ -0,0 +1,31 @@
+import { CommonModule } from '@angular/common';
+import { Component } from '@angular/core';
+import { MatButtonModule } from '@angular/material/button';
+import { RouterModule } from '@angular/router';
+
+import { products } from '../products';
+
+@Component({
+ host: { class: 'page' },
+ imports: [CommonModule, MatButtonModule, RouterModule],
+ selector: 'gf-rocket-money-page',
+ standalone: true,
+ styleUrls: ['../product-page-template.scss'],
+ templateUrl: '../product-page-template.html'
+})
+export class RocketMoneyPageComponent {
+ public product1 = products.find(({ key }) => {
+ return key === 'ghostfolio';
+ });
+
+ public product2 = products.find(({ key }) => {
+ return key === 'rocket-money';
+ });
+
+ public routerLinkAbout = ['/' + $localize`about`];
+ public routerLinkFeatures = ['/' + $localize`features`];
+ public routerLinkResourcesPersonalFinanceTools = [
+ '/' + $localize`resources`,
+ 'personal-finance-tools'
+ ];
+}
diff --git a/libs/common/src/lib/interfaces/product.ts b/libs/common/src/lib/interfaces/product.ts
index c5465898d..274ee8207 100644
--- a/libs/common/src/lib/interfaces/product.ts
+++ b/libs/common/src/lib/interfaces/product.ts
@@ -1,4 +1,5 @@
export interface Product {
+ alias?: string;
component: any;
founded?: number;
hasFreePlan?: boolean;
From 81ded53363d890bd0e47e3fdd5b09e73141bf7ed Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sat, 4 Nov 2023 10:17:35 +0100
Subject: [PATCH 3/4] Center membership card (#2582)
---
.../user-account-membership/user-account-membership.html | 7 +++----
.../user-account-membership/user-account-membership.scss | 1 +
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/apps/client/src/app/components/user-account-membership/user-account-membership.html b/apps/client/src/app/components/user-account-membership/user-account-membership.html
index 4031ce9a0..f2ead8c9e 100644
--- a/apps/client/src/app/components/user-account-membership/user-account-membership.html
+++ b/apps/client/src/app/components/user-account-membership/user-account-membership.html
@@ -1,6 +1,5 @@
-
-
Membership
-
+
+
per year
-
+
Date: Sat, 4 Nov 2023 10:17:58 +0100
Subject: [PATCH 4/4] Bugfix/fix fees on account level (#2588)
* Fix fees on account level
* Update changelog
---
CHANGELOG.md | 6 ++++++
apps/api/src/app/order/create-order.dto.ts | 5 ++---
apps/api/src/app/order/update-order.dto.ts | 6 ++----
3 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 13b2a768b..8a0f960ba 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## Unreleased
+
+### Fixed
+
+- Loosened the validation in the activities import (expects values greater than or equal to 0 for `fee`, `quantity` and `unitPrice`)
+
## 2.17.0 - 2023-11-02
### Added
diff --git a/apps/api/src/app/order/create-order.dto.ts b/apps/api/src/app/order/create-order.dto.ts
index 3eafa704f..f25a7ee12 100644
--- a/apps/api/src/app/order/create-order.dto.ts
+++ b/apps/api/src/app/order/create-order.dto.ts
@@ -13,7 +13,6 @@ import {
IsISO8601,
IsNumber,
IsOptional,
- IsPositive,
IsString,
Min
} from 'class-validator';
@@ -54,7 +53,7 @@ export class CreateOrderDto {
fee: number;
@IsNumber()
- @IsPositive()
+ @Min(0)
quantity: number;
@IsString()
@@ -68,7 +67,7 @@ export class CreateOrderDto {
type: Type;
@IsNumber()
- @IsPositive()
+ @Min(0)
unitPrice: number;
@IsBoolean()
diff --git a/apps/api/src/app/order/update-order.dto.ts b/apps/api/src/app/order/update-order.dto.ts
index 9d968aa86..3123d5665 100644
--- a/apps/api/src/app/order/update-order.dto.ts
+++ b/apps/api/src/app/order/update-order.dto.ts
@@ -8,12 +8,10 @@ import {
import { Transform, TransformFnParams } from 'class-transformer';
import {
IsArray,
- IsBoolean,
IsEnum,
IsISO8601,
IsNumber,
IsOptional,
- IsPositive,
IsString,
Min
} from 'class-validator';
@@ -56,7 +54,7 @@ export class UpdateOrderDto {
id: string;
@IsNumber()
- @IsPositive()
+ @Min(0)
quantity: number;
@IsString()
@@ -70,6 +68,6 @@ export class UpdateOrderDto {
type: Type;
@IsNumber()
- @IsPositive()
+ @Min(0)
unitPrice: number;
}