# (2023-02-12) RevBank 3.8 ## Update your `revbank.plugins` Deduplication is moved from individual plugins to a plugin that does that. If you want to keep deduplication of cart items, and you probably do want that, add `deduplicate` to `revbank.plugins` just below `repeat`. The deprecation warning was moved from the `withdraw` plugin to a new plugin called `deprecated_raw`. If you're upgrading from an older versions and some of your users have been around since before the withdraw/unlisted split, you may want to keep the deprecation warning. But for new RevBank installations it does not make sense. To keep providing these warnings to users that enter raw amounts, add `deprecated_raw` to the very end of `revbank.plugins`. # (2022-12-25) RevBank 3.6 ## Update your `revbank.plugins` The `edit` command is now in its own plugin, so that it can be disabled (this has been requested several times). To keep the ability to edit the products list from within RevBank, add `edit` to `revbank.plugins`. ## Check your `revbank.products` There's new syntax for `revbank.products`: addons. Check that your lines don't have `+foo` at the end, where `foo` can be anything. Also check that you don't have any product ids that start with `+`; those can no longer be entered as this syntax now has special semantics. So these don't work as before: example_id 1.00 Example product +something +something 1.00 Product id that starts with plus example,+alias 1.00 Alias that starts with plus These will keep working as they were: example_id1 1.00 Example product+something example_id2 1.00 Example product + something more_stuff 1.00 Example product with +something but not at the end bbq 1.00 3+ pieces of meat ## New features in `products` plugin There are several new features that you may wish to take advantage of. By combining the new features, powerful things can be done that previously required custom plugins. The syntax for `revbank.products` has become complex. Please refer to the new documentation in [products.pod](plugins/products.pod) for details. ### Negative prices (add money to account) Support for non-positive prices was requested several times over the years and has now finally been implemented. It's now possible to have a product with a negative amount, which when "bought" will cause the user to receive money instead of spending it. ### Product addons It is now possible to add products to products, which is done by specifying `+foo` at the end of a product description, where `foo` is the id of another product. This can be used for surcharges and discounts, or for bundles of products that can also be bought individually. ### Explicit contra accounts By default, products sold via the `products` plugin, are accounted on the `+sales/products` contra account. This can now be overridden by specifying `@accountname` after the price in `revbank.products`. For example, `1.00@+sales/products/specificcategory`. While this will mess up your tidy columns, you may be able to get rid of a bunch of custom plugins now. When the specified contra account is a regular account (does not start with `+` or `-`), this works similar to the `market` plugin, but without any commission for the organization. ## Pfand plugin: gone The `pfand` plugin, that was originally written as a proof-of-concept demo, has been removed without deprecation cycle. To my knowledge, nobody uses this plugin. If you did use it, just grab the old version from git. Please let me know about your usecase! The introduction of beverage container deposits in The Netherlands has triggered reevaluation, and several things about that plugin were wrong, including the condescending comments that bottle deposits for small bottles would be crazy or wouldn't make sense in a self-service environment. RevBank was too limited to support it properly, but I think current RevBank fulfills all requirements for making a better, proper pfand plugin. ## Perl warnings are now enabled for plugins If you get Perl warnings from a plugin, and don't want to fix the issues with the code (or disagree with the warning), just add "no warnings;" to the top of the plugin file. However, the warnings are often indicative of suboptimal code that is ground for improvement! Most warnings will be about unitialized (undefined) values. Some guidance for Perl newbies: you can test whether something is defined with `if (defined($foo)) { ... }`, or provide a default value with `$foo // "example default value"`. # (2022-08-30) RevBank 3.5 RevBank now has a simple built-in text editor for products and market; rationale in lib/RevBank/TextArea.pod. This comes with a new dependency, the perl module Curses::UI (debian: libcurses-ui-perl). # (2022-06-11) RevBank 3.4 RevBank now has built-in hidden accounts and balanced transactions. These accounts will be made automatically, and hidden from the user interface. ## Update external scripts If you have scripts that parse `.revbank.log` or `revbank.products`, you may want to ignore all accounts that start with `-` or `+`. ## User account names that are now invalid In the hopefully very unlikely event that you have existing user accounts that start with `-` or `+`, those will have to be renamed manually, as such accounts are no longer accessible. ## Updating custom plugins (optional for now) For your custom plugins, you may want to add `->add_contra` calls to every `$cart->add` call that does not already have them. Unbalanced transactions will probably be deprecated in a future version. ## New feature: cashbox tracking The new `cash` plugin will display messages about how much the cash box should hold, whenever someone withdraws or does a cash deposit. For that to make sense, this requires the `deposit_methods` plugin to be enabled, and to have a `"cash"` deposit method. When adding the `cash` plugin in `revbank.plugins`, make sure it is listed _before_ `stock` if you have that one too. And you probably want to enable the `skim` plugin too, which introduces the (hidden) commands `skim` and `unskim` which can be used to keep the cash box data synchronised when someone (probably a board member) skims it. # (2022-06-04) RevBank 3.3 Raw amounts without a command are no longer supported. There was already an explicit command for unlisted products, `unlisted`, and for withdrawals there is now the new command `withdraw`. An explanatory message guides users who use the old style towards the new commands. This change makes it possible for treasurers to more accurately deduce the intention of a revbank transaction. When upgrading, make sure the `unlisted` plugin is installed in `revbank.plugins`. Without it, the instruction text presented when someone enters an amount is wrong and the functionality for paying for unlisted products is lost. # (2021-12-02) RevBank 3.2 ## Update your custom plugins! Test your custom plugins. If they don't emit warnings about floating point numbers, or if you don't care about warnings, then no changes are required. RevBank no longer uses floating point numbers for amounts. Instead, there are now RevBank::Amount objects, which internally store an integer number of cents, but externally stringify to formatted numbers with 2 decimal places. To create such an object, use `parse_amount` as per usual. Formatting no longer requires `sprintf %.2f`, just use `%s` instead. Using an amount as a floating point number will now emit warnings in some cases, to alert you to the fact that this may result in rounding errors. To convert an amount to a floating point number without a warning, use `$amount->float`. To convert a floating point number to an amount without a warning, use `RevBank::Amount->new_from_float($float)`. Most hard-coded uses of floats are safe enough and transparently supported through overloaded operators, but if there are more than 2 decimal places, the operation will be disallowed. # (2019-11-05) RevBank 3 The following features were removed: - plugins `nyan` and `game` Please remove these from your `revbank.plugins` configuration file. - creating new accounts with `deposit` Use `adduser` instead. ## Update your custom plugins! ### Method `$cart->is_multi_user` Method has been removed. ### Method `$cart->delete($user, $index)` Method has been removed. Delete a specific entry, as returned by `$cart->entries`, instead. ### Hooks `add` and `added` Use `add_entry` and `added_entry` instead, which gets a RevBank::Cart::Entry object, instead. Note that the new "entries", unlike old "items", can have a `quantity` other than 1. ### Method `$cart->add(undef, ...)` ### Method `$cart->add($user, ...)` The `add` method now always creates an entry from the perspective of the current user, and returns a RevBank::Cart::Entry object to which "contras" can be added with `add_contra`. The contras can be used for counteracting a value with an operation on another account. To upgrade a plugin that does a single `add` with `undef` as the first argument, simply remove the `undef, `. When multiple items were added that belong together, consider using `add_contra` for the subsequent lines; see the `take` and `give` plugins for examples. ### Method `$cart->select_items` Use `entries` instead, which takes the same kind of argument. Note that entries work slightly differently: they can have a quantity and attached contra entries. Attributes are now accessed through the `has_attribute` and `attribute` methods, instead of directly manipulating the hash.