From d77b12a8a2f5aa2398e7d2a7b1e01b0f0b7bb55b Mon Sep 17 00:00:00 2001
From: mantovanig <gabriele.mantovani92@gmail.com>
Date: Tue, 4 May 2021 20:26:22 +0200
Subject: [PATCH] feat: add duplicate action on transactions table

---
 .../transactions-table.component.html                  |  3 +++
 .../transactions-table/transactions-table.component.ts |  5 +++++
 .../pages/transactions/transactions-page.component.ts  | 10 +++++++---
 .../src/app/pages/transactions/transactions-page.html  |  1 +
 4 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/apps/client/src/app/components/transactions-table/transactions-table.component.html b/apps/client/src/app/components/transactions-table/transactions-table.component.html
index 7c0bd479d..e5c7c11e3 100644
--- a/apps/client/src/app/components/transactions-table/transactions-table.component.html
+++ b/apps/client/src/app/components/transactions-table/transactions-table.component.html
@@ -177,6 +177,9 @@
         <button i18n mat-menu-item (click)="onUpdateTransaction(element)">
           Edit
         </button>
+        <button i18n mat-menu-item (click)="onDuplicateTransaction(element)">
+          Duplicate
+        </button>
         <button i18n mat-menu-item (click)="onDeleteTransaction(element.id)">
           Delete
         </button>
diff --git a/apps/client/src/app/components/transactions-table/transactions-table.component.ts b/apps/client/src/app/components/transactions-table/transactions-table.component.ts
index b4d20b33f..eeacbbfc3 100644
--- a/apps/client/src/app/components/transactions-table/transactions-table.component.ts
+++ b/apps/client/src/app/components/transactions-table/transactions-table.component.ts
@@ -36,6 +36,7 @@ export class TransactionsTableComponent
 
   @Output() transactionDeleted = new EventEmitter<string>();
   @Output() transactionToUpdate = new EventEmitter<OrderModel>();
+  @Output() transactionToDuplicate = new EventEmitter<OrderModel>();
 
   @ViewChild(MatSort) sort: MatSort;
 
@@ -123,6 +124,10 @@ export class TransactionsTableComponent
     this.transactionToUpdate.emit(aTransaction);
   }
 
+  public onDuplicateTransaction(aTransaction: OrderModel) {
+    this.transactionToDuplicate.emit(aTransaction);
+  }
+
   public openPositionDialog({
     symbol,
     title
diff --git a/apps/client/src/app/pages/transactions/transactions-page.component.ts b/apps/client/src/app/pages/transactions/transactions-page.component.ts
index ef02e49c0..e56dba3eb 100644
--- a/apps/client/src/app/pages/transactions/transactions-page.component.ts
+++ b/apps/client/src/app/pages/transactions/transactions-page.component.ts
@@ -123,6 +123,10 @@ export class TransactionsPageComponent implements OnInit {
     });
   }
 
+  public onDuplicateTransaction(aTransaction: OrderModel) {
+    this.openCreateTransactionDialog(aTransaction);
+  }
+
   public openUpdateTransactionDialog({
     accountId,
     currency,
@@ -175,7 +179,7 @@ export class TransactionsPageComponent implements OnInit {
     this.unsubscribeSubject.complete();
   }
 
-  private openCreateTransactionDialog(): void {
+  private openCreateTransactionDialog(aTransaction?: OrderModel): void {
     const dialogRef = this.dialog.open(CreateOrUpdateTransactionDialog, {
       data: {
         accounts: this.user?.accounts,
@@ -183,11 +187,11 @@ export class TransactionsPageComponent implements OnInit {
           accountId: this.user?.accounts.find((account) => {
             return account.isDefault;
           })?.id,
-          currency: null,
+          currency: aTransaction?.currency || null,
           date: new Date(),
           fee: 0,
           quantity: null,
-          symbol: null,
+          symbol: aTransaction?.symbol || null,
           type: 'BUY',
           unitPrice: null
         }
diff --git a/apps/client/src/app/pages/transactions/transactions-page.html b/apps/client/src/app/pages/transactions/transactions-page.html
index d290f54ed..41d9131b9 100644
--- a/apps/client/src/app/pages/transactions/transactions-page.html
+++ b/apps/client/src/app/pages/transactions/transactions-page.html
@@ -10,6 +10,7 @@
         [transactions]="transactions"
         (transactionDeleted)="onDeleteTransaction($event)"
         (transactionToUpdate)="onUpdateTransaction($event)"
+        (transactionToDuplicate)="onDuplicateTransaction($event)"
       ></gf-transactions-table>
     </div>
   </div>