* Add BUILDORDER_REQUIRE_RESPONSIBLE setting
- If set, build orders must specify a responsible owner
* Add responsible required setting to other order models:
- PurchaseOrder
- SalesOrder
- ReturnOrder
* Add unit test
* Adjust unit tests
* Settings updates:
- Only check settings for global and user settings
- Plugin settings are not defined at run-time
* typo fix
* More spelling fixes
* Specify responsible owner pk
* PartCategoryTree - add "subcategories" field
* Fix rendering of PartCategoryTree
* Implement similar fixes for StockLocationTree
* Bump API version
* Breadcrumb list tweak
- Limit to 7 items
* Fix bug for stock tree serializer
* Add unit tests
* PartCategoryList: Add FilterSet class
* Update PartCategory filters
- Migrate all custom filtering to the FilterSet
* Logic updates
* Revert deleted code
* Implement similar filters for StockLocation list API
* Update API docs
* Unit test updates
* More fix
* Fix for StockLocation filterclass
* Fix PUI tables
* Cleanup CUI tables
* Updated unit tests
* Add basic table for stock item test results
* Improve custom data formatter callback
* Custom data formatter for returned results
* Update YesNoButton functionality
- Add PassFailButton with custom text
* Enhancements for stock item test result table
- Render all data
* Add placeholder row actions
* Fix table link
* Add option to filter parttesttemplate table by "inherited"
* Navigate through to parent part
* Update PartTestTemplate model
- Save 'key' value to database
- Update whenever model is saved
- Custom data migration
* Custom migration step in tasks.py
- Add custom management command
- Wraps migration step in maintenance mode
* Improve uniqueness validation for PartTestTemplate
* Add 'template' field to StockItemTestResult
- Links to a PartTestTemplate instance
- Add migrations to link existing PartTestTemplates
* Add "results" count to PartTestTemplate API
- Include in rendered tables
* Add 'results' column to test result table
- Allow filtering too
* Update serializer for StockItemTestResult
- Include template information
- Update CUI and PUI tables
* Control template_detail field with query params
* Update ref in api_version.py
* Update data migration
- Ensure new template is created for top level assembly
* Fix admin integration
* Update StockItemTestResult table
- Remove 'test' field
- Make 'template' field non-nullable
- Previous data migrations should have accounted for this
* Implement "legacy" API support
- Create test result by providing test name
- Lookup existing template
* PUI: Cleanup table
* Update tasks.py
- Exclude temporary settings when exporting data
* Fix unique validation check
* Remove duplicate code
* CUI: Fix data rendering
* More refactoring of PUI table
* More fixes for PUI table
* Get row expansion working (kinda)
* Improve rendering of subtable
* More PUI updates:
- Edit existing results
- Add new results
* allow delete of test result
* Fix typo
* Updates for admin integration
* Unit tests for stock migrations
* Added migration test for PartTestTemplate
* Fix for AttachmentTable
- Rebuild actions when permissions are recalculated
* Update test fixtures
* Add ModelType information
* Fix TableState
* Fix dataFormatter type def
* Improve table rendering
* Correctly filter "edit" and "delete" buttons
* Loosen requirements for dataFormatter
* Fixtures for report tests
* Better API filtering for StocokItemTestResult list
- Add Filter class
- Add option for filtering against legacy "name" data
* Cleanup API filter
* Fix unit tests
* Further unit test fixes
* Include test results for installed stock items
* Improve rendering of test result table
* Fix filtering for getTestResults
* More unit test fixes
* Fix more unit tests
* FIx part unit test
* More fixes
* More unit test fixes
* Rebuild stock item trees when merging
* Helper function for adding a test result to a stock item
* Set init fix
* Code cleanup
* Cleanup unused variables
* Add docs and more unit tests
* Update build unit test
* Fix "company" filter for StockList
- distinct() was in the wrong spot
- Added a new unit test to cover this
* Update stocklist API filter
- Move custom filtering into FilterSet class
- Exposes available filters to API documentation
- Improved readability / field validation
* Further improvements for StockList API
* For for order extra line item serializer
- 'title' is not a valid field
To check if a variable is equal to one of many values, combine the values into a tuple and check if the variable is contained `in` it instead of checking for equality against each of the values.
This is faster, less verbose, and more readable.
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>
* 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
* Add API endpoint for changing stock item status
- Change status for multiple items simultaneously
- Reduce number of database queries required
* Perform bulk update in serializer
* Update 'updated' field
* Add front-end code
* Bump API version
* Bug fix and unit test
* add file for states
* move general definition out
* add some tests and docs
* add tests for invalid definitions
* make status_label tag generic
* move templatetags
* remove unused tag
* rename test file
* make status label a lookup
* rename tags
* move import structure
* add missing tag
* collect states dynamically
* fix context function
* move api function out
* add tests for tags
* rename tests
* refactor imports
* Add test for API function
* improve errors and add tests for imporved errors
* make test calls simpler
* refactor definitions to use enums
* switch to enum
* refactor definitions to use enums
* fix lookup
* fix tag name
* make _TAG lookup a function
* cleanup BaseEnum
* make _TAG definition simpler
* restructure status codes to enum
* reduce LoC
* type status codes as int
* add specific function for template context
* Add definition for lookups
* fix filter lookup
* TEST: "fix" action lookup
* Add missing migrations
* Make all group code references explict
* change default on models to value
* switch to IntEnum
* move groups into a seperate class
* only request _TAG if it exsists
* use value and list
* use dedicated groups
* fix stock assigment
* fix order code
* more fixes
* fix borked change
* fix render lookup
* add group
* fix import
* fix syntax
* clenup
* fix migrations
* fix typo
* fix wrong value usage
* fix test
* remove group section
* remove group section
* add more test cases
* Add more docstring
* move choices out of migrations
* change import ordeR?
* last try before I revert
* Update part.migrations.0112
- Add custom migration class which handles errors
* Add unit test for migration
- Ensure that the new fields are added to the model
* Update reference to PR
---------
Co-authored-by: Oliver Walters <oliver.henry.walters@gmail.com>
* Update models: add MetadataMixin
* Fix name of model in Metadata API definition
* Add API endpoints
* Update API version
* Fix syntax
* Add API endpoint for RO, RO line, RO line extra item
* Add Metadata to Contacts
* Fix link in API version
* Fix name of model
* Fix error?
* Fix error?
* Fix all errors, hopefully..
* Add tests for order, line, extraline metadata
Extend for PO, SO
* Add tests for metadata for Company-related models
* Fix spelling
* Consolidate metadata test for all part models into one test
* Add test for all Stock metadata
* Update stock test_api
* Add all metadata tests for orders
* Fix various errors in tests
* Fix model name
* Add migration files
* Update tests for metadata
* Resolve conflict around API version number
* Rename migration file
* Rename migration file
* Will Contact edit endpoint work better?
* Revert changes in URL definitions
* Remove test, duplicate
* Fix tests with fixed PK, not from fixtures, to use a dynamic PK
* Fix migration overlap
* Add validation to part units field
* Add "pack_units" field to the SupplierPart model
* Migrate old units to new units, and remove old field
* Table fix
* Fixture fix
* Update migration
* Improve "hook" for loading custom unit database
* Display part units column in part table
- Also allow ordering by part units
- Allow filtering to show parts which have defined units
* Adds data migration for converting units to valid values
* Add "pack_units_native" field to company.SupplierPart model
* Clean pack units when saving a SupplierPart
- Convert to native part units
- Handle empty units value
- Add unit tests
* Add background function to rebuild supplier parts when a part is saved
- Required to ensure that the "pack_size_native" is up to date
* Template updates
* Sort by native units first
* Bump API version
* Rename "pack_units" to "pack_quantity"
* Update migration file
- Allow reverse migration
* Fix for currency migration
- Handle case where no currencies are provided
- Handle case where base currency is not in provided options
* Adds unit test for data migration
* Add unit test for part.units data migration
- Check that units fields are updated correctly
* Add some extra "default units"
- each / piece
- dozen / hundred / thousand
- Add unit testing also
* Update references to "pack_size"
- Replace with "pack_quantity" or "pack_quantity_native" as appropriate
* Improvements based on unit testing
* catch error
* Docs updates
* Fixes for pricing tests
* Update unit tests for part migrations · 1b6b6d9d
* Bug fix for conversion code
* javascript updates
* JS formatting fix
* Add flag to API which allows using pack size when adding stock items manually
* Check for use_pack_size before pop
* Add test data and tests
* Improve data handling
* Add form field for use_pack_size when adding stock
* Add description of pack size to docs
* Don't check for supplier part if it is None
* Move form field to after supplier part, for better logic
* Fix wrong function
* Fix tests
* Adjust purchase price when using pack size
* Adjust help text for purchase price
* Adjust help text for purchase price some more
* Fix tests for purchase price of added stock
* Update api_version.py
* Unit test speed improvements
- Move from insantiating data in setUp to setUpTestData
* Update UserMixin class for API testing
* Bunch of test updates
* Further test updates
* Test fixes
* Add allowances for exchange rate server not responding
* Fixes for group role test
* Pass "Part" instance to plugins when calling validate_serial_number
* Pass part instance through when validating IPN
* Improve custom part name validation
- Pass the Part instance through to the plugins
- Validation is performed at the model instance level
- Updates to sample plugin code
* Pass StockItem through when validating batch code
* Pass Part instance through when calling validate_serial_number
* Bug fix
* Update unit tests
* Unit test fixes
* Fixes for unit tests
* More unit test fixes
* More unit tests
* Furrther unit test fixes
* Simplify custom batch code validation
* Further improvements to unit tests
* Further unit test
* Improve filtering options for StockItem list
- Make use of StockFilter introspection
* Remove outdated filter
* remove outdated "max_results" parameter
* Fix cascade issue for stocklist API
* Add relationship filters to the StockItemFilter
* Fix filtering by 'status' and 'allocated'
* Refactor 'customer' and 'expired' filters
* Cleanup
* Adds unit test for top-level stock location filtering
* Create new model for storing Part pricing data
Currently this model does not "do" anything but will be used for caching pre-calculated pricing information
* Define function for accessing pricing information for a specific part
* Adds admin site support for new PartPricing model
* Specify role for PartPricing model
* Allow blank values for PartPricing model fields
* Add some TODO entries
* Update migration files to sync with latest master
* Expose API endpoint for viewing part pricing information
* Update migration file
* Improvements:
- Updated model with new fields
- Code for calculating BOM price
- Code for calculating internal price
- Code for calculating supplier price
- Updated unit testing
* Fix (and test) for API serializer
* Including min/max pricing data in part serializer
* Bump API version
* Add pricing overview information in part table
- Adds helper function for formatting currency data
- No longer pre-render "price strings" on the server
* Overhaul of BOM API
- Pricing data no longer calculated "on the fly"
- Remove expensive annotation operations
- Display cached price range information in BOM table
* Filter BOM items by "has pricing"
* Part API endpoint can be filtered by price range
* Updpated API version notes
* Improvements for price caching calculations
- Handle null price values
- Handle case where conversion rates are missing
- Allow manual update via API
* Button to manually refresh pricing
* Improve rendering of price-break table
* Update supplier part pricing table
* Updated js functions
* Adds background task to update assembly pricing whenever a part price cache is changed
* Updates for task offloading
* HTML tweaks
* Implement calculation of historical purchase cost
- take supplier part pack size into account
- improve unit tests
* Improvements for pricing tab rendering
* Refactor of pricing page
- Move javascript functions out into separate files
- Change price-break tables to use bar graphs
- Display part pricing history table and chart
- Remove server-side rendering for price history data
- Fix rendering of supplier pricing table
- Adds extra filtering options to the SupplierPriceBreak API endpoint
* Refactor BOM pricing chart / table
- Display as bar chart with min/max pricing
- Display simplified BOM table
* Update page anchors
* Improvements for BOM pricing table display
* Refactoring sales data tables
- Add extra data and filter options to sales order API endpoints
- Display sales order history table and chart
* Add extra fields to PartPricing model:
- sale_price_min
- sale_price_max
- sale_history_min
- sale_history_max
* Calculate and cache sale price data
* Update part pricing when PurchaseOrder is completed
* Update part pricing when sales order is completed
* Signals for updating part pricing cache
- Whenever an internal price break is created / edited / deleted
- Whenever a sale price break is created / edited / deleted
* Also trigger part pricing update when BomItem is created / edited / deleted
* Update part pricing whenever a supplier price break is updated
* Remove has_complete_bom_pricing method
* Export min/max pricing data in BOM file
* Fix pricing data in BOM export
- Calculate total line cost
- Use more than two digits
* Add pricing information to part export
Also some improvements to part exporting
* Allow download of part category table
* Allow export of stock location data to file
* Improved exporting of StockItem data
* Add cached variant pricing data
- New fields in part pricing model
- Display variant pricing overview in "pricing" tab
* Remove outdated "PART_SHOW_PRICE_HISTORY" setting
* Adds scheduled background task to periodically update part pricing
* Internal prices can optionally override other pricing
* Update js file checks
* Update price breaks to use 6 decimal places
* Fix for InvenTreeMoneySerializer class
- Allow 6 decimal places through the API
* Update for supplier price break table
* javascript linting fix
* Further js fixes
* Unit test updates
* Improve rendering of currency in templates
- Do not artificially limit to 2 decimal places
* Unit test fixes
* Add pricing information to part "details" tab
* Tweak for money formatting
* Enable sort-by-price in BOM table
* More unit test tweaks
* Update BOM exporting
* Fixes for background worker process
- To determine if worker is running, look for *any* successful task, not just heartbeat
- Heartbeat rate increased to 5 minute intervals
- Small adjustments to django_q settings
Ref: https://github.com/inventree/InvenTree/issues/3921
(cherry picked from commit cb26003b92536f67fba640d84aa2a6596d18b4e0)
* Force background processing of heartbeat task when server is started
- Removes the ~5 minute window in which the server "thinks" that the worker is not actually running
* Adjust strategy for preventing recursion
- Rather than looking for duplicate parts, simply increment a counter
- Add a "scheduled_for_update" flag to prevent multiple updates being scheduled
- Consolidate migration files
* Adds helper function for rendering a range of prices
* Include variant cost in calculations
* Fixes for "has_pricing" API filters
* Ensure part pricing status flags are reset when the server restarts
* Bug fix for BOM API filter
* Include BOM quantity in BOM pricing chart
* Small tweaks to pricing tab
* Prevent caching when looking up settings in background worker
- Caching across mnultiple processes causes issues
- Need to move to something like redis to solve this
- Ref: https://github.com/inventree/InvenTree/issues/3921
* Fixes for /part/pricing/ detail API endpoint
* Update pricing tab
- Consistent naming
* Unit test fixes
* Prevent pricing updates when loading test fixtures
* Fix for Part.pricing
* Updates for "check_missing_pricing"
* Change to pie chart for BOM pricing
* Unit test fix
* Updates
- Sort BOM pie chart correctly
- Simplify PartPricing.is_valid
- Pass "limit" through to check_missing_pricing
- Improved logic for update scheduling
* Add option for changing how many decimals to use when displaying pricing data
* remove old unused setting
* Consolidate settings tabs for pricing and currencies
* Fix CI after changing settings page
* Fix rendering for "Supplier Pricing"
- Take unit pricing / pack size into account
* Extra filtering / ordering options for the SupplierPriceBreak API endpoint
* Fix for purchase price history graph
- Use unit pricing (take pack size into account)
* JS fixes
* Adds new plugin mixin for performing custom validation steps
* Adds simple test plugin for custom validation
* Run part name and IPN validators checks through loaded plugins
* Expose more validation functions to plugins:
- SalesOrder reference
- PurchaseOrder reference
- BuildOrder reference
* Remove custom validation of reference fields
- For now, this is too complex to consider given the current incrementing-reference implementation
- Might revisit this at a later stage.
* Custom validation of serial numbers:
- Replace "checkIfSerialNumberExists" method with "validate_serial_number"
- Pass serial number through to custom plugins
- General code / docstring improvements
* Update unit tests
* Update InvenTree/stock/tests.py
Co-authored-by: Matthias Mair <code@mjmair.com>
* Adds global setting to specify whether serial numbers must be unique globally
- Default is false to preserve behaviour
* Improved error message when attempting to create stock item with invalid serial numbers
* Add more detail to existing serial error message
* Add unit testing for serial number uniqueness
* Allow plugins to convert a serial number to an integer (for optimized sorting)
* Add placeholder plugin methods for incrementing and decrementing serial numbers
* Typo fix
* Add improved method for determining the "latest" serial number
* Remove calls to getLatestSerialNumber
* Update validate_serial_number method
- Add option to disable checking for duplicates
- Don't pass optional StockItem through to plugins
* Refactor serial number extraction methods
- Expose the "incrementing" portion to external plugins
* Bug fixes
* Update unit tests
* Fix for get_latest_serial_number
* Ensure custom serial integer values are clipped
* Adds a plugin for validating and generating hexadecimal serial numbers
* Update unit tests
* Add stub methods for batch code functionality
* remove "hex serials" plugin
- Was simply breaking unit tests
* Allow custom plugins to generate and validate batch codes
- Perform batch code validation when StockItem is saved
- Improve display of error message in modal forms
* Fix unit tests for stock app
* Log message if plugin has a duplicate slug
* Unit test fix
Co-authored-by: Matthias Mair <code@mjmair.com>
* Added default max depth and lazy loading to StorageLocation
* Added default max depth and lazy loading to PartCategory
* Update API version
* lint: fix
* Added INVENTREE_TREE_DEPTH setting
* Refactored int conversion into own helper function
* Added tests
* Adds a Part API filter to limit query to valid conversion options for the specified part
* Refactor 'exclude_tree' filter to use django-filter framework
* Refactor the 'ancestor' filter
* Refactoring more API filtering fields:
- variant_of
- in_bom_for
* Adds API endpoint / view / serializer for converting a StockItem to variant
* stock item conversion now perfomed via the API
* Bump API version
* Add unit tests for new filtering option on the Part list API endpoint
* Adds unit test for "convert" API endpoint functionality
* Catch DoesNotExist error
* Move notificationtable function to js file
* Fix for custom metadata class
- Previously only worked if a POST or PUT action was available on the endpoint
- So, a ListAPIView endpoint would not actually work!
- Adding in a BulkDelete mixin to a ListAPIView caused failure
* Add unit test to ensure new OPTIONS metadata updates are checked
* Expand functionality of the existing BulkDelete mixin
- Allow deletion by custom filters
- Allow each implementing class to implement custom filters
- Adds more unit testing for BulkDelete mixin class
* Add bulk delete operation for Notification API
- Ensure users can only delete their *own* notifications
* Improve notification tables / buttons / etc
* Adds unit testing for bulk delete of notifications
- Fixed API permissions for notifications list endpoint
* Update BulkDelete operations for the StockItemTestResult table
* Use filters parameter in attachments table to ensure that only correct attachments are deleted
* JS linting
* Fixes for unit tests
* Introduces a BulkDelete API mixin class
- Allows deletion of multiple items against a single API request
* Bump API version
* Adds BulkDelete mixin to StockItemTestResult API class
* refactor "multi BOM Item delete" to use new approach
* Refactor various attachment API endpoints
* Refactor multi delete for StockItem
* Convert remaining enndpoints over
* Fix for API test code
* Adds ability to return item into stock via the API
* Remove old server-side form / view for returning stock from a customer
* Add unit tests for new API endpoint
* Add pre-commit to the stack
* exclude static
* Add locales to excludes
* fix style errors
* rename pipeline steps
* also wait on precommit
* make template matching simpler
* Use the same code for python setup everywhere
* use step and cache for python setup
* move regular settings up into general envs
* just use full update
* Use invoke instead of static references
* make setup actions more similar
* use python3
* refactor names to be similar
* fix runner version
* fix references
* remove incidential change
* use matrix for os
* Github can't do this right now
* ignore docstyle errors
* Add seperate docstring test
* update flake call
* do not fail on docstring
* refactor setup into workflow
* update reference
* switch to action
* resturcture
* add bash statements
* remove os from cache
* update input checks
* make code cleaner
* fix boolean
* no relative paths
* install wheel by python
* switch to install
* revert back to simple wheel
* refactor import export tests
* move setup keys back to not disturbe tests
* remove docstyle till that is fixed
* update references
* continue on error
* add docstring test
* use relativ action references
* Change step / job docstrings
* update to merge
* reformat comments 1
* fix docstrings 2
* fix docstrings 3
* fix docstrings 4
* fix docstrings 5
* fix docstrings 6
* fix docstrings 7
* fix docstrings 8
* fix docstirns 9
* fix docstrings 10
* docstring adjustments
* update the remaining docstrings
* small docstring changes
* fix function name
* update support files for docstrings
* Add missing args to docstrings
* Remove outdated function
* Add docstrings for the 'build' app
* Make API code cleaner
* add more docstrings for plugin app
* Remove dead code for plugin settings
No idea what that was even intended for
* ignore __init__ files for docstrings
* More docstrings
* Update docstrings for the 'part' directory
* Fixes for related_part functionality
* Fix removed stuff from merge 99676ee
* make more consistent
* Show statistics for docstrings
* add more docstrings
* move specific register statements to make them clearer to understant
* More docstrings for common
* and more docstrings
* and more
* simpler call
* docstrings for notifications
* docstrings for common/tests
* Add docs for common/models
* Revert "move specific register statements to make them clearer to understant"
This reverts commit ca9665462202c2d63f34b4fd920013b1457bbb6d.
* use typing here
* Revert "Make API code cleaner"
This reverts commit 24fb68bd3e1ccfea2ee398c9e18afb01eb340fee.
* docstring updates for the 'users' app
* Add generic Meta info to simple Meta classes
* remove unneeded unique_together statements
* More simple metas
* Remove unnecessary format specifier
* Remove extra json format specifiers
* Add docstrings for the 'plugin' app
* Docstrings for the 'label' app
* Add missing docstrings for the 'report' app
* Fix build test regression
* Fix top-level files
* docstrings for InvenTree/InvenTree
* reduce unneeded code
* add docstrings
* and more docstrings
* more docstrings
* more docstrings for stock
* more docstrings
* docstrings for order/views
* Docstrings for various files in the 'order' app
* Docstrings for order/test_api.py
* Docstrings for order/serializers.py
* Docstrings for order/admin.py
* More docstrings for the order app
* Add docstrings for the 'company' app
* Add unit tests for rebuilding the reference fields
* Prune out some more dead code
* remove more dead code
Co-authored-by: Oliver Walters <oliver.henry.walters@gmail.com>