mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-20 06:40:31 +00:00
feat(server): change the Plaid synced bank name.
This commit is contained in:
@@ -1,6 +1,9 @@
|
|||||||
exports.up = function (knex) {
|
exports.up = function (knex) {
|
||||||
return knex.schema.table('accounts', (table) => {
|
return knex.schema.table('accounts', (table) => {
|
||||||
table.integer('uncategorized_transactions').defaultTo(0);
|
table.integer('uncategorized_transactions').defaultTo(0);
|
||||||
|
table.boolean('is_system_account').defaultTo(true);
|
||||||
|
table.boolean('is_feeds_active').defaultTo(false);
|
||||||
|
table.datetime('last_feeds_updated_at').nullable();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -40,11 +40,14 @@ export class PlaidSyncDb {
|
|||||||
*/
|
*/
|
||||||
public async syncBankAccounts(
|
public async syncBankAccounts(
|
||||||
tenantId: number,
|
tenantId: number,
|
||||||
plaidAccounts: PlaidAccount[]
|
plaidAccounts: PlaidAccount[],
|
||||||
|
institution: any
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
const accountCreateDTOs = R.map(transformPlaidAccountToCreateAccount)(
|
const transformToPlaidAccounts =
|
||||||
plaidAccounts
|
transformPlaidAccountToCreateAccount(institution);
|
||||||
);
|
|
||||||
|
const accountCreateDTOs = R.map(transformToPlaidAccounts)(plaidAccounts);
|
||||||
|
|
||||||
await bluebird.map(
|
await bluebird.map(
|
||||||
accountCreateDTOs,
|
accountCreateDTOs,
|
||||||
(createAccountDTO: any) =>
|
(createAccountDTO: any) =>
|
||||||
@@ -162,4 +165,38 @@ export class PlaidSyncDb {
|
|||||||
|
|
||||||
await PlaidItem.query().findOne({ plaidItemId }).patch({ lastCursor });
|
await PlaidItem.query().findOne({ plaidItemId }).patch({ lastCursor });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the last feeds updated at of the given Plaid accounts ids.
|
||||||
|
* @param {number} tenantId
|
||||||
|
* @param {string[]} plaidAccountIds
|
||||||
|
*/
|
||||||
|
public async updateLastFeedsUpdatedAt(
|
||||||
|
tenantId: number,
|
||||||
|
plaidAccountIds: string[]
|
||||||
|
) {
|
||||||
|
const { Account } = this.tenancy.models(tenantId);
|
||||||
|
|
||||||
|
await Account.query().whereIn('plaid_account_id', plaidAccountIds).patch({
|
||||||
|
lastFeedsUpdatedAt: new Date(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the accounts feed active status of the given Plaid accounts ids.
|
||||||
|
* @param {number} tenantId
|
||||||
|
* @param {number[]} plaidAccountIds
|
||||||
|
* @param {boolean} isFeedsActive
|
||||||
|
*/
|
||||||
|
public async updateAccountsFeedsActive(
|
||||||
|
tenantId: number,
|
||||||
|
plaidAccountIds: string[],
|
||||||
|
isFeedsActive: boolean = true
|
||||||
|
) {
|
||||||
|
const { Account } = this.tenancy.models(tenantId);
|
||||||
|
|
||||||
|
await Account.query().whereIn('plaid_account_id', plaidAccountIds).patch({
|
||||||
|
isFeedsActive,
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,11 +25,19 @@ export class PlaidUpdateTransactions {
|
|||||||
const request = { access_token: accessToken };
|
const request = { access_token: accessToken };
|
||||||
const plaidInstance = new PlaidClientWrapper();
|
const plaidInstance = new PlaidClientWrapper();
|
||||||
const {
|
const {
|
||||||
data: { accounts },
|
data: { accounts, item },
|
||||||
} = await plaidInstance.accountsGet(request);
|
} = await plaidInstance.accountsGet(request);
|
||||||
|
|
||||||
|
const plaidAccountsIds = accounts.map((a) => a.account_id);
|
||||||
|
|
||||||
|
const {
|
||||||
|
data: { institution },
|
||||||
|
} = await plaidInstance.institutionsGetById({
|
||||||
|
institution_id: item.institution_id,
|
||||||
|
country_codes: ['US', 'UK'],
|
||||||
|
});
|
||||||
// Update the DB.
|
// Update the DB.
|
||||||
await this.plaidSync.syncBankAccounts(tenantId, accounts);
|
await this.plaidSync.syncBankAccounts(tenantId, accounts, institution);
|
||||||
await this.plaidSync.syncAccountsTransactions(
|
await this.plaidSync.syncAccountsTransactions(
|
||||||
tenantId,
|
tenantId,
|
||||||
added.concat(modified)
|
added.concat(modified)
|
||||||
@@ -37,6 +45,12 @@ export class PlaidUpdateTransactions {
|
|||||||
await this.plaidSync.syncRemoveTransactions(tenantId, removed);
|
await this.plaidSync.syncRemoveTransactions(tenantId, removed);
|
||||||
await this.plaidSync.syncTransactionsCursor(tenantId, plaidItemId, cursor);
|
await this.plaidSync.syncTransactionsCursor(tenantId, plaidItemId, cursor);
|
||||||
|
|
||||||
|
// Update the last feeds updated at of the updated accounts.
|
||||||
|
await this.plaidSync.updateLastFeedsUpdatedAt(tenantId, plaidAccountsIds);
|
||||||
|
|
||||||
|
// Turn on the accounts feeds flag.
|
||||||
|
await this.plaidSync.updateAccountsFeedsActive(tenantId, plaidAccountsIds);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
addedCount: added.length,
|
addedCount: added.length,
|
||||||
modifiedCount: modified.length,
|
modifiedCount: modified.length,
|
||||||
|
|||||||
@@ -2,8 +2,6 @@ import * as R from 'ramda';
|
|||||||
import {
|
import {
|
||||||
CreateUncategorizedTransactionDTO,
|
CreateUncategorizedTransactionDTO,
|
||||||
IAccountCreateDTO,
|
IAccountCreateDTO,
|
||||||
ICashflowNewCommandDTO,
|
|
||||||
IUncategorizedCashflowTransaction,
|
|
||||||
PlaidAccount,
|
PlaidAccount,
|
||||||
PlaidTransaction,
|
PlaidTransaction,
|
||||||
} from '@/interfaces';
|
} from '@/interfaces';
|
||||||
@@ -13,21 +11,21 @@ import {
|
|||||||
* @param {PlaidAccount} plaidAccount
|
* @param {PlaidAccount} plaidAccount
|
||||||
* @returns {IAccountCreateDTO}
|
* @returns {IAccountCreateDTO}
|
||||||
*/
|
*/
|
||||||
export const transformPlaidAccountToCreateAccount = (
|
export const transformPlaidAccountToCreateAccount = R.curry(
|
||||||
plaidAccount: PlaidAccount
|
(institution: any, plaidAccount: PlaidAccount): IAccountCreateDTO => {
|
||||||
): IAccountCreateDTO => {
|
return {
|
||||||
return {
|
name: `${institution.name} - ${plaidAccount.name}`,
|
||||||
name: plaidAccount.name,
|
code: '',
|
||||||
code: '',
|
description: plaidAccount.official_name,
|
||||||
description: plaidAccount.official_name,
|
currencyCode: plaidAccount.balances.iso_currency_code,
|
||||||
currencyCode: plaidAccount.balances.iso_currency_code,
|
accountType: 'cash',
|
||||||
accountType: 'cash',
|
active: true,
|
||||||
active: true,
|
plaidAccountId: plaidAccount.account_id,
|
||||||
plaidAccountId: plaidAccount.account_id,
|
bankBalance: plaidAccount.balances.current,
|
||||||
bankBalance: plaidAccount.balances.current,
|
accountMask: plaidAccount.mask,
|
||||||
accountMask: plaidAccount.mask,
|
};
|
||||||
};
|
}
|
||||||
};
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Transformes the plaid transaction to cashflow create DTO.
|
* Transformes the plaid transaction to cashflow create DTO.
|
||||||
|
|||||||
Reference in New Issue
Block a user