New features
* Added support for pre-usage questions (thanks `Stanford SNF` for the contribution!).
* Added support for multiple areas in area access tablet screen, i.e. a door can provide entry to more than one area (thanks `UPenn Singh Center` for the contribution!).
* Added new `Formula` type of Post usage question, allowing more flexibility when charging for consumables or for converting units based on other fields. Formula type questions are hidden from the user and evaluated after the user answers post usage questions. They can be nested and call another formula results, and they can also be used on a group question in which case the variable becomes a list of all the values (allowing to use `sum(gold_used)` for example, if the user is asked how much gold they used for each of their processes).
* Added User and Staff knowledge base pages, where facilities can list documents, links, and other information for users and staff to browse (for example procedures for staff, training for users etc.).
Improvements
* Made the email preview button in the broadcast email feature scroll to the preview section.
* Now showing access expiration date in users' page.
* Tool superusers can now see the list of qualified users in tool control and there is a new customization option to display that list to everyone. 201
* Added an option (Customization -> Tools) to allow everyone to see the list of qualified users in tool control
* Added options (Customization -> Calendar) to get a confirmation dialog before creating a reservation. It can be set globally and overridden individually by users in their preferences (thanks abuckles-uci, crprice and Alyssa Sheffler from `UC Irvine` for the contribution!).
* Improved menu layout with smaller sizes. The menu will collapse into the hamburger menu when the menu items break the layout (for long names for example).
* Added staff charge info on collapsed menu bar.
* Updated most related fields in detailed admin (user, project, etc.) to use data lists instead of basic drop-downs.
* Now displaying the user's main email address in their preferences page.
* Checking for duplicate emails in email broadcast feature so it's not sent twice to the same address.
* Added support for consumable_id in post usage questions to identify consumable uniquely (since consumable name is not unique).
* Create a new impersonate permission so it can be given to specific users without the need for them to be super admins.
* Added a label on the calendar (top left corner) to show which tool/area/selection the user is looking at. 204
* Added option to only show tool documents to qualified users (thanks `Polytechnique Montreal` for the contribution!).
* Added option to allow everyone to email users with an upcoming reservation (thanks `Stanford SNF` for the contribution!).
* 0 min training records are now allowed.
* Sensor chart time x-axis formats can now be customized in `Customization -> Sensor data`.
* Added support for `read_coils` in sensors' formula (thanks `UPenn Singh Center` for the contribution!).
* Adjustment notifications are now automatically deleted if an adjustment is deleted.
* Added date filtering by creation time for alerts in detailed admin.
* Added training customizations to limit training to just one type, and to allow trainers to set the training date.
* Projects not allowing consumable withdrawals will not be shown in the checkout page anymore.
* Self checkout of consumables can now be limited to only certain users (thanks `Stanford SNF` for the contribution!).
* Badge number will not be shown anymore when badging in and out of area and kiosk. Previous behavior can be restored in Customization -> Application
* Added an option to offer the user to logout of the area they are logged in when disengaging a tool (thanks `UPenn Singh Center` for the contribution!).
* Projects have a new option to not allow staff charges.
* Optimized performance and load time on all pages by refactoring the queries for notifications and customizations.
* Tests will now be published to PyPi as part of the NEMO package. This will allow other plugin developers to easily run NEMO's tests.
* Now limiting the number of workers for gunicorn to a maximum of 9 to avoid issues with resources, database connections and overall performance.
API
* Fixed error with Configuration & Resource API endpoints when it would break if filtering due to many to many relationship not being supported in filters
* Tool status endpoint now requires the `can view tool` permission
* Updated extra fields in API (mostly related fields like users in projects, permissions etc) to not be required and allow null
Bug fixes
* Fixed a bug when reloading the qualified user list in tool control on mobile devices
* Fixed issues with some models when users are given read only permissions in detailed admin
* Fixed a major bug removing the user office role when updating their profile information in `Administration -> Users`
* Fixed a Kiosk issue with links in tooltip that would display NEMO's main page within the kiosk page (thanks r-xyz for the contribution!). 202
* Fixed unique constraint on interlock Card/Channel preventing users from creating interlocks for different unit_id/bank.
* Fixed potential CSRF vulnerability when deleting a buddy request.
* Fixed multi email field issue when using the API and failing validation with empty string as value.
* Fixed inactive users not being able to be used in the usage data history filter.
Libraries
* cryptography 41.0.7 -> 42.0.5
* Django 3.2.23 -> 3.2.25
* python-dateutil 2.8.2 -> 2.9.0
* pytz 2023.3 -> 2024.1