8716 Commits

Author SHA1 Message Date
Lorenz Hilpert
2b5da00249 feat(checkout): add reward order confirmation feature with schema migrations
- Add new reward-order-confirmation feature library with components and store
- Implement checkout completion orchestrator service for order finalization
- Migrate checkout/oms/crm models to Zod schemas for better type safety
- Add order creation facade and display order schemas
- Update shopping cart facade with order completion flow
- Add comprehensive tests for shopping cart facade
- Update routing to include order confirmation page
2025-10-21 14:28:52 +02:00
Nino Righi
915267d726 Merged PR 1976: fix(process): Simulate "old tab logic"
fix(process): Simulate "old tab logic"

Refs: #5375
2025-10-21 12:11:10 +00:00
Lorenz Hilpert
e0d4e8d491 Merge branch 'master' into develop 2025-10-21 14:09:53 +02:00
Nino Righi
1b6b726036 Merged PR 1975: hotfix(remission-list): prioritize reload trigger over exact search
hotfix(remission-list): prioritize reload trigger over exact search

Fix navigation issue where reload searches were incorrectly applying
exact search logic, causing filters to be cleared when they should
be preserved during navigation.

Changes:
- Update remission-list.resource.ts to check reload trigger before
  exact search conditions
- Ensure reload trigger always clears input but preserves other query
  parameters
- Prevent exact search from overriding reload behavior
- Add explanatory comment for reload priority logic

This ensures proper filter state management when users navigate
between remission lists, maintaining expected behavior for both
reload and exact search scenarios.

Ref: #5387
hotfix-5387-Remission-Falscher-Request-Nach-Suche
2025-10-21 12:08:06 +00:00
Nino Righi
f549c59bc8 Merged PR 1973: feat(customer-search): use navigation state for reward customer selection
feat(customer-search): use navigation state for reward customer selection

Replace tab metadata context flag with NavigationStateService for tracking
reward flow customer selection. Store return URL in preserved navigation
context instead of tab metadata 'context' field.

Benefits:
- Clean separation: tab metadata no longer polluted with flow state
- Automatic cleanup when tabs close (no manual cleanup needed)
- Survives intermediate navigations (e.g., address edit)
- Tab-scoped automatically via TabService integration

Changes:
- Remove `isRewardTab()` linkedSignal and tab metadata 'context' check
- Add NavigationStateService with 'select-customer' scope
- Store returnUrl in preserved context before navigation
- Restore context and navigate back on customer selection
- Update reward-start-card to preserve context on button click
- Remove reward-catalog context initialization (no longer needed)

Technical Details:
- Context stored in tab.metadata['navigation-contexts']['select-customer']
- Uses async methods: preserveContext(), restoreAndClearContext()
- Signal-based hasReturnUrl() for template reactivity
- Maintains existing button flow (checks hasReturnUrl signal)

Ref: #5368
2025-10-20 11:56:35 +00:00
Lorenz Hilpert
eacb0acb64 Merge branch 'master' into develop 2025-10-17 14:30:10 +02:00
Nino Righi
4c56f394c5 Merged PR 1972: hotfix(remission-list-item, remission-list-empty-state): improve empty state...
hotfix(remission-list-item, remission-list-empty-state): improve empty state logic and cleanup selected items on destroy

Refactor empty state display conditions in remission-list-empty-state component
to correctly handle search term validation. Move hasValidSearchTerm check to
parent condition to prevent displaying empty states during active searches.

Add ngOnDestroy lifecycle hook to remission-list-item component to properly
clean up selected quantities from the store when items are removed from the list.
This prevents memory leaks and ensures the store state remains synchronized with
the displayed items.

Changes:
- Move hasValidSearchTerm check in displayEmptyState computed signal to improve
  empty state display logic
- Implement OnDestroy interface in RemissionListItemComponent
- Add removeItem call in ngOnDestroy to clean up store state
- Add corresponding unit tests for the cleanup behavior

Ref: #5387
hotfix-5387-Remission-Unselect-List-Item
2025-10-17 12:09:55 +00:00
Lorenz Hilpert
a83929c389 docs(claude): add git workflow section for credential-required commands 2025-10-17 13:42:12 +02:00
Lorenz Hilpert
696db71ad5 Merge branch 'release/4.2' into develop 2025-10-17 13:39:49 +02:00
Nino Righi
26502eccbb Merged PR 1971: feature(customer-card): Deactivation of Create Customer with Card Feature
feature(customer-card): Deactivation of Create Customer with Card Feature

Display Error Feedback Dialog if Upgrade Customer (who has negative customer.id) is searched for

Refs: #5375
2025-10-17 11:35:15 +00:00
Nino
176cb206b6 chore(dockerfile): Update npm install for npm@11.6 Version 2025-10-16 17:04:20 +02:00
Nino
deb1e760ae Revert "feature(side-menu): Commented out Reward Navigation"
This reverts commit 4bdde1cc5c.
2025-10-16 15:51:56 +02:00
Nino
7c08d76ad4 Merge branch 'develop' into release/4.2 2025-10-16 15:51:14 +02:00
Nino
4bdde1cc5c feature(side-menu): Commented out Reward Navigation 2025-10-16 15:50:15 +02:00
Lorenz Hilpert
67128c1568 chore(release): prepare release v4.2
- Bump minor version to 4.2 in azure-pipelines.yml
- Update package-lock.json dependencies
2025-10-16 15:21:41 +02:00
Lorenz Hilpert
b96d8d7ec1 Merge branch 'master' into develop 2025-10-16 14:56:46 +02:00
Lorenz Hilpert
b96d889da5 feat(stock-info): implement request batching with BatchingResource
- Add BatchingResource base class for automatic API request batching
- Refactor StockInfoComponent to use StockInfoResource with batching
- Remove redundant StockResource provider from RewardShoppingCartItemComponent
- Update tests to match new BatchingResourceRef API
- Add comprehensive documentation for BatchingResource pattern

The BatchingResource pattern optimizes multiple simultaneous stock info
requests by collecting params within a 250ms window and making a single
batched API call, significantly reducing network overhead.
2025-10-16 14:07:17 +02:00
Nino
57302b4536 fix(reward-selection-pop-up): Fix Width 2025-10-16 13:55:40 +02:00
Nino
3a3f485146 chore(package-lock): update 2025-10-16 13:50:18 +02:00
Lorenz Hilpert
e458542b29 Merged PR 1970: feat(stock-info): implement request batching with BatchingResource - The main implementation
Related work items: #5348
2025-10-16 11:48:33 +00:00
Nino Righi
b5c8dc4776 Merged PR 1968: #5307 Entscheidungs Dialog
#5307 Entscheidungs Dialog
2025-10-16 08:56:56 +00:00
Lorenz Hilpert
596ae1da1b Merged PR 1969: Reward Shopping Cart Implementation with Navigation State Management and Shipping Address Integration
1. Reward Shopping Cart Implementation
  - New shopping cart with quantity control and availability checking
  - Responsive shopping cart item component with improved CSS styling
  - Shipping address integration in cart
  - Customer reward card and billing/shipping address components

  2. Navigation State Management Library (@isa/core/navigation)
  - New library with type-safe navigation context service (373 lines)
  - Navigation state service (287 lines) for temporary state between routes
  - Comprehensive test coverage (668 + 227 lines of tests)
  - Documentation (792 lines in README.md)
  - Replaces query parameters for passing temporary navigation context

  3. CRM Shipping Address Services
  - New ShippingAddressService with fetching and validation
  - CustomerShippingAddressResource and CustomerShippingAddressesResource
  - Zod schemas for data validation

  4. Additional Improvements
  - Enhanced searchbox accessibility with ARIA support
  - Availability data access rework for better fetching/mapping
  - Storybook tooltip variant support
  - Vitest JUnit and Cobertura reporting configuration

Related work items: #5382, #5383, #5384
2025-10-15 14:59:34 +00:00
Lorenz Hilpert
f15848d5c0 Merged PR 1967: Reward Shopping Cart Implementation 2025-10-14 16:02:18 +00:00
Lorenz Hilpert
d761704dc4 chore(deps): add integrity hashes to package-lock.json
Add resolved URLs and integrity hashes to package-lock.json entries
to ensure consistent dependency resolution and improve security.
2025-10-07 14:11:57 +02:00
Lorenz Hilpert
b1fdfb964e chore(deps): regenerate package-lock.json for build server compatibility 2025-10-07 13:59:10 +02:00
Lorenz Hilpert
9a3dd35b91 chore(deps): sync package-lock.json with package.json
Fix build server error caused by out-of-sync lock file.
Updated @types/react from 19.2.0 to 19.2.2.
2025-10-07 13:56:19 +02:00
Lorenz Hilpert
d82c133090 chore(package-lock): remove deprecated and unused dependencies 2025-10-07 13:53:21 +02:00
Lorenz Hilpert
4fc5f16721 refactor(checkout): consolidate adapters and implement unified checkout completion flow
Refactor checkout data-access layer to use centralized adapter pattern for converting between CRM and Checkout domain models. Extract business logic into dedicated helper modules and implement complete order button component for reward shopping cart.

Changes:
- Add 8 new adapters (availability, branch, customer, logistician, payer, product-number, shipping-address, shopping-cart-item) with comprehensive unit tests
- Create 3 helper modules: checkout-analysis, checkout-business-logic, checkout-data for separation of concerns
- Implement complete-order-button component with Tailwind styling for reward shopping cart
- Extend checkout models with Buyer and Payer types, update OrderOptions interface
- Add CustomerType, BuyerType, PayerType enums to common and CRM data-access layers
- Refactor customer component address selection to use new CustomerAdapter and ShippingAddressAdapter
- Update CheckoutService with refactored logic using new adapters and helpers
- Update CrmTabMetadataService to use consistent payer/shipping address ID tracking
- Add comprehensive documentation for checkout completion flow and service architecture
2025-10-07 13:50:11 +02:00
Nino Righi
a086111ab5 Merged PR 1966: Adjustments for #5320, #5360, #5361
Adjustments for #5320, #5360, #5361
4.1
2025-10-06 19:02:45 +00:00
Lorenz Hilpert
d9940740ce feat(checkout): add reward shopping cart and purchase options improvements
Add reward shopping cart item component and improve purchase options handling with branch resources and enhanced models.

## Changes

### Checkout Data Access

**New Models:**
- Branch: Type alias for BranchDTO
- Product: Type alias for ProductDTO
- ShoppingCartItem: Extended with required product and loyalty fields

**New Resources:**
- BranchResource: Resource for branch data management

**Service Improvements:**
- BranchService: Added return type and Branch model import
- PurchaseOptionsFacade: Added console logging for debugging

**Schema Updates:**
- base-schemas: Added new base schema definitions

### Reward Shopping Cart Feature

**New Component:**
- reward-shopping-cart-item: Individual cart item display component
  - Component, template, and styles
  - Integrated with cart items display

**Updated Components:**
- billing-and-shipping-address-card: Updated for reward flow
- reward-shopping-cart-items: Enhanced items list display

### Product Info Shared Components

**Updated Components:**
- destination-info: Improved destination display
- product-info-redemption: Enhanced redemption info display
- stock-info: Updated stock information display

### Remission Data Access

**New Resources:**
- stock.resource: Stock data resource management
- Added resources index export

**Service Improvements:**
- RemissionStockService: Updated implementation and tests

**Schema Updates:**
- fetch-stock-in-stock: Schema refinements

### Remission Features

**Updated Components:**
- remission-list: Component updates
- remission-instock.resource: Resource improvements
- instock.resource: Enhanced stock handling

### VSCode Settings

- Updated workspace settings

## Impact

- Reward shopping cart UI ready for use
- Improved type safety with new model definitions
- Better resource management for branches and stock
- Enhanced debugging with console logging
2025-10-06 17:14:29 +02:00
Lorenz Hilpert
1e9ac30b4d refactor(checkout): separate data-access layer boundaries
Extract domain-specific operations from CheckoutService into dedicated services to respect data-access layer boundaries and improve separation of concerns.

## Changes

### New Services Created

**OrderCreationService** (oms-data-access)
- createOrdersFromCheckout(): Creates orders from completed checkout
- getLogistician(): Retrieves logistician (default '2470')
- 8 unit tests with Jest/Spectator

**AvailabilityService** (catalogue-data-access)
- validateDownloadAvailabilities(): Validates download items availability
- getDigDeliveryAvailability(): Gets DIG-Versand availability
- getB2bDeliveryAvailability(): Gets B2B-Versand availability
- 15 unit tests with Jest/Spectator

**BranchService** (remission-data-access)
- getDefaultBranch(): Gets default/current branch for user
- 5 unit tests with Angular Testing Utilities
- Note: Temporary location, will move to inventory-data-access

### CheckoutService Refactoring

**Removed cross-domain imports:**
- @generated/swagger/oms-api
- @generated/swagger/availability-api
- @generated/swagger/inventory-api

**Added domain service dependencies:**
- @isa/oms/data-access (OrderCreationService)
- @isa/catalogue/data-access (AvailabilityService)
- @isa/remission/data-access (BranchService)

**Code reduction:**
- Removed 254 lines (25.5% reduction: 996 → 742 lines)
- Deleted 8 private methods moved to domain services

### Test Updates

- Updated checkout.service.spec.ts with new service mocks
- Fixed Zod validation (buyerType/payerType literals)
- All 29 tests passing (8+15+5+11)

### AbortSignal Policy

Removed abortSignal from data-mutating operations:
- OrderCreationService.createOrdersFromCheckout() (POST)
- Kept abortSignal for read-only operations per project convention

## Impact

- Better separation of concerns
- Improved maintainability (smaller, focused services)
- Respects data-access layer boundaries
- No functional changes (100% backward compatible)
- 0 TypeScript compilation errors
2025-10-06 17:09:12 +02:00
Nino Righi
15a4718e58 Merged PR 1965: feat(remission-list): improve item update handling and UI feedback
feat(remission-list): improve item update handling and UI feedback

Enhance the remission list item management by introducing a more robust
update mechanism that tracks both item removal and impediment updates.
Previously, the component only tracked deletion progress, but now it
handles both deletion and update scenarios, allowing for better state
management and user feedback.

Key changes:
- Replace simple inProgress boolean with UpdateItem interface containing
  inProgress state, itemId, and optional impediment
- Update local items signal directly when items are removed or updated,
  eliminating unnecessary API calls and improving performance
- Add visual highlight to "Remi Menge ändern" button when dialog is open
  using a border style for better accessibility
- Improve error handling by tracking specific item operations
- Ensure selected items are properly removed from store when deleted
  or updated

The new approach optimizes list reloads by only fetching data when
necessary and provides clearer visual feedback during item operations.

Unit Tests updated also

Ref: #5361
2025-10-06 08:41:47 +00:00
Nino Righi
40592b4477 Merged PR 1964: feat(shared-filter): add canApply input to filter input menu components
feat(shared-filter): add canApply input to filter input menu components

Add canApply input parameter to FilterInputMenuButtonComponent and FilterInputMenuComponent to control when filter actions can be applied. Update RemissionListDepartmentElementsComponent to use canApply flag and implement rollback functionality when filter menu is closed without applying changes.

- Add canApply input to FilterInputMenuButtonComponent with default false
- Pass canApply parameter through to FilterInputMenuComponent
- Update remission department filter to use canApply=true
- Implement rollbackFilterInput method for filter state management
- Change selectedDepartments to selectedDepartment for single selection
- Update capacity resource to work with single department selection

Ref: #5320
2025-10-06 08:41:22 +00:00
Nino Righi
d430f544f0 Merged PR 1963: feat(utils): add scroll-top button component
feat(utils): add scroll-top button component

Add a reusable ScrollTopButtonComponent that provides smooth scrolling
to the top of a page or specific element. The component automatically
shows/hides based on scroll position and respects user's reduced motion
preferences.

Key features:
- Supports both window and element-specific scrolling
- Configurable position with sensible defaults
- Accessibility compliant with proper aria-label
- Respects prefers-reduced-motion media query
- Debounced scroll event handling for performance

Integrate the component into remission list and search dialog
components to improve user navigation experience.

Ref: #5360
2025-10-06 08:41:08 +00:00
Lorenz Hilpert
58815d6fc3 Missing Files 2025-10-02 20:29:29 +02:00
Lorenz Hilpert
eea5c23ce9 Fix unit Test 2025-10-02 20:25:50 +02:00
Nino
49df965375 chore(docs-adr): Updated Doc 2025-10-02 16:53:00 +02:00
Lorenz Hilpert
23151474e4 Implement feature X to enhance user experience and fix bug Y in module Z 2025-10-02 15:03:41 +02:00
Lorenz Hilpert
755fc8d01a Implement code changes to enhance functionality and improve performance 2025-10-02 14:55:45 +02:00
Lorenz Hilpert
b130d5d9ff feat(checkout-data-access): add LogisticianDTO and SupplierDTO schemas for entity management 2025-10-02 14:45:32 +02:00
Lorenz Hilpert
500178e6f2 feat(schemas): add LabelDTO and BranchDTO schemas for entity management 2025-10-02 10:50:44 +02:00
Lorenz Hilpert
827828aee2 bugfix(auth): enhance authentication flow and error handling
- Ensure access token is present during initialization.
- Improve error logging for identity claims validation.
- Update dependencies for better compatibility.
2025-10-01 14:52:10 +02:00
Lorenz Hilpert
47a051c214 refactor(tabs): simplify tab navigation service and add URL blacklist
Removed unnecessary logging effects and improved tab navigation
service by implementing a URL blacklist to prevent cluttering
the navigation history with specific routes. Added constants
for better management of excluded URLs.
2025-09-30 20:49:19 +02:00
Nino
c767c60d31 refactor(lib-checkout,lib-crm): replace SelectedCustomerFacade with CrmTabMetadataService
Remove the redundant SelectedCustomerFacade which was just a thin wrapper
around CrmTabMetadataService. Update all consumers to use CrmTabMetadataService
directly for better consistency and reduced indirection.

Changes:
- Remove SelectedCustomerFacade and its exports
- Update reward catalog components to use SelectedCustomerBonusCardsResource
- Replace local resource factories with global resources
- Update purchase options modal and customer details components
- Simplify reward action component logic and improve button state handling

Ref: #5202, #5263, #5358
2025-09-30 18:14:54 +02:00
Lorenz Hilpert
37840b1565 Merged PR 1962: Reward Shopping Cart
Related work items: #5305, #5356, #5357, #5359
2025-09-30 14:50:01 +00:00
Nino Righi
9d57ebf376 Merged PR 1961: feat(checkout-reward): implement reward catalog customer integration and purc...
feat(checkout-reward): implement reward catalog customer integration and purchase flow

- Add customer card resource and display in reward header with reset functionality
- Implement shopping cart creation and management for reward purchases
- Add purchase options modal integration with redemption points support
- Extract route helper for customer navigation with proper query params
- Update checkout metadata service constants with proper namespacing
- Add reward context initialization for tab metadata
- Improve component styling and layout for reward action buttons
- Fix customer facade method signature to require AbortSignal parameter

The reward catalog now supports full customer workflow from selection
through purchase options with proper state management and navigation.

Ref: #5263, #5358
2025-09-30 13:54:31 +00:00
Lorenz Hilpert
c745f82f3a Merged PR 1960: feat: implement reward points system in purchase options
feat: implement reward points system in purchase options

- Add version tracking to application store for data migration support
- Integrate redemption points display in purchase options list items
- Update purchase options modal to handle reward point calculations
- Enhance shopping cart item component with reward point functionality
- Add reward point schemas and validation to checkout data access
- Update user storage provider with versioning support
- Improve logger configuration in customer guard
- Update package dependencies for reward functionality
- Fix ESLint errors for code quality compliance

Refs: #5352

Related work items: #5263, #5352, #5355
2025-09-29 10:18:13 +00:00
Nino
2387c60228 fix(merge-conflicts): fixes to reward-catalog 2025-09-25 18:13:41 +02:00
Nino
186e11e671 Merge branch 'develop' into feature/5202-Praemie 2025-09-25 17:52:46 +02:00
Lorenz Hilpert
39a55c9d55 Merged PR 1959: feat: enhance error handling and validation infrastructure
feat: enhance error handling and validation infrastructure

- Add comprehensive Zod error helper with German localization
- Migrate from deprecated .toPromise() to firstValueFrom()
- Enhance global error handler with ZodError support
- Implement storage features for signal stores with auto-save
- Add comprehensive test coverage for validation scenarios
- Update multiple stores with improved storage integration
- Extend tab management with enhanced navigation patterns
- Add checkout data-access barrel exports
- Update core-storage documentation with usage examples

Major improvements:
- Complete German error message translations for all Zod validation types
- Auto-save with configurable debouncing for signal stores
- Type-safe storage integration with schema validation
- Enhanced entity management with orphan cleanup
- Robust fallback strategies for validation failures

Breaking: Requires Zod validation errors to use new helper

Refs: #5345 #5353

Related work items: #5345, #5353
2025-09-25 15:49:01 +00:00