Major new features
* Created the NEMO "Splash Pad" for trying out NEMO
* Zero configuration required
* Comes preloaded with sample data
* Resource outages can now be scheduled, from the Administration menu > Resources > click the link "schedule resource outages"
* Once a resource outage is created, it can be modified or deleted on the tool calendar, or from the "Schedule resource outage" page
* Outages will **not** cause reservations that are coincident to be marked as 'missed'
* "Tool time binning" was added, allowing staff to designate the "task status" of a tool while it's down for maintenance.
* Task Statuses are defined by the NEMO administrator - they could be anything you want... for example
* Parts on order
* Down for calibration
* Repaired and awaiting qualification
* When a task status is changed, that gets recorded as a "Task History" entry. This allows someone to look over the history of all tasks, and analyze trends or identify problems with why a tool is down often
* Added a `run_data` field to tool UsageEvent database rows
* Allows for custom data to be stored (in JSON) for an individual tool run
* This feature will be expanded in the future to be very customizable
* Added "Post usage questions"
* A Tool can be configured with a JSON data structure
* When a user is done using a tool, they are presented with the questions
* The user's answer get recorded in the `run_data` field of their Usage Event
* Database migrations are now shipped with NEMO
* Thanks to Ryan Goggin (Goggin) at the University of Waterloo for recommending that migrations be included with the codebase
* Your database should auto-update when you run a newer version of NEMO from the Docker container
* Use `django-admin migrate` to update your database manually
* Databases that already exist, and used NEMO versions 1.0.0 and 1.1.0 may need to perform the command `django-admin migrate --fake` to catch up for migrations
Minor new features
* Added an introduction message on the Resources page when no resources exist
* Added a `visible` field for Consumables - they are now able to be kept, but hidden. This is useful for keeping history/billing information intact
* Kiosk (tool control tablet page) was reworked
* Users can now control all tools rather than just nearby tools
* Post Usage Questions can be completed when a tool is disabled from a Kiosk
* Because the user can now use the keyboard on a Kiosk, the badge readers attached to the Kiosk must be configured to send <F2><badge number as keyboard input><F2>. The F2 "sentinel" identifies that the badge reader is issuing the keystrokes
Stability improvements
* The authentication logic now has better error logging, so it's easier to figure out why/when authentication is not working
* Shortened the time-description for tool usage. Used to be "Monday, January 12th, 2018 2:43 PM", now is "Monday 2:43"
* Resource restriction messages can now be blank in the database (for when there's no resource outage)
* Made settings and runtime info path constant inside the Dockerfile. Inside the container, `/nemo` is where NEMO expects `settings.py` and other information attached to the volume
* Resource Categories are now sorted by name (in the database), by default
* Bumped NEMO dependency versions in `setup.py` to incorporate latest improvements
* Linted some JavaScript to use `let` instead of `var`, which improves variable scoping
* Removed all popups from the Tool Control page - this design decision was due to the addition of the Post Usage Questions feature
Bug fixes
* The authentication logic now uses `sensitive_post_parameters` to mask passwords in NEMO/Django logs
* The Resources page now displays uncategorized resources
* Fixed a bug where JavaScript AJAX request parameters were being serialized into an array, instead of single values. This was interfering with creating scheduled outages
* Linted nemo.js for better JS comparison operators
* A title is now required for scheduled tool outages
* Enter no longer submits the form when creating a scheduled tool outage. Previously, enter was causing the form to submit and the main calendar page to reload
* Fixed a bug where Alerts datetimes were not being reflected properly by Django