diff --git a/CHANGES.rst b/CHANGES.rst new file mode 100644 index 0000000000000000000000000000000000000000..7e14a224b489aa9cf0759697baeb21b2463c7636 --- /dev/null +++ b/CHANGES.rst @@ -0,0 +1,301 @@ + +0.3a28 +------ + +- [feature] Added ``csvutil`` module. Currently this only adds some better + ``DictWriter`` support for Python versions older than 2.7. + +- [feature] Added Palm OS app interface. This adds the Palm HotSync conduit, + which is used to create CSV files when a handheld running the Rattail app is + synced with its desktop PC. + +- [feature] Added ``files`` module. This will eventually supercede + ``edbob.files``, but for now this commit adds only three functions. These + just so happened to be ones needed to support some code involving inventory + count batches. + +- [feature] Added ``wince`` module. This module is used to interface with the + Rattail app for Windows CE handheld devices. + +- [feature] Added new batch system, which will eventually replace the old one. + Hopefully they can play nicely in parallel, in the meantime. + +- [feature] Added `purge-batches` command. This command will delete forever + all batches whose purge date has passed. It is meant to be run on a + scheduled basis, e.g. nightly. + +- [feature] Added "case" value to ``UNIT_OF_MEASURE`` enumeration. + +0.3a27 +------ + +- [feature] Added custom `Thread` implementation. This overrides the default + behavior of `threading.Thread` by ensuring the system exception hook is + invoked in case an error occurs within the thread. + +0.3a26 +------ + +- [feature] Added `get_product_by_upc()` API function. This is a convenience + function which will return a single `Product` instance, or `None`. It is the + first of hopefully many API functions. + +- [feature] Added SIL columns `F188`, `R71` and `R72`. These have been added + to support inventory count batches. + +- [bugfix] Fixed `Batch.drop_table()` to handle case where row table doesn't + exist. While theoretically this method *shouldn't* encounter a missing + table, in practice it does happen occasionally. Now this situation is + handled gracefully instead of raising an exception. + +0.3a25 +------ + +- [bug] Fixed ``Vendor.contacts`` relationship (added 'delete-orphan'). + +- [feature] Added ``Department.subdepartments`` relationship. + +0.3a24 +------ + +- [feature] Added ``__eq__()`` and ``__ne__()`` methods to ``GPC`` class. + +- [general] Moved ``GPCType`` SQLAlchemy type class to ``rattail.db`` module. + This was necessary to make the ``GPC`` class more generally available to + callers who don't want or need SQLAlchemy to be installed. + +- [general] Moved enumerations from database extension to "core" ``enum`` + module. This is mostly for convenience to callers. + +- [bug] Fixed a few bugs with label batches. These existed mostly because this + feature hasn't been used in production... + +- [feature] Added ``default_format`` attribute to ``LabelFormatter`` class. + Now when a label profile is edited, this default format is used if no format + is provided by the user. + +- [feature] Changed ``LabelProfile.get_formatter()`` method so that it assigns + the formatter's ``format`` attribute using the value from the profile. The + formatter is free to use or ignore this value, at its discretion. + +- [feature] Improved the database synchronizer so that it is *somewhat* + tolerant of database server restarts. This likely will need further + improvement as more testing is done. The current implementation wraps the + entire sync loop in a ``try/catch`` block and when a disconnect is detected, + will wait 5 seconds before re-entering the loop and trying again. + +0.3a23 +------ + +- [general] Fixed namespace packages, per ``setuptools`` documentation. + +- [feature] Added connection timeout support to ``CommandNetworkPrinter``. + +0.3a22 +------ + +- [feature] Added ``LabelProfile.visible`` field. + +- [feature] Added generic ``CommandNetworkPrinter`` label printer class. This + class sends textual commands directly to a networked printer. + +0.3a21 +------ + +- [feature] Refactored database synchronization logic into a proper class, + which can be overridden based on configuration. + +0.3a20 +------ + +- [feature] Tweaked the SIL writer so that it doesn't quote row values when + they're of data type ``float``. + +- [bug] Fixed database sync to properly handle ``Vendor`` deletions. Now any + associated ``ProductCost`` records are also deleted, so no more foreign key + violations. + +0.3a19 +------ + +- [bug] Fixed "price toggle" bug in database sync. It was noticed that + whenever a product's regular price did not change, yet the product instance + itself *did* have a change, the regular price association was being removed + in one sync, then reestablished in the next sync (then removed, etc.). The + sync operation now ensures the relationship is removed only when it really + should be, and that it remains intact when that is appropriate. + +0.3a18 +------ + +- [bug] Added special delete logic to the database sync. Currently, only the + Department and Subdepartment classes are affected. When deletions of these + classes are to be synced between databases, some effort is made to ensure + that associations with any dependent objects (e.g. Product) are removed + before the primary instance (e.g. Department) is deleted. + +0.3a17 +------ + +- [bug] Added 'delete, delete-orphan' to cascade on ``Product.costs`` + relationship. This was causing an error when syncing databases. + +0.3a16 +------ + +- [bug] Added 'delete, delete-orphan' to cascade on ``Product.prices`` + relationship. This was causing an error when syncing databases. + +0.3a15 +------ + +- [bug] Fixed database sync logic to ensure ``Product`` changes are processed + before ``ProductPrice`` changes. Since the underlying tables are mutually + dependent, the ``dependency_sort()`` call can't *quite* take care of it. Now + a lexical sort is applied to the class names before the dependency sort + happens. This is somewhat of a hack, merely taking advantage of the fact + that "Product" comes before "ProductPrice" when lexically sorted. If other + mutually-dependent tables come about in the future, this approach may need to + be revised if their class names don't jive. + +0.3a14 +------ + +- [bug] Fixed database synchonization logic to properly handle merging + ``Product`` instances between database sessions. Since ``Product`` is so + interdependent on ``ProductPrice``, a pretty custom merge hack is required. + +0.3a13 +------ + +- [bugfix] Fixed ``rattail.db.record_changes()`` so that it also ignores + ``UserRole`` instance changes if configuration dictates that ``Role`` changes + are to be ignored. + +0.3a12 +------ + +- [bugfix] Fixed foreign key uuid handling in ``rattail.db.record_changes()``. + Some tables are meant to be used solely as providers of "association proxy" + fields, the ``uuid`` column is not only a primary key, but also a *foreign + key* to the "primary" entity table. In such cases, the uuid value was not + present at session flush time, so a new one was being generated. + Unfortunately this meant that the ``Change`` record would point to a + nonexistent entity record, so the sync would not work. Now uuid fields are + inspected to determine if a foreign key is present, in which case the + relationship is traversed and the true uuid value is used. + +- [feature] Added "extra classes" configuration for the ``load-host-data`` + command. This is necessary when initially populating a "store" (er, + "non-host") database instance if custom schema extensions are in use (and + need to be synchronized with the host). + +0.3a11 +------ + +- Add R49 SIL column. + +- Add ``rattail.pricing`` module. + +0.3a10 +------ + +- Ignore batch data when recording changes. + +0.3a9 +----- + +- Bump edbob dependency. + +0.3a8 +----- + +- Tweak database sync. + +- Tweak batch processing. + +0.3a7 +----- + +- Add ``Vendor.special_discount``. + +0.3a6 +----- + +- Bump edbob dependency. + +0.3a5 +----- + +- Added ``Store`` and related models. + +- Added ``Customer.email_preference`` field. + +- Added ``load-host-data`` command. + +- Added database changes/synchronization framework. + +- Fixed batch table create/drop. + +0.3a4r1 +------- + +- Added ``Product.cost``, ``Product.vendor``. + +- Added basic one-up label printing support. + +- Added initial batch support, with ``PrintLabels`` provider. + +- Added GPC data type. + +- Changed internal name of file monitor Windows service. + +- Added progress support for label printing. + +- Label profiles moved from config to database model. + +- Removed ``rattail.db.init_database()`` function. + +- Moved some enum values from db extension to core (``rattail.enum`` module). + +- Improved SIL support: moved ``rattail.sil`` to subpackage, added ``Writer`` + class etc. + +- Fixed file monitor in Linux. + +- Added ``delete-orphan`` to ``Vendor.contacts`` relationship cascade. + +0.3a4 +----- + +- Update file monitor per changes in ``edbob``. + +0.3a3 +----- + +- Move database extension to subdir (``rattail.db.extension``). + +- Make database extension require ``auth`` extension. + +- Fix ``rattail.db.init()``. + +- Add lots of classes to database extension model. + +- Add ``rattail.labels`` module. + +- Add ``rattail.db.cache`` module. + +- Add SIL output functions. + +- Remove some batch code (for now?). + +0.3a2 +----- + +- Added Windows file monitor service. + +0.3a1 +----- + +- Refactored to rely on `edbob `_. (Most of Rattail's + "guts" now live there instead.)