* Added model changes for StockLocationTypes
* Implement icon for CUI
* Added location type to location table with filters
* Fix ruleset
* Added tests
* Bump api version to v136
* trigger: ci
* Bump api version variable too
* Improved handling of race condition when saving setting value
* Improvements for managing pending migrations
- Inform user if there are outstanding migrations
- reload plugin registry (if necessary)
* Increase django-q polling time
According to this thread, should reduce multiple workers taking the same task:
https://github.com/Koed00/django-q/issues/183#issuecomment-239676084
* Revert default behavior
* Better logging
* Remove comment
* Update unit test
* Revert maintenance mode behaviour
* raise ValidationError in settings
* Add plugin mixin class for supporting exchange rates
* Split some mixin classes out into their own files
- mixins.py is becoming quite bloated!
* Add some new settings for controlling currency updates
* Adds basic plugin implementation
* Refactor existing implementation
- Builtin plugin uses frankfurter.app API
- Better error / edge case handlign
* Add sample plugin for currency exchange
* Allow user to select which plugin to use for plugin updates
* Observe user-configured setting for how often exchange rates are updated
* Updates for some of the sample plugins
* Fix plugin slug
* Add doc page
* Document simple example
* Improve sample
* Add blank page for currency settings info
* More info in "config" page
* Update docs again
* Updated unit tests
* Fill out default settings values when InvenTree runs
* Add log messages
* Significant improvement in default settings speed
- Use bulk create
- Be efficient
- Dont' be inefficient
* More strict checks
* Refactor default values implementation
- Don't run at startup
- Run on list API
- Implement generic @classmethod
* Show only the current modal over the backdrop, move others behind
* Added initial draft for tree picker
* Added filters to tree picker
* Added tree picker to more location fields
* Fixed bug with missing input group and filters side effect
* Added tree picker to part category inputs
* Added missing picker for part category parent input
* Fixed disabled items
* Fix js linting errors
* trigger: ci
* Bump api_version.py
* Update api_version.py
- In previous implementation, could not have a value "10k" for a unit of "m"
- Now, correct result is obtained (10k [m] = 10[km])
- Still passes all previous unit tests
- Simpler code, too
* Add 'is_installed' property to PluginConfig model
- Allow us to show users which plugins are "outdated"
* Cleanup plugin table
- Display clearly if a plugin is no longer installed
* Fixes for plugin table
* Revert change due to failing CI
* Fix for plugin installation via web interface
- Previous implementation did not correctly catch error output
- Refactored into new file plugin.installer.py
- Provides better "output" when plugin does install correctly
* Remove unnecessary debug output
* Update unit test
* Remove placeholder code
* Improve management of primary address for a company
- Simplify approach (remove "confirm_primary" field)
- Remove @receiver hook
- Move all logic into Address.save() method
* Make address primary if it is the only one defined for a company
* Update frontend table
* Fix saving logic
* Actually fix it this time
* Fix for unit test
* Another test fix
* Annotate available variant stock to SalesOrderLine serializer
* Filter variant stock by:
- active = True
- salable = True
* Add 'salable' filter to StockList API
* Filter available stock in sales order table:
- Must be salable
- Must be active
* Update table display
* Bump API version
* Add database model for defining custom units
- Database model
- DRF serializer
- API endpoints
* Add validation hook
* Custom check for the 'definition' field
* Add settings page for custom units
- Table of units
- Create / edit / delete buttons
* Allow "unit" field to be empty
- Not actually required for custom unit definition
* Load custom unit definitions into global registry
* Docs: add core concepts page(s)
* Add some back links
* Update docs
* Add unit test for custom unit conversion
* More unit testing
* remove print statements
* Add missing table rule
* Add skeleton for builtin label printing plugin
* Force selection of plugin when printing labels
* Enhance LabelPrintingMixin class
- Add render_to_pdf method
- Add render_to_html method
* Enhance plugin mixin
- Add class attribute to select blocking or non-blocking printing
- Add render_to_png method
- Add default method for printing multiple labels
- Add method for offloding print job
* Simplify print_label background function
- All arguments now handled by specific plugin
* Simplify label printing API
- Simply pass data to the particular plugin
- Check result type
- Return result
* Updated sample plugin
* Working on client side code
* Cleanup
* Update sample plugin
* Add new model type
- LabelOutput model
- Stores generated label file to the database
- Makes available for download
* Update label printing plugin mixin
* Add background task to remove any old label outputs
* Open file if response contains filename
* Remove "default printer" option which does not specify a plugin
* Delete old labels after 5 days
* Remove debug statements
* Update API version
* Changed default behaviour to background printing
* Update label plugin mixin docs
* Provide default printer if none provided (legacy)
* Update unit test
* unit test updates
* Further fixes for unit tests
* unit test updates
* Hide protected setting in settings view
* Implement custom serializer for setting value
- Return '***' if the setting is protected
* Implement to_internal_value
* Stringify
* Add protected setting to sample plugin
* Unit tests for plugin settings API
* Update unit test
* Add 'location' filtering option for part.stock_entries
* Add "exclude_external" field to stocktake report
* Add "stocktake_exclude_external" default option
* Implement setting to exclude external stock
* Split stocktake functionality out into separate file
* Change name of internal setting
* Refactoring
* Add 'exclude_external' field to stocktake form