- Fixed that the upgrade failed when having "> 2 times duplicate" (means the same barcode was added more than 2 times) product barcodes - Fixed that the upgrade failed when having unsupported parent/child product nesting levels - More information on this: Only 1 level is currently supported; creating > 1 level nestings was _never_ possible via the UI/frontend, but not checked/enforced by the backend before `v3.0.0` - so it was potentially possible via the API (or any third party app/tool which utilizes it) to create such a nesting which then made this upgrade to fail - Fixed that it was not possible to select a chore/battery on the corresponding tracking pages by mouse/touch - Fixed that grouping by columns in tables may caused duplicate groups - Fixed that grocycode camera barcode scanning didn't recognize the scanned code for chore/battery tracking - Fixed that when having any "Track date only" chore on the calendar, the iCal export was broken - Optimized the meal plan page to be properly printable (thanks @MrKrisKrisu) ### API > ❗ The release before (v3.1.0) introduced that "numbers are now returned as numbers": **This was reverted** since it had unintended side effects (so all fields are technically strings now again, just like before - sorry for that) - Fixed that `missing_products` of the `/stock/volatile` endpoint also contained inactive products - Fixed that when having multiple Userfields for an entity, the `/objects/{entity}` endpoint returned wrong Userfield values - Fixed that the `/stock/products/by-barcode/{barcode}/consume` and `/stock/products/by-barcode/{barcode}/transfer` endpoints haven't used the stock entry given by a stock entry grocycode (thanks @lowlee for the initial work on this) - Fixed that the "Stock by-barcode" API routes were broken for normal barcodes (only grocycodes were accepted) (thanks @larsverp) - Fixed that the "Stock by-barcode" API routes also accepted chore or battery grocycodes (thanks @lowlee)