mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-15 07:27:33 +08:00
358 lines
11 KiB
JavaScript
358 lines
11 KiB
JavaScript
import accountConstants from '../consts/account.js';
|
|
import services from '../lib/services.js';
|
|
import logger from '../lib/logger.js';
|
|
|
|
import {
|
|
LOAD_ACCOUNT_LIST,
|
|
ADD_ACCOUNT_TO_ACCOUNT_LIST,
|
|
SAVE_ACCOUNT_IN_ACCOUNT_LIST,
|
|
CHANGE_ACCOUNT_DISPLAY_ORDER_IN_ACCOUNT_LIST,
|
|
UPDATE_ACCOUNT_VISIBILITY_IN_ACCOUNT_LIST,
|
|
REMOVE_ACCOUNT_FROM_ACCOUNT_LIST,
|
|
UPDATE_ACCOUNT_LIST_INVALID_STATE
|
|
} from './mutations.js';
|
|
|
|
export function loadAllAccounts(context, { force }) {
|
|
if (!force && !context.state.accountListStateInvalid) {
|
|
return new Promise((resolve) => {
|
|
resolve(context.state.allAccounts);
|
|
});
|
|
}
|
|
|
|
return new Promise((resolve, reject) => {
|
|
services.getAllAccounts({
|
|
visibleOnly: false
|
|
}).then(response => {
|
|
const data = response.data;
|
|
|
|
if (!data || !data.success || !data.result) {
|
|
reject({ message: 'Unable to get account list' });
|
|
return;
|
|
}
|
|
|
|
context.commit(LOAD_ACCOUNT_LIST, data.result);
|
|
|
|
if (context.state.accountListStateInvalid) {
|
|
context.commit(UPDATE_ACCOUNT_LIST_INVALID_STATE, false);
|
|
}
|
|
|
|
resolve(data.result);
|
|
}).catch(error => {
|
|
if (force) {
|
|
logger.error('failed to force load account list', error);
|
|
} else {
|
|
logger.error('failed to load account list', error);
|
|
}
|
|
|
|
if (error.response && error.response.data && error.response.data.errorMessage) {
|
|
reject({ error: error.response.data });
|
|
} else if (!error.processed) {
|
|
reject({ message: 'Unable to get account list' });
|
|
} else {
|
|
reject(error);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
export function getAccount(context, { accountId }) {
|
|
return new Promise((resolve, reject) => {
|
|
services.getAccount({
|
|
id: accountId
|
|
}).then(response => {
|
|
const data = response.data;
|
|
|
|
if (!data || !data.success || !data.result) {
|
|
reject({ message: 'Unable to get account' });
|
|
return;
|
|
}
|
|
|
|
resolve(data.result);
|
|
}).catch(error => {
|
|
logger.error('failed to load account info', error);
|
|
|
|
if (error.response && error.response.data && error.response.data.errorMessage) {
|
|
reject({ error: error.response.data });
|
|
} else if (!error.processed) {
|
|
reject({ message: 'Unable to get account' });
|
|
} else {
|
|
reject(error);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
export function saveAccount(context, { account }) {
|
|
return new Promise((resolve, reject) => {
|
|
let promise = null;
|
|
|
|
if (!account.id) {
|
|
promise = services.addAccount(account);
|
|
} else {
|
|
promise = services.modifyAccount(account);
|
|
}
|
|
|
|
promise.then(response => {
|
|
const data = response.data;
|
|
|
|
if (!data || !data.success || !data.result) {
|
|
if (!account.id) {
|
|
reject({ message: 'Unable to add account' });
|
|
} else {
|
|
reject({ message: 'Unable to save account' });
|
|
}
|
|
return;
|
|
}
|
|
|
|
if (!account.id) {
|
|
context.commit(ADD_ACCOUNT_TO_ACCOUNT_LIST, data.result);
|
|
} else {
|
|
context.commit(SAVE_ACCOUNT_IN_ACCOUNT_LIST, data.result);
|
|
}
|
|
|
|
resolve(data.result);
|
|
}).catch(error => {
|
|
logger.error('failed to save account', error);
|
|
|
|
if (error.response && error.response.data && error.response.data.errorMessage) {
|
|
reject({ error: error.response.data });
|
|
} else if (!error.processed) {
|
|
if (!account.id) {
|
|
reject({ message: 'Unable to add account' });
|
|
} else {
|
|
reject({ message: 'Unable to save account' });
|
|
}
|
|
} else {
|
|
reject(error);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
export function changeAccountDisplayOrder(context, { accountId, from, to }) {
|
|
const account = context.state.allAccountsMap[accountId];
|
|
|
|
return new Promise((resolve, reject) => {
|
|
if (!account ||
|
|
!context.state.allCategorizedAccounts[account.category] ||
|
|
!context.state.allCategorizedAccounts[account.category].accounts ||
|
|
!context.state.allCategorizedAccounts[account.category].accounts[to]) {
|
|
reject({ message: 'Unable to move account' });
|
|
return;
|
|
}
|
|
|
|
if (!context.state.accountListStateInvalid) {
|
|
context.commit(UPDATE_ACCOUNT_LIST_INVALID_STATE, true);
|
|
}
|
|
|
|
context.commit(CHANGE_ACCOUNT_DISPLAY_ORDER_IN_ACCOUNT_LIST, {
|
|
account: account,
|
|
from: from,
|
|
to: to
|
|
});
|
|
|
|
resolve();
|
|
});
|
|
}
|
|
|
|
export function updateAccountDisplayOrders(context) {
|
|
const newDisplayOrders = [];
|
|
|
|
for (let category in context.state.allCategorizedAccounts) {
|
|
if (!Object.prototype.hasOwnProperty.call(context.state.allCategorizedAccounts, category)) {
|
|
continue;
|
|
}
|
|
|
|
const accountList = context.state.allCategorizedAccounts[category].accounts;
|
|
|
|
for (let i = 0; i < accountList.length; i++) {
|
|
newDisplayOrders.push({
|
|
id: accountList[i].id,
|
|
displayOrder: i + 1
|
|
});
|
|
}
|
|
}
|
|
|
|
return new Promise((resolve, reject) => {
|
|
services.moveAccount({
|
|
newDisplayOrders: newDisplayOrders
|
|
}).then(response => {
|
|
const data = response.data;
|
|
|
|
if (!data || !data.success || !data.result) {
|
|
reject({ message: 'Unable to move account' });
|
|
return;
|
|
}
|
|
|
|
if (context.state.accountListStateInvalid) {
|
|
context.commit(UPDATE_ACCOUNT_LIST_INVALID_STATE, false);
|
|
}
|
|
|
|
resolve(data.result);
|
|
}).catch(error => {
|
|
logger.error('failed to save accounts display order', error);
|
|
|
|
if (error.response && error.response.data && error.response.data.errorMessage) {
|
|
reject({ error: error.response.data });
|
|
} else if (!error.processed) {
|
|
reject({ message: 'Unable to move account' });
|
|
} else {
|
|
reject(error);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
export function hideAccount(context, { account, hidden }) {
|
|
return new Promise((resolve, reject) => {
|
|
services.hideAccount({
|
|
id: account.id,
|
|
hidden: hidden
|
|
}).then(response => {
|
|
const data = response.data;
|
|
|
|
if (!data || !data.success || !data.result) {
|
|
if (hidden) {
|
|
reject({ message: 'Unable to hide this account' });
|
|
} else {
|
|
reject({ message: 'Unable to unhide this account' });
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
context.commit(UPDATE_ACCOUNT_VISIBILITY_IN_ACCOUNT_LIST, {
|
|
account: account,
|
|
hidden: hidden
|
|
});
|
|
|
|
resolve(data.result);
|
|
}).catch(error => {
|
|
logger.error('failed to change account visibility', error);
|
|
|
|
if (error.response && error.response.data && error.response.data.errorMessage) {
|
|
reject({ error: error.response.data });
|
|
} else if (!error.processed) {
|
|
if (hidden) {
|
|
reject({ message: 'Unable to hide this account' });
|
|
} else {
|
|
reject({ message: 'Unable to unhide this account' });
|
|
}
|
|
} else {
|
|
reject(error);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
export function deleteAccount(context, { account, beforeResolve }) {
|
|
return new Promise((resolve, reject) => {
|
|
services.deleteAccount({
|
|
id: account.id
|
|
}).then(response => {
|
|
const data = response.data;
|
|
|
|
if (!data || !data.success || !data.result) {
|
|
reject({ message: 'Unable to delete this account' });
|
|
return;
|
|
}
|
|
|
|
if (beforeResolve) {
|
|
beforeResolve(() => {
|
|
context.commit(REMOVE_ACCOUNT_FROM_ACCOUNT_LIST, account);
|
|
});
|
|
} else {
|
|
context.commit(REMOVE_ACCOUNT_FROM_ACCOUNT_LIST, account);
|
|
}
|
|
|
|
resolve(data.result);
|
|
}).catch(error => {
|
|
logger.error('failed to delete account', error);
|
|
|
|
if (error.response && error.response.data && error.response.data.errorMessage) {
|
|
reject({ error: error.response.data });
|
|
} else if (!error.processed) {
|
|
reject({ message: 'Unable to delete this account' });
|
|
} else {
|
|
reject(error);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
export function allPlainAccounts(state) {
|
|
const allAccounts = [];
|
|
|
|
for (let i = 0; i < state.allAccounts.length; i++) {
|
|
const account = state.allAccounts[i];
|
|
|
|
if (account.type === accountConstants.allAccountTypes.SingleAccount) {
|
|
allAccounts.push(account);
|
|
} else if (account.type === accountConstants.allAccountTypes.MultiSubAccounts) {
|
|
for (let j = 0; j < account.subAccounts.length; j++) {
|
|
const subAccount = account.subAccounts[j];
|
|
allAccounts.push(subAccount);
|
|
}
|
|
}
|
|
}
|
|
|
|
return allAccounts;
|
|
}
|
|
|
|
export function allVisiblePlainAccounts(state) {
|
|
const allVisibleAccounts = [];
|
|
|
|
for (let i = 0; i < state.allAccounts.length; i++) {
|
|
const account = state.allAccounts[i];
|
|
|
|
if (account.hidden) {
|
|
continue;
|
|
}
|
|
|
|
if (account.type === accountConstants.allAccountTypes.SingleAccount) {
|
|
allVisibleAccounts.push(account);
|
|
} else if (account.type === accountConstants.allAccountTypes.MultiSubAccounts) {
|
|
for (let j = 0; j < account.subAccounts.length; j++) {
|
|
const subAccount = account.subAccounts[j];
|
|
allVisibleAccounts.push(subAccount);
|
|
}
|
|
}
|
|
}
|
|
|
|
return allVisibleAccounts;
|
|
}
|
|
|
|
export function allAvailableAccountsCount(state) {
|
|
let allAccountCount = 0;
|
|
|
|
for (let category in state.allCategorizedAccounts) {
|
|
if (!Object.prototype.hasOwnProperty.call(state.allCategorizedAccounts, category)) {
|
|
continue;
|
|
}
|
|
|
|
allAccountCount += state.allCategorizedAccounts[category].accounts.length;
|
|
}
|
|
|
|
return allAccountCount;
|
|
}
|
|
|
|
export function allVisibleAccountsCount(state) {
|
|
let shownAccountCount = 0;
|
|
|
|
for (let category in state.allCategorizedAccounts) {
|
|
if (!Object.prototype.hasOwnProperty.call(state.allCategorizedAccounts, category)) {
|
|
continue;
|
|
}
|
|
|
|
const accountList = state.allCategorizedAccounts[category].accounts;
|
|
|
|
for (let i = 0; i < accountList.length; i++) {
|
|
if (!accountList[i].hidden) {
|
|
shownAccountCount++;
|
|
}
|
|
}
|
|
}
|
|
|
|
return shownAccountCount;
|
|
}
|