Browse Source

Refactoring

pull/1926/head
Thomas 2 years ago
parent
commit
8a3da89130
  1. 53
      apps/api/src/app/account/account.service.ts
  2. 2
      apps/api/src/app/order/interfaces/activities.interface.ts
  3. 34
      apps/api/src/app/order/order.service.ts
  4. 3
      apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts
  5. 6
      apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
  6. 4
      apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.scss

53
apps/api/src/app/account/account.service.ts

@ -173,31 +173,44 @@ export class AccountService {
}); });
} }
public async updateAccountBalance( public async updateAccountBalance({
accountId: string, accountId,
userId: string, amount,
currency: string, currency,
amount: number date,
): Promise<Account> { userId
const account = await this.account({ }: {
accountId: string;
amount: number;
currency: string;
date: Date;
userId: string;
}): Promise<Account> {
const { balance, currency: currencyOfAccount } = await this.account({
id_userId: { id_userId: {
id: accountId, userId,
userId id: accountId
} }
}); });
const data: Prisma.AccountUpdateInput = { const amountInCurrencyOfAccount =
balance: account.balance + amount await this.exchangeRateDataService.toCurrencyAtDate(
}; amount,
const where: Prisma.AccountWhereUniqueInput = { currency,
id_userId: { currencyOfAccount,
id: accountId, date
userId );
}
};
return this.prismaService.account.update({ return this.prismaService.account.update({
data, data: {
where balance: new Big(balance).plus(amountInCurrencyOfAccount).toNumber()
},
where: {
id_userId: {
userId,
id: accountId
}
}
}); });
} }
} }

2
apps/api/src/app/order/interfaces/activities.interface.ts

@ -6,7 +6,7 @@ export interface Activities {
export interface Activity extends OrderWithAccount { export interface Activity extends OrderWithAccount {
feeInBaseCurrency: number; feeInBaseCurrency: number;
updateAccountBalance?: boolean;
value: number; value: number;
valueInBaseCurrency: number; valueInBaseCurrency: number;
updateAccountBalance?: boolean;
} }

34
apps/api/src/app/order/order.service.ts

@ -73,8 +73,8 @@ export class OrderService {
dataSource?: DataSource; dataSource?: DataSource;
symbol?: string; symbol?: string;
tags?: Tag[]; tags?: Tag[];
updateAccountBalance?: boolean;
userId: string; userId: string;
updateAccountBalance: boolean;
} }
): Promise<Order> { ): Promise<Order> {
let Account; let Account;
@ -90,12 +90,16 @@ export class OrderService {
}; };
} }
const accountId = data.accountId;
let currency = data.currency;
const tags = data.tags ?? []; const tags = data.tags ?? [];
const updateAccountBalance = data.updateAccountBalance ?? false;
const userId = data.userId;
if (data.type === 'ITEM') { if (data.type === 'ITEM') {
const assetClass = data.assetClass; const assetClass = data.assetClass;
const assetSubClass = data.assetSubClass; const assetSubClass = data.assetSubClass;
const currency = data.SymbolProfile.connectOrCreate.create.currency; currency = data.SymbolProfile.connectOrCreate.create.currency;
const dataSource: DataSource = 'MANUAL'; const dataSource: DataSource = 'MANUAL';
const id = uuidv4(); const id = uuidv4();
const name = data.SymbolProfile.connectOrCreate.create.symbol; const name = data.SymbolProfile.connectOrCreate.create.symbol;
@ -138,8 +142,6 @@ export class OrderService {
]); ]);
} }
const originalData = Object.assign({}, data);
delete data.accountId; delete data.accountId;
delete data.assetClass; delete data.assetClass;
delete data.assetSubClass; delete data.assetSubClass;
@ -152,8 +154,8 @@ export class OrderService {
delete data.dataSource; delete data.dataSource;
delete data.symbol; delete data.symbol;
delete data.tags; delete data.tags;
delete data.userId;
delete data.updateAccountBalance; delete data.updateAccountBalance;
delete data.userId;
const orderData: Prisma.OrderCreateInput = data; const orderData: Prisma.OrderCreateInput = data;
@ -170,19 +172,23 @@ export class OrderService {
} }
}); });
if (originalData.updateAccountBalance) { if (updateAccountBalance === true) {
let amount = data.unitPrice * data.quantity + data.fee; let amount = new Big(data.unitPrice)
.mul(data.quantity)
.plus(data.fee)
.toNumber();
if (data.type === 'BUY') { if (data.type === 'BUY') {
amount = amount * -1; amount = new Big(amount).mul(-1).toNumber();
} }
await this.accountService.updateAccountBalance( await this.accountService.updateAccountBalance({
originalData.accountId, accountId,
originalData.userId, amount,
originalData.currency, currency,
amount userId,
); date: data.date as Date
});
} }
return order; return order;

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

@ -298,6 +298,8 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
Validators.required Validators.required
); );
this.activityForm.controls['searchSymbol'].updateValueAndValidity(); this.activityForm.controls['searchSymbol'].updateValueAndValidity();
this.activityForm.controls['updateAccountBalance'].disable();
this.activityForm.controls['updateAccountBalance'].setValue(false);
} else { } else {
this.activityForm.controls['accountId'].setValidators( this.activityForm.controls['accountId'].setValidators(
Validators.required Validators.required
@ -315,6 +317,7 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
Validators.required Validators.required
); );
this.activityForm.controls['searchSymbol'].updateValueAndValidity(); this.activityForm.controls['searchSymbol'].updateValueAndValidity();
this.activityForm.controls['updateAccountBalance'].enable();
} }
this.changeDetectorRef.markForCheck(); this.changeDetectorRef.markForCheck();

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

@ -19,7 +19,7 @@
</mat-form-field> </mat-form-field>
</div> </div>
<div> <div>
<mat-form-field appearance="outline" class="w-100"> <mat-form-field appearance="outline" class="mb-1 without-hint w-100">
<mat-label i18n>Account</mat-label> <mat-label i18n>Account</mat-label>
<mat-select formControlName="accountId"> <mat-select formControlName="accountId">
<mat-option <mat-option
@ -32,9 +32,9 @@
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
</div> </div>
<div class="mb-3 pl-1 w-100 checkbox-wrapper"> <div class="mb-3">
<mat-checkbox color="primary" formControlName="updateAccountBalance" i18n <mat-checkbox color="primary" formControlName="updateAccountBalance" i18n
>Update cash balance</mat-checkbox >Update Cash Balance</mat-checkbox
> >
</div> </div>
<div <div

4
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.scss

@ -16,10 +16,6 @@
} }
} }
} }
.checkbox-wrapper {
margin-top: -10px;
}
} }
:host-context(.is-dark-theme) { :host-context(.is-dark-theme) {

Loading…
Cancel
Save