diff --git a/_static/chart-of-accounts.js b/_static/chart-of-accounts.js index 63e6e80bf..b4f1cdf51 100644 --- a/_static/chart-of-accounts.js +++ b/_static/chart-of-accounts.js @@ -144,26 +144,35 @@ var ASSETS = { code: 1, label: "Assets", - CASH: { code: 10100, label: "Cash" }, - ACCOUNTS_RECEIVABLE: { code: 12100, label: "Accounts Receivable" } + CASH: { code: 10000, label: "Cash" }, + ACCOUNTS_RECEIVABLE: { code: 12000, label: "Accounts Receivable" }, + BUILDINGS: { code: 17100, label: "Buildings" }, + DEPRECIATION: { code: 18100, label: "Accumulated Depreciation" } }; var LIABILITIES = { code: 2, label: "Liabilities", + NOTES_PAYABLE: { code: 20100, label: "Notes Payable" }, ACCOUNTS_PAYABLE: { code: 21000, label: "Accounts Payable" }, - TAXES_PAYABLE: { code: 23100, label: "Taxes Payable" } + TAXES_PAYABLE: { code: 24000, label: "Taxes Payable" } + }; + var EQUITY = { + code: 3, + label: "Equity", + CAPITAL: { code: 30000, label: "Owner's Capital" } }; var REVENUE = { code: 4, label: "Revenue", - SALES: { code: 40100, label: "Sales" } + SALES: { code: 40000, label: "Sales" } }; var EXPENSES = { code: 5, label: "Expenses", - PURCHASES: { code: 50100, label: "Purchases" } + PURCHASES: { code: 50000, label: "Purchases" }, + DEPRECIATION: { code: 58100, label: "Depreciation Expenses" } }; - var categories = Immutable.fromJS([ASSETS, LIABILITIES, REVENUE, EXPENSES]); + var categories = Immutable.fromJS([ASSETS, LIABILITIES, EQUITY, REVENUE, EXPENSES]); var accounts = categories.toSeq().flatMap(function (cat) { return Immutable.Seq.of(cat.set('level', 0)).concat(cat.filter(function (v, k) { return k.toUpperCase() === k; @@ -185,17 +194,23 @@ refund = sale * 0.1, purchase = 80; var operations = Immutable.fromJS([{ + label: "Company Incorporation (Initial Capital $1,000)", + operations: [ + {account: ASSETS.CASH.code, debit: constant(1000)}, + {account: EQUITY.CAPITAL.code, credit: constant(1000)} + ] + }, { label: "Customer Invoice ($100 + 9% tax)", operations: [ - {account: ASSETS.ACCOUNTS_RECEIVABLE.code, debit: function () { return total; }}, - {account: REVENUE.SALES.code, credit: function () { return sale; }}, - {account: LIABILITIES.TAXES_PAYABLE.code, credit: function () { return tax; }} + {account: ASSETS.ACCOUNTS_RECEIVABLE.code, debit: constant(total)}, + {account: REVENUE.SALES.code, credit: constant(sale)}, + {account: LIABILITIES.TAXES_PAYABLE.code, credit: constant(tax)} ] }, { label: "Customer Refund 10%", operations: [ - {account: REVENUE.SALES.code, debit: function () { return refund; }}, - {account: ASSETS.ACCOUNTS_RECEIVABLE.code, credit: function () { return refund; }} + {account: REVENUE.SALES.code, debit: constant(refund)}, + {account: ASSETS.ACCOUNTS_RECEIVABLE.code, credit: constant(refund)} ] }, { label: "Customer Payment", @@ -212,23 +227,37 @@ }} ] }, { - label: "Supplier Invoice", + label: "Supplier Bill", operations: [ - {account: EXPENSES.PURCHASES.code, debit: function () { return purchase; }}, - {account: LIABILITIES.ACCOUNTS_PAYABLE.code, credit: function () { return purchase; }} + {account: EXPENSES.PURCHASES.code, debit: constant(purchase)}, + {account: LIABILITIES.ACCOUNTS_PAYABLE.code, credit: constant(purchase)} ] }, { - label: "Supplier Invoice Paid", + label: "Supplier Bill Paid", operations: [ - {account: LIABILITIES.ACCOUNTS_PAYABLE.code, debit: function () { return purchase; }}, - {account: ASSETS.CASH.code, credit: function () { return purchase; }} + {account: LIABILITIES.ACCOUNTS_PAYABLE.code, debit: constant(purchase)}, + {account: ASSETS.CASH.code, credit: constant(purchase)} + ] + }, { + label: "Buy and pay a building (an asset)", + operations: [ + {account: ASSETS.BUILDINGS.code, debit: constant(3000)}, + {account: LIABILITIES.NOTES_PAYABLE.code, credit: constant(2500)}, + {account: ASSETS.CASH.code, credit: constant(500)} + ] + }, { + label: "Yearly Asset Depreciation (10% per year)", + operations: [ + {account: EXPENSES.DEPRECIATION.code, debit: constant(300)}, + {account: ASSETS.DEPRECIATION.code, credit: constant(300)} ] }, { label: "Pay Taxes Due", operations: [ - {account: LIABILITIES.TAXES_PAYABLE.code, debit: function () { return tax; }}, - {account: ASSETS.CASH.code, credit: function () { return tax; }} + {account: LIABILITIES.TAXES_PAYABLE.code, debit: constant(tax)}, + {account: ASSETS.CASH.code, credit: constant(tax)} ] } ]); + function constant(val) {return function () { return val; };} })(); diff --git a/_static/entries.js b/_static/entries.js index bd0df866f..58a94be0f 100644 --- a/_static/entries.js +++ b/_static/entries.js @@ -25,19 +25,23 @@ return React.DOM.div( null, "Example journal entries: ", - React.DOM.select( - { - value: entries.indexOf(this.props.entry), - onChange: function (e) { - data.reset(entries.get(e.target.value)); - } - }, - entries.map(function (entry, index) { - return React.DOM.option( - {key: index, value: index}, - entry.get('title') - ); - }).toArray()), + entries.map(function (entry, index) { + return React.DOM.label( + { + key: index, + style: { display: 'block' }, + }, + React.DOM.input({ + type: 'radio', + checked: Immutable.is(entry, this.props.entry), + onChange: function (e) { + data.reset(entry); + } + }), + ' ', + entry.get('title') + ); + }, this).toArray(), this.props.entry && React.DOM.p(null, this.props.entry.get('help')) ); } @@ -89,13 +93,13 @@ {account: 'Common Stock', credit: 10000} ] }, { - title: "Buy work tooling", + title: "Buy work tooling (immediate cash payment)", operations: [ {account: 'Tooling', debit: 3000}, {account: 'Cash', credit: 3000} ] }, { - title: "Buy work tooling (invoiced)", + title: "Buy work tooling (invoiced, to pay later)", operations: [ {account: 'Tooling', debit: 3000}, {account: 'Accounts Payable', credit: 3000} diff --git a/_themes/odoodoc/static/style.css b/_themes/odoodoc/static/style.css index 985c9d1dd..7ca2b0264 100644 --- a/_themes/odoodoc/static/style.css +++ b/_themes/odoodoc/static/style.css @@ -6609,6 +6609,9 @@ body { dt:hover > a > .viewcode-link { display: inline; } +blockquote.highlights { + border: none; +} div.section > h1 { padding-bottom: 9px; margin: 40px 0 20px; @@ -6822,7 +6825,7 @@ td.field-body > ul { padding-right: 1em; } .stripe .section:not(.force-right) > .force-right, - .stripe .section:not(.force-right) > [class*=highlight] { + .stripe .section:not(.force-right) > [class*=highlight-] { float: none; clear: none; margin-left: 50%; @@ -6830,31 +6833,31 @@ td.field-body > ul { color: #eeeeee; } .stripe .section:not(.force-right) > .force-right legend, - .stripe .section:not(.force-right) > [class*=highlight] legend { + .stripe .section:not(.force-right) > [class*=highlight-] legend { color: inherit; } .stripe .section:not(.force-right) > .force-right input, - .stripe .section:not(.force-right) > [class*=highlight] input { + .stripe .section:not(.force-right) > [class*=highlight-] input { color: inherit; background-color: #555555; } .stripe .section:not(.force-right) > .force-right a, - .stripe .section:not(.force-right) > [class*=highlight] a { + .stripe .section:not(.force-right) > [class*=highlight-] a { color: #d9a8cc; } .stripe .section:not(.force-right) > .force-right code, - .stripe .section:not(.force-right) > [class*=highlight] code, + .stripe .section:not(.force-right) > [class*=highlight-] code, .stripe .section:not(.force-right) > .force-right .literal, - .stripe .section:not(.force-right) > [class*=highlight] .literal { + .stripe .section:not(.force-right) > [class*=highlight-] .literal { color: #f9f2f4; background-color: #555555; } .stripe .section:not(.force-right) > .force-right:not(.highlight-json) .highlight, - .stripe .section:not(.force-right) > [class*=highlight]:not(.highlight-json) .highlight { + .stripe .section:not(.force-right) > [class*=highlight-]:not(.highlight-json) .highlight { border-bottom-color: #777777; } .stripe .section:not(.force-right) > .force-right.admonition, - .stripe .section:not(.force-right) > [class*=highlight].admonition { + .stripe .section:not(.force-right) > [class*=highlight-].admonition { margin-left: 51%; width: 49%; border-top-color: #777777; @@ -6862,7 +6865,7 @@ td.field-body > ul { border-right-color: #777777; } .stripe .section:not(.force-right) > .force-right .highlight, - .stripe .section:not(.force-right) > [class*=highlight] .highlight { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight { border-color: #555555; border-style: solid; border-width: 1px 0; @@ -6940,281 +6943,281 @@ td.field-body > ul { /* Literal.Number.Integer.Long */ } .stripe .section:not(.force-right) > .force-right .highlight .lineno, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .lineno { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .lineno { color: #586e75; } .stripe .section:not(.force-right) > .force-right .highlight .c, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .c { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .c { color: #586e75; } .stripe .section:not(.force-right) > .force-right .highlight .err, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .err { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .err { color: #cccccc; } .stripe .section:not(.force-right) > .force-right .highlight .g, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .g { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .g { color: #cccccc; } .stripe .section:not(.force-right) > .force-right .highlight .k, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .k { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .k { color: #859900; } .stripe .section:not(.force-right) > .force-right .highlight .l, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .l { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .l { color: #cccccc; } .stripe .section:not(.force-right) > .force-right .highlight .n, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .n { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .n { color: #cccccc; } .stripe .section:not(.force-right) > .force-right .highlight .o, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .o { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .o { color: #859900; } .stripe .section:not(.force-right) > .force-right .highlight .x, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .x { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .x { color: #cb4b16; } .stripe .section:not(.force-right) > .force-right .highlight .p, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .p { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .p { color: #cccccc; } .stripe .section:not(.force-right) > .force-right .highlight .cm, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .cm { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .cm { color: #586e75; } .stripe .section:not(.force-right) > .force-right .highlight .cp, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .cp { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .cp { color: #859900; } .stripe .section:not(.force-right) > .force-right .highlight .c1, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .c1 { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .c1 { color: #586e75; } .stripe .section:not(.force-right) > .force-right .highlight .cs, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .cs { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .cs { color: #859900; } .stripe .section:not(.force-right) > .force-right .highlight .gd, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .gd { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .gd { color: #2aa198; } .stripe .section:not(.force-right) > .force-right .highlight .ge, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .ge { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .ge { color: #cccccc; font-style: italic; } .stripe .section:not(.force-right) > .force-right .highlight .gr, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .gr { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .gr { color: #dc322f; } .stripe .section:not(.force-right) > .force-right .highlight .gh, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .gh { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .gh { color: #cb4b16; } .stripe .section:not(.force-right) > .force-right .highlight .gi, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .gi { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .gi { color: #859900; } .stripe .section:not(.force-right) > .force-right .highlight .go, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .go { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .go { color: #cccccc; } .stripe .section:not(.force-right) > .force-right .highlight .gp, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .gp { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .gp { color: #cccccc; } .stripe .section:not(.force-right) > .force-right .highlight .gs, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .gs { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .gs { color: #cccccc; font-weight: bold; } .stripe .section:not(.force-right) > .force-right .highlight .gu, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .gu { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .gu { color: #cb4b16; } .stripe .section:not(.force-right) > .force-right .highlight .gt, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .gt { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .gt { color: #cccccc; } .stripe .section:not(.force-right) > .force-right .highlight .kc, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .kc { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .kc { color: #cb4b16; } .stripe .section:not(.force-right) > .force-right .highlight .kd, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .kd { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .kd { color: #268bd2; } .stripe .section:not(.force-right) > .force-right .highlight .kn, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .kn { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .kn { color: #859900; } .stripe .section:not(.force-right) > .force-right .highlight .kp, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .kp { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .kp { color: #859900; } .stripe .section:not(.force-right) > .force-right .highlight .kr, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .kr { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .kr { color: #268bd2; } .stripe .section:not(.force-right) > .force-right .highlight .kt, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .kt { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .kt { color: #dc322f; } .stripe .section:not(.force-right) > .force-right .highlight .ld, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .ld { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .ld { color: #cccccc; } .stripe .section:not(.force-right) > .force-right .highlight .m, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .m { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .m { color: #2aa198; } .stripe .section:not(.force-right) > .force-right .highlight .s, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .s { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .s { color: #2aa198; } .stripe .section:not(.force-right) > .force-right .highlight .na, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .na { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .na { color: #cccccc; } .stripe .section:not(.force-right) > .force-right .highlight .nb, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .nb { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .nb { color: #b58900; } .stripe .section:not(.force-right) > .force-right .highlight .nc, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .nc { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .nc { color: #268bd2; } .stripe .section:not(.force-right) > .force-right .highlight .no, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .no { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .no { color: #cb4b16; } .stripe .section:not(.force-right) > .force-right .highlight .nd, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .nd { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .nd { color: #268bd2; } .stripe .section:not(.force-right) > .force-right .highlight .ni, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .ni { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .ni { color: #cb4b16; } .stripe .section:not(.force-right) > .force-right .highlight .ne, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .ne { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .ne { color: #cb4b16; } .stripe .section:not(.force-right) > .force-right .highlight .nf, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .nf { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .nf { color: #268bd2; } .stripe .section:not(.force-right) > .force-right .highlight .nl, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .nl { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .nl { color: #cccccc; } .stripe .section:not(.force-right) > .force-right .highlight .nn, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .nn { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .nn { color: #cccccc; } .stripe .section:not(.force-right) > .force-right .highlight .nx, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .nx { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .nx { color: #cccccc; } .stripe .section:not(.force-right) > .force-right .highlight .py, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .py { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .py { color: #cccccc; } .stripe .section:not(.force-right) > .force-right .highlight .nt, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .nt { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .nt { color: #268bd2; } .stripe .section:not(.force-right) > .force-right .highlight .nv, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .nv { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .nv { color: #268bd2; } .stripe .section:not(.force-right) > .force-right .highlight .ow, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .ow { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .ow { color: #859900; } .stripe .section:not(.force-right) > .force-right .highlight .w, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .w { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .w { color: #cccccc; } .stripe .section:not(.force-right) > .force-right .highlight .mf, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .mf { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .mf { color: #2aa198; } .stripe .section:not(.force-right) > .force-right .highlight .mh, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .mh { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .mh { color: #2aa198; } .stripe .section:not(.force-right) > .force-right .highlight .mi, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .mi { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .mi { color: #2aa198; } .stripe .section:not(.force-right) > .force-right .highlight .mo, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .mo { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .mo { color: #2aa198; } .stripe .section:not(.force-right) > .force-right .highlight .sb, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .sb { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .sb { color: #586e75; } .stripe .section:not(.force-right) > .force-right .highlight .sc, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .sc { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .sc { color: #2aa198; } .stripe .section:not(.force-right) > .force-right .highlight .sd, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .sd { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .sd { color: #cccccc; } .stripe .section:not(.force-right) > .force-right .highlight .s2, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .s2 { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .s2 { color: #2aa198; } .stripe .section:not(.force-right) > .force-right .highlight .se, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .se { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .se { color: #cb4b16; } .stripe .section:not(.force-right) > .force-right .highlight .sh, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .sh { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .sh { color: #cccccc; } .stripe .section:not(.force-right) > .force-right .highlight .si, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .si { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .si { color: #2aa198; } .stripe .section:not(.force-right) > .force-right .highlight .sx, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .sx { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .sx { color: #2aa198; } .stripe .section:not(.force-right) > .force-right .highlight .sr, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .sr { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .sr { color: #dc322f; } .stripe .section:not(.force-right) > .force-right .highlight .s1, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .s1 { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .s1 { color: #2aa198; } .stripe .section:not(.force-right) > .force-right .highlight .ss, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .ss { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .ss { color: #2aa198; } .stripe .section:not(.force-right) > .force-right .highlight .bp, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .bp { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .bp { color: #268bd2; } .stripe .section:not(.force-right) > .force-right .highlight .vc, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .vc { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .vc { color: #268bd2; } .stripe .section:not(.force-right) > .force-right .highlight .vg, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .vg { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .vg { color: #268bd2; } .stripe .section:not(.force-right) > .force-right .highlight .vi, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .vi { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .vi { color: #268bd2; } .stripe .section:not(.force-right) > .force-right .highlight .il, - .stripe .section:not(.force-right) > [class*=highlight] .highlight .il { + .stripe .section:not(.force-right) > [class*=highlight-] .highlight .il { color: #2aa198; } .stripe .body > .section > .section { diff --git a/_themes/odoodoc/static/style.less b/_themes/odoodoc/static/style.less index bea588932..d0c24c6f6 100644 --- a/_themes/odoodoc/static/style.less +++ b/_themes/odoodoc/static/style.less @@ -393,6 +393,9 @@ dt:hover > a > .viewcode-link { // either that or overwrite visit_attribution/depart_attribution blockquote p.attribution:extend(blockquote footer) {} +blockquote.highlights { + border: none; +} div.section > h1 { .page-header(); @@ -622,7 +625,7 @@ td.field-body { padding-right: 1em; } .section:not(.force-right) > .force-right, - .section:not(.force-right) > [class*=highlight] { + .section:not(.force-right) > [class*=highlight-] { float: none; clear: none; margin-left: 50%; diff --git a/images/accounts.png b/images/accounts.png deleted file mode 100644 index 820f519f3..000000000 Binary files a/images/accounts.png and /dev/null differ diff --git a/index.rst b/index.rst index f3e0598b8..821e833f2 100644 --- a/index.rst +++ b/index.rst @@ -1,143 +1,142 @@ :classes: stripe -========================================== -Understanding Accounting For Entrepreneurs -========================================== - -Financial accounting is used to know the situation of a company (its balance -sheet) and its performance (Profit and Loss, P&L). It is set up by reporting -every financial transaction in the relevant accounts of a Chart of Accounts. +==================================== +Accounting Memento For Entrepreneurs +==================================== .. rst-class:: intro-list * .. rst-class:: intro-p-l - **P&L** is always analysed on a specific period rather than since the - company's founding (e.g. 2014, Q3 2012, …). + The **Profit and Loss** (P&L) report shows the performance of the company + over a specific period (usually the current year). * .. rst-class:: intro-gross-profit - **Gross profits** is revenues (sales, interest, royalties) minus cost of - goods sold (raw materials, storage costs, production labor costs). + The **Gross Profit** equals the revenues from sales minus the cost of goods + sold. * .. rst-class:: intro-opex - **Operating expenses** include administration, sales and R&D salaries as - well as rent and utilities, legal costs, insurance, ... anything beyond - fabrication itself. + **Operating Expenses** (OPEX) include admininstration, sales and R&D + salaries as well as rent and utilities, miscellaneous costs, insurances, … + anything beyond the costs of products sold. * .. rst-class:: intro-balance - The **Balance sheet** is a snapshot of the situation at a specific moment, - listing the company's assets and its liabilities at that point. + The **Balance Sheet** is a snapshot of the company's finances at a specific + date (as opposed to the Profit and Loss which is an analysis over a period) * .. rst-class:: intro-assets - **Assets** represent the company's wealth. A person's assets would be a - house or car ("fixed" or "tangible" assets), bank accounts or cash ("liquid" - or "current" assets). For a company, a client owing money is an asset. An - employee is not an asset as it is not owned by the company (slavery being - illegal under the International Covenant on Civil and Political Rights's - article 8). + **Assets** represent the company's wealth, things it owns. Fixed assets + includes building and offices, current assets include bank accounts and + cash. A client owing money is an asset. An employee is not an asset. * .. rst-class:: intro-liabilities **Liabilities** are obligations from past events resulting in future use or - transfer of current assets (utility bills, debts, payroll, unpaid - suppliers). + transfer of current assets (utility bills, debts, unpaid suppliers). * .. rst-class:: intro-equity - **Equity** is assets which have no liability counterpart: shares, other - stocks and surplus. + **Equity** the amount of the funds contributed by the owners (founders or + shareholders) plus previously retained retained earnings (or losses). + +A difference is made between buying an assets (e.g. a building) and expenses +(e.g. fuel). Assets have an intrinsic value over time, versus expenses having +value in them being consumed for the company to "work". Assets have necessarily been financed via liabilities or equity: a company can -buy work space through profits, borrowing money or injected capital (for -shares). +buy work space through profits, debts or injected capital (fund raising). -A difference is made between assets (e.g. a building) and expenses (e.g. fuel) -in assets having intrinsic value over time, versus expenses having value in -them being consumed for the company to "work". +.. highlights:: What is owned (assets) has been financed through debts to + reimburse (liabilities) or equity (profits, capital). -.. rst-class:: force-right accounts-table +.. h:div:: force-right accounts-table -.. figure:: images/accounts.png - :align: center - - Assets = Liabilities + Equity - - What is owned has been financed through debts to reimburse or acquired - assets (profits, capical). + .. placeholder Chart of Accounts ================= The **chart of accounts** lists all the accounts used by the company, whether -they are balance sheet accounts (assets and liabilities) or P&L accounts -(revenues and expenses), and provides their state at a given moment, generally -the current point of an ongoing financial period, or the state at the end of a -closed financial period. - -The accounts are used to organize and classify the finances of the company in -order to better understand its state and health, and the chart of accounts can -be used to get a snapshot of a company's financial period: because it includes -P&L, a chart of accounts is also generally viewed over a specific period. +they are balance sheet accounts or P&L accounts. Every financial transaction +(e.g. a payment, an invoice) impacts accounts by moving value from one account +(credit) to an other account (debit). .. rst-class:: force-right -Balance = debit - credit +Balance = Debit - Credit ------------------------ .. h:div:: chart-of-accounts - Requires javascript + .. placeholder Journal Entries =============== -The chart of accounts displays the state of the company at a given moment -("current" or over an accounting period). +Every financial document of the company (e.g. an invoice, a bank statement, a +pay slip, a capital increase contract) is recorded as a journal entry, +impacting several accounts. -This state is the effect of the company's financial operations (being paid for -services, paying rent, receiving interests, …). These transactions are -recorded as journal entries over the course of financial periods: - -Each *journal entry* is the interaction between at least two accounts (one -being debited and the other one credited). For a journal entry to be -*balanced*, the sum of all its debits must be equal to the sum of all its -credits. A journal entry almost always corresponds to a separate justifying -document (invoice, pay slip, …; financial audits may include matching entries -to the "hard" evidence of these documents). - -A journal entry is composed of multiple *journal items*. Journal items are -either a credit or a debit on a specific account, and journal entries are thus -composed of at least two items. +For a journal entry to be *balanced*, the sum of all its debits must be equal +to the sum of all its credits. Companies can triage entries in various journals based on their nature or context. Common journals are: -* a sales journal with all client transactions -* a purchase journal with all supplier transactions +* a sales journal with all customer invoices and refunds +* a purchase journal with all supplier bills * a bank journal for bank statements * a cash journal for cash operations .. h:div:: force-right journal-entries - examples of accounting entries for various transactions + examples of accounting entries for various transactions. Example: + + Example 1: Customer Invoice: + + Explanation: + + . You generate a revenue of $1,000 + . You have a tax to pay of $90 + . The customer owes $1,090 + + Configuration: + + . Income: defined on the product, or the product category + . Account Receivable: defined on the customer + . Tax: defined on the tax set on the invoice line + + The fiscal position used on the invoice may have a rule that + replaces the Income Account or the tax defined on the product by another + one. + + Example 2: Customer Payment: + + Explanation: + + . Your customer owes $1,090 less + . Your receive $1,090 on your bank account + + Configuration: + + . Bank Account: defined on the related bank journal + . Account Receivable: defined on the customer .. todo:: * help explaining what the operation is about? - * link to relevant Odoo operation? - + * use radio buttons instead of the selection box Reconciliation ============== At a financial level, journal entries (and the corresponding operations in a company's account) are independent from one another: the invoices a company -emits and the payments it receives are separate journal entries and the -account operations are not correlated. +emits and the payments it receives are separate journal entries. It's thus easy to know how much was sold (by tallying the income account) and how the company is still owed overall (receivables) but not how much a @@ -145,7 +144,7 @@ specific client owes or which specific invoices are still unpaid (in order to send reminders for instance). Reconciliation is the process of correlating and linking journal items, -matching the credits and debits of a specific financial account: +matching the credits and debits of a specific account: * within a single account, look for all non-reconciled items (usually with a specific second party, e.g. all operations on *Accounts Receivable* @@ -172,24 +171,29 @@ specific customer will result in: +-------------------------+-------------------------+-------------------------+ |Accounts Receivable |Debit |Credit | +=========================+=========================+=========================+ -|Invoice 1 |121 | | +|Invoice 1 |100 | | +-------------------------+-------------------------+-------------------------+ -|Payment 1 | |75 | +|Payment 1.1 | |70 | +-------------------------+-------------------------+-------------------------+ -|Payment 2 (partial) | |46 | +|Invoice 2 |65 | | +-------------------------+-------------------------+-------------------------+ -| | +|Payment 1.2 | |30 | +-------------------------+-------------------------+-------------------------+ -|Invoice 2 |63 | | +|Payment 2 | |65 | +-------------------------+-------------------------+-------------------------+ -|Payment 2 | |29 | +|Invoice 3 |50 | | +-------------------------+-------------------------+-------------------------+ -|Open Balance | |34 | +| | | | ++-------------------------+-------------------------+-------------------------+ +|Total To Pay |50 | | +-------------------------+-------------------------+-------------------------+ -The reconciliation process yields the first invoice being paid in full, but -the customer having "Invoice 2" still open (it has an open balance) and an -outstanding debt of 34€. +.. todo:: + + Add a button "Reconcile", when clicked: + + - slowly hide: Invoice 2, Payment 2 + - then, slowly hide: Invoice 1, Payment 1.1, Payment 1.2 Bank Reconciliation -------------------