* Add option to recursively delete part categories
Fixes#3384
* - Added test (broken ATM)
- Refactored parameters to booleanish
* Fix styling issues reported by flake8
* Working on unit testing
* Added on_commit debugging callback
* Separate the recursive part of the deletion into another method
to make sure that the delete operation is performed in a single transaction
* Trying transactions with @transactions.atomic
* Fix flake8 reported issues
* Removed unused debug callback
* Fixed tests for category recursive deletion
* Fix flake reported issues
* Fix flake reported issues
Again
* Remove unrelated formatting changes
* Fixed a part of review comments
* Add 'barcode_hash' data to more API serializers:
- part
- stock location
- supplier part
* Bump API version
* Make 'barcode_hash' fields read-only via the API
* Fix for Part serializer
* Allow loading of "builtin" plugins, even if "plugins" are not explicitly loaded
* Updates for 'admin' buttons:
- Make them work like proper links
- Hidden if 'hide_admin_link' customization option is set
- Check for user staff status
* Cleanup rendering of "plugins" display
* Consolidate InvenTree barcode plugins into single plugin class
* Hide "install plugin" button if plugins are not enabled
* Add info message is external plugins are not enabled
* Fixes for loading plugins
- Always load 'builtin' plugins
- Refactor calls to "is_active" at various points in codebase
* Various tweaks
- Improve builtin plugin descriptions
- Spelling fixes
* Adjust plugin detail for builtin plugins
* Simplify barcode plugin class
* Simplify template rendering
* Bug fix for inventree barcode plugin
* Revert "Simplify template rendering"
This reverts commit 3a6755a659.
* Re-re-improve template rendering
- Required as the template has been refactored for both "active" and "inactive" plugins
* Fixing unit tests for barcode plugin
* Ensure that barcode scan actions do not take a "long time":
- Add a default timeout of 0.1s to any POST or GET request in the testing framework
- Can be overridden by calling method if desired
* Display plugin "builtin" status in admin panel
* Fix unit tests for plugin API
* Further unit testing fixes
* Version number tweaks
* Further tweaks for unit testing
* Allow longer timeout for report printing via API
* Increase default timeout for API tests
- Sometimes CPU spike can cause the test to fail :|
* label printing can take a bit longer
* Remove timeout requirement from API tester
- Too variable to be reliable for CI
* Reorder action buttons for stock location
* Tweak position of "New Location" button
* Tweak loaction of "New Category" button for part category page
* Working on skeleton for new barcode dialog
* Scan location into location
* Add configurable input delay for processing barcode scan data
* Add unit tests for internalpricebreak
- Exposes an existing bug
* Ensure that rounding-decimal and prices are rounded correctly
- Force remove trailing digits / reduce precision
* Check that part name format is actually valid
* Expand exception handling when generating part "full_name"
* Do not enforce client-side sanitization of form data
- Form data sanitization is now handled server side
* Prevent name check on null attachment file
(cherry picked from commit c4ed1e23a01f278d696c2853337bdde0a682c6c5)
* Unit testing for uploading attachments via API
(cherry picked from commit 592548065f7b69f58b8aaaaea506e3ec653a63df)
* 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>
* Adds 'consumable' field to BomItem model
* Add consumable field to API
* Consumable items always count as "allocated" for a build
* Add new BOM fields to BOM item checksum calculation
* Display 'consumable' status in BOM table
* Fix order of database migrations
* Update unit tests
* Fix for BOM table
* Remove "infinite" field from StockItem model
- Not used anywhere for functionality
- Hidden from the user
- Now replaced by the "consumable" concept in the BuildOrder model
* Update build order allocation table display
* Prevent auto-allocation of stock to consumable BOM items
* Ignore consumable BOM items when allocating stock to a build order
* Reimplmement "footer" row for BOM table
* Fix "can_build" calculation
- Ignore "consumable" BOM items
* Unrelated typo fix
* Tweak BOM table
* More visual tweaks to BOM table
* Add unit test for consumable field
* Hard-code URL fforr loadPartParameterTable function
* Improve API efficiency for including parameter data in Part query
* Fix loading of part parameter data into table
* define a simple model mixin class for barcode
* Adds generic function for assigning a barcode to a model instance
* StockItem model now implements the BarcodeMixin class
* Implement simple unit tests for new code
* Fix unit tests
* Data migration for uid field
* Remove references to old 'uid' field
* Migration for removing old uid field from StockItem model
* Bump API version
* Change lookup_barcode to be a classmethod
* Change barcode_model_type to be a class method
* Cleanup for generic barcode scan and assign API:
- Raise ValidationError as appropriate
- Improved unit testing
- Groundwork for future generic implementation
* Further unit tests for barcode scanning
* Adjust error messages for compatibility
* Unit test fix
* Fix hash_barcode function
- Add unit tests to ensure it produces the same results as before the refactor
* Add BarcodeMixin to Part model
* Remove old format_barcode function from Part model
* Further fixes for unit tests
* Add support for assigning arbitrary barcode to Part instance
- Simplify barcode API
- Add more unit tests
* More unit test fixes
* Update unit test
* Adds generic endpoint for unassigning barcode data
* Update web dialog for unlinking a barcode
* Template cleanup
* Add Barcode mixin to StockLocation class
* Add some simple unit tests for new model mixin
* Support assigning / unassigning barcodes for StockLocation
* remove failing outdated test
* Update template to integrate new barcode support for StockLocation
* Add BarcodeMixin to SupplierPart model
* Adds QR code view for SupplierPart
* Major simplification of barcode API endpoints
- Separate existing barcode plugin into two separate classes
- Simplify and consolidate the response from barcode scanning
- Update unit testing
* Yet more unit test fixes
* Yet yet more unit test fixes
* Hide units on part page if units are null
* Hide null units in stock table
* Hide null units in supplier part table
* Hide null units in part tables
* Template cleanup
* Unit test fix
* Specify serializer label
* Add units to part grid view
* improve display of stock units in part table
* Add units display to stock on part page
* Display units in supplier part table
* Simplify stock quantity display in stock table
* Adds 'pack_size' field to SupplierPart model
* Edit pack_size for SupplierPart via API
* Display pack size in supplier part page template
* Improve table ordering for SupplierPart table
* Fix for API filtering
- Need to use custom filter class
* Adds functionality to duplicate an existing SupplierPart
* Bump API version number
* Display annotation of pack size in purchase order line item table
* Display additional information in part purchase order table
* Add UOM to purchase order table
* Improve receive items functionality
* Indicate quantity which will be received in modal form
* Update the received quantity as the user changes the value
* Take the pack_size into account when receiving line items
* Take supplierpart pack size into account when receiving line items
* Add "pack size" column to purchase order line item table
* Tweak supplier part table
* Update 'on_order' queryset annotation to take pack_size into account
- May god have mercy on my soul
* Adds a unit test to validate that the on_order queryset annotation is working as expected
* Update Part.on_order method to take pack_size into account
- Check in existing unit test also
* Fix existing unit tests
- Previous unit test was actually in error
- Logic for calculating "on_order" was broked
* More unit tests for receiving items against a purchase order
* Allow pack_size < 1
* Display pack size when adding / editing PurchaseOrderLineItem
* Fix bug in part purchase order table
* Update part purchase order table again
* Exclude notificationmessage when exporting dataset
* Also display pack size when ordering parts from secondary form
* javascript linting
* Change user facing strings to "Pack Quantity"
* Adds 'description' field to PartParameterTemplate model
* Add 'description' field to API, update settings table
* Bump API version
* Allow more characters in PartParameterTemplate name
* Remove control and non-printable characters from form fields (server side)
* Update regex to properly filter out control characters only
* Add regex lib to requirements flie
* Fix regex in javascript (client side)
* add required unicode flag
* Gotta make a variable to reference a variable
* Fix scaling issues
* Hey, it's only a suggestion
* Fix quantity display in build order table
* Logic fix for destroying / refreshing chart
* Better handling of edge cases
* Fix issue with "undefined" labels
* Speculative should be a question mark
* Handle case where initial API call fails
* Error if scheduling fails to retrieve
* Visual improvements for scheduling graph:
- Fixes for vertical scales
- Add "minimum stock level" line
* Refactor / improve query for list of BOM items a part can exist in
* Remove stock column from "substitute part" dialog
- Stock quantity no longer available in this serailizer
* Add a button to reload part scheduling information
* Add extra information to part scheduling API
- Include "speculative" quantity drawdown for build orders
* Add table of scheduling data
* Improved chart display
- Adds "minimum" and "maximum" expected values
- Adds table of scheduling information
* Bump API version
* Improve table rendering
* Improve axis scaling
* Add ability to dynamically refresh schedling data
* JS linting
* JS fix
* Added icon to stock location
- added `icon` field to `stock_stocklocation` model
- added input field to stock location form
- added icon to breadcrumb treeview in header
- added icon to sub-locations table
- added icon to location detail information
- added `STOCK_LOCATION_DEFAULT_ICON` setting as default
* Added icon to part category
- added `icon` field to `part_partcategory` model
- added input field to part category form
- added icon to breadcrumb treeview in header
- added icon to sub-categories table
- added icon to category detail information
- added `PART_CATEGORY_DEFAULT_ICON` setting as default
* Added `blocktrans` to allowed tags in ci check
* fix: style
* Added `endblocktrans` to allowed tags in ci check
* fix: missing `,` in ci check allowed tags script
* Removed blocktrans from js and fixed style
* Update bleach clean function
- Invalid tags are stripped out
- & > < characters are accepted
* Throw an error if any field contains HTML tags
* Update unit tests
* 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
* Allow part category table to be ordered by part count
* Add queryset annotation for part-category part-count
- Uses subquery to annotate the part-count for sub-categories
- Huge reduction in number of queries
* Update 'pathstring' property of PartCategory and StockLocation
- No longer a dynamically calculated value
- Constructed when the model is saved, and then written to the database
- Limited to 250 characters
* Data migration to re-construct pathstring for PartCategory objects
* Fix for tree model save() method
* Add unit tests for pathstring construction
* Data migration for StockLocation pathstring values
* Update part API
- Add new annotation to PartLocationDetail view
* Update API version
* Apply similar annotation to StockLocation API endpoints
* Extra tests for PartCategory API
* Unit test fixes
* Allow PartCategory and StockLocation lists to be sorted by 'pathstring'
* Further unit test fixes
* switch to pathlib
* more pathlib
* useconvert env to path
* fix typo
* use resolve instead of absolute
* fix gitppod
* also allow parents
* replace more os operations
* fix string replacement feature
* make sure root dirs exsist
* fix replace function
* refactor duplicate code
* reduce code
* make sure dirs exist
* fix typo
* also create parent dirs
* fix match statement
* fix statments expecting string
* return getMigrationFileNames to old behaviour
* fully resolve config file
* make sure comparison works
* use pathlib in tasks
* fix file count test
* reduce code duplication in test + add test for part
* fix test
* re-add os
* Make pathlib usage simpler
* Pre-fill quantity on part ordering form
- Adds new API endpoint for requirement data
- Load data on the fly when launching ordering form
* Bump API version
* Adds configurable setting for maximum remote image size
* Add helper function for downloading image from remote URL
- Will replace existing function
- Performs more thorough sanity checking
* Replace existing image downloading code
- part image uses new generic function
- company image uses new generic function
* Rearrange settings
* Refactor and cleanup existing views / forms
* Add unit testing for image downloader function
* Refactor image downloader forms
- Part image download now uses the API
- Company image download now uses the API
- Remove outdated forms / views / templates
* Increment API version
* Prevent remote image download via API if the setting is not enabled
* Do not attempt to validate or extract image from blank URL
* Fix custom save() serializer methods
* Refactor template helpers for displaying uploaded images
* Unit test for asset tag
* Unit tests for 'uploaded_image' tag
* Add simple tests for part_image and company_image functions
* Unit test for barcode constructor
* Unit tests for qrcode
* Refactor the 'company_logo.png' to be a new template tag
- Add unit tests
* Adds a new field to the report asset model
- Unique key which can be used to identify particular assets
- e.g. company logo
* Refactor logo image tags
- Make use of existing CUSTOM_LOGO setting
- Adds a "logo_image" template tag for reports
* Remove previous migration - strategy no longer required
* Adds a configurable 'reference pattern' to the IndexingReferenceMixin class
* Expand tests for reference_pattern validator:
- Prevent inclusion of illegal characters
- Prevent multiple groups of hash (#) characters
- Add unit tests
* Validator now checks for valid strftime formatter
* Adds build order reference pattern
* Adds function for creating a valid regex from the supplied pattern
- More unit tests
- Use it to validate BuildOrder reference field
* Refactoring the whole thing again - try using python string.format
* remove datetime-matcher from requirements.txt
* Add some more formatting helper functions
- Construct a regular expression from a format string
- Extract named values from a string, based on a format string
* Fix validator for build order reference field
* Adding unit tests for the new format string functionality
* Adds validation for reference fields
* Require the 'ref' format key as part of a valid reference pattern
* Extend format extraction to allow specification of integer groups
* Remove unused import
* Fix requirements
* Add method for generating the 'next' reference field for a model
* Fix function for generating next BuildOrder reference value
- A function is required as class methods cannot be used
- Simply wraps the existing class method
* Remove BUILDORDER_REFERENCE_REGEX setting
* Add unit test for build order reference field validation
* Adds unit testing for extracting integer values from a reference field
* Fix bugs from previous commit
* Add unit test for generation of default build order reference
* Add data migration for BuildOrder model
- Update reference field with old prefix
- Construct new pattern based on old prefix
* Adds unit test for data migration
- Check that the BuildOrder reference field is updated as expected
* Remove 'BUILDORDER_REFERENCE_PREFIX' setting
* Adds new setting for SalesOrder reference pattern
* Update method by which next reference value is generated
* Improved error handling in api_tester code
* Improve automated generation of order reference fields
- Handle potential errors
- Return previous reference if something goes wrong
* SalesOrder reference has now been updated also
- New reference pattern setting
- Updated default and validator for reference field
- Updated serializer and API
- Added unit tests
* Migrate the "PurchaseOrder" reference field to the new system
* Data migration for SalesOrder and PurchaseOrder reference fields
* Remove PURCHASEORDER_REFERENCE_PREFIX
* Remove references to SALESORDER_REFERENCE_PREFIX
* Re-add maximum value validation
* Bug fixes
* Improve algorithm for generating new reference
- Handle case where most recent reference does not conform to the reference pattern
* Fixes for 'order' unit tests
* Unit test fixes for order app
* More unit test fixes
* More unit test fixing
* Revert behaviour for "extract_int" clipping function
* Unit test value fix
* Prevent build order notification if we are importing records
* Bug fix for "multi delete" form
- Was requesting entire LIST endpoint before launching form
- Could cause extremely long delays before window opened
* Improve rendering of "no stock available" in BOM table
* Adds footer row to BOM table
- Display total number of parts
- Display minimum "can build" amount
* Added extra information to footer row
* Annotate 'ordering' quantity to BOM list
- Display this quantity in the BOM table
* Bump API version
* JS linting
* Allow BOM list to be filtered by "on_order" parameter
* Add information showing amount that can be built once orders are received
* Allow searching of BOM List API endpoint
* Bump API version
* Adds ordering field options to BOM List API endpoint
* Add some unit testing for new API features
* Fixes for unit tests
* Fix API filter 'in_bom_for'
- get_parts_in_bom() returns a list, not a queryset
- Thus, we have to enumerate the ID values, rather than filtering by queryset
* Add unit test for part API filter
* Remove stat context variables
* Revert "Remove stat context variables"
This reverts commit 0989c308d0.
* remove old backport
* move requirements
* move isort
* move migrations-tests
* add pip-tools as req and add hook
* Use hashes and also run when txt files are added
* Update to hashes in requirements
* update requirements install path
* remove allauth-2fa for a test
* install dev-requirements
* re-enable allauth
* remove hashes from pre normal setup
* Remove version bindings if they are the laest
* move depencies to upper bound
* fix django-money
* remove windows specific requirements
* also install dependencies
* update markdownify
* remove django-admin-shell
* remove unneeded packages
* add docs
* remove pins and fix pre-commit pipeline
* pin django-money
* really remove admin shell
* return default behaviour for money serializer
* pip fix
* update filter name
* set decimal for output
* add migrations
* pin coveralls
* update requirements
Co-authored-by: Oliver Walters <oliver.henry.walters@gmail.com>
* Add 'virtual': False requirement to sales order items
* Adds "virtual" filter for part table
* Adds extra validation to the SalesOrderLineItem model
* Prevent creation of stock items for virtual parts
- Add validation check to clean() method of StockItem model
- Improve validation message for StockItemSerializer class
* Hide "new stock item" button for virtual parts
* Hide more buttons for 'virtual' parts
* Adds a custom translation node class to strip dirty characters from translated strings
* Update javascript files to use new template tag
* Override behaviour of {% load i18n %}
- No longer requires custom tag loading
- All templates now use escaped translation values
- Requires re-ordering of app loading
- Revert js_i18n to simply i18n
* CI step now lints JS files compiled in each locale
* Checking that the CI step fails
* Revert "Checking that the CI step fails"
This reverts commit ba2be0470d.