* 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
* Allow stock items to be transferred into the same location
* Add new code when moving into same location
* Update unit test
* Further unit test fixes
* 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
* Add metadata for ManufacturerPart
* Add Metadata for SupplierPart
* Add metadata to label models
* Add metadata to order line items
* Add metadata to shipment
* Add metadata to Build and BuildItem
* Add metadata to BomItem
* Add metadata to PartParameterTemplate
* Syntax, lint
* Fix isort style
* Lint
* Correction of model name
* Metadata for Reports
* Fix silly error
* Fix silly error
* Correct model name
* Correct model name
* Correction
* Correct company urls
* Apply generic model to Report metadat
* Rename/remove redundant import
* Remove shadowing of report in loop variable
* Update import ordering
* More corrections
* better docstrings
* Correct names for API endpoints
* Default to PO, required for api-doc to work
* Changes by @matmair
* Suppress metadata from Bom export
* Add migration files
* Increment API version
* Add tests for all Metadata models, even previously existing ones
* Update tests
* Fix
* Delay tests
* Fix imports
* Fix tests
* API Version number
* Remove unused import
* isort
* Revent unintended change of cache
* 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
* Fix for returning stock from the customer to a specified location
When returning stock from the customer, the allocations of that stock
are freed. If the new stock location is the same as the parent stock,
merge the stock back into the parent.
* Added tests for allocateToCustomer and return_from_customer
* Added additional test that checks total stock
* Fixed typos
* 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>
* 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
* Updates for automated metadata extraction
* Update link field for StockItem model
- Increase max_length to 200 characters
- Custom migration
- Updates for InvenTreeUrlField model
* Adding unit tests
* Bug fix for metadata.py
* 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
* 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
* 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 ca96654622.
* use typing here
* Revert "Make API code cleaner"
This reverts commit 24fb68bd3e.
* 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>
- When in doubt, refer to the django docs
- There was a *much* better way (thanks, form.add_error)!
- The anti-pattern was deleted, and lo, there was much rejoicing
- Some other refactoring too