2.0.0a1
Pre-release
Pre-release
[2.0.0a1] - 2025-11-22
Added
- Alliance Tax System
- Payments
- Payment Accounts
- Owner Overview Page (
/owners/)- Unified view displaying both Corporations and Alliances
- Permission-based action buttons (Payments/Manage)
- DataTables integration with responsive design
- Portrait display for all owners
- Active/Inactive status badges
- Dark theme compatible (btn-warning for manage buttons)
- Automatic redirect from index to owner overview
- Administration view now checking for permission and if Corporation is still available
- EVE Portrait and Logo Helper Functions in copilot-instructions.md
- Backend lazy helpers:
get_character_portrait_url(),get_corporation_logo_url(),get_alliance_logo_url() - Template tags:
|character_portrait_url:size,|corporation_logo_url:size,|alliance_logo_url:size
- Backend lazy helpers:
- Owner Permissions via Manager Methods in copilot-instructions.md
CorporationOwner.objects.manage_to(user)andAllianceOwner.objects.manage_to(user)visible_to(user)methods for broader visibility
- Menu navigation now points to Owner Overview instead of payment list
Fixed
- Test Suite after API parameter migration (158 tests passing, 71% coverage)
- Updated test parameters from
corporation_idtoowner_idfor generic owner endpoints - Fixed payment creation in character tests to use correct
owner_idfield - Fixed response assertions to match new "owner" schema
- Added missing
MessageMiddlewareto test requests - Created missing test data for manage_user tests
- Fixed FAQ URL routing in access tests
- Implemented Alliance payment tests with proper factory functions
- Performance tests now use
assertIsNotNone()instead of silent skipping
- Updated test parameters from
- DataTables warning for empty Owner Overview table (incorrect column count)
- Owner Overview now uses
visible_to()instead ofmanage_to()for correct permission filtering
Changed
- Refactor Tax System and prepare for Alliance Tax System migration
- All views are now accessible with or without specifying corporation_id/alliance_id. If not provided, the user's main character's corporation/alliance is used by default.
- Renamed
Manage Tax SystemtoManage CorporationorManage Alliance - Index page (
/) now redirects to Owner Overview instead of payment list - Owner Overview removes
get_statuscolumn (admin-focused, not user-focused) - Empty state message changed from "manage" to "view" for better user understanding
- Task Queue Order
- Performance Optimization: N+1 Query Fixes
- Payment queries now use
select_related()for account, user, profile, and main_character (70-80% query reduction) - Payment System uses
prefetch_related()for character_ownerships (85-90% query reduction) - Members queries optimized with
select_related()for owner relationships (60-70% faster)
- Payment queries now use
- API Migration: Generic owner endpoints now use
owner_idparameter instead ofcorporation_id- Affects: filter management, payment system, and filter set endpoints
- Corporation-specific endpoints still use
corporation_id
- Views Terminology: Permission error messages for generic owner operations now use "owner" instead of "corporation"
- Database Indexes for Performance
- Test Quality: All tests must work properly or fail with clear assertions (no silent skipping allowed)
- AlliancePayments: Composite index (account, owner_id, request_status, -date) + (request_status, -date)
- CorporationPayments: Composite index (account, owner_id, request_status, -date) + (request_status, -date)
- Members: Indexes on (owner, character_name) + (status)
- Expected: 50%+ faster filtered queries, combined with N+1 fixes: 60-80% total improvement
- Statistics Query Optimization
- Analyzed and confirmed all statistics functions already use optimal single aggregate() queries
get_payments_statistics(): 1 query for all counts (total, pending, automatic, manual)get_payment_system_statistics(): 1 query for all counts (users, active, inactive, deactivated, paid, unpaid)get_members_statistics(): 1 query for all counts (total, mains, alts, unregistered)- Dashboard statistics: 3 optimized queries (1 per table) vs potentially 10+ separate queries
- Result: Already using best-practice aggregate() approach - no further optimization possible
Full Changelog: v1.0.2...v2.0.0a1