398 lines
12 KiB
JavaScript
398 lines
12 KiB
JavaScript
import currencyConstants from '@/consts/currency.js';
|
|
import accountConstants from '@/consts/account.js';
|
|
|
|
export function setAccountModelByAnotherAccount(account, account2) {
|
|
account.id = account2.id;
|
|
account.category = account2.category;
|
|
account.type = account2.type;
|
|
account.name = account2.name;
|
|
account.icon = account2.icon;
|
|
account.color = account2.color;
|
|
account.currency = account2.currency;
|
|
account.balance = account2.balance;
|
|
account.comment = account2.comment;
|
|
account.visible = !account2.hidden;
|
|
}
|
|
|
|
export function getAccountCategoryInfo(categoryId) {
|
|
for (let i = 0; i < accountConstants.allCategories.length; i++) {
|
|
if (accountConstants.allCategories[i].id === categoryId) {
|
|
return accountConstants.allCategories[i];
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
export function getAccountOrSubAccountId(account, subAccountId) {
|
|
if (account.type === accountConstants.allAccountTypes.SingleAccount) {
|
|
return account.id;
|
|
} else if (account.type === accountConstants.allAccountTypes.MultiSubAccounts && !subAccountId) {
|
|
return account.id;
|
|
} else if (account.type === accountConstants.allAccountTypes.MultiSubAccounts && subAccountId) {
|
|
if (!account.subAccounts || !account.subAccounts.length) {
|
|
return null;
|
|
}
|
|
|
|
for (let i = 0; i < account.subAccounts.length; i++) {
|
|
const subAccount = account.subAccounts[i];
|
|
|
|
if (subAccountId && subAccountId === subAccount.id) {
|
|
return subAccount.id;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
export function getAccountOrSubAccountComment(account, subAccountId) {
|
|
if (account.type === accountConstants.allAccountTypes.SingleAccount) {
|
|
return account.comment;
|
|
} else if (account.type === accountConstants.allAccountTypes.MultiSubAccounts && !subAccountId) {
|
|
return account.comment;
|
|
} else if (account.type === accountConstants.allAccountTypes.MultiSubAccounts && subAccountId) {
|
|
if (!account.subAccounts || !account.subAccounts.length) {
|
|
return null;
|
|
}
|
|
|
|
for (let i = 0; i < account.subAccounts.length; i++) {
|
|
const subAccount = account.subAccounts[i];
|
|
|
|
if (subAccountId && subAccountId === subAccount.id) {
|
|
return subAccount.comment;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
export function getSubAccountCurrencies(account, showHidden, subAccountId) {
|
|
if (!account.subAccounts || !account.subAccounts.length) {
|
|
return [];
|
|
}
|
|
|
|
const subAccountCurrenciesMap = {};
|
|
const subAccountCurrencies = [];
|
|
|
|
for (let i = 0; i < account.subAccounts.length; i++) {
|
|
const subAccount = account.subAccounts[i];
|
|
|
|
if (!showHidden && subAccount.hidden) {
|
|
continue;
|
|
}
|
|
|
|
if (subAccountId && subAccountId === subAccount.id) {
|
|
return [subAccount.currency];
|
|
} else {
|
|
if (!subAccountCurrenciesMap[subAccount.currency]) {
|
|
subAccountCurrenciesMap[subAccount.currency] = true;
|
|
subAccountCurrencies.push(subAccount.currency);
|
|
}
|
|
}
|
|
}
|
|
|
|
return subAccountCurrencies;
|
|
}
|
|
|
|
export function getCategorizedAccounts(allAccounts) {
|
|
const ret = {};
|
|
|
|
for (let i = 0; i < allAccounts.length; i++) {
|
|
const account = allAccounts[i];
|
|
|
|
if (!ret[account.category]) {
|
|
const categoryInfo = getAccountCategoryInfo(account.category);
|
|
|
|
if (categoryInfo) {
|
|
ret[account.category] = {
|
|
category: account.category,
|
|
name: categoryInfo.name,
|
|
icon: categoryInfo.defaultAccountIconId,
|
|
accounts: []
|
|
};
|
|
}
|
|
}
|
|
|
|
if (ret[account.category]) {
|
|
const accountList = ret[account.category].accounts;
|
|
accountList.push(account);
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
export function getVisibleCategorizedAccounts(categorizedAccounts) {
|
|
const ret = {};
|
|
|
|
for (let i = 0; i < accountConstants.allCategories.length; i++) {
|
|
const accountCategory = accountConstants.allCategories[i];
|
|
|
|
if (!categorizedAccounts[accountCategory.id] || !categorizedAccounts[accountCategory.id].accounts) {
|
|
continue;
|
|
}
|
|
|
|
const allAccounts = categorizedAccounts[accountCategory.id].accounts;
|
|
const visibleAccounts = [];
|
|
const allVisibleSubAccounts = {};
|
|
|
|
for (let j = 0; j < allAccounts.length; j++) {
|
|
const account = allAccounts[j];
|
|
|
|
if (account.hidden) {
|
|
continue;
|
|
}
|
|
|
|
visibleAccounts.push(account);
|
|
|
|
if (account.type === accountConstants.allAccountTypes.MultiSubAccounts && account.subAccounts) {
|
|
const visibleSubAccounts = [];
|
|
|
|
for (let k = 0; k < account.subAccounts.length; k++) {
|
|
const subAccount = account.subAccounts[k];
|
|
|
|
if (!subAccount.hidden) {
|
|
visibleSubAccounts.push(subAccount);
|
|
}
|
|
}
|
|
|
|
if (visibleSubAccounts.length > 0) {
|
|
allVisibleSubAccounts[account.id] = visibleSubAccounts;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (visibleAccounts.length > 0) {
|
|
ret[accountCategory.id] = {
|
|
category: accountCategory.id,
|
|
name: accountCategory.name,
|
|
icon: accountCategory.defaultAccountIconId,
|
|
visibleAccounts: visibleAccounts,
|
|
visibleSubAccounts: allVisibleSubAccounts
|
|
};
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
export function getAllFilteredAccountsBalance(categorizedAccounts, accountFilter) {
|
|
const allAccountCategories = accountConstants.allCategories;
|
|
const ret = [];
|
|
|
|
for (let categoryIdx = 0; categoryIdx < allAccountCategories.length; categoryIdx++) {
|
|
const accountCategory = allAccountCategories[categoryIdx];
|
|
|
|
if (!categorizedAccounts[accountCategory.id] || !categorizedAccounts[accountCategory.id].accounts) {
|
|
continue;
|
|
}
|
|
|
|
for (let accountIdx = 0; accountIdx < categorizedAccounts[accountCategory.id].accounts.length; accountIdx++) {
|
|
const account = categorizedAccounts[accountCategory.id].accounts[accountIdx];
|
|
|
|
if (account.hidden || !accountFilter(account)) {
|
|
continue;
|
|
}
|
|
|
|
if (account.type === accountConstants.allAccountTypes.SingleAccount) {
|
|
ret.push({
|
|
balance: account.balance,
|
|
isAsset: account.isAsset,
|
|
isLiability: account.isLiability,
|
|
currency: account.currency
|
|
});
|
|
} else if (account.type === accountConstants.allAccountTypes.MultiSubAccounts) {
|
|
for (let subAccountIdx = 0; subAccountIdx < account.subAccounts.length; subAccountIdx++) {
|
|
const subAccount = account.subAccounts[subAccountIdx];
|
|
|
|
if (subAccount.hidden || !accountFilter(subAccount)) {
|
|
continue;
|
|
}
|
|
|
|
ret.push({
|
|
balance: subAccount.balance,
|
|
isAsset: subAccount.isAsset,
|
|
isLiability: subAccount.isLiability,
|
|
currency: subAccount.currency
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
export function getFinalAccountIdsByFilteredAccountIds(allAccountsMap, filteredAccountIds) {
|
|
let finalAccountIds = '';
|
|
|
|
if (!allAccountsMap) {
|
|
return finalAccountIds;
|
|
}
|
|
|
|
for (let accountId in allAccountsMap) {
|
|
if (!Object.prototype.hasOwnProperty.call(allAccountsMap, accountId)) {
|
|
continue;
|
|
}
|
|
|
|
const account = allAccountsMap[accountId];
|
|
|
|
if (filteredAccountIds && !isAccountOrSubAccountsAllChecked(account, filteredAccountIds)) {
|
|
continue;
|
|
}
|
|
|
|
if (finalAccountIds.length > 0) {
|
|
finalAccountIds += ',';
|
|
}
|
|
|
|
finalAccountIds += account.id;
|
|
}
|
|
|
|
return finalAccountIds;
|
|
}
|
|
|
|
export function getUnifiedSelectedAccountsCurrencyOrDefaultCurrency(allAccounts, selectedAccountIds, defaultCurrency) {
|
|
if (!selectedAccountIds) {
|
|
return defaultCurrency;
|
|
}
|
|
|
|
let accountCurrency = '';
|
|
|
|
for (let accountId in selectedAccountIds) {
|
|
if (!Object.prototype.hasOwnProperty.call(selectedAccountIds, accountId)) {
|
|
continue;
|
|
}
|
|
|
|
const account = allAccounts[accountId];
|
|
|
|
if (account.currency === currencyConstants.parentAccountCurrencyPlaceholder) {
|
|
continue;
|
|
}
|
|
|
|
if (accountCurrency === '') {
|
|
accountCurrency = account.currency;
|
|
} else if (accountCurrency !== account.currency) {
|
|
return defaultCurrency;
|
|
}
|
|
}
|
|
|
|
if (accountCurrency) {
|
|
return accountCurrency;
|
|
}
|
|
|
|
return defaultCurrency;
|
|
}
|
|
|
|
export function selectAccountOrSubAccounts(filterAccountIds, account, value) {
|
|
if (account.type === accountConstants.allAccountTypes.SingleAccount) {
|
|
filterAccountIds[account.id] = value;
|
|
} else if (account.type === accountConstants.allAccountTypes.MultiSubAccounts) {
|
|
if (!account.subAccounts || !account.subAccounts.length) {
|
|
return;
|
|
}
|
|
|
|
for (let i = 0; i < account.subAccounts.length; i++) {
|
|
const subAccount = account.subAccounts[i];
|
|
filterAccountIds[subAccount.id] = value;
|
|
}
|
|
}
|
|
}
|
|
|
|
export function selectAll(filterAccountIds, allAccountsMap) {
|
|
for (let accountId in filterAccountIds) {
|
|
if (!Object.prototype.hasOwnProperty.call(filterAccountIds, accountId)) {
|
|
continue;
|
|
}
|
|
|
|
const account = allAccountsMap[accountId];
|
|
|
|
if (account && account.type === accountConstants.allAccountTypes.SingleAccount) {
|
|
filterAccountIds[account.id] = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
export function selectNone(filterAccountIds, allAccountsMap) {
|
|
for (let accountId in filterAccountIds) {
|
|
if (!Object.prototype.hasOwnProperty.call(filterAccountIds, accountId)) {
|
|
continue;
|
|
}
|
|
|
|
const account = allAccountsMap[accountId];
|
|
|
|
if (account && account.type === accountConstants.allAccountTypes.SingleAccount) {
|
|
filterAccountIds[account.id] = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
export function selectInvert(filterAccountIds, allAccountsMap) {
|
|
for (let accountId in filterAccountIds) {
|
|
if (!Object.prototype.hasOwnProperty.call(filterAccountIds, accountId)) {
|
|
continue;
|
|
}
|
|
|
|
const account = allAccountsMap[accountId];
|
|
|
|
if (account && account.type === accountConstants.allAccountTypes.SingleAccount) {
|
|
filterAccountIds[account.id] = !filterAccountIds[account.id];
|
|
}
|
|
}
|
|
}
|
|
|
|
export function isAccountOrSubAccountsAllChecked(account, filterAccountIds) {
|
|
if (!account.subAccounts) {
|
|
return !filterAccountIds[account.id];
|
|
}
|
|
|
|
for (let i = 0; i < account.subAccounts.length; i++) {
|
|
const subAccount = account.subAccounts[i];
|
|
if (filterAccountIds[subAccount.id]) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
export function isAccountOrSubAccountsHasButNotAllChecked(account, filterAccountIds) {
|
|
if (!account.subAccounts) {
|
|
return false;
|
|
}
|
|
|
|
let checkedCount = 0;
|
|
|
|
for (let i = 0; i < account.subAccounts.length; i++) {
|
|
const subAccount = account.subAccounts[i];
|
|
if (!filterAccountIds[subAccount.id]) {
|
|
checkedCount++;
|
|
}
|
|
}
|
|
|
|
return checkedCount > 0 && checkedCount < account.subAccounts.length;
|
|
}
|
|
|
|
export function setAccountSuitableIcon(account, oldCategory, newCategory) {
|
|
for (let i = 0; i < accountConstants.allCategories.length; i++) {
|
|
if (accountConstants.allCategories[i].id === oldCategory) {
|
|
if (account.icon !== accountConstants.allCategories[i].defaultAccountIconId) {
|
|
return;
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
for (let i = 0; i < accountConstants.allCategories.length; i++) {
|
|
if (accountConstants.allCategories[i].id === newCategory) {
|
|
account.icon = accountConstants.allCategories[i].defaultAccountIconId;
|
|
}
|
|
}
|
|
}
|