* [BUG] Inventree fiddles with files directly rather than using Django Storage api
Fixes#2585
* PEP fix
* clean diff
* move template discovery into central location
* more moving file operations
* fix paths
* and another path fixing
* more fixes
* fix typing
* switch config back to local
* revert locale stats
* add s3 support
* storages
* more adaptions
* use s3 switch to set storage backend
* fix reqs
* cleanup default_storage
* init in storage_backend
* move to storage classes everywhere
* fix call
* remove more S3 references
* move storage init
* fix startup error
* alsways use url
* ignore FileExistsError
* move s3 required url in
* remove S3 for now
* use Djangos defaults
* fix old import
* remove default_storage calls
* make labels/reports more similar
* expand functions out
* refactor to use refs where possible
* refactor copy section to be similar
* unify db lookup
* move shared code to generic section
* move ready out
* docstrings
* move even more functions out
* move references inline of the classes
* clean up refs
* fix init
* fix ensure dir
* remove unneeded tries
* cleanup diff
* more cleanup
* fix tests
* use SUBDIR
* move CUI JS files to CUI url section
* add flag to seperate CUI code and tests
* re-enable tests
* move urls back to backend patterns
* swap switch logic
* fix merge
* returning PUI paths if CUI not enabled
* revert test changes
* fix plugin settings url
* URL is not dependant on UI generation
* small fixes
Co-authored-by: Oliver <oliver.henry.walters@gmail.com>
---------
Co-authored-by: Oliver <oliver.henry.walters@gmail.com>
* Added initial draft for machines
* refactor: isPluginRegistryLoaded check into own ready function
* Added suggestions from codereview
* Refactor: base_drivers -> machine_types
* Use new BaseInvenTreeSetting unique interface
* Fix Django not ready error
* Added get_machines function to driver
- get_machines function on driver
- get_machine function on driver
- initialized attribute on machine
* Added error handeling for driver and machine type
* Extended get_machines functionality
* Export everything from plugin module
* Fix spelling mistakes
* Better states handeling, BaseMachineType is now used instead of Machine Model
* Use uuid as pk
* WIP: machine termination hook
* Remove termination hook as this does not work with gunicorn
* Remove machine from registry after delete
* Added ClassProviderMixin
* Check for slug dupplication
* Added config_type to MachineSettings to define machine/driver settings
* Refactor helper mixins into own file in InvenTree app
* Fixed typing and added required_attributes for BaseDriver
* fix: generic status import
* Added first draft for machine states
* Added convention for status codes
* Added update_machine hook
* Removed unnecessary _key suffix from machine config model
* Initil draft for machine API
* Refactored BaseInvenTreeSetting all_items and allValues method
* Added required to InvenTreeBaseSetting and check_settings method
* check if all required machine settings are defined and refactor: use getattr
* Fix: comment
* Fix initialize error and python 3.9 compability
* Make machine states available through the global states api
* Added basic PUI machine admin implementation that is still in dev
* Added basic machine setting UI to PUI
* Added machine detail view to PUI admin center
* Fix merge issues
* Fix style issues
* Added machine type,machine driver,error stack tables
* Fix style in machine/serializers.py
* Added pui link from machine to machine type/driver drawer
* Removed only partially working django admin in favor of the PUI admin center implementation
* Added required field to settings item
* Added machine restart function
* Added restart requird badge to machine table/drawer
* Added driver init function
* handle error functions for machines and registry
* Added driver errors
* Added machine table to driver drawer
* Added back button to detail drawer component
* Fix auto formatable pre-commit
* fix: style
* Fix deepsource
* Removed slug field from table, added more links between drawers, remove detail drawer blur
* Added initial docs
* Removed description from driver/machine type select and fixed disabled driver select if no machine type is selected
* Added basic label printing implementation
* Remove translated column names because they are now retrieved from the api
* Added printer location setting
* Save last 10 used printer machine per user and sort them in the printing dialog
* Added BasePrintingOptionsSerializer for common options
* Fix not printing_options are not properly casted to its internal value
* Fix type
* Improved machine docs
* Fix docs
* Added UNKNOWN status code to label printer status
* Skip machine loading when running migrations
* Fix testing?
* Fix: tests?
* Fix: tests?
* Disable docs check precommit
* Disable docs check precommit
* First draft for tests
* fix test
* Add type ignore
* Added API tests
* Test ci?
* Add more tests
* Added more tests
* Bump api version
* Changed driver/base driver naming schema
* Added more tests
* Fix tests
* Added setting choice with kwargs and get_machines with initialized=None
* Refetch table after deleting machine
* Fix test
---------
Co-authored-by: Matthias Mair <code@mjmair.com>
* Use registry.get_plugin()
- Instead of registry.plugins.get()
- get_plugin checks registry hash
- performs registry reload if necessary
* Add PluginValidationMixin class
- Allows the entire model to be validated via plugins
- Called on model.full_clean()
- Called on model.save()
* Update Validation sample plugin
* Fix for InvenTreeTree models
* Refactor build.models
- Expose models to plugin validation
* Update stock.models
* Update more models
- common.models
- company.models
* Update more models
- label.models
- order.models
- part.models
* More model updates
* Update docs
* Fix for potential plugin edge case
- plugin slug is globally unique
- do not use get_or_create with two lookup fields
- will throw an IntegrityError if you change the name of a plugin
* Inherit DiffMixin into PluginValidationMixin
- Allows us to pass model diffs through to validation
- Plugins can validate based on what has *changed*
* Update documentation
* Add get_plugin_config helper function
* Bug fix
* Bug fix
* Update plugin hash when calling set_plugin_state
* Working on unit testing
* More unit testing
* Move get_plugin_config into registry.py
* Move extract_int into InvenTree.helpers
* Fix log formatting
* Update model definitions
- Ensure there are no changes to the migrations
* Comment out format line
* Fix access to get_plugin_config
* Fix tests for SimpleActionPlugin
* More unit test fixes
* move more paths to basic path
* changed url route to only match fully - fixed test
* revert path changes on labelprint pages
* fix not found/redirect
* revert test change
* Add tests for report api
* Add test for delete endpoint
* Use pk in reverse call
* Allow kwargs in APITestCase methods
* Data is in response.data
* Fix comment
* Use expected_code argument instead of separate check
* Test with superuser
* Negative indexing not allowed, try with this alternative
* Looking for what went wrong..
* APITestCase does not work like Python requests - change POST calls
* Upload success is code 201
* In PATCH method, change test file and description as well
* Add test for get_api_url method
* Change format parameter for file upload
* Copy tests for report API over to label API
* Add test model for BuildLineLabel
* Update tests
* Make example template valid
* Add methods for testing label printing
* Added backend changes to support printing options
* Pass printing options seperatly via kwargs for easier api refactor later
* Implemented printing options in CUI
* Fix js linting
* Use translations for printing dialog
* Support nested fields in CUI
* Added docs
* Remove plugin and template fields from send printing options
* Fix docs
* Added tests
* Fix tests
* Fix options response and added test for it
* Fix tests
* Bump api version
* Update docs
* Apply suggestions from code review
* Fix api change date
* Added dependent field and improved nested object fields on CUI
* Fix: cui js style
* Fix process field implementation if the 'old' __ syntax is used for nested fields
* Allow different image variations to be rendered in when using a part image in a report
* Use preview image in default test report
* Fix api_version
- Missed in https://github.com/inventree/InvenTree/pull/5906
* Update docstring
* Add similar functionality for company_image tag
* Update report documentation
* base-64 encode images for rendering in reports
- Allows image manipulation operations to be performed on the images
- Avoids any file pathing issues
* Update docs
* Fix unit tests
* More unit test fixes
* More unit test
* Handle missing file
* Instrument unit test
- Trying to determine what is going on here
* Fix for image resize
* Translate error messages
* Update default report templates
- Specify image size
* Added backend changes to support printing options
* Pass printing options seperatly via kwargs for easier api refactor later
* Implemented printing options in CUI
* Fix js linting
* Use translations for printing dialog
* Support nested fields in CUI
* Added docs
* Remove plugin and template fields from send printing options
* Fix docs
* Added tests
* Fix tests
* Fix options response and added test for it
* Fix tests
* Bump api version
* Update docs
* Apply suggestions from code review
* Fix api change date
* Added dependent field and improved nested object fields on CUI
* Fix: cui js style
* Add skeleton for new label sheet plugin
* Add custom printing options serializer
* Render individual label outputs to HTML
* Extract page size and column size
* Check label dimensions before printing
* Split labels into multiple pages / sheets
* Render out multiple labels onto a single sheet
* Cleanup base label template
- Allow @page style to *not* be generated
- Pass through as optional context variable
- Check that it still works for single label printing (default behaviour unchanged)
- Prevents multiple @page styles from being generated on label sheet output
* Fix stylesheets for part labels
* Cleanup stock location labels
* Cleanup more label templates
* Check if label can actually fit on page
* Generate output to PDF and return correct response
* Update panel.md
* Fix unit tests
* More unit test fixes
* Added backend changes to support printing options
* Pass printing options seperatly via kwargs for easier api refactor later
* Implemented printing options in CUI
* Fix js linting
* Use translations for printing dialog
* Added docs
* Remove plugin and template fields from send printing options
* Fix docs
* Added tests
* Fix tests
* Fix options response and added test for it
* Fix tests
* Bump api version
* Update docs
* Apply suggestions from code review
* Fix api change date
The use of `else` or `elif` becomes redundant and can be dropped if the last statement under the leading `if` / `elif` block is a `return` statement.
In the case of an `elif` after `return`, it can be written as a separate `if` block.
For `else` blocks after `return`, the statements can be shifted out of `else`. Please refer to the examples below for reference.
Refactoring the code this way can improve code-readability and make it easier to maintain.
Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com>
There shouldn't be any blank lines after the function docstring.
Remove the blank lines to fix this issue.
Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com>
* get_setting_object: Handle ProgrammingError
* Improved exception handling
- Address a few cases on application startup if the database is not ready (migrations not applied)
* Skip ready functions if not in main thread or plugins are not loaded yet
* Debug integration tests
* Update ready.py
* Update ready.py
* Fix isInMainThread and isPluginRegistryLoaded ready functions
* Preload gunicorn app to only invoke the appconfig ready functions once
* debug: test prints for statistics
* Remove debug print
* Test without
* Revert "Test without"
This reverts commit 1bc1872893.
* Second test
* Add checks back to part, label, user model
* Add checks back to inventree, plugin apps
* log server output for debugging
* hopefully I can get the log this time+
* Next test
* Test with --noreload
* Next test
* trigger: ci, because session expired
* block the second ready execution instead of the first
* fix: load order
* Fix test and revert gh actions workflow change
* Added all_apps method to reload machanism
* Changed detect reload mechanism
* Also trigger ready on reload
* Add skipping second reload back for testing mode
* Added doc string back
* Update InvenTree/plugin/base/integration/AppMixin.py
* 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
* Handle exception when creating default labels
- Running workers in parallel may cause race conditions
- Catch any exception which is raised
* Prevent password from being logged
* Update default timeout for docker
* Disable migration testing
- Compare how long the unit tests take
* Change file
- To get unit tests to run
* Fix format
* Consolidate tasks.py
- Remove coverage task
- Add --coverage flag to test task
* Fix typo
* Run migration unit tests if migration files are updated
* Fix
* Touch migration file
- Should cause migration unit tests to be run
* Force migration checks for docker build
* Prevent default report creation in unit tests
- Should save some time
* Add simple profiling for plugin loading
- Display time taken to load each plugin
* Fix to invoke test
* Disable get_git_log (for testing)
* Disable get_git_path in CI
- Might remove this entirely?
- For now, bypass for unit testing
* Add debug for unit registry
- Display time taken to load registry
* Don't full-reload unit registry
* Adjust migration test workflow
- env var updates
- change paths-filter output
* Fix for migration_test.yaml
- Actually need to set the output
* env fix
* db name
* Prevent sleep if in test mode
* Reduce sleep time on wait_for_db
* Adds BuildLineLabel model
- New type of label for printing against BuildLine objects
* Add serializer for new model
* Add API endpoints for new label type
* Add hooks to BuildLine table
* Create default label
- Create an example BuildLineLabel object
* Add admin integration
* Fix js code
* Use two-tiered template
- Allows base template to be updated
* Improve default label
* Add docs pages for labels
* Update nav
* Documentation for new label
* Add permission role
* Bump API version
* Add user settings to remember the last/favourite label template
Fixes#4932
* Remove settings_value from translated templates
Thanks Oliver for the hint!
* Refactor model helpers into own file to allow helper import when apps not loaded yet
* Import helper functions at module level
* Added missing imports where vscode couldnt help because its no explicit import
* Add 'clean' method to MetadataMixin class
- Ensure that the "metadata" is a valid dict object
* Add "overwrite" option for set_metadata method
* Update unit tests
* full_clean -> clean
* Cleanup
* Fix for MetadataMixin
* Updates for unit tests
* Test
* Improve construct_absolute_url method
- Look for hard-coded site URL if provided
- Otherwise look for specified site URL
- Otherwise look at the provided request object
* Refactor existing code which used base URL setting
* Update docs
* Validate that a provided base URL is valid
* remove markuplint
* remove dedicated html step - will be done by pre-commit
* add djlint for django template linting
* Fix T003: Endblock should have name
* Fix H013: Img tag should have an alt attribute
* Fix H014: Found extra blank lines
* Fix T003: Endblock should have name
* Fix H013: Img tag should have an alt attribute
* small fixes
* Fix T001: Variables should be wrapped in a single whitespace
* Fix T003: Endblock should have name
* small fixes
* fix form method
* add entry to contributing
* fix template changes
* another fix
* use current version
* Support image uploads in the "notes" markdown fields
- Implemented using the existing EasyMDE library
- Copy / paste support
- Drag / drop support
* Remove debug message
* Updated API version
* Better UX when saving notes
* Pin PIP version (for testing)
* Bug fixes
- Fix typo
- Use correct serializer type
* Add unit testing
* Update role permissions
* Typo fix
* Update migration file
* Adds a notes mixin class to be used for refactoring
* Refactor existing models with notes to use the new mixin
* Add helper function for finding all model types with a certain mixin
* Refactor barcode plugin to use new method
* Typo fix
* Add daily task to delete old / unused notes
* Add ProjectCode model
(cherry picked from commit 382a0a2fc32c930d46ed3fe0c6d2cae654c2209d)
* Adds IsStaffOrReadyOnly permissions
- Authenticated users get read-only access
- Staff users get read/write access
(cherry picked from commit 53d04da86c4c866fd9c909d147d93844186470b4)
* Adds API endpoints for project codes
(cherry picked from commit 5ae1da23b2eae4e1168bc6fe28a3544dedc4a1b4)
* Add migration file for projectcode model
(cherry picked from commit 5f8717712c65df853ea69907d33e185fd91df7ee)
* Add project code configuration page to the global settings view
* Add 'project code' field to orders
* Add ability to set / edit the project code for various order models
* Add project code info to order list tables
* Add configuration options for project code integration
* Allow orders to be filtered by project code
* Refactor table_filters.js
- Allow orders to be filtered dynamically by project code
* Bump API version
* Fixes
* Add resource mixin for exporting project code in order list
* Add "has_project_code" filter
* javascript fix
* Edit / delete project codes via API
- Also refactor some existing JS
* Move MetadataMixin to InvenTree.models
To prevent circular imports
(cherry picked from commit d23b013881eaffe612dfbfcdfc5dff6d729068c6)
* Fixes for circular imports
* Add metadata for ProjectCode model
* Add Metadata API endpoint for ProjectCode
* Add unit testing for ProjectCode API endpoints
* Adds custom search filter to allow 'regex' searching of results
* Specify if "shell" can access database for certain commands
* Bug fix for settings API
- Do not allow cache on detail endpoints
- Was causing strange error conditions with missing or duplicate PK values
* Adds user setting to control regex search
* Enable regex for search queries
- bootstrap tables
- search preview
* Pass search options through bettererer
* Refactor API endpoints to use new filter approach
* Bump API version
* Add "whole word" search
- Closes https://github.com/inventree/InvenTree/issues/4510
* Handle case where existing fields are empty
* pop > get
* Adds ReturnOrder and ReturnOrderAttachment models
* Adds new 'role' specific for return orders
* Refactor total_price into a mixin
- Required for PurchaseOrder and SalesOrder
- May not be required for ReturnOrder (remains to be seen)
* Adds API endpoints for ReturnOrder
- Add list endpoint
- Add detail endpoint
- Adds required serializer models
* Adds basic "index" page for Return Order model
* Update API version
* Update navbar text
* Add db migration for new "role"
* Add ContactList and ContactDetail API endpoints
* Adds template and JS code for manipulation of contacts
- Display a table
- Create / edit / delete
* Splits order.js into multiple files
- Javascript files was becoming extremely large
- Hard to debug and find code
- Split into purchase_order / return_order / sales_order
* Fix role name (change 'returns' to 'return_order')
- Similar to existing roles for purchase_order and sales_order
* Adds detail page for ReturnOrder
* URL cleanup
- Use <int:pk> instead of complex regex
* More URL cleanup
* Add "return orders" list to company detail page
* Break JS status codes into new javascript file
- Always difficult to track down where these are rendered
- Enough to warrant their own file now
* Add ability to edit return order from detail page
* Database migrations
- Add new ReturnOrder modeles
- Add new 'contact' field to external orders
* Adds "contact" to ReturnOrder
- Implement check to ensure that the selected "contact" matches the selected "company"
* Adjust filters to limit contact options
* Fix typo
* Expose 'contact' field for PurchaseOrder model
* Render contact information
* Add "contact" for SalesOrder
* Adds setting to enable / disable return order functionality
- Simply hides the navigation elements
- API is not disabled
* Support filtering ReturnOrder by 'status'
- Refactors existing filter into the OrderFilter class
* js linting
* More JS linting
* Adds ReturnOrderReport model
* Add serializer for the ReturnOrderReport model
- A little bit of refactoring along the way
* Admin integration for new report model
* Refactoring for report.api
- Adds generic mixins for filtering queryset (based on updates to label.api)
- Reduces repeated code a *lot*
* Exposes API endpoints for ReturnOrderReport
* Adds default example report file for ReturnOrder
- Requires some more work :)
* Refactor report printing javascript code
- Replace all existing functions with 'printReports'
* Improvements for default StockItem test report template
- Fix bug in template
- Handle potential errors in template tags
- Add more helpers to report tags
- Improve test result rendering
* Reduce logging verbosity from weasyprint
* Refactor javascript for label printing
- Consolidate into a single function
- Similar to refactor of report functions
* Add report print button to return order page
* Record user reference when creating via API
* Refactor order serializers
- Move common code into AbstractOrderSerializer class
* Adds extra line item model for the return order
- Adds serializer and API endpoints as appropriate
* Render extra line table for return order
- Refactor existing functions into a single generic function
- Reduces repeated JS code a lot
* Add ability to create a new extra line item
* Adds button for creating a new lien item
* JS linting
* Update test
* Typo fix
(cherry picked from commit 28ac2be35b)
* Enable search for return order
* Don't do pricing (yet) for returnorder extra line table
- Fixes an uncaught error
* Error catching for api.js
* Updates for order models:
- Add 'target_date' field to abstract Order model
- Add IN_PROGRESS status code for return order
- Refactor 'overdue' and 'outstanding' API queries
- Refactor OVERDUE_FILTER on order models
- Refactor is_overdue on order models
- More table filters for return order model
* JS cleanup
* Create ReturnOrderLineItem model
- New type of status label
- Add TotalPriceMixin to ReturnOrder model
* Adds an API serializer for the ReturnOrderLineItem model
* Add API endpoints for ReturnOrderLineItem model
- Including some refactoring along the way
* javascript: refactor loadTableFilters function
- Pass enforced query through to the filters
- Call Object.assign() to construct a superset query
- Removes a lot of code duplication
* Refactor hard-coded URLS to use {% url %} lookup
- Forces error if the URL is wrong
- If we ever change the URL, will still work
* Implement creation of new return order line items
* Adds 'part_detail' annotation to ReturnOrderLineItem serializer
- Required for rendering part information
* javascript: refactor method for creating a group of buttons in a table
* javascript: refactor common buttons with helper functions
* Allow edit and delete of return order line items
* Add form option to automatically reload a table on success
- Pass table name to options.refreshTable
* JS linting
* Add common function for createExtraLineItem
* Refactor loading of attachment tables
- Setup drag-and-drop as part of core function
* CI fixes
* Refactoring out some more common API endpoint code
* Update migrations
* Fix permission typo
* Refactor for unit testing code
* Add unit tests for Contact model
* Tests for returnorder list API
* Annotate 'line_items' to ReturnOrder serializer
* Driving the refactor tractor
* More unit tests for the ReturnOrder API endpoints
* Refactor "print orders" button for various order tables
- Move into "setupFilterList" code (generic)
* add generic 'label printing' button to table actions buttons
* Refactor build output table
* Refactoring icon generation for js
* Refactoring for Part API
* Fix database model type for 'received_date'
* Add API endpoint to "issue" a ReturnOrder
* Improvements for stock tracking table
- Add new status codes
- Add rendering for SalesOrder
- Add rendering for ReturnOrder
- Fix status badges
* Adds functionality to receive line items against a return order
* Add endpoints for completing and cancelling orders
* Add option to allow / prevent editing of ReturnOrder after completed
* js linting
* Wrap "add extra line" button in setting check
* Updates to order/admin.py
* Remove inline admin for returnorderline model
* Updates to pass CI
* Serializer fix
* order template fixes
* Unit test fix
* Fixes for ReturnOrder.receive_line_item
* Unit testing for receiving line items against an RMA
* Improve example report for return order
* Extend unit tests for reporting
* Cleanup here and there
* Unit testing for order views
* Clear "sales_order" field when returning against ReturnOrder
* Add 'location' to deltas when returning from customer
* Bug fix for unit test