From b1994081374003208f85667d1877f4949c003d89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=20Jurmanovi=C4=87?= Date: Sun, 12 Dec 2021 10:23:47 +0100 Subject: [PATCH] save or complete transaction check --- .eslintrc.json | 4 +- src/components/app-main/AppMainElement.ts | 2 +- .../TransactionCheckElement.ts | 113 +++++++++++++----- .../TransactionCheckElementTemplate.ts | 9 -- src/services/TransactionStatusService.ts | 9 ++ src/services/index.ts | 1 + 6 files changed, 97 insertions(+), 41 deletions(-) create mode 100644 src/services/TransactionStatusService.ts diff --git a/.eslintrc.json b/.eslintrc.json index 7900fa6..314b170 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -32,6 +32,8 @@ { "ignoreRestSiblings": true } - ] + ], + "no-console": "warn", + "no-debugger": "warn" } } \ No newline at end of file diff --git a/src/components/app-main/AppMainElement.ts b/src/components/app-main/AppMainElement.ts index 556c574..fe78527 100644 --- a/src/components/app-main/AppMainElement.ts +++ b/src/components/app-main/AppMainElement.ts @@ -129,7 +129,7 @@ class AppMainElement extends HTMLElement { checkSubscriptions = async () => { if (this.isAuth && !this.subscriptionChecked) { - const checked = await this.transactionsService.check(); + const checked = await this.transactionsService.check({ sortBy: 'transactionDate asc' }); this.createModal('transaction-check', { data: checked, }); diff --git a/src/pages/transaction-check/TransactionCheckElement.ts b/src/pages/transaction-check/TransactionCheckElement.ts index eb92d55..bed2ce3 100644 --- a/src/pages/transaction-check/TransactionCheckElement.ts +++ b/src/pages/transaction-check/TransactionCheckElement.ts @@ -1,6 +1,6 @@ import { TemplateResult, controller, target, html } from 'core/utils'; -import { TransactionsService } from 'services/'; -import { AppMainElement, AppPaginationElement } from 'components/'; +import { TransactionsService, TransactionStatusService } from 'services/'; +import { AppPaginationElement } from 'components/'; import { BasePageElement } from 'common/'; import { TransactionCheckElementTemplate } from 'pages/transaction-check'; import dayjs from 'dayjs'; @@ -8,6 +8,8 @@ import dayjs from 'dayjs'; @controller('transaction-check') class TransactionCheckElement extends BasePageElement { private transactionsService: TransactionsService; + private transactionStatusService: TransactionStatusService; + transactionStatuses: []; @target pagination: AppPaginationElement; modalData: any = null; constructor() { @@ -16,7 +18,9 @@ class TransactionCheckElement extends BasePageElement { }); } - elementConnected = (): void => { + elementConnected = async (): Promise => { + this.transactionStatusService = new TransactionStatusService(this.appMain?.appService); + await this.fetchTransactionStatus(); this.transactionsService = new TransactionsService(this.appMain?.appService); this.update(); this.pagination?.setCustomRenderItem?.(this.renderSubscription)!; @@ -32,39 +36,77 @@ class TransactionCheckElement extends BasePageElement { return data; }; - renderSubscription = (item) => html` - ${!item.isEdit - ? html`${dayjs(item.transactionDate).format("MMM DD 'YY")}` - : html``} - ${item.description} - - { + const renderEditActions = () => html``; + const renderRegularActions = () => html` - ${item?.transactionType?.type == 'expense' ? '- ' : ''} - ${Number(item.amount).toLocaleString('en-US', { - maximumFractionDigits: 2, - minimumFractionDigits: 2, - })} - - (${item.currency ? item.currency : 'USD'}) - - - - - `; + `; + return html` + ${!item.isEdit + ? html`${dayjs(item.transactionDate).format("MMM DD 'YY")}` + : html``} + ${item.description} + + + ${item?.transactionType?.type == 'expense' ? '- ' : ''} + ${Number(item.amount).toLocaleString('en-US', { + maximumFractionDigits: 2, + minimumFractionDigits: 2, + })} + + (${item.currency ? item.currency : 'USD'}) + + ${item.isEdit ? renderEditActions() : renderRegularActions()} + `; + }; + + fetchTransactionStatus = async () => { + this.transactionStatuses = await this.transactionStatusService.getAll(); + }; transactionEdit = (item) => { item.isEdit = !item.isEdit; this.pagination?.update(); }; + transactionEditSave = async (item) => { + const resource = { + transactionDate: dayjs(item.newTransactionDate || item.transactionDate) + .utc(true) + .format(), + }; + await this.updateTransaction(item.id, resource); + }; + + transactionEditComplete = async (item) => { + const completedStatusId = (this.transactionStatuses?.find((item: any) => item.status === 'completed') as any)?.id!; + if (completedStatusId) { + const resource = { + transactionStatusId: completedStatusId, + }; + await this.updateTransaction(item.id, resource); + } + }; + transactionUpdated = () => { this.pagination?.executeFetch(); }; @@ -72,11 +114,22 @@ class TransactionCheckElement extends BasePageElement { getTransactions = async (options): Promise => { try { options.embed = 'TransactionType'; - options.sortBy = 'dateCreated|desc'; + options.sortBy = 'transactionDate|asc'; const response = await this.transactionsService.check(options); + return this.mappedData(response); + } catch (err) { + throw err; + } + }; + + updateTransaction = async (id, resource): Promise => { + try { + const response = await this.transactionsService.put(id, resource); return response; } catch (err) { throw err; + } finally { + this.pagination?.defaultFetch(); } }; diff --git a/src/pages/transaction-check/TransactionCheckElementTemplate.ts b/src/pages/transaction-check/TransactionCheckElementTemplate.ts index ad9c3d1..b06fa27 100644 --- a/src/pages/transaction-check/TransactionCheckElementTemplate.ts +++ b/src/pages/transaction-check/TransactionCheckElementTemplate.ts @@ -1,16 +1,7 @@ import { html, nothing, TemplateResult } from 'core/utils'; export default (props): TemplateResult => { - const { walletId } = props; - const renderWallet = () => { - if (walletId) { - return html`${walletId}`; - } - return nothing; - }; - return html`
- ${renderWallet()}
`; }; diff --git a/src/services/TransactionStatusService.ts b/src/services/TransactionStatusService.ts new file mode 100644 index 0000000..0918cf2 --- /dev/null +++ b/src/services/TransactionStatusService.ts @@ -0,0 +1,9 @@ +import { AppService, BaseService } from 'core/services'; + +class TransactionStatusService extends BaseService { + constructor(appService: AppService) { + super('/transaction-status', appService); + } +} + +export default TransactionStatusService; diff --git a/src/services/index.ts b/src/services/index.ts index 31edfd1..61ba003 100644 --- a/src/services/index.ts +++ b/src/services/index.ts @@ -5,3 +5,4 @@ export { default as TransactionsService } from './TransactionsService'; export { default as TransactionTypeService } from './TransactionTypeService'; export { default as SubscriptionService } from './SubscriptionService'; export { default as SubscriptionTypeService } from './SubscriptionTypeService'; +export { default as TransactionStatusService } from './TransactionStatusService';