Änderungen:
- composer require mycrm/billing-module
- BillingModuleBundle in config/bundles.php registriert
- Dependencies aktualisiert (composer.lock, symfony.lock)
Nach erfolgreicher Implementierung des app:module:remove Commands
wird das Billing-Modul nun wieder installiert, um die Funktionalität
zu testen.
Modul-Status:
- Registriert: ✓ (erscheint in app:module:list)
- Plugin-Tag: ✓ (app.module_plugin vorhanden)
- Aktiv: ✓ (läuft im Development-Modus)
- Lizenziert: ✗ (noch keine Lizenz konfiguriert)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Änderungen:
- @billing-module webpack alias wieder hinzugefügt
- Assets aus Billing-Modul Repository nach vendor/ kopiert
- Frontend baut jetzt erfolgreich ohne Warnungen
Hintergrund:
Nach dem Entfernen des Billing-Moduls wurde der Alias gelöscht.
Bei der Neu-Installation muss dieser wieder vorhanden sein, damit
die dynamischen Imports in router.js und Dashboard.vue funktionieren.
Assets-Synchronisierung:
Die Frontend-Assets des Billing-Moduls müssen manuell von
/Users/olli/Git/__privat/mycrm-billing-module/assets nach
vendor/mycrm/billing-module/assets kopiert werden, da Composer
nur PHP-Code automatisch synchronisiert.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Entfernt '@billing-module' Alias aus webpack.config.js, da das
Billing-Modul vollständig aus dem Projekt entfernt wurde.
Build läuft weiterhin erfolgreich. Die try-catch Blöcke in router.js
und Dashboard.vue fangen fehlende Module elegant ab.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Änderungen:
- Billing-Modul entfernt: composer remove mycrm/billing-module
- API Platform als Core-Dependency wiederhergestellt
- ApiPlatformBundle in config/bundles.php registriert
- BillingModuleBundle aus config/bundles.php entfernt
Problem behoben:
API Platform wurde versehentlich mit dem Billing-Modul entfernt,
obwohl es eine Core-Dependency für die Hauptanwendung ist.
Alle Entities (Contact, User, Project, etc.) benötigen API Platform.
Lösung:
- composer require api-platform/symfony api-platform/doctrine-orm
- Bundle-Registrierung in config/bundles.php korrigiert
- Cache erfolgreich geleert, Frontend erfolgreich gebaut
Hinweis:
Zukünftige Module sollten keine Core-Dependencies (Symfony, Doctrine,
API Platform) als eigene Abhängigkeiten deklarieren, da diese bereits
im Core vorhanden sind.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Implementiert einen sicheren Weg zum Entfernen von Modulen aus dem System:
Features:
- Zeigt Modul-Informationen (Plugin + Datenbank) an
- Widerruft Lizenz automatisch (optional mit --keep-license)
- Löscht Datenbank-Eintrag im Permission-System (optional mit --keep-db-entry)
- Warnt vor verknüpften Permissions
- Zeigt nächste manuelle Schritte (Composer, Bundle, Migrations, Cache)
- Bestätigung erforderlich (überspringbar mit --force)
Dokumentation:
- Command-Hilfe in src/Command/ModuleRemoveCommand.php
- Benutzer-Anleitung in docs/PLUGIN_QUICKSTART.md
- Entwickler-Referenz in CLAUDE.md
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
BREAKING CHANGE: All billing-related frontend code moved to billing module
Changes:
- Remove billing Vue components from core (InvoiceForm, InvoiceManagement, etc.)
- Remove billing config from core (billing_module.yaml)
- Update router.js to dynamically load billing routes from module
- Update Dashboard.vue to dynamically load InvoicesDashboardWidget
- Add webpack alias '@billing-module' pointing to vendor/mycrm/billing-module
- Billing module is now fully self-contained
The billing module now exports:
- routes.js: Route definitions for /billing/* paths
- components.js: Reusable components (InvoicesDashboardWidget)
- index.js: Main module exports
Frontend assets are loaded via '@billing-module' alias in webpack.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Introduced CSS custom properties for spacing, typography, colors, and shadows.
- Developed styles for form sections, grids, invoice items, and summary components.
- Implemented responsive design adjustments for various screen sizes.
- Added utility classes for text, spacing, and flex layouts.
- Included dark mode and high contrast mode support.
- Established loading states and validation/error styles.
- Enhanced accessibility features with focus styles and screen reader utilities.
- Added api-platform/symfony version 4.1 with necessary configuration files.
- Included symfony/uid version 7.1 with its recipe details.
- Created billing_module.yaml to define the BillingModulePlugin service with autowiring and autoconfiguration.
- Added SoftwareBuddy agent for web development support in PHP (Symfony) and JavaScript (Vue.js).
feat(module-registry): Enhance module booting logic for development environment
feat(menu-item-registry): Allow loading of unlicensed plugins in development mode
- Added a file input for PDF uploads with validation for file type and size.
- Implemented file size formatting and user feedback for selected files.
- Created upload and cancel methods with placeholder for future API integration.
feat: Create PaymentForm.vue for handling payments
- Developed a form for entering payment details including date, amount, method, and notes.
- Integrated currency formatting and dropdown for payment methods.
- Implemented save and cancel actions with API call for saving payment data.
docs: Add documentation for dynamic plugin menus and permissions
- Provided guidelines for defining menu items and permissions in plugins.
- Explained the process for synchronizing permissions and integrating menus in the frontend.
- Included examples and best practices for plugin development.
feat: Add database migrations for invoices, invoice items, and payments
- Created migration scripts to define the database schema for invoices, invoice items, and payments.
- Established foreign key relationships between invoices and related entities.
feat: Implement command for synchronizing plugin permissions
- Developed a console command to synchronize plugin permissions with the database.
- Added options for dry-run and force synchronization for unlicensed modules.
feat: Create API controller for plugin menu items
- Implemented API endpoints to retrieve plugin menu items in both flat and grouped formats.
- Ensured access control with role-based permissions for API access.
feat: Develop service for managing plugin menu items
- Created a service to collect and manage menu items from installed plugins.
- Implemented methods for retrieving flat and grouped menu items for frontend use.
feat: Add service for synchronizing plugin permissions
- Developed a service to handle the synchronization of plugin permissions with the database.
- Included logic for creating and updating permission modules based on plugin definitions.
- Hinzufügen der DependencyInjection-Konfiguration für das Billing-Modul.
- Erstellen der Invoice-Entity mit API-Ressourcen und Berechtigungen.
- Konfigurieren der Services in services.yaml für das Billing-Modul.
- Implementieren von CLI-Commands zur Verwaltung von Modul-Lizenzen und zur Auflistung installierter Module.
- Erstellen eines API-Controllers zur Verwaltung von Modulen und Lizenzen.
- Hinzufügen eines EventListeners für das Booten von Modulen.
- Definieren von Interfaces für Lizenzvalidierung und Modul-Plugins.
- Implementieren der ModuleRegistry zur Verwaltung und Booten von Modulen.
- Erstellen eines LicenseValidator-Services zur Validierung und Registrierung von Lizenzen.
- Added ProjectTask entity with fields for name, description, budget, hour contingent, hourly rate, and total price.
- Created ProjectTaskRepository with methods for querying tasks by project and user access.
- Implemented ProjectTaskVoter for fine-grained access control based on user roles and project membership.
- Developed ProjectTaskSecurityListener to enforce permission checks during task creation.
- Introduced custom ProjectTaskProjectFilter for filtering tasks based on project existence.
- Integrated ProjectTask management in the frontend with Vue.js components, including CRUD operations and filtering capabilities.
- Added API endpoints for ProjectTask with appropriate security measures.
- Created migration for project_tasks table in the database.
- Updated documentation to reflect new module features and usage.
- Added owner and team members relationships to the Project entity.
- Updated ProjectRepository to find projects based on user ownership or team membership.
- Enhanced ProjectVoter to manage view, edit, and delete permissions based on ownership and team membership.
- Created ProjectAccessExtension to filter projects based on user access.
- Updated ProjectManagement.vue to include owner and team member selection in the UI.
- Implemented API endpoints for managing Git repositories with proper access control.
- Added migration to update the database schema for project ownership and team members.
- Created Document entity with properties for file management, including filename, originalFilename, mimeType, size, uploadedAt, uploadedBy, relatedEntity, relatedEntityId, and description.
- Implemented DocumentRepository for querying documents by related entity and user.
- Added GitRepository entity with properties for managing Git repositories, including URL, localPath, branch, provider, accessToken, project, lastSync, name, description, createdAt, and updatedAt.
- Implemented GitRepositoryRepository for querying repositories by project.
- Developed GitHubService for interacting with GitHub API, including methods for fetching commits, contributions, branches, and repository info.
- Developed GitService for local Git repository interactions, including methods for fetching commits, contributions, branches, and repository info.
- Developed GiteaService for interacting with Gitea API, including methods for fetching commits, contributions, branches, repository info, and testing connection.
- Added ProjectStatusManagement.vue for managing project statuses with CRUD operations.
- Created migration scripts for projects and project_statuses tables.
- Defined Project and ProjectStatus entities with necessary fields and relationships.
- Implemented repositories for Project and ProjectStatus with custom query methods.
- Enhanced API resource configurations for Project and ProjectStatus entities.
- Added PasswordResetController to handle password reset requests and confirmations.
- Created views for password reset request, confirmation, and invalid link scenarios.
- Implemented email sending for password reset requests with security measures.
- Added form validation for password reset confirmation, including password strength requirements.
- Enhanced user experience with success and error messages during the password reset process.
- Created a new CrudDataTable.vue component to handle data display and interactions.
- Integrated column configuration, filtering, and sorting functionalities.
- Added support for dynamic column visibility and order persistence using localStorage.
- Enhanced data loading with error handling and user feedback via toast notifications.
- Updated ContactManagement_old.vue to utilize the new CrudDataTable component, improving code organization and maintainability.
- Introduced typography styles in _typography.scss for headings, paragraphs, blockquotes, and horizontal rules.
- Added utility classes in _utils.scss for card styling and clearfix.
- Updated layout.scss to include new typography and utility styles.
- Defined common CSS variables in _common.scss for consistent theming.
- Created dark and light theme variables in _dark.scss and _light.scss respectively.
- Integrated Tailwind CSS with custom configurations in tailwind.config.js and postcss.config.js.
- Implemented database migrations for contact and contact_persons tables.
- Added data fixtures for generating sample contact data.
- Developed Contact and ContactPerson entities with appropriate validation and serialization.
- Enhanced ContactRepository with search and type filtering methods.
- Introduced a new SettingsManagement view for administrators to manage system settings.
- Added routes and components for settings management, including minimum password length and password login options.
- Implemented a SettingsService to handle retrieval and updating of settings.
- Created a new Setting entity and repository for database interactions.
- Added validation for password length using a custom PasswordMinLength validator.
- Updated SecurityController to check if password login is allowed.
- Enhanced UserManagement view to provide detailed error messages on save and delete operations.
- Implemented a DuplicateEmailExceptionListener to handle unique constraint violations for email addresses.
- Updated security configuration to include the new LoginFormAuthenticator.
- Created API endpoints for fetching and updating settings, secured with ROLE_ADMIN.
- Added knpuniversity/oauth2-client-bundle and league/oauth2-client to composer.json
- Updated composer.lock with new dependencies
- Registered KnpUOAuth2ClientBundle in bundles.php
- Configured security.yaml for custom authenticator and access control
- Created OIDC setup documentation (OIDC_SETUP.md)
- Implemented OAuthController for handling Pocket-ID authentication flow
- Developed PocketIdProvider and PocketIdResourceOwner for OIDC integration
- Created PocketIdAuthenticator for user authentication and management
- Updated login.html.twig to include Pocket-ID login button with styling
- Added knpu_oauth2_client.yaml configuration for Pocket-ID client
- Added UserManagement.vue component for managing users with PrimeVue DataTable.
- Integrated API endpoints for user CRUD operations in the backend.
- Implemented user password hashing using a custom state processor.
- Updated router to include user management route with admin access control.
- Enhanced Dashboard.vue and app.scss for improved styling and responsiveness.
- Documented user management features and API usage in USER-CRUD.md.