Add CSS properties to ensure table cells wrap long content properly:
- table-layout: fixed for consistent column widths
- word-wrap and overflow-wrap: break-word for content wrapping
Co-Authored-By: Claude (glm-5) <noreply@anthropic.com>
- Add BaseTab base class for common tab initialization and logging
- Add constants module for shared GUI constants
- Move CheckboxTreeview to separate widget file
- Add admin_only and require_session decorators to utils.py
- Refactor DataExtractionTab and MaterialValidationTab to inherit BaseTab
- Remove duplicate _update_log method from tab classes
Co-Authored-By: Claude (glm-5) <noreply@anthropic.com>
- Add ExecutionConfig for dryrun settings in config schema
- Create DeleteProgressWindow widget for real-time progress display
- Integrate delete execution flow in MaterialValidationTab with threading
- Add dryrun checkbox for admin users in settings
- Add progress callback support to DiscreteMaterialPlanCleaner
- Add markdown report generation with statistics
- Include tkinterweb and markdown2 dependencies for report rendering
Co-Authored-By: Claude (glm-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>
- Integrate tklinenums library for line number display
- Line numbers appear on the left side in black color
- Line numbers are always visible (even with placeholder)
- Line numbers sync with text scrolling
- Add tklinenums>=1.7.0 to requirements.txt
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
When content overflows in the Production ID text input, the scrollbar
now automatically appears. When content fits within the visible area,
the scrollbar is hidden.
- Changed layout from pack to grid for dynamic scrollbar control
- Added yview-based overflow detection (last < 1.0 indicates overflow)
- Added debounce mechanism to prevent excessive checks
- Bound events: KeyRelease, ButtonRelease, Configure, Paste
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Add ProductionIdInput widget with placeholder and multi-line support
- Add UIConfig class for font family, font size, and input width settings
- Refactor data extraction tab to use horizontal PanedWindow layout
- Left panel: Production ID text input (draggable width)
- Right panel: control panel and log output
- Share Production IDs between data extraction and material validation tabs
- Add UI settings group in settings page (font selection, size, input width)
- For User users: automatically use shared Production IDs, simplified UI
- Apply font settings to input and log widgets
- Use sashpos() to set initial pane width correctly
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Implement a comprehensive GUI application with the following features:
- Data Extraction tab: Extract material plan data from ERP system
- Material Validation tab: Validate material status and match deletions
- Data Query tab: Query database for production order information
- Settings tab: Manage ERP, database, browser, and path configurations
Key components:
- MainWindow: Tabbed interface with status bar
- ConfigManager: JSON-based configuration management
- LogText: Custom read-only text widget with colored logging
- FileSelector: Reusable file/directory selection component
- ProgressDialog: Modal progress dialog for long operations
Technical details:
- Thread-safe UI updates using root.after()
- Stdout capture for legacy script integration
- Event-based readonly mode allowing copy/select operations
- Custom widget composition to avoid Tkinter ScrolledText issues
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>