Luca Changelog
From 1.02 to 1.1
Database changes (to pave the road to Firebird/Interbase support):
- xuser.password - pwd (database column only; SQLObject class keeps the old attribute name)
- journal.day - tday
- journal.value - tvalue
- xuser.email_address size reduced to 250
- costcenters.inactive - notactive
- stdjournals.inactive - notactive
- accounts.inactive - notactive
- classes.is_result - is_income (database column as well as SQLObject class)
From 1.01 to 1.02
- Passed automated tests for Postgres database
- Automated testing now does more than 8000 tests
- LucaMobile: JSON adopted as RPC protocol, replacing the homegrown marhshalling functions
- LucaMobile server integrated into main Luca application
- LucaMobile: Added support for HTTP-based requests at server side and to Linux client
- Bluetooth listener runs as a separate thread in Luca application.
- Bluetooth now relies on LightBlue library alone, in server side. This ensures the Bluetooth code will be compatible with major operating systems.
- If LightBlue is not installed, the application fails gracefully (keeps running but does not listen to Bluetooth)
- AJAX request error in Safari browser. It is a Turbogears bug (ticket #1284).
From 1.0 to 1.01
- Test routine scope increased
- Fixed permission checks for journal entries checksum/get chart AJAX calls
- Fixed permission VIP for sys_qlogs controller, now it accepts the ADMIN wildcard (so ADMIN users can query all users' log)
- Journal entries 'Transaction' column name changed to 'Transa' since the first conflicts with SQLite
- Refactored permission failure, now it raises an exception
- Refactored mylib.py, parts moved to accountlib.py and model.py where they belong
- Foreign keys/referential integrity: now Luca also checks them, so SQLite can be safely used even though it has no referential integrity features
- SQLite3 is now the database engine behind Luca tryout demo
- SQLite added as an option to run the test routines
- Explicit _testing_ controller parameter removed; moved to model._testing_
- Charts of accounts page is now collapsable (user can expand/collapse account groups)
- Collapsable view also added to journal entries, balance report and income/expense statement. (They are always printed in full, independent of collapsed/expanded groups in screen)
- Log describes which columns were changed in a row update, making it easier to e.g. discover who changed which data in an audit
- Testing routines: added partial auditing version counters
Database changes since 1.0:
- Journal entries (table 'journal'): 'transaction' column name changed to 'transa' because 'transaction' appears to be a reserved SQL word in SQLite.
From 0.9 to 1.0
- Testing routine refactored. Most of the testing code now lies in the controllers themselves, making it way easier to extend tests for each controller.
- Removed photo from journal entries table; a new file with audit trail documents will replace this in the future, allowing any kind of file (not only photos).
- Fixed problem in session defaults storage (backported to 0.9)
- Upgrade to work under Turbogears 1.0.2.2 and Python 2.5
- Small refactoring in reports, making all of them simple_report subclasses (mostly to aid testing)
- Fixed journal entry javascript problem: sometimes editing an entry would bring the debit account of an formerly inserted entry (backported to 0.9)
- Journal entries: filter accounts also on filter onblur event (important for Safari)
- All AJAX controllers: go to page top when inserting/editing.
- mylib.ctod: accept a partial date and complete with month and/or year from current machine time.
-
-
Database changes since 0.9:
From 0.81 to 0.9
- Added Transaction ID column for journals, as a hook for future enhancements
- Do not allow to remove journal entries anymore, they can be 'cancelled' only
- Batches can only be removed when they are still empty
- Batches are annotated as 'cancelled' when all journals inside it have been cancelled
- Refactoring of journal entry update in 'lite' page
- Fixed division by zero in report_incomeavg, when a period of just one day is selected
- Mobile client for Series 60: newest version of PyS60 also returns regular strings in [e32]dbm API, as everybody else
Database changes since 0.7:
- Journal: added 'transaction' column, int default null, non-uniquely indexed.
- Journal: added 'cancelled' column, int not null default zero.
- Journal: key 'h' (based on hash column) changed from non-unique to unique.
From 0.8 to 0.81
- ENTER works as the Submit button in AJAX forms too, including Safari
- Journals: fixed version bumping problem (was updating page needlessly)
- Journals: fixed default values for new journal entries (were not ok for one-legged entries)
- Journals: debit now inserted in table before credit
- Financial calculator: fixed in Safari
- Bug in Turbogears for Safari client and Linux server, turned out to be the Turbogears bug #1284, will be fixed in TG 1.0.2
Database changes since 0.8: None
From 0.7 to 0.8
- Added CSS style for printed media
- Reports and some controllers improved to look better when printed
- User can change its own password (new option in menu)
- Preliminary tests with SQLite and PostgreSQL as databases
- Added workarounds for SQLObject problems with PostgreSQL
- Automated tests: coverage has been increased from 55% to 90%
- Fixed small bugs in journal entries new rows (detected by testing)
- Fixed security bug in reports (detected by testing)
- Added _testing_ parameter in some "lite" calls to return error status instead of redirecting
- Logging level changed from "info" to "error"
- Several other minor bugs fixed
Database changes since 0.7: None
From 0.65 to 0.7
- "Ported" to Mac OS X (worked right away)
- Development from now on will be part-time Mac, part-time Linux
- AJAX pages ported to Safari. Small changes to add support to this browser:
- Moved onClick event connections to inline onClick attributes in pages (at Safari, form buttons are not available for event connection at onLoad event time). Inline Javascript is uglier but works.
- Added Mac OS X support for LucaMobile server. Issues: depends on LightBlue library and serves only one client at atime since Mac OS X Bluetooth sockets are not select()able.
- AJAX in-place updating for rows:
- standartize API for formatting/conversion functions, so both Kid and AJAX will get formatted data from a single place. Previously, most formatting was being done in Kid templates and AJAX update had no way to get formatted data to update the page with.
- all AJAX tables now support in-place update (except for parent X child pages that are not used often anyway).
- when two or more different users update the same data view, page reloading is forced (to avoid working on old data).
- not showing "flash" (page top) messages for rows updated in place via AJAX (the feedback is the page change itself).
- Journal entries checksum is updated via AJAX (no need to reload the page to see if the checksums are balanced)
- Batches page: add short-circuit link to journal editing page
- Fixed some English terms (Thanks to Aldenor Martins' Christmas gift: an English dictionary of accounting terms)
- Explicit UTF-8 encoding parameter removed from UnicodeString form validators (they already know how to decode based on page charset)
- README install instructions cleanup (Unicode interface between SQLObject and MySQLDB still sucks, so the related patches are still needed)
- Fixed session-related errors when browser cookies are not enabled (defaults to an "empty" session, cookies are still needed to really make use of the system)
- "Photo" column in journal entries tabled changed SQLObject type from "PickleCol" to "BLOBCol" (SQLObject was raising strange exceptions when the column was filled with a "None" object).
Database changes since 0.65:
- alter table cmos add orgs_version int not null default 0;
- alter table cmos add charts_version int not null default 0;
- alter table cmos add xuser_version int not null default 0;
- alter table cmos add xgroup_version int not null default 0;
- alter table orgs add version int not null default 0;
- alter table batches add version int not null default 0;
- alter table journal modify photo mediumblob;
Run ./upgrade_database for a fully automatic update.
From 0.6 to 0.65
- Added timestamp at the end of reports
- Ledger report: show journal IDs
- Cherrypy.session insulated in mylib.session() to aid tests where cherrypy.session does not work
- Journals: show distinct dates in list
- Journals: append new journal: test debit different from credit
- Journals: editing w/ inactive account does not show account correctly
- Journals: copy both debit and credit accounts from last entry to new entry
- Fix organization X user permission test (perm_org)
- Non-error messages in "lite" controllers (added method simple_table.flash_at_edit)
- AJAX controllers: remove special ENTER handling (standard = best :)
- Ledger report - show account name in report
- Ledger and journal reports: batch # is a link to journal edit controller
- Show org IDs in drop-down boxes
- Filled all validators with if_invalid= parameters (avoids ugly errors with grossly unexpected parameters)
- Block fetching of new row when user has no read permission (could leak information from last new row)
- Remove some features from "lite" pages, like mobile toogling
- AJAX pages: replace most buttons by links, except by the editing form (for now)
- Accounts of the chart: update/remove data in place in AJAX (avoids long-delayed page updates)
- Accounts of the chart: do not ask if an account is aggregate (it can be derived by the code right away)
- Standard journals and cost centers: toogle mobile/inactive
No database changes since 0.6.
From 0.5 to 0.6
- Topbar menu link redirects to the default user mode (AJAX or lite). The
alternative mode is still offered but clearly identified as such.
- The financial calculator has been readded in lite menu, since most
browsers should be able to handle its Javascript (there is no AJAX
fancy things in that calculator)
- Explicit transactions removed since each visit runs in its own
transaction thanks to TurboGears, so there was no point in creating a
second transaction. It was causing problems e.g. TG transaction did not
readily see the data from the other transaction.
- Controllers with critical sections that need to rollback in case of some
error have been dealt with differently: the Turbogears transaction
is committed just before the beginning of the critical section, so
the previous work (logging, session registering etc.) is not lost
in the case of rollbacking TG's own transaction.
- balance_closing.check() flow was improved by using exceptions,
avoiding multiple return exit points.
- Balance closing works harder to detect whether another closing
has already been done in the same period (partially or totally overlapped).
- simple_table.last_new_row_data (last data from a just included row,
that is offered as defaults to the next new row) moved to cherrypy.session
avoiding race conditions between simultaneous users (affects all basic
controllers).
- All SQL select's checked about proper exception handling (in SQLObject,
select's are lazy evaluated which can trigger an exception far from the
select() call). Some cases e.g. exceptions during Kid template processing
still are around, but they will only happen if something really bad happens
e.g. the database is shut down.
- Added a "throbber" (animated GIF image) in AJAX controllers, so the
user has a feedback while an AJAX transaction is being processed. Especially
important in high-latency connections.
- AJAX forms will show informative (blue) messsages, not only errors.
Important in streamlined row adds, so the user has a textual feedback
about the lastly-added data.
- Journal entry accepts both debit and credit accounts in one shot
(in new journals) to speed up entry of paired journals (debit and credit of
the same value, the most common type). The original (and unpractical) convention
of identifying debit/credit by the value signal has been removed (it only
remains in the SQL database, where it works well).
- Charts of accounts: Aggregate accounts no longer need to be of the
same class of their parents. This obligation only holds for non-aggregate
accounts. This change will allow bank-style charts where income and expense
accounts belong to the Equity hierarchy.
- Charts of accounts: except for top-level accounts, and aggregate accounts
that are of a different class from its parent (see item above), the user
no longer needs to specify the account class; it will be automatically
derived from parent account. The idea is to allow faster data entry.
- Handle correctly the inactive items of some tables (accounts, cost centers).
New journals must not accept inactive items, but inactive items should be
accepted while editing old rows (since the inactive item might have been
active by the time the row was included). The inactive state of items
is now clearly stated in respective combo boxes.
- Costcenters and standard journals were added the "inactive" column,
so they can be declared inactive and will no longer be accepted in new
journals.
- The user has some new configurations: AJAX/lite default menu (e.g. to
disable AJAX for an user that is known to use an outdated browser etc.).
Thousand separator, decimal separator and date format are also configured
per-user. New users will copy the default parameters from administrator
(so configure the admin with the defauls you like best before including
new users).
- MobileClient: server side first checks the organization's active period
before it commits the journals. Avoids adding extraneous journals in unexpected
dates.
- Journal entries: in the AJAX version, the accounts are loaded via JSON,
and only reloaded when they change. User can filter the account list locally
to find faster the wanted accounts.
- Journal entries: a shortcut to reopen batch has been added. Useful to
fix data coming from mobile client without having to access the batches
controller.
- Journal entries: a default standard journal entry is fetched from
the debit/credit accounts, if any account supplies a default one. This
is handled entirely client-side and is AJAX version-only. The real
utility of this feature is a bit doubtful, however (I implemented that
since it was planned and seemed to be a good idea by then).
- Small and sparse fixes in CSS.
- The database is deemed FROZEN by this version. Next database updates
must bring clear upgrade instructions in changelogs, as well as SQL scripts
to make the update automatically.
- Cmos table will contain the database version (linked to the Luca model
version). This will make automatic database updates easier in the future.
- Automated tests of simple tables are working. Test of batches,
journals, reports etc. still need to be developed. The test is not yet
friendly for an user to run since it depends on a Turbogears patch
(extra/test_id.patch, TG ticket #1166, should be integrated in TG 1.0 final).
Database changes since 0.5:
- Added inactive (INT NOT NULL) in stdjournals
- Added inactive (INT NOT NULL) in costcenters
- Added database_version (TEXT NOT NULL) in cmos, default value "0.6"
- Added lite (INT NOT NULL) in xuser
- Added locale (TEXT NOT NULL) in xuser, default value ".,Y/m/d"