Commit Graph

32 Commits

Author SHA1 Message Date
Lorenz Hilpert
bfd151dd84 Merged PR 1989: fix(checkout): resolve currency constraint violations in price handling
fix(checkout): resolve currency constraint violations in price handling

- Add ensureCurrencyDefaults() helper to normalize price objects with EUR defaults
- Fix currency constraint violation in shopping cart item additions (bug #5405)
- Apply price normalization across availability, checkout, and shopping cart services
- Update 8 locations: availability.adapter, checkout.service, shopping-cart.service,
  get-availability-params.adapter, availability-transformers, reward quantity control
- Refactor OrderType to @isa/common/data-access for cross-domain reusability
- Remove duplicate availability service from catalogue library
- Enhance PriceValue and VatValue schemas with proper currency defaults
- Add availability-transformers.spec.ts test coverage
- Fix QuantityControl fallback from 0 to 1 to prevent invalid state warnings

Resolves issue where POST requests to /checkout/v6/store/shoppingcart/{id}/item
were sending price objects without required currency/currencySymbol fields,
causing 400 Bad Request with 'Currency: Constraint violation: NotNull' error.

Related work items: #5405
2025-10-28 10:34:39 +00:00
Lorenz Hilpert
2d654aa63a Merged PR 1986: fix(checkout): add complete price structure for reward delivery orders
Commits Summary

  Commit 1: fix(checkout): add complete price structure for reward delivery orders

  File: libs/checkout/data-access/src/lib/services/shopping-cart.service.ts
  - Fixed incomplete price object when adding reward items to cart
  - Added currency (EUR) and currencySymbol (€) to price value
  - This resolves the API error: "Error converting value 0 to type PriceDTO"

  Commit 2: feat(checkout): enable delivery options for reward shop items

  Files:
  - libs/checkout/feature/reward-catalog/src/lib/reward-action/reward-action.component.ts
  - libs/checkout/feature/reward-shopping-cart/src/lib/reward-shopping-cart-item/reward-shopping-cart-item.component.ts
  - libs/checkout/feature/reward-order-confirmation/src/lib/reward-order-confirmation.component.ts

  Changes:
  - Re-enabled 'delivery' and 'dig-delivery' purchase options for reward items
  - Removed unused import
  - Applied code formatting

Related work items: #5405
2025-10-27 11:14:14 +00:00
Lorenz Hilpert
9239f8960d Merged PR 1985: 🐛 fix(reward-order-confirmation): group items by item-level delivery type
🐛 fix(reward-order-confirmation): group items by item-level delivery type

Fix incorrect delivery type headers by grouping order items based on
item.features.orderType instead of order.features.orderType, since items
within a single order can have different delivery types.

Changes:
- Add groupDisplayOrderItemsByDeliveryType helper to group items by delivery type
- Add groupDisplayOrderItemsByBranch helper to group items by branch
- Refactor OrderConfirmationItemListComponent to use item-level grouping
- Move list rendering and grouping logic from parent to child component
- Update template to use branchGroup.items instead of branchGroup.allItems

Fixes #5403

Related work items: #5403
2025-10-27 09:24:24 +00:00
Lorenz Hilpert
56b4051e0b Merged PR 1979: fix(checkout): correct reward output desktop/mobile layout and add insufficie...
fix(checkout): correct reward output desktop/mobile layout and add insufficient points validation

- Fix desktop layout to display 4 columns with 80px gaps (164px, 164px, 164px, 444px)
- Add responsive tablet layout (3 columns in row 1, 1 column in row 2)
- Add error message when reading points are insufficient
- Disable CTA button when reading points are insufficient
- Create calculateTotalLoyaltyPoints helper to reduce code duplication
- Use @ng-icons/core for proper icon rendering

Resolves #5399

Related work items: #5399
2025-10-24 12:03:31 +00:00
Lorenz Hilpert
1c5bc8de12 Merged PR 1978: feat(checkout): implement hierarchical grouping on rewards order confirmation...
feat(checkout): implement hierarchical grouping on rewards order confirmation page

Implements correct grouping by delivery option and target address on the
rewards order confirmation page (Prämien-Abschlussseite).

Changes:
- Add hierarchical grouping: primary by delivery type, secondary by branch
- Show branch name only when multiple branches exist within same delivery type
- Remove duplicate "Abholfiliale" section from addresses component
- Fix undefined shoppingCartItem error by providing fallback with DisplayOrderItem features
- Fix partial order creation error handling in checkout orchestrator

Implementation:
- New helpers: groupDisplayOrdersByDeliveryType, groupDisplayOrdersByBranch
- Updated reward-order-confirmation component with groupedOrders computed signal
- Added comprehensive unit tests (15 new tests, all passing)
- Graceful error handling for backend responses with partial order creation

Bug Fixes:
- Prevent undefined features error when shopping cart item not found
- Extract orders from HTTP error responses when backend returns warnings
- Add German documentation for error handling with TODO for user feedback

Related to: #5397

Related work items: #5397
2025-10-23 14:04:31 +00:00
Lorenz Hilpert
1a8a1d2f18 refactor(checkout): move reward selection helpers to data-access for reusability
Relocates helper functions from feature-specific reward-selection-dialog to shared data-access library, enabling cross-feature usage. Renames get-loyalty-points and get-price helpers to better reflect their calculation purpose.
2025-10-22 17:07:56 +02:00
Lorenz Hilpert
743d6c1ee9 docs: comprehensive CLAUDE.md overhaul with library reference system
- 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
2025-10-22 11:55:04 +02:00
Lorenz Hilpert
a92f72f767 feat(checkout): complete reward order confirmation with reusable product info component
- Extract reusable ProductInfoComponent from ProductInfoRedemptionComponent
- Implement order confirmation item list with product, action card, and destination info
- Add completed shopping carts tracking to checkout metadata service
- Create Storybook stories for product info component variants
- Update checkout completion orchestrator to store shopping cart data
- Extract COMPLETED_SHOPPING_CARTS_METADATA_KEY constant for consistency
2025-10-21 22:18:16 +02:00
Lorenz Hilpert
ee2d9ba43a feat(checkout): implement reward order confirmation UI
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
2025-10-21 17:39:52 +02:00
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
b5c8dc4776 Merged PR 1968: #5307 Entscheidungs Dialog
#5307 Entscheidungs Dialog
2025-10-16 08:56:56 +00:00
Lorenz Hilpert
f15848d5c0 Merged PR 1967: Reward Shopping Cart Implementation 2025-10-14 16:02:18 +00: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
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
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
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
Lorenz Hilpert
100cbb5020 Merged PR 1958: Refactoring Checkout: Migration von prozess-basierter zu warenkorb-basierter Architektur mit neuer Data-Access-Library und verbesserter Typsicherheit
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
2025-09-25 09:27:05 +00:00
Nino Righi
334436c737 Merged PR 1957: #5258 Prämie Landing
#5258 Prämie Landing
- feat(crm-data-access): improve error handling and encapsulation in CRM services
- feat(reward): separate reward selection from checkout flow and restructure catalog
- Merge branch 'feature/5202-Praemie' into feature/5263-Praemie-Item-List-Und-Lieferung-Auswaehlen
- feat(libs-checkout): implement reward catalog with list display and pagination
- feat(checkout): add reward selection and action components for catalog
- feat(lib-checkout, lib-catalogue, lib-shared): implement reward catalog pagination with enhanced filtering
2025-09-24 18:31:35 +00:00
Lorenz Hilpert
d9ccf68314 feat(tabs): add helper functions for tab metadata management 2025-09-23 21:01:00 +02:00
Lorenz Hilpert
243b83bd73 Merged PR 1956: Destination Info Component
Related work items: #5347
2025-09-23 08:07:42 +00:00
Nino
9f775e01e2 Merge branch 'develop' into feature/5258-Praemie-Landing 2025-09-16 12:00:50 +02:00
Lorenz Hilpert
c5d057e3a7 Merged PR 1950: 5343-Filter-NumberRange
Related work items: #5343
2025-09-16 09:54:29 +00:00
Nino
e5c09c030c feat(reward): implement reward catalog with customer selection
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
2025-09-15 17:42:57 +02:00
Nino Righi
707802ce0d Merged PR 1944: feat(checkout-reward): #5258
- feat(loyalty): add loyalty program feature with list and navigation
- fix(isa-app-side-menu): Update customer expand to signals
- feat(catalogue-data-access): add searchLoyaltyItems method with comprehensive test coverage
- feat(project-structure): migrate loyalty system to reward-based architecture
- feat(checkout-reward): add query settings resolver and catalog resource
- feat(swagger-cat-search-api): Swagger Update
- feat(checkout-reward): update API call and prepare filter integration

Refs: #5258
2025-09-12 10:44:42 +00:00