Resolved merge conflict in utils/material_status_validator.py by keeping
both deduplication statistics and error messages for empty results.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add centralized logging mechanism that simultaneously outputs to console
and GUI log components, improving code maintainability and consistency.
Changes:
- Add gui/log_config.py for centralized logging configuration
- Add gui/widgets/log_handler.py as bridge between logging and LogText
- Integrate unified logging into DataExtractionTab and MaterialValidationTab
- Initialize logging system in MainWindow on startup
- Improve error messages in material_status_validator for empty results
- Add documentation for logging mechanism and refactoring
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Rename utility files to use English names for better cross-platform compatibility:
- utils/离散备料计划维护数据提取.py → utils/discrete_material_plan_extractor.py
- utils/离散备料计划维护数据清理.py → utils/discrete_material_plan_cleaner.py
Update all import statements across the codebase and documentation references.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add sorting capability for "选择" and "材料名称" columns in the CheckboxTreeview:
- Click column header to cycle through: asc (↑) → desc (↓) → unsort
- Sort "选择" column by checkbox state (checked/unchecked)
- Sort "材料名称" column alphabetically
- Preserve checkbox states during sorting using move() instead of delete+insert
- Separate event handlers for cell clicks and heading clicks
Implementation details:
- Added 6 new helper methods to CheckboxTreeview class
- Store original headings to properly display sort arrows
- Use identify_region() to distinguish between cell and heading clicks
- Column index conversion (#1/#2) to column identifiers
The sorting is a pure frontend feature with no database changes.
Available to all users without permission restrictions.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Restrict settings interface and material validation features based on user type:
- SettingsTab: User type only sees "Test ERP Connection" and "Test Database Connection" buttons; Admin sees full configuration interface
- MaterialValidationTab: Hide manager filter and data source options from non-admin users; default to database_filtered mode
- test_db_connection(): Read from config directly to support User type without UI variables
- Add backward compatibility: no session_manager defaults to full interface
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Change from fuzzy material name matching to exact material code matching
- Migrate from MaterialsTypeToBeDeleted to MaterialsToBeDeleted table
- Add should_delete_material() for on-demand database queries
- Remove in-memory material list loading to reduce memory footprint
- Update documentation to reflect new matching logic
- Remove main scripts from git tracking (contain user-specific config)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Create detailed database architecture documentation with Mermaid diagrams including:
- Class hierarchy and design patterns (Factory, DAO, Strategy, Template Method)
- Connection management flows and lifecycle
- Database table structures and entity relationships
- SQL dialect handling for SQL Server and MySQL
- Data flow and batch processing logic
- Code examples and best practices
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Add MaterialsToBeDeletedDAO for managing material deletion records by MaterialCode
- Add MaterialValidationResult dataclass for enhanced validation results
- Add CheckboxTreeview component with selectable checkbox functionality
- Refactor material validation UI with new columns: select, material name, code, spec, model, manager
- Add double-click to edit manager name functionality
- Add select all/deselect all buttons
- Add confirm deletion button to write selected records to database
- Prioritize MaterialsToBeDeleted.ManagerName over type-based matching when displaying
- Export results to Excel with selection state
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>