diff --git a/client/src/containers/Accounts/AccountsDataTable.js b/client/src/containers/Accounts/AccountsDataTable.js index 27ee94cc0..2b91620d2 100644 --- a/client/src/containers/Accounts/AccountsDataTable.js +++ b/client/src/containers/Accounts/AccountsDataTable.js @@ -145,7 +145,7 @@ function AccountsDataTable({ Header: formatMessage({ id: 'code' }), accessor: 'code', className: 'code', - width: 125, + width: 70, }, { id: 'type', @@ -160,13 +160,13 @@ function AccountsDataTable({ Cell: NormalCell, accessor: 'type.normal', className: 'normal', - width: 115, + width: 65, }, { id: 'currency', Header: formatMessage({ id: 'currency' }), accessor: (row) => 'USD', - width: 100, + width: 75, }, { id: 'balance', diff --git a/server/src/database/seeds/core/20190423085241_seed_accounts_types.js b/server/src/database/seeds/core/20190423085241_seed_accounts_types.js index bd681092a..d4ba67987 100644 --- a/server/src/database/seeds/core/20190423085241_seed_accounts_types.js +++ b/server/src/database/seeds/core/20190423085241_seed_accounts_types.js @@ -1,141 +1,14 @@ import Container from 'typedi'; import TenancyService from 'services/Tenancy/TenancyService' import I18nMiddleware from 'api/middleware/I18nMiddleware'; +import AccountsTypesData from '../data/accounts_types'; exports.up = function (knex) { - const tenancyService = Container.get(TenancyService); - const i18n = tenancyService.i18n(knex.userParams.tenantId); - return knex('account_types').insert([ - { - id: 1, - key: 'fixed_asset', - normal: 'debit', - root_type: 'asset', - child_type: 'fixed_asset', - balance_sheet: true, - income_sheet: false, - }, - { - id: 2, - key: 'current_asset', - normal: 'debit', - root_type: 'asset', - child_type: 'current_asset', - balance_sheet: true, - income_sheet: false, - }, - { - id: 14, - key: 'other_asset', - normal: 'debit', - root_type: 'asset', - child_type: 'other_asset', - balance_sheet: true, - income_sheet: false, - }, - { - id: 3, - key: 'long_term_liability', - normal: 'credit', - root_type: 'liability', - child_type: 'long_term_liability', - balance_sheet: false, - income_sheet: true, - }, - { - id: 4, - key: 'current_liability', - normal: 'credit', - root_type: 'liability', - child_type: 'current_liability', - balance_sheet: false, - income_sheet: true, - }, - { - id: 13, - key: 'other_liability', - normal: 'credit', - root_type: 'liability', - child_type: 'other_liability', - balance_sheet: false, - income_sheet: true, - }, - { - id: 5, - key: 'equity', - normal: 'credit', - root_type: 'equity', - child_type: 'equity', - balance_sheet: true, - income_sheet: false, - }, - { - id: 6, - key: 'expense', - normal: 'debit', - root_type: 'expense', - child_type: 'expense', - balance_sheet: false, - income_sheet: true, - }, - { - id: 10, - key: 'other_expense', - normal: 'debit', - root_type: 'expense', - balance_sheet: false, - income_sheet: true, - }, - { - id: 7, - key: 'income', - normal: 'credit', - root_type: 'income', - child_type: 'income', - balance_sheet: false, - income_sheet: true, - }, - { - id: 11, - key: 'other_income', - normal: 'credit', - root_type: 'income', - child_type: 'other_income', - balance_sheet: false, - income_sheet: true, - }, - { - id: 12, - key: 'cost_of_goods_sold', - normal: 'debit', - root_type: 'expenses', - child_type: 'expenses', - balance_sheet: false, - income_sheet: true, - }, - { - id: 8, - key: 'accounts_receivable', - normal: 'debit', - root_type: 'asset', - child_type: 'current_asset', - balance_sheet: true, - income_sheet: false, - }, - { - id: 9, - key: 'accounts_payable', - normal: 'credit', - root_type: 'liability', - child_type: 'current_liability', - balance_sheet: true, - income_sheet: false, - }, + ...AccountsTypesData ]); }; - exports.down = function(knex) { } \ No newline at end of file diff --git a/server/src/database/seeds/core/20190423085242_seed_accounts.js b/server/src/database/seeds/core/20190423085242_seed_accounts.js index 270ad5504..6d0f86b95 100644 --- a/server/src/database/seeds/core/20190423085242_seed_accounts.js +++ b/server/src/database/seeds/core/20190423085242_seed_accounts.js @@ -1,179 +1,32 @@ import Container from 'typedi'; +import { get } from 'lodash'; import TenancyService from 'services/Tenancy/TenancyService' +import AccountsData from '../data/accounts'; + exports.up = function (knex) { const tenancyService = Container.get(TenancyService); const i18n = tenancyService.i18n(knex.userParams.tenantId); - return knex('accounts').then(() => { - // Inserts seed entries - return knex('accounts').insert([ - { - id: 1, - name: i18n.__('Petty Cash'), - slug: 'petty-cash', - account_type_id: 2, - parent_account_id: null, - code: '1000', - description: '', + const accountMapper = (account) => { + return knex('account_types').where('key', account.account_type).first() + .then((accountType) => ({ + name: i18n.__(account.name), + slug: account.slug, + account_type_id: get(accountType, 'id', null), + code: account.code, + description: i18n.__(account.description), active: 1, index: 1, - predefined: 1, - }, - { - id: 2, - name: i18n.__('Bank'), - slug: 'bank', - account_type_id: 2, - parent_account_id: null, - code: '2000', - description: '', - active: 1, - index: 1, - predefined: 1, - }, - { - id: 3, - name: i18n.__('Other Income'), - slug: 'other-income', - account_type_id: 7, - parent_account_id: null, - code: '1000', - description: '', - active: 1, - index: 1, - predefined: 1, - }, - { - id: 4, - name: i18n.__('Interest Income'), - slug: 'interest-income', - account_type_id: 7, - parent_account_id: null, - code: '1000', - description: '', - active: 1, - index: 1, - predefined: 1, - }, - { - id: 5, - name: i18n.__('Opening Balance'), - slug: 'opening-balance', - account_type_id: 5, - parent_account_id: null, - code: '1000', - description: '', - active: 1, - index: 1, - predefined: 1, - }, - { - id: 6, - name: i18n.__('Depreciation Expense'), - slug: 'depreciation-expense', - account_type_id: 6, - parent_account_id: null, - code: '1000', - description: '', - active: 1, - index: 1, - predefined: 1, - }, - { - id: 7, - name: i18n.__('Interest Expense'), - slug: 'interest-expense', - account_type_id: 6, - parent_account_id: null, - code: '1000', - description: '', - active: 1, - index: 1, - predefined: 1, - }, - { - id: 8, - name: i18n.__('Payroll Expenses'), - slug: 'payroll-expenses', - account_type_id: 6, - parent_account_id: null, - code: '1000', - description: '', - active: 1, - index: 1, - predefined: 1, - }, - { - id: 9, - name: i18n.__('Other Expenses'), - slug: 'other-expenses', - account_type_id: 6, - parent_account_id: null, - code: '1000', - description: '', - active: 1, - index: 1, - predefined: 1, - }, - { - id: 10, - name: i18n.__('Accounts Receivable'), - slug: 'accounts-receivable', - account_type_id: 8, - parent_account_id: null, - code: '1000', - description: '', - active: 1, - index: 1, - predefined: 1, - }, - { - id: 11, - name: i18n.__('Accounts Payable'), - slug: 'accounts-payable', - account_type_id: 9, - parent_account_id: null, - code: '1000', - description: '', - active: 1, - index: 1, - predefined: 1, - }, - { - id: 12, - name: i18n.__('Cost of Goods Sold (COGS)'), - slug: 'cost-of-goods-sold', - account_type_id: 12, - predefined: 1, - parent_account_id: null, - index: 1, - active: 1, - description: 1, - }, - { - id: 13, - name: i18n.__('Inventory Asset'), - slug: 'inventory-asset', - account_type_id: 14, - predefined: 1, - parent_account_id: null, - index: 1, - active: 1, - description: '', - }, - { - id: 14, - name: i18n.__('Sales of Product Income'), - slug: 'sales-of-product-income', - account_type_id: 7, - predefined: 1, - parent_account_id: null, - index: 1, - active: 1, - description: '', - } - ]); + predefined: account.predefined, + })); + }; + return knex('accounts').then(async () => { + const accountsPromises = AccountsData.map(accountMapper); + const accounts = await Promise.all(accountsPromises); + + // Inserts seed entries. + return knex('accounts').insert([ ...accounts ]); }); }; diff --git a/server/src/database/seeds/data/accounts.js b/server/src/database/seeds/data/accounts.js new file mode 100644 index 000000000..2f61ad79a --- /dev/null +++ b/server/src/database/seeds/data/accounts.js @@ -0,0 +1,318 @@ + +export default [ + { + name:'Bank Account', + slug: 'bank-account', + account_type: 'bank', + code: '10001', + description: '', + active: 1, + index: 1, + predefined: 1, + }, + { + name:'Saving Bank Account', + slug: 'saving-bank-account', + account_type: 'bank', + code: '10002', + description: '', + active: 1, + index: 1, + predefined: 0, + }, + { + name:'Undeposited Funds', + slug: 'undeposited-funds', + account_type: 'cash', + code: '10003', + description: '', + active: 1, + index: 1, + predefined: 1, + }, + { + name:'Petty Cash', + slug: 'petty-cash', + account_type: 'cash', + code: '10004', + description: '', + active: 1, + index: 1, + predefined: 1, + }, + { + name:'Computer Equipment', + slug: 'computer-equipment', + code: '10005', + account_type: 'fixed_asset', + predefined: 0, + parent_account_id: null, + index: 1, + active: 1, + description: '', + }, + { + name:'Office Equipment', + slug: 'office-equipment', + code: '10006', + account_type: 'fixed_asset', + predefined: 0, + parent_account_id: null, + index: 1, + active: 1, + description: '', + }, + { + name:'Accounts Receivable (A/R)', + slug: 'accounts-receivable', + account_type: 'accounts_receivable', + code: '10007', + description: '', + active: 1, + index: 1, + predefined: 1, + }, + { + name:'Inventory Asset', + slug: 'inventory-asset', + code: '10008', + account_type: 'inventory', + predefined: 1, + parent_account_id: null, + index: 1, + active: 1, + description:'An account that holds valuation of products or goods that availiable for sale.', + }, + + // Libilities + { + name:'Accounts Payable (A/P)', + slug: 'accounts-payable', + account_type: 'accounts_payable', + parent_account_id: null, + code: '20001', + description: '', + active: 1, + index: 1, + predefined: 1, + }, + { + name:'Owner A Drawings', + slug: 'owner-drawings', + account_type: 'other_current_liability', + parent_account_id: null, + code: '20002', + description:'Withdrawals by the owners.', + active: 1, + index: 1, + predefined: 0, + }, + { + name:'Loan', + slug: 'owner-drawings', + account_type: 'other_current_liability', + code: '20003', + description:'Money that has been borrowed from a creditor.', + active: 1, + index: 1, + predefined: 0, + }, + { + name:'Opening Balance Adjustments', + slug: 'opening-balance-adjustments', + account_type: 'other_current_liability', + code: '20004', + description:'This account will hold the difference in the debits and credits entered during the opening balance..', + active: 1, + index: 1, + predefined: 0, + }, + { + name:'Revenue Received in Advance', + slug: 'Revenue-received-in-advance', + account_type: 'other_current_liability', + parent_account_id: null, + code: '20005', + description: 'When customers pay in advance for products/services.', + active: 1, + index: 1, + predefined: 0, + }, + { + name:'Sales Tax Payable', + slug: 'owner-drawings', + account_type: 'tax_payable', + code: '20006', + description: '', + active: 1, + index: 1, + predefined: 1, + }, + + // Equity + { + name:'Retained Earnings', + slug: 'retained-earnings', + account_type: 'equity', + code: '30001', + description:'Retained earnings tracks net income from previous fiscal years.', + active: 1, + index: 1, + predefined: 1, + }, + { + name:'Opening Balance Equity', + slug: 'opening-balance-equity', + account_type: 'equity', + code: '30002', + description:'When you enter opening balances to the accounts, the amounts enter in Opening balance equity. This ensures that you have a correct trial balance sheet for your company, without even specific the second credit or debit entry.', + active: 1, + index: 1, + predefined: 1, + }, + { + name: "Owner's Equity", + slug: 'owner-equity', + account_type: 'equity', + code: '30003', + description: '', + active: 1, + index: 1, + predefined: 1, + }, + { + name:`Drawings`, + slug: 'drawings', + account_type: 'equity', + code: '30003', + description:'Goods purchased with the intention of selling these to customers', + active: 1, + index: 1, + predefined: 1, + }, + + // Expenses + { + name:'Uncategorized Expenses', + slug: 'uncategorized-expense', + account_type: 'expense', + parent_account_id: null, + code: '40001', + description: '', + active: 1, + index: 1, + predefined: 1, + }, + { + name:'Cost of Goods Sold', + slug: 'cost-of-goods-sold', + account_type: 'cost_of_goods_sold', + parent_account_id: null, + code: '40002', + description:'Tracks the direct cost of the goods sold.', + active: 1, + index: 1, + predefined: 1, + }, + { + name:'Office expenses', + slug: 'office-expenses', + account_type: 'expense', + parent_account_id: null, + code: '40003', + description: '', + active: 1, + index: 1, + predefined: 0, + }, + { + name:'Rent', + slug: 'rent', + account_type: 'expense', + parent_account_id: null, + code: '40004', + description: '', + active: 1, + index: 1, + predefined: 0, + }, + { + name:'Exchange Gain or Loss', + slug: 'exchange-grain-loss', + account_type: 'other_expense', + parent_account_id: null, + code: '40005', + description:'Tracks the gain and losses of the exchange differences.', + active: 1, + index: 1, + predefined: 1, + }, + { + name:'Bank Fees and Charges', + slug: 'bank-fees-and-charges', + account_type: 'expense', + parent_account_id: null, + code: '40006', + description: 'Any bank fees levied is recorded into the bank fees and charges account. A bank account maintenance fee, transaction charges, a late payment fee are some examples.', + active: 1, + index: 1, + predefined: 0, + }, + { + name:'Depreciation Expense', + slug: 'depreciation-expense', + account_type: 'expense', + parent_account_id: null, + code: '40007', + description: '', + active: 1, + index: 1, + predefined: 0, + }, + + // Income + { + name:'Sales of Product Income', + slug: 'sales-of-product-income', + account_type: 'income', + predefined: 1, + parent_account_id: null, + code: '50001', + index: 1, + active: 1, + description: '', + }, + { + name:'Sales of Service Income', + slug: 'sales-of-service-income', + account_type: 'income', + predefined: 0, + parent_account_id: null, + code: '50002', + index: 1, + active: 1, + description: '', + }, + { + name:'Uncategorized Income', + slug: 'uncategorized-income', + account_type: 'income', + parent_account_id: null, + code: '50003', + description: '', + active: 1, + index: 1, + predefined: 1, + }, + { + name:'Other Income', + slug: 'other-income', + account_type: 'other_income', + parent_account_id: null, + code: '50004', + description:'The income activities are not associated to the core business.', + active: 1, + index: 1, + predefined: 0, + } +]; \ No newline at end of file diff --git a/server/src/database/seeds/data/accounts_types.js b/server/src/database/seeds/data/accounts_types.js new file mode 100644 index 000000000..11c2a5f13 --- /dev/null +++ b/server/src/database/seeds/data/accounts_types.js @@ -0,0 +1,147 @@ + + +export default [ + { + key: 'cash', + normal: 'debit', + child_type: 'current_asset', + root_type: 'asset', + balance_sheet: true, + income_sheet: false, + }, + { + key: 'bank', + normal: 'debit', + child_type: 'current_asset', + root_type: 'asset', + balance_sheet: true, + income_sheet: false, + }, + { + key: 'accounts_receivable', + normal: 'debit', + root_type: 'asset', + child_type: 'current_asset', + balance_sheet: true, + income_sheet: false, + }, + { + key: 'inventory', + normal: 'debit', + root_type: 'asset', + child_type: 'current_asset', + balance_sheet: true, + income_sheet: false, + }, + { + key: 'other_current_asset', + normal: 'debit', + root_type: 'asset', + child_type: 'current_asset', + balance_sheet: true, + income_sheet: false, + }, + { + key: 'fixed_asset', + normal: 'debit', + root_type: 'asset', + child_type: 'fixed_asset', + balance_sheet: true, + income_sheet: false, + }, + { + key: 'non_current_asset', + normal: 'debit', + root_type: 'asset', + child_type: 'non_current_asset', + balance_sheet: true, + income_sheet: false, + }, + { + key: 'accounts_payable', + normal: 'credit', + root_type: 'liability', + child_type: 'current_liability', + balance_sheet: true, + income_sheet: false, + }, + { + key: 'credit_card', + normal: 'credit', + root_type: 'liability', + child_type: 'current_liability', + balance_sheet: true, + income_sheet: false, + }, + { + key: 'tax_payable', + normal: 'credit', + root_type: 'liability', + child_type: 'current_liability', + balance_sheet: true, + income_sheet: false, + }, + { + key: 'long_term_liability', + normal: 'credit', + root_type: 'liability', + child_type: 'long_term_liability', + balance_sheet: false, + income_sheet: true, + }, + { + key: 'other_current_liability', + normal: 'credit', + root_type: 'liability', + child_type: 'current_liability', + balance_sheet: false, + income_sheet: true, + }, + { + key: 'equity', + normal: 'credit', + root_type: 'equity', + child_type: 'equity', + balance_sheet: true, + income_sheet: false, + }, + { + key: 'income', + normal: 'credit', + root_type: 'income', + child_type: 'income', + balance_sheet: false, + income_sheet: true, + }, + { + key: 'other_income', + normal: 'credit', + root_type: 'income', + child_type: 'other_income', + balance_sheet: false, + income_sheet: true, + }, + { + key: 'cost_of_goods_sold', + normal: 'debit', + root_type: 'expenses', + child_type: 'expenses', + balance_sheet: false, + income_sheet: true, + }, + { + key: 'expense', + normal: 'debit', + root_type: 'expense', + child_type: 'expense', + balance_sheet: false, + income_sheet: true, + }, + { + key: 'other_expense', + normal: 'debit', + root_type: 'expense', + balance_sheet: false, + income_sheet: true, + }, +]; \ No newline at end of file diff --git a/server/src/models/AccountType.js b/server/src/models/AccountType.js index b57c17ec8..452ac71d9 100644 --- a/server/src/models/AccountType.js +++ b/server/src/models/AccountType.js @@ -57,20 +57,24 @@ export default class AccountType extends TenantModel { */ static get labels() { return { + inventory: 'Inventory', + other_current_asset: 'Other current asset', + bank: 'Bank account', + cash: 'Cash', fixed_asset: 'Fixed asset', - current_asset: "Current asset", - long_term_liability: "Long term liability", - current_liability: "Current liability", + non_current_asset: 'Non-current asset', + accounts_payable: 'Accounts payable (A/P)', + accounts_receivable: 'Accounts receivable (A/R)', + credit_card: 'Credit card', + long_term_liability: 'Long term liability', + other_current_liability: 'Other current liability', + other_liability: 'Other liability', equity: "Equity", expense: "Expense", income: "Income", - accounts_receivable: "Accounts receivable", - accounts_payable: "Accounts payable", - other_expense: "Other expense", other_income: "Other income", + other_expense: "Other expense", cost_of_goods_sold: "Cost of goods sold (COGS)", - other_liability: "Other liability", - other_asset: 'Other asset', }; } }