feature(crm-data-access): Added check in customer resource if customerId has changed to prevent flickering in the view after Filter changes etc.
Ref: #5478
feat(crm-customer-booking): add loyalty card booking component
Implement new component for customer loyalty card credit/debit bookings with booking type selection and real-time transaction updates. Includes automatic reload of transaction history after successful bookings.
Key changes:
- Add CrmFeatureCustomerBookingComponent with booking form UI
- Create CustomerCardBookingFacade for booking API calls
- Add CustomerBookingReasonsResource for loading booking types
- Extend CrmSearchService with booking methods (addBooking, fetchBookingReasons, fetchCurrentBookingPartnerStore)
- Add AddBookingSchema with Zod validation
- Integrate component into KundenkarteMainViewComponent
- Update CustomerCardTransactionsResource to providedIn: 'root' for shared access
- Improve transaction list UX (hide header/center empty state when no data)
Technical details:
- New library: @isa/crm/feature/customer-booking (Vitest-based)
- Signals-based state management with computed properties
- Automatic points calculation based on booking type multiplier
- Error handling with feedback dialogs
- 500ms delay before transaction reload to ensure API consistency
- Data attributes for E2E testing (data-what, data-which)
Ref: #5315
Commit 86563a73: ✨ feat(crm): add customer card transactions history feature
Implements #5316 - Service Portal History displaying last 5 loyalty card transactions
**New feature library:**
- Created @isa/crm/feature/customer-card-transactions with CDK table component
- Shows transactions for first activated customer loyalty card
- Displays: Date, Transaction type (reason), Amount (EUR), Receipt number, Points
**Data layer:**
- Added CustomerCardTransactionsResource with reactive resource pattern
- Extended CrmSearchService with fetchLoyaltyBookings() method
- Uses LoyaltyCardService.LoyaltyCardListBookings() API endpoint
**UI/UX:**
- CDK table with ISA design system colors
- Header: 48px height, rounded corners (26px), neutral-400 background
- Visual indicators: Green up arrow (EARN), Red down arrow (BURN)
- German locale formatting (dd.MM.yyyy HH:mm.ss)
- Full-width table layout with proper spacing (24px between rows)
- Empty state when no transactions available
**Icons:**
- Added isaActionPolygonUp and isaActionPolygonDown to @isa/icons
**Integration:**
- Integrated into kundenkarte-main-view component
- Automatically loads transactions for first active card
Related work items: #5316
fix(crm-data-access, customer-details, reward-shopping-cart): persist selected addresses across navigation flows
Implement address selection persistence using CRM tab metadata to ensure
selected shipping addresses and payers are retained throughout the customer
selection flow, particularly when navigating from Kundenkarte to reward cart.
Changes include:
- Create PayerResource and CustomerPayerAddressResource to load selected
payer from tab metadata with fallback to customer as payer
- Create PayerService to fetch payer data from CRM API with proper error
handling and abort signal support
- Update BillingAndShippingAddressCardComponent to prefer selected addresses
from metadata over customer defaults, with computed loading state
- Refactor continue() flow in CustomerDetailsViewMainComponent to load
selected addresses from metadata before setting in checkout service
- Add adapter logic to convert CRM payer/shipping address types to checkout
types with proper type casting for incompatible enum types
- Implement fallback chain: metadata selection → component state → customer
default for both payer and shipping address
This ensures address selections made in the address selection dialogs are
properly preserved and applied when completing the customer selection flow,
fixing the issue where addresses would revert to customer defaults.
Ref: #5411
feat(crm-data-access,checkout): improve primary bonus card selection logic
Enhance getPrimaryBonusCard helper to sort cards alphabetically by code
when multiple primary cards exist or when no primary card is designated.
This ensures deterministic card selection across the application.
Add comprehensive test coverage for edge cases including:
- Multiple primary cards (returns first alphabetically)
- No primary cards (returns first alphabetically)
- Empty bonus cards array (returns undefined)
Add TODO comments in ShoppingCartService for future refactoring of
cart handling logic to improve code organization and reusability.
Ref: #5407
- Restructure CLAUDE.md with clearer sections and updated metadata
- Add research guidelines emphasizing subagent usage and documentation-first approach
- Create library reference guide covering all 61 libraries across 12 domains
- Add automated library reference generation tool
- Complete test coverage for reward order confirmation feature (6 new spec files)
- Refine product info components and adapters with improved documentation
- Update workflows documentation for checkout service
- Fix ESLint issues: case declarations, unused imports, and unused variables
Implement the complete UI for the reward order confirmation page including address displays, order item lists, and supporting helper functions.
Features:
- Add order confirmation addresses component displaying billing, delivery, and pickup branch addresses
- Implement order confirmation item list with order type icons and item details
- Add helper functions for order type feature checking and address/branch deduplication
- Integrate store computed properties for payers, shipping addresses, and target branches
- Apply responsive layout with Tailwind CSS styling
feat(crm): introduce PrimaryCustomerCardResource and format-name utility
Replace SelectedCustomerBonusCardsResource with a new PrimaryCustomerCardResource
that automatically loads and exposes the primary customer card as a signal.
This simplifies customer card access across the application by providing a
centralized, root-level injectable resource with automatic tab synchronization.
Create new @isa/utils/format-name library to consolidate customer name formatting
logic previously duplicated across components. The utility formats names with
configurable first name, last name, and organization name fields.
Key changes:
- Add PrimaryCustomerCardResource as providedIn root service with automatic
customer selection tracking via effect
- Remove SelectedCustomerBonusCardsResource and its manual provisioning
- Extract formatName function to dedicated utility library with Vitest setup
- Update all reward-related components to use new resource pattern
- Migrate OMS components to use centralized format-name utility
- Add comprehensive unit tests for formatName function
BREAKING CHANGE: SelectedCustomerBonusCardsResource has been removed
Ref: #5389
- 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
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
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
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
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
refactor(checkout): migrate purchase options to shopping cart-based architecture
Replace processId with shoppingCartId in purchase options modal and related components
Add new checkout data-access library with facades, services, and schemas
Update PurchaseOptionsService to use new checkout facade pattern
Migrate state management from process-based to shopping cart-based approach
Update selectors and store to handle shoppingCartId instead of processId
Improve type safety with Zod schemas for checkout operations
Add proper error handling and logging throughout checkout services
Update article details and checkout review components to use new patterns
BREAKING CHANGE: Purchase options modal now requires shoppingCartId instead of processId
Related work items: #5350
Add comprehensive customer card functionality to the reward catalog:
- Create new CRM data access layer with customer cards facade and services
- Implement customer card resource for fetching bonus card information
- Add reward customer card component to display customer details and points
- Update reward header to conditionally show customer card or start card
- Fix customer selection persistence by moving facade call outside conditional
- Add proper type definitions and models for bonus card information
- Export new facades and models through updated index files
The system now properly handles customer selection state across tabs
and displays relevant customer information including name and total points
when a customer with an active primary bonus card is selected.
Ref: #5262
Add comprehensive reward catalog functionality including:
- New reward catalog component with header switching between start card and customer card
- Customer selection integration with tab metadata service
- Reward checkout service with query settings fetching
- Customer search integration for reward context with proper filtering
- Tab metadata support for storing selected customer IDs
- Navigation improvements for reward workflow in customer details
The implementation includes proper error handling, logging, and follows
the established architectural patterns with facades and services.
Ref: #5262
- Introduced the crm-data-access library with a basic component.
- Added necessary configuration files, including ESLint and TypeScript settings.
- Implemented unit tests for the component to ensure functionality.
Refs: #5254