* Update PartSerializer queryset annotation
- Add 'total_stock' (in_stock + variant_stock)
- Update 'unallocated_stock' to use total_stock
* Allow API filtering by total_in_stock value
* Refactor partStockLabel method
- We'll use this in the partTable also
- Allow us to prevent further API calls
* Cleanup loadPartTable
* Refactor part variant table
* More updates to part badge function
* Bump API version
* js linting
* 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
* add assigned_to filter to Build API
* extend API to filter build orders by assigned owner
* rename API filter to 'responsible'
* add 'Responsible' filter to build oders table
* add user/group icon to owners in 'Responsible' column
* remove unused python class import
* bump API version number
* fix handling of invalid IDs
* refactor filter options as a callback function
* fix JS styling
* 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
* Refactor forms for creating and editing SalesOrder
- Common function for defining fields
* More visual improvements for forms
* Refactor fields for SupplierPartPriceBreak
* More refactoring
* Refactor for stockitemtestresult table
* Comment fields
* JS linting fix
* Add "external" field to StockLocation
- New model for field
- Database migrations
- Serializer / API updates
- Front end tables / filters
* Update API version
* Make 'copy_category_parameters' part of actual serializer
* Parameter copying is now handled by the API serializer
* Make field not required
* linting fixes
* pre commit fix
* Fix unit tests
* Further fix for unit test
* Unit tests for category parameter duplication
* Add JS for qrcodejs
Ref: https://davidshimjs.github.io/qrcodejs/
* Simple function for rendering a QR code
* Refactor QR code view for Part
* Replace QR code view for SupplierPart
* Refactor QR codes for stock item and stock location models
* Remove base QRCodeView entirely
* Add settings to control upcoming stocktake features
* Adds migration for "cost range" when performing stocktake
* Add cost data to PartStocktakeSerializer
Implement a new custom serializer for currency data type
* Refactor existing currency serializers
* Update stocktake table and forms
* Prevent trailing zeroes in forms
* Calculate cost range when adding manual stocktake entry
* Display interactive chart for part stocktake history
* Ensure chart data are converted to common currency
* Adds new model for building stocktake reports
* Add admin integration for new model
* Adds API endpoint to expose list of stocktake reports available for download
- No ability to edit or delete via API
* Add setting to control automated deletion of old stocktake reports
* Updates for settings page
- Load part stocktake report table
- Refactor function to render a downloadable media file
- Fix bug with forcing files to be downloaded
- Split js code into separate templates
- Make use of onPanelLoad functionalitty
* Fix conflicting migration files
* Adds API endpoint for manual generation of stocktake report
* Offload task to generate new stocktake report
* Adds python function to perform stocktake on a single part instance
* Small bug fixes
* Various tweaks
- Prevent new stocktake models from triggering plugin events when created
- Construct a simple csv dataset
* Generate new report
* Updates for report generation
- Prefetch related data
- Add extra columns
- Keep track of stocktake instances (for saving to database later on)
* Updates:
- Add confirmation message
- Serializer validation checks
* Ensure that background worker is running before manually scheduling a new stocktake report
* Add extra fields to stocktake models
Also move code from part/models.py to part/tasks.py
* Add 'part_count' to PartStocktakeReport table
* Updates for stocktake generation
- remove old performStocktake javascript code
- Now handled by automated server-side calculation
- Generate report for a single part
* Add a new "role" for stocktake
- Allows fine-grained control on viewing / creating / deleting stocktake data
- More in-line with existing permission controls
- Remove STOCKTAKE_OWNER setting
* Add serializer field to limit stocktake report to particular locations
* Use location restriction when generating a stocktake report
* Add UI buttons to perform stocktake for a whole category tree
* Add button to perform stocktake report for a location tree
* Adds a background tasks to handle periodic generation of stocktake reports
- Reports are generated at fixed intervals
- Deletes old reports after certain number of days
* Implement notifications for new stocktake reports
- If manually requested by a user, notify that user
- Cleanup notification table
- Amend PartStocktakeModel for better notification rendering
* Hide buttons on location and category page if stocktake is not enabled
* Cleanup log messages during server start
* Extend functionality of RoleRequired permission mixin
- Allow 'role_required' attribute to be added to an API view
- Useful when using a serializer class that does not have a model defined
* Add boolean option to toggle whether a report will be generated
* Update generateStocktake function
* Improve location filtering
- Don't limit the actual stock items
- Instead, select only parts which exist within a given location tree
* Update API version
* String tweaks
* Fix permissions for PartStocktake API
* More unit testing for stocktake functionality
* QoL fix
* Fix for assigning inherited permissions
* 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
* Add basic endpoint for group information
* Add hardcoded api-url lookup function for django models
* Adds JS function for rendering a 'group'
* Fix typo
* Add unit tests for new endpoints
* Increment API version
* JS linting
* Ensure 'retry' is always greater than timeout
* Adds setting for controlling how many days between automated backups
* Adds configuration option for max_attempts
* Update for daily backup task
- Prevent backup attempts from ocurring too frequently
- Add setting for controlling how many days between backups
* Exit early
* Adds an API endpoint for manually updating / refreshing currency data from the server
* Update currency rates manually from the settings page
* Add 'last updated' information to the currency exchange backend
* Load currency exchange data via API (on setings page)
* Bump API version
* Table cleanup
* Automatically update exchange rates when base currency is updated
* Adds API endpoint with currency exchange information
* Add unit testing for new endpoint
* Implement javascript code for client-side conversion
* Adds helper function for calculating total price of a dataset
* javascript cleanup
* Add functionality to sales order tables
* JS linting
* Update API version
* Prevent auto currency updates under certain conditions
* Add setting to control pricing calculation from stock items
* Bug fix for displaying a "null" setting
* Add new fields to PartPricing model
* Add code for calculation of min/max stock item costs
* Update pricing display to use stock item pricing
* Add unit testing for new pricing features
* Automatically update pricing when stock item is created or edited
* Increment API version
* Improvements for price rendering
* Update based on feedback:
- Roll stock item pricing into purchase pricing
- Simplify models
- Update unit tests
* Refactor javascript for creating a new part
* Simplify method of removing create fields from serializer
* Fix bug which resulted in multiple model instances being created
* remove custom code required on Part model
* Reorganize existing Part API test code
* Add child serializer for part duplication options
* Part duplication is now handled by the DRF serializer
- Improved validation options
- API is self-documenting (no more secret fields)
- More DRY
* Initial stock is now handled by the DRF serializer
* Adds child serializer for adding initial supplier data for a Part instance
* Create initial supplier and manufacturer parts as specified
* Adding unit tests
* Add unit tests for part duplication via API
* Bump API version
* Add javascript for automatically extracting info for nested fields
* Improvements for part creation form rendering
- Move to nested fields (using API metadata)
- Visual improvements
- Improve some field name / description values
* Properly format nested fields for sending to the server
* Handle error case for scrollIntoView
* Display errors for nested fields
* Fix bug for filling part category
* JS linting fixes
* Unit test fixes
* Fixes for unit tests
* Further fixes to unit tests
* Improve help_text for target_date field on lineitem model(s)
* Don't auto-fill target_date for purchase order line item(s)
* Refactor function to create new sales order line item
* Add migration file
* JS linting
* make plugin urls def cleaner
* rename plugin managment endpoints
* [FR] Add API endpoint to activate plugins
Fixes#4182
* fix for api url change
* bump API version
* Move to updated Meta mixin
* [FR] Add last updated column for supplier parts
Fixes#3327
* add updated to table
* bump API version
* add missing migration
* incremetn api ;-)
* Added BOM export option to export substitute part numbers
* Small documentation fix
* Fixed the behaviour for multiple lines with different amount of substitutes
* Changed UI naming to "alternative parts"
* Reload purchase order table after part order
When on the part page, going to the "Purchase order" sidebar tab.
You can order the part by pressing the "Order Part" button.
After a succefull order, the form closes but the table on the page
was never refreshed.
* Fixed a js styling check error
Steps to reproduce problem:
Go to a screen that has a modal without a submit button like "Show QR code" of the Sublocation overview.
Close the QR code modal and after that go to the "Print label" option.
It will no longer show a submit button.
* Initialize date for new PO line or SO line
Set new PO/SO line initial date to that of the PO/SO it belongs to.
* Changed date formatting to render_date template tag
* Reverted the change to format the date with the render_date template tag