github CESNET/inventory-monitor-plugin v12.0.0

latest releases: v15.2.0, v15.1.0, v15.0.1...
11 months ago

Changelog for v12.0.0 (v11.0.2 → v12.0.0)

Release Date: November 18, 2025


🎉 Major Changes

NetBox v4 Compatibility

  • Updated to NetBox v4 API: Migrated from Django's deprecated ContentType to NetBox's ObjectType API
    • All asset assignments continue to work seamlessly (Device, Site, Location, Rack, Module)
    • All API endpoints remain fully compatible
    • No data migration required - automatic compatibility layer
    • Database schema unchanged

Multi-Currency Support

  • Global Currency Configuration: New plugin-level currency settings with configurable currency codes, display names, and symbols
    • Default currencies: CZK (Czech Koruna), EUR (Euro), USD (US Dollar), GBP (British Pound), JPY (Japanese Yen)
    • Configurable default currency (EUR by default)
    • Custom currency symbols support
  • Currency Fields Added:
    • Asset.currency - Required when price is set
    • Contract.currency - Required when price is set
    • Invoice.currency - Required when price is set
    • AssetService.service_currency - Required when service_price is set
  • Price-Currency Validation: Enforced relationship where currency is required if price is set (including 0), and vice versa
  • UI Enhancements: New CurrencyColumn for tables displaying price with currency symbols

🆕 New Features

Description Fields

  • Added description field to multiple models for better context and documentation:
    • Asset.description
    • AssetType.description
    • Contractor.description
    • Contract.description
    • Invoice.description
    • AssetService.description
  • Descriptions automatically displayed in form dropdowns for easier selection

Enhanced String Representations

  • Human-Readable Display: All models now have optimized __str__ methods for better readability
    • No primary key prefixes for cleaner searching
    • Contextual information in parentheses and brackets
    • Hierarchical relationships clearly shown
  • Examples:
    • Asset: PROD-123 [SN12345] (Dell)
    • Contract: Main Contract (MC-001) via ACME Corp
    • Invoice: Invoice-Q1 (Main Contract) [PRJ-001] 5000.00 EUR
    • RMA: RMA#12345 PROD-123 [SN12345] [Approved]

External Inventory Enhancements

  • Deletion Protection: Cannot delete external inventory items with associated assets
  • Improved String Representation: Shows inventory number, name, serial number, and responsible person
  • Renamed Fields: abra_id → external_id for better clarity
  • Better Filtering: Enhanced search across all fields

Form Improvements

  • Currency Support: All financial forms now include currency dropdowns with blank options for bulk editing
  • Inline Fields: Price and currency displayed together in forms using InlineFields
  • Specialized Assignment Form: AssetExternalInventoryAssignmentForm for managing external inventory relationships without triggering full model validation
  • Dynamic Help Text: External inventory status field shows available codes from configuration

🔧 Improvements

Performance Optimizations

  • Asset Probe Data Annotations: New Asset.annotate_with_probe_data() method prevents N+1 queries
    • Uses efficient database joins for probe time and recent probe status
    • Annotated fields: annotated_last_probe_time, annotated_is_recently_probed
  • Query Optimizations: Added select_related() and prefetch_related() across all views
    • AssetListView: Optimized type, order_contract, assigned_object_type, external_inventory_items
    • ProbeListView: Optimized device, site, location relationships
    • ContractListView: Optimized contractor, parent relationships
    • All other views similarly optimized

Database Changes

  • Unique Constraints: Added unique constraint for ExternalInventory.external_id (allows NULL)
  • Field Type Updates:
    • Asset.price: DecimalField (max_digits=19, nullable)
    • Contract.price: DecimalField (max_digits=19, nullable)
    • Invoice.price: DecimalField (max_digits=19, nullable)
    • AssetService.service_price: DecimalField (max_digits=12, nullable)
  • Default Values Removed: Price fields no longer default to 0, allowing proper NULL handling

Tags Field Updates

  • Fixed Reverse Accessor Conflicts: All models now use unique related_name for tags to prevent conflicts with other plugins
    • Prevents Django's fields.E304 errors when multiple inventory plugins are installed

GraphQL API

  • Currency Fields Added: All GraphQL types now include currency fields
  • Enhanced Filtering: Currency filters available in all relevant GraphQL queries

Validation Enhancements

  • Asset Deletion Protection: Cannot delete assets with order_contract or external inventory items
  • Contract Hierarchy: Subcontracts can have different contractors than parent (allows complex procurement)
  • Date Validation: Improved invoicing date range validation across Contract and Invoice models

🗑️ Breaking Changes

None - This version maintains full backward compatibility with existing data and APIs.


📋 Configuration Changes

New Plugin Settings

PLUGINS_CONFIG = {
    "inventory_monitor": {
        # Currency Settings (NEW)
        "currencies": [
            ("CZK", "Czech Koruna", "Kč"),
            ("EUR", "Euro", "€"),
            ("USD", "US Dollar", "$"),
            ("GBP", "British Pound", "£"),
            ("JPY", "Japanese Yen", "¥"),
        ],
        "default_currency": "EUR",
        
        # Existing settings...
        "probe_recent_days": 7,
        "external_inventory_status_config": {...},
    }
}

🐛 Bug Fixes

  • Fixed template content caching issues for hierarchical asset views
  • Resolved probe filtering issues with latest-only queries
  • Fixed RMA serial number handling (NULL values now supported for draft RMAs)
  • Corrected bulk edit form currency choices initialization

📚 Documentation Updates

  • README.md: Complete rewrite with enhanced data model diagrams, string representations guide, and multi-currency documentation
  • New RMA Workflow Documentation (docs/rma-workflow.md): Comprehensive guide for RMA processes
  • Upgrade Guide: Added section for v12.0.0 migration (no manual steps required)
  • Configuration Examples: Enhanced currency settings and field choice customization examples

🔄 Migrations

Applied Migrations

  1. 0002_alter_asset_options_alter_assetservice_options_and_more - Currency fields and ordering
  2. 0003_assetservice_description_contract_description_and_more - Description fields
  3. 0004_alter_asset_tags_alter_assetservice_tags_and_more - Tags field updates

🙏 Acknowledgments

This release brings NetBox v4 compatibility, multi-currency support, and significant performance improvements to the Inventory Monitor plugin. Special thanks to the NetBox community for the v4 migration guidance.


Full Changelog: v11.0.2...v12.0.0

Don't miss a new inventory-monitor-plugin release

NewReleases is sending notifications on new releases.