* Update "date" field for StockItemTestResult
- Allow editing of date (via admin)
* Mark 'date' and 'user' as read-only unless importing
* Revert API field name
* Fix default value
* Fix migration
---------
Co-authored-by: Matthias Mair <code@mjmair.com>
* Add management command to list installed apps
* Add metadata to exported data file
* Validate metadata for imported file
* Update CHANGELOG.md
* Update docs
* Use internal codes
* Refactor and add more metadata
* Adjust github action workflow
* Run with --force option to setup demo dataset
* Handle receive of virtual parts
- Update line item quantity
- Do not add any stock
* Add unit test
* Additional unit test
* UI form improvements
* Add playwright test
* Updated playwright tests
* Added keep open boolean field to Stock Location modal form
* Rewrite keep form open field feature to avoid calling methods in form field definitions
* Rewrite keep form open feature as common form property
* Removed unused artefact from previous implementation
* keepOpenOption removed as default option for all create forms. Instead it's enabled on selected forms.
* keepOpenOption field speed improvement
- using useRef instead of useState
- keepOpenSwitch moved to own component
* Added keep form open feature to changelog
* Updated documentation: keep form open feature added to concepts/user_interface docs
* Added test case for "keep form open" feature
* Changed switch selector in keep form open feature test
---------
Co-authored-by: spm <jan.krajdl@cecolo.com>
Co-authored-by: Oliver <oliver.henry.walters@gmail.com>
Co-authored-by: Matthias Mair <code@mjmair.com>
* Update DataExport functionality
- Chunk queryset into memory
* Allow larger number of queries for chunked database fetching
* Handle possible exception in unit testing
* Restrict queryset for DataImportSession
- Only allow non-staff users to see their own sessions
* Add unit test
* raise PermissionDenied if no user info available
* Refactoring for media file report helper functions
* Updated unit tests
* Improved error handling
* Generic path return for asset
* Fix return type annotations
* Fix existing test
* Tweaked unit test
* Collect static files in CI
* Run static step for all DB tests
* Update action.yaml
* Fix for action.yaml
* Updated unit tests
* Improvements for get_bulk_queryset
- Limit scope to base view queryset
- Remove ability to provide arbitrary filters
- Remove feedback if zero items are found
* Adjust unit test
* Remove filter test
* Update CHANGELOG.md
* Add helper to check the existence of a static file
* Log error if plugin static file does not exist
* Support cache busting for plugin files
* Use Pathlib instead
* Improve generic URL resolution
* Add unit test
* bump ty - there is better django support now
* more fixes
* fix usage of types
* add missing type
* fix access
* ensure itteration is safe
* fix uncombat decimal usage
* ?potential breaking: change access key
* remove now obsolete igtnore
* ignore errors on StdImageField
* remove usage of unkonw parameter
* fix diff error
* fix schema creation
* fix coverage quirk
* those are unneeded now?
* this seem to have been an issue with 3.12; not occuring on 3.14
* ignore pydantiics
* ignore edge cases for now
* include isGenerating fix
* make typing python 3.11 compatible
* fix more errors
* fix(plugin): use app_name instead of plugin_path when deregistering models
_deactivate_mixin uses plugin_path (the full dotted module path) as the
key into Django's apps.all_models when removing plugin models during
reload. However, Django registers models under the app_label (the short
app_name), not the full plugin_path.
For plugins with nested module paths (e.g. "myplugin.myplugin"),
plugin_path != app_name. Since apps.all_models is a defaultdict, looking
up plugin_path silently creates an empty OrderedDict, then .pop(model)
raises KeyError because the model was never in that dict — it was
registered under app_name.
This causes recurring KeyError crashes every plugin reload cycle
(~1 minute) for any external plugin with a nested package structure.
The fix:
- Use app_name (already computed at line 98) instead of plugin_path
- Add default None to .pop() for defensive safety
- Consistent with line 123 which already correctly uses app_name
* test(plugin): add unit test for nested plugin path model deregistration
Ensures _deactivate_mixin uses app_name (last path component) instead
of the full plugin_path when looking up models in apps.all_models,
preventing KeyError for external plugins with nested module structures.
* style: fix ruff format for context manager parenthesization
* Fix complete_sales_order_shipment task
- Perform allocation *before* marking shipment as complete
- Ensure task is not marked as complete before it is actually done
* Add unit test
* Provide task status tracking for shipment completion
* Add integration testing
* Address unit test issues
* Bump API version
* Enhance playwright test
* Add new build task
* Refactor background task for consuming build stock
- Run as a single task
- Improve query efficiency
* Refactor consuming stock against build via API
- Return task_id for monitoring
- Keep frontend updated
* Task tracking for auto-allocation
* Add e2e integration tests:
- Auto-allocate stock
- Consume stock
* Bump API version
* Playwright test fixes
* Adjust unit tests
* Robustify unit test
* Widen test scope
* Adjust playwright test
* Loosen test requirements again
* idk, another change :|
* Robustify test