Commit Graph

1008 Commits

Author SHA1 Message Date
Nino Righi
3228abef44 Merged PR 2061: feature(crm-data-access): Added check in customer resource if customerId has...
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
2025-11-28 12:40:04 +00:00
Nino Righi
c0cc0e1bbc Merged PR 2060: feature(checkout-reward, core-tabs): Added back button and configured it so i...
feature(checkout-reward, core-tabs): Added back button and configured it so it can accept optional route to navigate. Added orderNumber and orderDate to reward order confirmation

Ref: #5456
2025-11-28 12:38:08 +00:00
Nino Righi
41630d5d7c Merged PR 2055: feature(ui-label, ahf, warenausgabe, customer-orders): Added and Updated Labe...
feature(ui-label, ahf, warenausgabe, customer-orders): Added and Updated Label Library and Label to the Views, Updated Positioning

Ref: #5479
2025-11-28 12:37:11 +00:00
Lorenz Hilpert
a5bb8b2895 Merged PR 2058: feat(crm): customer card copy-to-clipboard and carousel improvements
Customer Card Copy-to-Clipboard (#5508)

  - Click on card number copies it to clipboard using Angular CDK Clipboard
  - Shows success tooltip confirmation positioned on the right
  - Tooltip auto-dismisses after 3 seconds

  Card Stack Carousel Improvements (#5509)

  - Fix card centering by using afterNextRender instead of AfterViewInit
  - Add ResizeObserver to handle dynamic size changes
  - Disable transforms until natural position is measured (prevents initial jump)
  - Center single card in carousel view

  Tooltip Enhancements

  - Add success variant with green styling (isa-accent-green)
  - Add position input (left | right | top | bottom)
  - Add fade in/out CSS keyframes animations (150ms)
  - Respect prefers-reduced-motion for accessibility

  Related Tasks

  - Closes #5508
  - Refs #5509
2025-11-27 16:28:06 +00:00
Lorenz Hilpert
7950994d66 Merged PR 2057: feat(checkout): add branch selection to reward catalog
feat(checkout): add branch selection to reward catalog

- Add new select-branch-dropdown library with BranchDropdownComponent
  and SelectedBranchDropdownComponent for branch selection
- Extend DropdownButtonComponent with filter and option subcomponents
- Integrate branch selection into reward catalog page
- Add BranchesResource for fetching available branches
- Update CheckoutMetadataService with branch selection persistence
- Add comprehensive tests for dropdown components

Related work items: #5464
2025-11-27 10:38:52 +00:00
Nino Righi
4589146e31 Merged PR 2056: fix(ui-tooltip): Integrated CloseOnScrollDirective to close tooltip on scrolling
fix(ui-tooltip): Integrated CloseOnScrollDirective to close tooltip on scrolling

Ref: #5510
2025-11-26 20:08:11 +00:00
Nino
98fb863fc7 Merge branch 'release/4.5' into develop 2025-11-26 16:46:47 +01:00
Nino Righi
6f13d48604 Merged PR 2054: fix(checkout-reward-shopping-cart): Layout Issue Fix
fix(checkout-reward-shopping-cart): Layout Issue Fix

Ref: #5458
2025-11-26 14:04:06 +00:00
Nino Righi
d4bba4075b Merged PR 2053: feature(checkout-reward-cart): Added Empty State and View Adjustments, Disabl...
feature(checkout-reward-cart): Added Empty State and View Adjustments, Disable CTA if no items are in cart

Ref: #5435
2025-11-26 14:03:24 +00:00
Lorenz Hilpert
bc1f6a42e6 📝 docs: update README documentation for 13 libraries 2025-11-25 14:13:44 +01:00
Nino Righi
0aeef0592b Merged PR 2052: fix(ui-input-controls): Fix Dropdown Scrolling Issue on IPAD
fix(ui-input-controls): Fix Dropdown Scrolling Issue on IPAD

Ref: #5505
2025-11-25 13:00:58 +00:00
Lorenz Hilpert
aee64d78e2 Merged PR 2051: Fix Card Position
Related work items: #5506
2025-11-25 10:36:25 +00:00
Nino
2c39ca05a9 fix(ui-input-controls): Fix iOS Dropdown Scrolling
Ref: #5505
2025-11-25 10:26:34 +01:00
Nino
5054dd5492 fix(crm-customer-card): Bg White fix 2025-11-24 17:55:12 +01:00
Nino Righi
b93e39068c Merged PR 2050: feature(checkout-reward): Disable Print Order Confirmation for HSC Users
feature(checkout-reward): Disable Print Order Confirmation for HSC Users

Ref: #5471
2025-11-24 16:01:56 +00:00
Lorenz Hilpert
dc26c4de04 Merged PR 2049: feat(oms): add auto-refresh for open reward tasks
feat(oms): add auto-refresh for open reward tasks

Implements 5-minute polling to automatically update open reward tasks
without requiring manual page refresh. Uses reference counting to safely
handle multiple consumers starting/stopping the refresh.

Changes:
- Add startAutoRefresh/stopAutoRefresh methods with ref counting
- Add lifecycle hooks to carousel component for proper cleanup
- Add logging for debugging auto-refresh behavior
- Add refresh interval constant (5 minutes)

Closes #5463

Related work items: #5463
2025-11-24 15:46:17 +00:00
Nino Righi
8b852cbd7a Merged PR 2048: fix(shared-barcode, crm-customer-card): improve barcode rendering with transp...
fix(shared-barcode, crm-customer-card): improve barcode rendering with transparent SVG background

Enhance barcode component flexibility by separating container and SVG
background colors. The SVG barcode now defaults to transparent background
while maintaining container background control, enabling better integration
with various card designs.

Changes:
- Add separate svgBackground input for SVG element (default: transparent)
- Keep background input for container styling (default: #ffffff)
- Add containerWidth and containerHeight inputs for flexible sizing
- Update customer card to remove explicit white background on barcode
- Add opacity styling for inactive customer cards
- Enhance test coverage for new background and sizing inputs

The separation of concerns allows the barcode to adapt to parent container
backgrounds while maintaining consistent rendering across different contexts.

Ref: #5498
2025-11-24 14:58:05 +00:00
Lorenz Hilpert
38de927c4e Merged PR 2047: feat(carousel): convert to transformX with touch support and card animations
feat(carousel): convert to transformX with touch support and card animations

- Convert carousel from scroll-based to translate3d() transform positioning
- Add touch/swipe support with direct DOM manipulation for smooth 60fps performance
- Add mouse drag support for desktop navigation
- Implement hardware-accelerated transforms with will-change optimization
- Add disabled input to prevent navigation when needed
- Fix bounds calculation to use parent viewport width
- Add card stacking animation with translateY and rotation effects
- Remove shadow for cards beyond 3rd position in stacked mode
- Update tests with 4 new disabled state test cases (17 tests total)

Refs #5499

Related work items: #5499
2025-11-24 13:37:34 +00:00
Nino Righi
4107641e75 Merged PR 2046: feature(crm-data-access): Update Transactions Endpoint
feature(crm-data-access): Update Transactions Endpoint

Ref: #5336
2025-11-21 17:39:57 +00:00
Nino
6c75536cd0 Merge branch 'develop' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into develop 2025-11-21 17:10:51 +01:00
Nino
4c306a213d fix(crm-customer-card): Refresh after Lock, Unlock or Add Cards correctly, Adjusted Placeholder Text, Show Transactions based on first Card instead of first active card
Ref: #5503
2025-11-21 17:10:12 +01:00
Nino Righi
7a98db35fb Merged PR 2045: feature(crm-data-access): Updated Add Card Endpoint
feature(crm-data-access): Updated Add Card Endpoint

Ref: #5329
2025-11-21 15:41:24 +00:00
Nino Righi
cf359954ca Merged PR 2044: fix(utils-positive-integer-input): Fixed issue with copy and paste
fix(utils-positive-integer-input): Fixed issue with copy and paste

Ref: #5501
2025-11-21 15:40:55 +00:00
Nino Righi
df1fe540d0 Merged PR 2043: #5335 Endpoint Unlock wurde erweitert
#5335 Endpoint Unlock wurde erweitert
2025-11-21 14:30:01 +00:00
Lorenz Hilpert
bf87df6273 Merged PR 2042: fix(navigation): prevent autoTriggerContinueFn from persisting across navigat...
fix(navigation): prevent autoTriggerContinueFn from persisting across navigations

The autoTriggerContinueFn flag was remaining in navigation context after
being read, causing incorrect auto-triggering on subsequent page visits.

Changes:
- Add patchContext() method to NavigationContextService and NavigationStateService
  for partial context updates without full replacement
- Update details-main-view.component to use patchContext() to clear the flag
  immediately after reading, while preserving returnUrl
- Add comprehensive JSDoc and README documentation for patchContext()
- Include structured logging for patch operations

The new patchContext() method provides a cleaner API for updating specific
context properties without manually preserving all other properties.

Closes #5500

Related work items: #5500
2025-11-21 13:45:40 +00:00
Lorenz Hilpert
7a6a2dc49d Merged PR 2038: feat(shared,crm): add Code 128 barcode generation library
feat(shared,crm): add Code 128 barcode generation library

Implements new @isa/shared/barcode library with directive and component
for generating Code 128 barcodes using JsBarcode.

Features:
- Standalone Angular directive (svg[sharedBarcode])
- Standalone Angular component (<shared-barcode>)
- Signal-based reactive inputs
- SVG-based vector rendering
- Customizable colors, size, margins, fonts
- Comprehensive Vitest test coverage (39 tests)
- Storybook stories for both directive and component
- Integrated into customer loyalty card component

Changes:
- Created @isa/shared/barcode library with directive and component
- Added JsBarcode dependency (v3.12.1)
- Integrated barcode into customer loyalty card display
- Added Storybook stories for interactive documentation
- Fixed ui-switch story component reference
- Updated library reference documentation

Refs #5496

Related work items: #5496
2025-11-21 13:42:32 +00:00
Lorenz Hilpert
5f1d3a2c7b Merged PR 2040: fix(crm): prevent duplicate reload of loyalty points
fix(crm): prevent duplicate reload of loyalty points

Refactored reload mechanism to use parent-managed pattern:
- Child components emit events instead of reloading directly
- Parent coordinates reload of both transactions and bonus cards
- Added loading guards to prevent concurrent requests
- Added JSDoc documentation to public methods

Closes #5497

Related work items: #5497
2025-11-21 13:40:06 +00:00
Nino Righi
644c33ddc3 Merged PR 2041: fix(ui-input-controls-dropdown): Added Dropdown Backdrop + Lock Position
fix(ui-input-controls-dropdown): Added Dropdown Backdrop + Lock Position

Ref: #5495
2025-11-21 13:35:49 +00:00
Nino Righi
b32cc48fd9 Merged PR 2036: feature(libs-icons, crm-customer-card-transactions): Added Refresh Icon, Adde...
feature(libs-icons, crm-customer-card-transactions): Added Refresh Icon, Added Spacer to Transaction Layout, Added Refresh CTA Styling

Ref: #5493
2025-11-20 16:58:02 +00:00
Nino Righi
bcd4d655a6 Merged PR 2035: fix(utils-positive-integer-input, crm-customer-booking, crm-customer-card): a...
fix(utils-positive-integer-input, crm-customer-booking, crm-customer-card): add missing path mapping in tsconfig

Add the @isa/utils/positive-integer-input path mapping to tsconfig.base.json
to resolve module resolution issues. The library was created but the path
alias was not properly registered, causing import errors in consuming modules.

Ref: #5492
2025-11-20 16:57:04 +00:00
Lorenz Hilpert
1784e08ce6 chore: update project configurations to skip CI for specific libraries
Added "skip:ci" tag to multiple project configurations to prevent CI runs
for certain libraries. This change affects the following libraries:
crm-feature-customer-card-transactions, crm-feature-customer-loyalty-cards,
oms-data-access, oms-feature-return-details, oms-feature-return-process,
oms-feature-return-summary, remission-data-access, remission-feature-remission-list,
remission-feature-remission-return-receipt-details, remission-feature-remission-return-receipt-list,
remission-shared-remission-start-dialog, remission-shared-return-receipt-actions,
shared-address, shared-delivery, ui-carousel, and ui-dialog.

Also updated CI command in package.json to exclude tests with the "skip:ci" tag.
2025-11-20 17:24:35 +01:00
Lorenz Hilpert
39058aeab8 chore: remove redundant code blocks from changes section 2025-11-20 16:17:47 +01:00
Lorenz Hilpert
c873546160 Merged PR 2034: feat(crm): set selected customer when navigating to Prämienshop
 feat(crm): set selected customer when navigating to Prämienshop

Implements autoTriggerContinueFn pattern to properly set customer context
before navigating to reward shop from customer loyalty cards view.

Changes:
- Add output event to customer-loyalty-cards component (library layer)
- Handle navigation at app layer (kundenkarte-main-view) to respect module boundaries
- Use existing autoTriggerContinueFn pattern from details-main-view
- Inject NavigationStateService and CustomerSearchNavigation services
- Preserve context with returnUrl and autoTriggerContinueFn flag

This ensures customer selection logic (_setCustomer, _setBuyer, _setSelectedCustomerIdInTab)
executes before navigating to the reward shop, matching the behavior of the
continue() method in CustomerDetailsViewMainComponent.

Refs: #5485

Related work items: #5485
2025-11-20 15:15:32 +00:00
Lorenz Hilpert
3e960b0f44 ♻️ refactor: improve ResponseArgs validation with Zod schema
- Replace manual type checking with Zod schema validation in isResponseArgs helper
- Simplify error handling logic in catchResponseArgsErrorPipe operator
- Remove redundant conditional checks by leveraging Zod's safeParse
- Remove unused ResponseArgs import from operator file

This improves type safety and validation robustness by using a declarative schema-based approach.
2025-11-20 15:22:16 +01:00
Nino Righi
17cb0802c3 Merged PR 2033: Add, Lock, Unlock Customer Cards
Add, Lock, Unlock Customer Cards

Refs: #5313, #5329, #5334, #5335
2025-11-20 13:59:27 +00:00
Lorenz Hilpert
b7d008e339 Merged PR 2032: Bugfix Bon Error Message
Related work items: #5314
2025-11-19 15:18:26 +00:00
Lorenz Hilpert
fc6d29d62f Merged PR 2031: feat(crm): add customer bon redemption feature
feat(crm): add customer bon redemption feature

- New library @isa/crm/feature/customer-bon-redemption
- Implement bon validation and redemption flow
- Add SignalStore for state management
- Add resource pattern for reactive data loading
- Add facade for business logic abstraction
- Add Zod schemas for runtime validation
- Integrate with loyalty card API endpoints
- Add accessibility and E2E test attributes
- Remove mock provider (use real facade)
- Exclude generated swagger files from linting

Components:
- BonInputFieldComponent - input with validation
- BonDetailsDisplayComponent - shows validated bon
- BonRedemptionButtonComponent - redemption action

Data Access:
- CustomerBonRedemptionFacade - business logic
- CustomerBonCheckResource - reactive validation
- BonRedemptionStore - component state
- CrmSearchService - API integration (checkBon, addBon)

Issue: 5314

Related work items: #5314
2025-11-19 12:51:58 +00:00
Nino
8c0de558a4 feature(crm-customer-card): Improvements, Refresh Transactions
Refs: #5316, #5315
2025-11-18 16:44:54 +01:00
Nino Righi
a855e79196 Merged PR 2030: feat(crm-customer-booking): add loyalty card booking component
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
2025-11-18 10:05:17 +00:00
Nino Righi
71af23544f Merged PR 2029: feature(crm, isa-app-customer-search): Adjustments to Card Transaction Histor...
feature(crm, isa-app-customer-search): Adjustments to Card Transaction History, Added Scroll Top Button, Show 50 last Transactions, Wording changes
Refs: #5316
2025-11-18 09:58:26 +00:00
Lorenz Hilpert
e654a4d95e Merged PR 2028: Commit 86563a73: feat(crm): add customer card transactions history feature
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
2025-11-14 13:09:58 +00:00
Lorenz Hilpert
5057d56532 Merged PR 2026: feat(crm): add customer loyalty cards feature with points summary
Related work items: #5312
2025-11-14 12:59:02 +00:00
Nino
7c2c72745f feature(checkout-reward): Enable Delivery Options 2025-11-14 10:55:05 +01:00
Nino
2ea76b6796 fix(core-tabs): Create Shopping Cart Correctly
Ref: #5480
2025-11-13 17:48:11 +01:00
Nino Righi
83292836a3 Merged PR 2027: #5483 Reset Reward Cart + Customer from Tab
#5483 Reset Reward Cart + Customer from Tab

Small Bugfixes to #5480 Customer clearing Logic
2025-11-13 15:49:49 +00:00
Nino Righi
212203fb04 Merged PR 2025: fix(core-tabs): improve tab cleanup and naming logic
fix(core-tabs): improve tab cleanup and naming logic

Refactor tab management to handle checkout state transitions more reliably:

- Extract helpers (formatCustomerTabNameHelper, checkCartHasItemsHelper,
  getNextTabNameHelper) from checkout component to @isa/core/tabs for reuse
- Fix getNextTabNameHelper to count tabs instead of finding max ID,
  preventing gaps in "Vorgang X" numbering
- Add canDeactivateTabCleanup guard to manage tab context based on cart state:
  * Preserves customer context if either cart (regular or reward) has items
  * Updates tab name with customer/organization name when context preserved
  * Resets tab to clean "Vorgang X" state when both carts empty
  * Handles navigation to global areas (without tab ID) gracefully
- Apply canDeactivateTabCleanup to checkout-summary and reward-order-confirmation routes
- Move tab cleanup logic from component ngOnDestroy to reusable guard
- Add comprehensive unit tests for getNextTabNameHelper

This ensures tabs maintain correct state after order completion, properly
display customer context when carts have items, and reset cleanly when
both carts are empty. The guard approach centralizes cleanup logic and
makes it reusable across checkout flows.

Ref: #5480
2025-11-13 14:10:43 +00:00
Lorenz Hilpert
b89cf57a8d fix(tabs): fix tab activation issue 2025-11-12 20:56:53 +01:00
Lorenz Hilpert
999f61fcc0 Merged PR 2023: fix(core/tabs): Add logging and fix critical bugs in TabService
fix(core/tabs): Add logging and fix critical bugs in TabService

- Add comprehensive logging using @isa/core/logging for all TabService methods
- Fix null pointer in patchTab when tab doesn't exist
- Fix activateTab allowing non-existent tabs to be set as active
- Fix removeTab not clearing activatedTabId when removing active tab
- Replace unsafe 'as any' type casts with proper type checking
- Document side effect in getCurrentLocation method

Fixes #5474

Related work items: #5474
2025-11-12 13:39:50 +00:00
Nino
b827a6f0a0 fix(isa-app): Fixes Auth and TabID Errors on Startup
Refs: #5472, #5473
2025-11-12 12:40:59 +01:00
Nino
c643d988fa Merge branch 'release/4.3' 2025-11-11 21:56:00 +01:00