* 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 RO to calendar output
* Update title and description to be more descriptive
* Add documentation
* Add simple test for RO calendar
* Lint/syntax
* Lint
* Changes to title, description
* Add delivery date setting to Shipment model
* Add delivery_date to serializer
* Correct test for is_delivered
* Add relevant fields to API and forms
* Add test
* Increment API version
* Move migration file because of conflict
* 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
* 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
* Implement a generic API endpoint for enumeration of status codes
* Adds endpoint for PurchaseOrderStatus
* Add more endpoints (sales order / return orer)
* Add endpoints for StockStatus and StockTrackingCode
* Support build status
* Use the attribute name as the dict key
* Refactored status codes in javascript
- Now accessible by "name" (instead of integer key)
- Will make javascript code much more readable
* Bump API version
* Add extra status code "IN PROGRESS" for sales order
* Add method to 'issue' a SalesOrder
* Updates to salesorder template
* Add API endpoint and serializer for issuing a SalesOrder
* javascript for issuing order
* Cleanup buttons for SalesOrderLineItem table
* Bug 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
* add bulk delete for purchase order line items
* bump API version
* fix JS style
* handle parts with no linked manufacturer part correctly
* add unit test for purchase order line item bulk delete
* Adds unit test for counting queries on PurchaseOrderList API endpoint
- We will work to make this queryset more efficient
* PEP fixes
* Add 'total_price' fields to SalesOrder and PurchaseOrder models
* PurchaseOrder list API now has constant query count
* Data migration for updating existing PurchaseOrder and SalesOrder instances
- Calculate total_price for any existing order
- Will fail if exchange rates are not available
* Add total_price_currency to API serializers
* Render total_price in SalesOrder table
* Add ability to filter both lists by total_price field
* Update total_price whenever an order is updated
* Update total price whenever a lineitem is saved or deleted
* Add query-counting unit test for SalesOrder list API
* Calling refresh_from_db inside a save() method is *not* a good idea
* Adds ability to export sales order line table to a file
* Fix expand / collapse buttons
* Fix other expand / collapse buttons
* Add export functionality for "extra" line items
* Basic implementation of iCal feed
* Add calendar download to API
* Improve comments, remove unused outputs
* Basic implementation of iCal feed
* Add calendar download to API
* Improve comments, remove unused outputs
* Improve comment
* Implement filter include_completed
* update requirements.txt with pip-compile --output-file=requirements.txt requirements.in -U
* Fix less than filter
* Change URL to include calendar.ics
* Fix filtering of orders
* Remove URL/functions for calendar in views
* Lint
* More lint
* Even more style fixes
* Updated requirements-dev.txt because of style fail
* Now?
* Fine, fix it manually
* Gaaah
* Fix with same method as in common/settings.py
* Fix setting name; improve name of calendar endpoint
* Adapt InvenTreeAPITester get function to match post, etc (required for calendar test)
* Merge
* Reduce requirements.txt
* Update requirements-dev.txt
* Update tests
* Set expected codes in API calendar test
* SO completion can not work without line items; set a target date on existing orders instead
* Correct method to PATCH
* Well that didn't work for some reason.. try with cancelled orders instead
* Make sure there are more completed orders than other orders in test
* Correct wrong variable
* Lint
* Use correct status code
* Add test for unauthorized access to calendar
* Add a working test for unauthorised access
* Put the correct test in place, fix Lint
* Revert changes to requirements-dev, which appear magically...
* Lint
* Add test for basic auth
* make sample simpler
* Increment API version
Co-authored-by: Matthias Mair <code@mjmair.com>
* API: Add filter by reference to SO, PO. Add filtering by customer to SO list
* API: Add filtering by reference to Build order list
* Add test for changes
* Increment API version
* Add test for BO reference
* Add missing description of API version
* 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 cb26003b92)
* 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 option for duplicating an existing purchase order
- Copy line items across
* Update API version
* JS linting
* Adds option for duplication of extra lines
* Decimal point rounding fix
* Unit tests for PO duplication via the API
* 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>
* use shims for API view inheritation
* Add mixin for input sanitation
* fix clean operation to fix all string values
* Also clean up dicts
this is to future-proof this function
* Update docstirng
* proof custom methods against XSS through authenticated users
* 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
* Add new global setting to control auto-upload of test reports
* Adds callback to attach a copy of the test report when printing
* Fix for all attachment API endpoints
- The AttachmentMixin must come first!
- User was not being set, as the custom 'perform_create' function was never called
* Remove duplicated UserSerializer
* display uploading user in attachment table
* Add unit test to check the test report is automatically uploaded
* Refactor out 'ordering' serializer annotation field
* Refactor BomItem serializer annotations
* Factor out MPTT OuterRef query
* Add 'available_stock' annotation to SalesOrderLineItem serializer
- Allows for better rendering of stock availability in sales order table
* Improve 'available quantity' rendering of salesorderlineitem table
* Bump API version
* Add docstring
* 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>