Commit graph

375 commits

Author SHA1 Message Date
Brett Smith
c2851f5cc0 reports: URL-quote file links in spreadsheets. RT#12517
This was already done correctly in RT links because rtutil takes care of the
quoting. The fact that we weren't doing it for file links was an oversight.
2020-09-05 14:48:48 -04:00
Brett Smith
de10197af7 reports: Improve formatting of non-currency commodities.
Introduce the get_commodity_format() function, which returns Babel's
usual format string for currencies, but returns a version of it
"merged" with the locale's currency unit pattern for other
commodities.

BaseODS then calls this function where needed to format amounts.
2020-09-04 15:29:10 -04:00
Brett Smith
72f144e1ff extract_odf_links: Make "not found" warning easier to parse.
e.g., you can just use `grep | cut -b N-`.
2020-09-03 09:45:31 -04:00
Brett Smith
2eba5a5546 extract_odf_links: Add --relative-to option.
This is just too convenient for our usual case where we expect
all links to be relative to a specific directory (the repository).
2020-08-30 10:03:57 -04:00
Brett Smith
cf2d825a08 tests: Reorganize extract_odf_links tests for new feature. 2020-08-30 09:18:41 -04:00
Brett Smith
f3e577f0d5 rewrite: New module.
This module is intended to make bulk data changes to normalize
information across FYs for reporting.
2020-08-29 17:17:41 -04:00
Brett Smith
52adf1f0a5 data: Add PostingMeta.detached() method. 2020-08-29 10:26:21 -04:00
Brett Smith
4f223642ed reports: Refactor total styles to BaseODS. 2020-08-22 12:33:06 -04:00
Brett Smith
e8a754c387 ledger: Formatting modernizations.
* Equity sheet(s) report project.
* Headers include account classification.
* Bottom lines are formatted in the usual accounting way.
2020-08-22 12:31:44 -04:00
Brett Smith
58954aab23 fund: Text output readability improvements.
Make it look more like the spreadsheets:

* Don't normalize Expenses negative.

* Consistent account order: Income, then Expenses, then Equity.

* Include a bottom line divider for each fund.
2020-08-22 09:49:19 -04:00
Brett Smith
cc1767a09d fund: Incorporate Equity accounts into Release from Restrictions.
This matches what we do on our Statement of Activities in the
balance sheet report.
2020-08-22 09:25:53 -04:00
Brett Smith
95fb8ce481 meta_expense_type: Refine defaults.
* Default "management" for more accounts.

* There's a good handful of accounts where in past audits, the functional
  split has been "Conservancy expenses are management, project expenses are
  program." Handle those cases too.
2020-08-20 17:22:05 -04:00
Brett Smith
aa1f2ea35a balance_sheet: Balance.total() accepts multiple account names.
This simplifies the code to total all equity.
2020-08-18 01:28:37 -04:00
Brett Smith
e05f55659a balance_sheet: Balance only considers post_type for Expenses.
This simplifies the code and slightly optimizes it, since now Balance
won't store and keep re-summing income-type breakdowns that nothing
needs.
2020-08-18 01:28:37 -04:00
Brett Smith
29d4325c7a balance_sheet: Add activity report. 2020-08-17 15:26:55 -04:00
Brett Smith
a87d4bfc6c balance_sheet: Start report with financial position. RT#11854. 2020-08-17 10:34:38 -04:00
Brett Smith
385f5a20da extract_odf_links: Don't print document-internal links. 2020-08-10 11:36:51 -04:00
Brett Smith
ce067963dc tools: Add extract-odf-links. 2020-08-10 10:02:40 -04:00
Brett Smith
8597a526d7 cliutil: Use semi-standardized BSD exit codes. 2020-07-30 15:53:31 -04:00
Brett Smith
f56d89462a reports: Add common properties to all ODS reports. 2020-07-29 17:30:07 -04:00
Brett Smith
837fcec8f0 reports: Add BaseODS.set_common_properties() method. 2020-07-29 17:22:09 -04:00
Brett Smith
59b088b573 reports: Add BaseODS.set_properties() method. 2020-07-29 16:58:57 -04:00
Brett Smith
f9ea7edae3 config: Add Config.books_repo() method. 2020-07-29 15:46:14 -04:00
Brett Smith
680bb6e305 meta_tax_implication: Update values for TY2020 1099-MISC changes.
Support the new 1099-NEC form.
2020-07-28 16:41:34 -04:00
Brett Smith
123508ef88 expense_type: Revamp expense-allocation metadata.
* Change the name for symmetry with income-type.
* Standardize on "management" value because that's what it's called in the 990.
2020-07-28 11:46:00 -04:00
Brett Smith
a27d68beab cliutil: Add diff_year function. 2020-07-27 11:50:11 -04:00
Brett Smith
4615364538 cliutil: Add ReturnFlag.
Take this opportunity to re-standardize flag values now that it's clear
what's most common.
2020-07-27 10:54:04 -04:00
Brett Smith
46fe18809c ledger: Add transaction-level reports.
Mainly for the cash disbursements and receipts reports, which have dedicated
shortcuts.
2020-07-22 11:26:36 -04:00
Brett Smith
56114cc66e accrual: Support limited punctuation in payment-method. 2020-07-21 13:20:58 -04:00
Brett Smith
6c7603fa6c ledger: Add options to control account totals display. 2020-07-20 22:45:14 -04:00
Brett Smith
708d48699a accrual: Restore "since last nonzero" behavior to outgoing report.
Basically this behavior is an extension of the fact that the outgoing report
is grouped by RT ticket rather than "accrual data." Ripping this
functionality out of other reports was correct, but it needed to stay for
the outgoing report.
2020-07-20 15:13:20 -04:00
Brett Smith
52e7f3a221 ledger: Only display accounts requested with --account.
Now that we're accepting classifications, it's possible to specify account
options that select some but not all accounts at the same level of the
hierarchy. This commit tracks requested account names separately from sheet
names to do that correctly.
2020-07-20 13:13:22 -04:00
Brett Smith
aaa26e9e61 data: Make Account.iter_accounts() argument optional. 2020-07-20 11:22:23 -04:00
Brett Smith
4483d76999 data: Add Account.is_open_on_date() method. 2020-07-17 09:58:18 -04:00
Brett Smith
a0372d4b73 data: Add Account.keeps_balance() method. 2020-07-17 09:33:59 -04:00
Brett Smith
3f0b201d16 ledger: --account accepts a classification.
This makes it easier for users to specify a group of accounts.
2020-07-16 15:12:20 -04:00
Brett Smith
fd3bd68326 data: Add Account iteration methods. 2020-07-16 13:51:23 -04:00
Brett Smith
87e715df7c tests: Make clean_account_meta a teardown fixture. 2020-07-16 10:39:48 -04:00
Brett Smith
df0c3546fd data: Add Account.load_from_books convenience classmethod. 2020-07-16 10:39:31 -04:00
Brett Smith
fff9e37bf8 data: Add Account.is_account and Account.load_options_map.
These work in concert to distinguish account names from other
colon-separated strings.
2020-07-16 10:11:39 -04:00
Brett Smith
6a7815090c data: Add AccountMeta class. 2020-07-15 10:27:05 -04:00
Brett Smith
0e8745bf51 ledger: Include all fund accounts in default project ledger reports.
This brings the reporting into sync with the fund report.
2020-07-15 10:14:46 -04:00
Brett Smith
69d079190c tests: Test non-string values for payment-method metadata. 2020-07-02 13:08:21 -04:00
Brett Smith
a8a3f9d12b accrual: Better error handling and reporting around payment-method. 2020-07-02 10:56:51 -04:00
Brett Smith
b25bea0fc6 fund: Swap Unearned Income and Payable columns.
Unearned Income is more interesting.
2020-07-01 15:59:55 -04:00
Brett Smith
7702a1f03c fund: Add bottom line totals to Fund Report. RT#4582.
This required keeping the balances from write_row, and then a lot of other
changes followed from that. In particular it makes more sense to build the
fund report sheet from scratch rather than copying the breakdowns report and
chiseling the fund report out of it.
2020-07-01 15:56:39 -04:00
Brett Smith
7a0fa4fb57 accrual: Wire is a single payment method. 2020-07-01 13:43:58 -04:00
Brett Smith
42b3e6ca17 accruals: Aging report shows all unpaid accruals color coded by age.
Some readers care about recent accruals, some don't. This presentation
accommmodates both audiences, providing the data while making it easy to
ignore or filter out recent accruals.
2020-07-01 12:00:17 -04:00
Brett Smith
c0a2d1c070 accrual: Rip out unnecessary functionality.
Now that make_consistent is really robust, there's much less need to do all
the consistency checking that was done in AccrualPostings.__init__. I expect
this will provide a performance benefit for large reports, since we'll be
calculating data for many fewer accrual groups. The only performance penalty
I see is that the aging report has to calculate the balance three times for
each row it reports, twice in write() and once in write_row(), but that
seems okay and can be cached separately if needed.
2020-07-01 10:54:58 -04:00
Brett Smith
a5b3dc1463 accrual: AccrualPostings.make_consistent() groups accruals by date.
This accommodates cases of contracts without separate invoices,
where a series of payments are scheduled over time.

The dance we used to do of group-by-invoice, then make consistent was
already suspect. It was originally motivated by the consistency checks that
are now gone. Use this opportunity to clean up and just make make_consistent
a classmethod.
2020-07-01 09:50:20 -04:00
Brett Smith
2c61f2b9f2 reports: Add BaseODS.set_open_sheet() method. 2020-06-29 09:38:04 -04:00
Brett Smith
8d3a0dbe4c reports: Add BaseODS.lock_first_column() method. 2020-06-29 09:20:59 -04:00
Brett Smith
d6821b1368 fund: Fund report columns more closely match the audit report. 2020-06-28 09:43:44 -04:00
Brett Smith
5978c2f0c2 reports: Remove BaseODS.style_dividerline.
Obsoleted by the new border_style() method.
2020-06-27 23:12:35 -04:00
Brett Smith
15becebf5c reports: Add BaseODS.border_style() method. 2020-06-27 23:08:23 -04:00
Brett Smith
138928eebf fund: Omit unreportable rows from the fund report sheet. 2020-06-27 21:37:14 -04:00
Brett Smith
40573cb6dc fund: Split ODS into two sheets.
The first only has equity numbers the auditors look at.
The second includes balances of additional accounts.
2020-06-27 18:26:03 -04:00
Brett Smith
09b1548a96 reports: BaseODS.copy_element() recurses. 2020-06-27 17:36:02 -04:00
Brett Smith
d473ed54fc fund: Add outstanding balances to ODS fund report. 2020-06-27 16:51:35 -04:00
Brett Smith
9ae974009b fund: Add outstanding balances to text fund report. 2020-06-27 16:31:27 -04:00
Brett Smith
9699f4e527 income_type: Set a default for TrademarkSales. RT#8869. 2020-06-25 13:52:37 -04:00
Brett Smith
f3c68ff462 opening_balances: New tool. 2020-06-25 10:51:37 -04:00
Brett Smith
b038ec827c cliutil: Add year_or_date_arg() function. 2020-06-25 08:43:28 -04:00
Brett Smith
0e35f16853 tests: Extend fund report input.
This lays the groundwork to test both the opening balances generator,
and additional account breakdowns on the fund report.
2020-06-24 10:13:41 -04:00
Brett Smith
5085d4d8ef accrual: Outgoing report sets RT CFs for outgoing payment. 2020-06-23 14:47:03 -04:00
Brett Smith
4789972d38 approval: Not required for any bank transfer. RT#11707. 2020-06-23 09:51:47 -04:00
Brett Smith
f9411e0ffe meta_receipt: Not required on interest income. RT#11695. 2020-06-22 16:34:06 -04:00
Brett Smith
887102ea92 fund: New report. 2020-06-21 18:07:44 -04:00
Brett Smith
42d2002fda reports: Balance.format(None) uses accounting formats. 2020-06-21 11:39:31 -04:00
Brett Smith
5e9e11923e reports: Add account_balances() function. 2020-06-20 22:51:02 -04:00
Brett Smith
6213bc1e5d reports: Add PeriodPostings class.
This is AccountPostings from the ledger report, cleaned up to be more
general.
2020-06-20 19:04:53 -04:00
Brett Smith
7a9bc2da50 reports: Add sort_and_filter_accounts() function.
Extracted from the ledger report.
2020-06-20 09:11:01 -04:00
Brett Smith
5b68312924 tests: Add tests for Balance.copy() tolerance handling.
I wrote the changes to Balance.format() before the dependent changes to
Balance.copy(), so I was sort of counting on them to be implicitly
tested. But they should be explicit.
2020-06-20 09:11:01 -04:00
Brett Smith
7f3a26b555 reports: Balance.format() accepts zero argument.
This change has the same motivation as the recent change to
BaseODS.balance_cell(): try to preserve currency information when it's
available.
2020-06-18 14:07:44 -04:00
Brett Smith
0f7a154ff4 reports: Balance cells try to retain currency on zero balance. 2020-06-18 10:07:10 -04:00
Brett Smith
7441f4ef0c ledger: Correct period totals. RT#11661.
The period totals were reporting the balance of all the loaded postings, not
just the ones in the reporting date range.

Like the accrual report, introduce a RelatedPostings subclass that records
and saves all the information we need at group definition time, to help us
get it consistently right rather than redoing the same math over and over.
2020-06-17 18:25:47 -04:00
Brett Smith
0caf78436f accrual: Generate an aging report in more cases.
Default to generating an aging report unless the user searched for a
specific RT ticket or invoice.
2020-06-17 15:32:08 -04:00
Brett Smith
d7e2ab34b9 meta_project: Force the default project on Equity accounts.
See rationale in comments.
2020-06-17 04:29:17 -04:00
Brett Smith
8b8bdc0225 reports: Add BaseODS.column_style() method.
Use this to provide more consistent column styles throughout the reports.
2020-06-16 22:41:13 -04:00
Brett Smith
b1f82badf7 config: Get repository directory from config file.
One less thing users have to fiddle with to get set up.
2020-06-16 14:42:09 -04:00
Brett Smith
9782e7203a ledger: New reporting module. 2020-06-16 10:18:18 -04:00
Brett Smith
7660700e6c cliutil: Add date_arg() function.
Meant to be used as an argument type.
2020-06-15 18:11:39 -04:00
Brett Smith
4a28596db2 data: bank-statement and tax-statement are link metadata.
Not including them earlier was an oversight.
2020-06-15 18:08:18 -04:00
Brett Smith
582316ae85 data: Add Metadata.report_links() method.
This is just a variant of get_links() that eats TypeError.
Higher-level reporting code often wants it.
2020-06-15 14:19:10 -04:00
Brett Smith
72f58d80d7 reports: BaseODS.currency_cell() sets default style.
It'll be rare we don't want this.
2020-06-15 14:09:42 -04:00
Brett Smith
8333ed8876 reports: Add RelatedPostings.group_by_account() classmethod. 2020-06-15 11:20:30 -04:00
Brett Smith
ccc3a829da reports: Add RelatedPostings.balance_at_cost_by_date() method. 2020-06-15 10:38:26 -04:00
Brett Smith
b2e35d098a reports: Add Balance subtraction methods. 2020-06-15 10:16:34 -04:00
Brett Smith
f21ac740f2 data: Add Posting.at_cost() method. 2020-06-15 10:16:34 -04:00
Brett Smith
a2ee9c73fe ranges: Start module.
The ledger report wants to use this functionality, so make it available in a
higher-level module.

I took the opportunity to clean up a lot of the surrounding type
declarations. It is less flexible, since it relies on the static list of
types in RangeT, but I don't think the other method actually worked at all
except by cheating with generic Any.
2020-06-15 09:14:42 -04:00
Brett Smith
760e0a8cd9 reports: Add column width styles to BaseODS. 2020-06-14 08:53:27 -04:00
Brett Smith
71d671e493 data: Add Metadata.human_name() classmethod. 2020-06-14 08:53:27 -04:00
Brett Smith
9a7b9de08d test_reports_accrual: Clean imports. 2020-06-13 16:10:52 -04:00
Brett Smith
aff1fc537d reports: Add BaseODS.meta_links_cell() method. 2020-06-12 17:10:25 -04:00
Brett Smith
17c5468a7d reports: ODS links default to using URL as link text. 2020-06-12 16:42:54 -04:00
Brett Smith
4ca188611f rtutil: Add RT.unparse() classmethod. 2020-06-12 15:54:38 -04:00
Brett Smith
cd578289c4 cliutil: Add make_entry_point() function.
This provides better logging setup, reduces the amount of boilerplate in
main, and replaces is_main_script().
2020-06-12 15:08:08 -04:00
Brett Smith
3330c834b2 accrual: Only try to generate an outgoing report for accruals with rt-id. 2020-06-12 10:51:29 -04:00
Brett Smith
1124842ea7 accrual: Actually use RT caching as intended.
Basically none of the reports were reading or writing the RT link cache
because they didn't instantiate an rtutil.RT properly to do that.
2020-06-11 16:29:18 -04:00
Brett Smith
175ac3bd7a accrual: Outgoing report groups by rt-id. RT#11594. 2020-06-11 15:27:36 -04:00