Compare commits

...

585 Commits

Author SHA1 Message Date
Lorenz Hilpert
6a7d509aa4 Merge branch 'hotfix/5022-Bezahlte-undunbezahlte-Ware-auf-der-seben-AHF-nummer' 2025-04-09 12:34:59 +02:00
Lorenz Hilpert
59ad7710d9 Refactor selectLatestCompartmentCodeAndInfoForOrder to enforce booking rules for paid and unpaid items 2025-04-08 18:21:47 +02:00
Lorenz Hilpert
921edf8066 #5022 Hotfix selectors in pickup-shelf-details to improve readability and consistency 2025-04-01 16:17:15 +02:00
Michael Auer
0ac34740bb Merge branch 'hotfix/traefik-ingressroute-with-path' 2025-03-11 18:05:31 +01:00
Michael Auer
591824196b Cherry-Pick: PR 1824: ISA-Frontend - Expliziter Pfad für Traefik IngressRoute
(cherry picked from commit c9b2762bbc)
2025-02-28 11:15:20 +01:00
Lorenz Hilpert
1847c6944e Merge branch 'release/3.4' 2025-02-10 10:41:14 +01:00
Lorenz Hilpert
f743ce59fa #4922 Rename customer_name to customer_no in goods service and pickup shelf service
(cherry picked from commit ca998c0685)
2025-01-15 11:28:56 +01:00
Lorenz Hilpert
99feb499a2 Update Scandit licence key for staging environment 2025-01-02 13:41:02 +01:00
Lorenz Hilpert
bb5b6e2e59 Update Scandit licence key for staging environment 2024-12-05 16:35:45 +01:00
Lorenz Hilpert
f57988f83e Update Scandit Licence Key for production 2024-12-05 15:38:24 +01:00
Lorenz Hilpert
17a68b9dbb Merged PR 1823: #4895 - Add download availability to article details component and update pri...
#4895 - Add download availability to article details component and update price mapping logic
2024-11-28 16:49:28 +00:00
Nino Righi
a0c8035dbb Merged PR 1820: Fix - Close dropdown after selecting a reason in add product modal
Fix - Close dropdown after selecting a reason in add product modal
2024-11-27 14:21:12 +00:00
Nino Righi
34e96f0751 Merged PR 1821: Refactor getCachedData method to be asynchronous and improve cache handling
Refactor getCachedData method to be asynchronous and improve cache handling
2024-11-27 14:20:25 +00:00
Lorenz Hilpert
9ba05253e9 Enhance select component to register options on initialization and remove debug log 2024-11-27 11:52:02 +01:00
Lorenz Hilpert
98a9346c1a Refactor customer number handling and add combined observable for customer number and selected order item changes 2024-11-27 11:43:49 +01:00
Lorenz Hilpert
fa66d2389a Improvements - Um Cover Items die nicht zur ausgeäjlten bestellung gehören zu filtern 2024-11-26 17:02:57 +01:00
Lorenz Hilpert
6743c8e630 Fix #4891 Kundendaten erfassen // Land bei Lieferung nicht auswählbar 2024-11-26 16:56:50 +01:00
Lorenz Hilpert
f62e198aed Fix - Nachbestellen - Dropdown wird nun nach der Auswahl geschlossen und Button Bestellen ist wieder klickbar 2024-11-26 16:34:32 +01:00
Nino
387e6b08ed Remove unused selectedCompartmentInfo properties from PickupShelfOutDetailsComponent 2024-11-25 17:31:49 +01:00
Lorenz Hilpert
721fd06c76 Remove console logs from beforeFetchCoverOrderItems and fetchCoverOrderItemsDone methods in PickupShelfDetailsStore 2024-11-25 16:51:43 +01:00
Lorenz Hilpert
0fcdb308b5 Remove Scandit overlay component and enhance error handling in ScanditScanAdapter; add logging for order item fetching in PickupShelfDetailsStore and list components 2024-11-25 16:50:15 +01:00
Lorenz Hilpert
5492329a21 Merge branch 'master' into release/3.4 2024-11-25 16:26:54 +01:00
Nino
f97253e82a Refactor distinctUntilChanged to use a custom equality check in pickup-shelf-details.store.ts 2024-11-25 15:31:24 +01:00
Nino
b926efb635 #4885 Compartment Info Bugfix 2024-11-25 15:23:36 +01:00
Lorenz Hilpert
cdc2553d73 Merge branch 'hotfix/scandit-package-replacement' 2024-11-25 13:56:08 +01:00
Lorenz Hilpert
8781c50e34 Merge branch 'master' into release/3.4 2024-11-25 13:50:34 +01:00
Lorenz Hilpert
05eb3cc756 Revert "Refactor ScanditOverlayComponent to use dependency injection for DataCaptureContext and DataCaptureView, and enhance module setup with async context initialization"
This reverts commit 6e1c434edf.
2024-11-22 18:31:05 +01:00
Lorenz Hilpert
6e1c434edf Refactor ScanditOverlayComponent to use dependency injection for DataCaptureContext and DataCaptureView, and enhance module setup with async context initialization 2024-11-22 18:23:05 +01:00
Lorenz Hilpert
ed8e937924 Update Scandit license keys across configuration files 2024-11-22 17:26:27 +01:00
Lorenz Hilpert
1bd17fd887 Update Scandit integration to use new SDK, adjust TypeScript configuration, and refine overlay component styles 2024-11-22 16:19:32 +01:00
Lorenz Hilpert
8900a77d7a Enhance PickupShelfInDetailsComponent with signals for order items and optimize fetching logic 2024-11-19 16:27:18 +01:00
Lorenz Hilpert
4b10dd96d9 Merge branch 'hotfix/abholfach-zubuchen-und-cover-items' 2024-11-19 13:50:36 +01:00
Lorenz Hilpert
1126e4f0c1 Import tapResponse alongside ComponentStore in pickup-shelf-details.store.ts 2024-11-19 13:50:15 +01:00
Lorenz Hilpert
e9f24a88d6 Refactor PickupShelfInDetailsComponent to use signals for customer number and update fetch logic 2024-11-19 13:48:33 +01:00
Lorenz Hilpert
cb6779fc83 Bump minor version from 3 to 4 in Azure Pipelines configuration 2024-11-12 17:14:19 +01:00
Lorenz Hilpert
f2c95b6a16 Merge tag '3.3' into develop
Merge branch release/3.3 3.3
2024-11-12 17:05:47 +01:00
Lorenz Hilpert
d48680c59e Merge branch 'release/3.3' 2024-11-12 17:04:15 +01:00
Lorenz Hilpert
775390b5df Add dynamic IDs to filter buttons in filter group component 2024-11-05 13:18:21 +01:00
Lorenz Hilpert
1788f566e3 Add filter buttons with unique IDs in package result component 2024-11-05 11:05:47 +01:00
Nino Righi
d4e1088190 Merged PR 1818: #4836 Small Bugfix
#4836 Small Bugfix
2024-10-31 17:07:26 +00:00
Lorenz Hilpert
a8ecd1f07b Merged PR 1817: Enhance error handling and state management in app module and root state service
Enhance error handling and state management in app module and root state service

Related work items: #4835
2024-10-30 12:14:58 +00:00
Lorenz Hilpert
2c239ac597 Merge branch 'develop' of ssh.dev.azure.com:v3/hugendubel/ISA/ISA-Frontend into develop 2024-10-30 11:47:07 +01:00
Lorenz Hilpert
200eb7f217 Mark NativeScanAdapter and native-container.service as deprecated 2024-10-30 11:46:14 +01:00
Nino Righi
694fc6d084 Merged PR 1816: #4836 Fix Printer Handling on Small Amount Invoice
#4836 Fix Printer Handling on Small Amount Invoice
2024-10-30 10:39:53 +00:00
Lorenz Hilpert
8ae990bcde Merged PR 1815: Angular Update V18
Related work items: #4830, #4834
2024-10-22 09:23:23 +00:00
Lorenz Hilpert
301f5878c2 Refactor button class in pickup-shelf-out-details.component.html 2024-10-18 13:44:58 +02:00
Lorenz Hilpert
39c8a512f4 Merged PR 1814: #4827 Warenausgabe // Bei Workflow Rücklagebestellung mit Business Konto klic...
#4827 Warenausgabe // Bei Workflow Rücklagebestellung mit Business Konto klick auf "abgehollt und Lieferschein drucken" wirft Fehlermeldung
2024-10-17 12:01:43 +00:00
Lorenz Hilpert
f37dfd41f1 Merged PR 1813: Strukturanpassung
Related work items: #4832
2024-10-16 14:07:57 +00:00
Lorenz Hilpert
a518fc50e2 Refactor observables in DomainCatalogService 2024-10-15 13:05:53 +02:00
Lorenz Hilpert
c9236f191b Merged PR 1812: #4825 Refactor publicationDate$ observable in ArticleDetailsComponent
#4825 Refactor publicationDate$ observable in ArticleDetailsComponent
2024-10-14 14:40:51 +00:00
Lorenz Hilpert
d1584d1edb Merged PR 1811: #3693 ISA Übergreifend // Suche Abbrechen
#3693 ISA Übergreifend // Suche Abbrechen

Related work items: #3693
2024-10-14 14:39:09 +00:00
Lorenz Hilpert
5f34b514ef Merged PR 1810: Changed the way observables restore the cache
Changed the way observables restore the cache

Related work items: #4824
2024-10-14 10:09:15 +00:00
Lorenz Hilpert
7a1ef06a4c Merged PR 1809: PDP-EVT-Datum-anpassen
Related work items: #4825
2024-10-11 08:14:12 +00:00
Lorenz Hilpert
acc2f7f664 Merged PR 1808: Bugfix Abruf Key aus IndexedDB
Bugfix Abruf Key aus IndexedDB

Related work items: #4824
2024-10-08 16:22:01 +00:00
Lorenz Hilpert
ad08e999a2 Merged PR 1807: #4825 Refactor article-details.component.ts to format and display the publica...
#4825 Refactor article-details.component.ts to format and display the publication date of an article

Related work items: #4825
2024-10-08 16:15:48 +00:00
Lorenz Hilpert
1d472ce3df (cherry picked from commit 4c027922283bc4113253310c9d47e7c8944427a3) 2024-10-07 19:04:31 +02:00
Lorenz Hilpert
92d760b8b4 Merged PR 1806: Sortiment // Preisänderung // Lange Titel hat mit anderen Text Überschneidung
Related work items: #4801
2024-10-07 15:33:02 +00:00
Nino Righi
1d19779dac Merged PR 1805: #4687 Hotfix Organisation Name Update Order
#4687 Hotfix Organisation Name Update Order
2024-10-07 14:33:04 +00:00
Nino Righi
294be5dcb4 Merged PR 1804: #2573 Fix Validator
#2573 Fix Validator
2024-10-07 14:30:31 +00:00
Nino
90e671d285 #4687 Changes to View, Added Organisation Input Field 2024-10-07 12:07:28 +02:00
Nino Righi
9a2c520ab4 Merged PR 1803: #4822 HSC Quick Fix #4687 HSC, WA, AHF Changes to View, Added Organisation Input Field
#4822 Quick Fix #4687 Changes to View, Added Organisation Input Field
2024-10-04 16:34:54 +00:00
Nino Righi
13d41a7a81 Merged PR 1802: #2573 Postal Code Validation only for Webshop, Webshop+Card and B2B | +Bugfix Determination of B2B Customer in Customer Edit Page
#2573 Postal Code Validation only for Webshop, Webshop+Card and B2B | +Bugfix Determination of B2B Customer in Customer Edit Page
2024-10-04 16:32:52 +00:00
Lorenz Hilpert
79b0a1324c #4816 User State // Local Storage und User State nach Vorgang schliessen prüfen 2024-10-02 11:32:56 +02:00
Lorenz Hilpert
0fd94273ce Merge branch 'indexeddb' into develop 2024-10-02 10:16:49 +02:00
Lorenz Hilpert
44abd4698e #4801 Sortiment // Preisänderung // Lange Titel hat mit anderen Text Überschneidung 2024-10-02 10:14:16 +02:00
Lorenz Hilpert
2b262cc8be #4821 PWA // Offline-Verhalten verbessern (Part 3) 2024-10-01 13:34:44 +02:00
Lorenz Hilpert
5775e444b8 Indexeddb Implementaion 2024-10-01 13:14:25 +02:00
Nino Righi
cdfe88c1cc Merged PR 1801: #4813 Fix Multiple EVT Items
#4813 Fix Multiple EVT Items
2024-09-26 15:53:17 +00:00
Nino Righi
c71d1f8886 Merged PR 1800: #4794 HSC List Update Fix after Action (SilentRefresh)
#4794 HSC List Update Fix after Action (SilentRefresh)
2024-09-26 15:39:40 +00:00
Nino Righi
a09eef038e Merged PR 1799: #2573 Bugfixing and Adjusted Error Message
#2573 Bugfixing and Adjusted Error Message
2024-09-26 15:08:05 +00:00
Nino Righi
f0a0189523 Merged PR 1797: #4813 #4710 Bugfix Preselection Purchase Options
#4813 #4710 Bugfix Preselection Purchase Options
2024-09-25 18:21:33 +00:00
Lorenz Hilpert
4d42c4ea45 Merged PR 1798: PDP // Preis von Hug.Dig anzeigt
PDP // Preis von Hug.Dig anzeigt

Related work items: #4812
2024-09-25 15:18:50 +00:00
Lorenz Hilpert
cad2926c45 Merged PR 1796: #4801 Sortiment // Preisänderung // Lange Titel hat mit anderen Text Überschn...
#4801 Sortiment // Preisänderung // Lange Titel hat mit anderen Text Überschneidung
2024-09-25 15:17:34 +00:00
Nino Righi
161d9c6fea Merged PR 1795: #4608 Customer Form Information Adjustments For Online and CustomerCard Users
#4608 Customer Form Information Adjustments For Online and CustomerCard Users
2024-09-25 11:07:46 +00:00
Nino Righi
1b33258728 Merged PR 1794: #2573 Added Zip Code Validator to Customer Page
#2573 Added Zip Code Validator to Customer Page
2024-09-24 18:00:15 +00:00
Nino Righi
73b6133306 Merged PR 1793: #4813 Show EVT Date if Item has Quantity and EVT exists and is After Todays Date
#4813 Show EVT Date if Item has Quantity and EVT exists and is After Todays Date
2024-09-24 17:56:49 +00:00
Nino Righi
eb6e93149e Merged PR 1792: #4610 Disable Option to Unselect Selected Customer Type
#4610 Disable Option to Unselect Selected Customer Type
2024-09-24 17:51:52 +00:00
Lorenz Hilpert
33fb44f20a Upgrade Version to 3.3 2024-09-24 16:51:36 +02:00
Lorenz Hilpert
8723f7aa7e Merge tag '3.2' into develop
Finish Release 3.2 3.2
2024-09-24 16:47:21 +02:00
Lorenz Hilpert
03815586f7 Merge branch 'release/3.2' 2024-09-24 16:47:03 +02:00
Nino Righi
86a11ff07a Merged PR 1791: #4715 Disable option for Staff to Add new Billing Adresses and only show the...
#4715 Disable option for Staff to Add new Billing Adresses and only show the very first attached to their accounts
2024-09-24 14:25:48 +00:00
Nino Righi
41be8533dc Merged PR 1790: #4776 Suchbegriff in der Artikelsuche soll bei Klick auf Filter bestehen blei...
#4776 Suchbegriff in der Artikelsuche soll bei Klick auf Filter bestehen bleiben (Trefferliste)
2024-09-24 13:42:17 +00:00
Nino Righi
186afbc828 Merged PR 1789: #4687 WA, Abholfach, HSC - First and Lastname Update on Buyer just on Order
#4687 WA, Abholfach, HSC - First and Lastname Update on Buyer just on Order
2024-09-24 13:39:57 +00:00
Nino Righi
c3561339a9 Merged PR 1788: #4794 Adjusted Route Error Handling
#4794 Adjusted Route Error Handling
2024-09-24 13:01:43 +00:00
Nino Righi
5312073184 Merged PR 1787: #4710 Initially Select All Possible Items Inside Purchase Options Modal
#4710 Initially Select All Possible Items Inside Purchase Options Modal
2024-09-24 12:45:49 +00:00
Lorenz Hilpert
4dfe3bfa11 Merge tag 'KameraOffline' into develop
Kamera kann nur geöffnet werden wenn man Online ist. KameraOffline
2024-09-24 14:39:19 +02:00
Lorenz Hilpert
9b7a1b1c21 Merge branch 'hotfix/skip-open-camera-when-offline' 2024-09-24 14:39:11 +02:00
Lorenz Hilpert
a290d3b249 Kamera öffnet sich nur wenn man Online ist 2024-09-24 14:37:48 +02:00
Lorenz Hilpert
ad348af551 Merge branch 'master' into release/3.2 2024-09-17 10:56:13 +02:00
Lorenz Hilpert
f1bdba5d10 Merge tag 'online-offline-verhalten' into develop
Merge Online Offline Verhalten online-offline-verhalten
2024-09-16 16:46:38 +02:00
Lorenz Hilpert
c4134e7f99 Merge branch 'hotfix/online-offline-network' 2024-09-16 16:46:28 +02:00
Lorenz Hilpert
b7a16f5d30 IPad 6 Fehlermeldung word wrap 2024-09-16 14:39:00 +02:00
Lorenz Hilpert
4105709286 Added Styles instead of classes for word wrapping 2024-09-16 14:23:11 +02:00
Lorenz Hilpert
0c3b322fbd Ipad 4 Error Anzeige 2024-09-16 13:31:00 +02:00
Lorenz Hilpert
12096754c7 Set Max Screen Width Error 2024-09-16 12:28:25 +02:00
Lorenz Hilpert
453d921a99 Nachricht angepasst 2024-09-16 11:54:52 +02:00
Lorenz Hilpert
bad05fd098 Offline und Online Banner
Initialisierung Wartet auf Netzwerk
2024-09-13 17:30:08 +02:00
Lorenz Hilpert
363daf1e35 console.log entfernt 2024-09-13 16:08:21 +02:00
Lorenz Hilpert
e0cb0974cf Initialisierung gibt ein Feedback an den Benutzer aus. Feedback wenn Benutzer offline ist. 2024-09-13 16:05:54 +02:00
Lorenz Hilpert
c3d9274766 Merge branch 'hotfix/pwa-camera-dialog-size' 2024-09-13 11:03:04 +02:00
Lorenz Hilpert
bc16b841fb Kamera Overlay Größe
(cherry picked from commit d5dc4e053d)
2024-09-13 11:02:30 +02:00
Lorenz Hilpert
d5dc4e053d Kamera Overlay Größe 2024-09-12 18:03:07 +02:00
Lorenz Hilpert
3c6833988c Change Variables in pipeline Minor from 1 to 2 2024-09-04 17:58:00 +02:00
Lorenz Hilpert
28fb4ebb48 Merge tag '3.1' into develop 2024-09-04 17:56:06 +02:00
Lorenz Hilpert
2118bd996a Merge branch 'release/3.1' 2024-09-04 17:52:55 +02:00
Lorenz Hilpert
8a6448cc17 Merge branch 'develop' into release/3.1 2024-08-19 15:01:59 +02:00
Lorenz Hilpert
f2c7d57ad6 Fix Remi Filter 2024-08-16 14:17:11 +02:00
Lorenz Hilpert
9c9ddfaeec #4774 Remi // Wannennummer nur einmal am Tag benutzbar 2024-08-14 15:45:39 +02:00
Lorenz Hilpert
6eaa347de5 Merge branch 'master' into develop 2024-08-13 11:04:36 +02:00
Lorenz Hilpert
a16f355396 Merge branch 'hotfix/scandit-lizenz-erneuern' 2024-08-13 11:02:16 +02:00
Lorenz Hilpert
8b8db6e335 Update Scandit Lizenz 2024-08-12 13:39:32 +02:00
Lorenz Hilpert
06e248d615 Kundensuche abbrechen 2024-06-27 15:47:41 +02:00
Lorenz Hilpert
c68706b54f Merged PR 1786: #4760 Fehler bei Abholpreisberechnung in Filiale Darmstadt Ernst-Ludwig-Straße
#4760 Fehler bei Abholpreisberechnung in Filiale Darmstadt Ernst-Ludwig-Straße
2024-06-10 12:22:36 +00:00
Lorenz Hilpert
b271ce9711 Merged PR 1785: Angular 17 Update + Cleanup Packages 2024-06-06 13:31:02 +00:00
Nino Righi
94888213b1 Merged PR 1784: #4758 Loading Indicator if Date gets Patched on OrderItemSubset
#4758 Loading Indicator if Date gets Patched on OrderItemSubset
2024-06-05 17:04:41 +00:00
Nino Righi
1041d92486 Merged PR 1783: #4750 Code improvements, Check if Icon gets loaded
#4750 Code improvements, Check if Icon gets loaded
2024-06-04 16:02:53 +00:00
Nino Righi
43d8d220c9 Merged PR 1782: #4750 Check if Icon File exists
#4750 Check if Icon File exists
2024-05-28 16:03:15 +00:00
Nino Righi
e0993d9c46 Merged PR 1781: #4599 Fix Routing After Click on Continue Shopping CTA - On Tablet Size or Sm...
#4599 Fix Routing After Click on Continue Shopping CTA - On Tablet Size or Smaller
2024-05-28 15:57:54 +00:00
Nino Righi
82656d9b27 Merged PR 1780: #4314 Navigation on Product Cover Click
#4314 Navigation on Product Cover Click
2024-05-28 15:57:31 +00:00
Lorenz Hilpert
df36d0934d Merged PR 1779: #4752 Performance in der WA verbessert -> Details Seite
#4752 Performance in der WA verbessert -> Details Seite
2024-05-28 13:48:00 +00:00
Nino Righi
920b8eb8e3 Merged PR 1778: #4004 Changed Minimum Birth Date for Kubi Case
#4004 Changed Minimum Birth Date for Kubi Case
2024-05-06 12:00:58 +00:00
Nino Righi
4db28b1aa7 Merged PR 1777: Merge Develop -> Release/3.1
Merge Develop -> Release/3.1
2024-05-03 13:00:46 +00:00
Nino Righi
3a9820aa54 Merged PR 1776: #4721 Removed unnecessary check for scrolling to item
#4721 Removed unnecessary check for scrolling to item
2024-05-02 19:21:52 +00:00
Nino Righi
30ad99332e Merged PR 1775: #3751 ProductGroup and ProductGroupDetails Update
#3751 ProductGroup and ProductGroupDetails Update
2024-04-22 13:31:20 +00:00
Lorenz Hilpert
4b48275910 Merged PR 1774: AHF Performance 2024-04-19 09:54:54 +00:00
Lorenz Hilpert
d3e3316459 Merge branch 'master' into develop 2024-04-17 16:25:02 +02:00
Nino Righi
4ef1bd4df6 Merged PR 1771: #4720 Hotfix Navigation Pickup Shelf Out
#4720 Hotfix Navigation Pickup Shelf Out
2024-04-17 14:21:30 +00:00
Nino Righi
0c2a23e5d2 Merged PR 1773: #3751 Reservation List Show Compartment and ProductGroup from InStock
#3751 Reservation List Show Compartment and ProductGroup from InStock
2024-04-17 08:46:32 +00:00
Nino Righi
36bd2c1eba Merged PR 1772: #4004 Kubi Check If Customer is 18 Years old
#4004 Kubi Check If Customer is 18 Years old
2024-04-15 12:34:14 +00:00
Nino Righi
a38d2eede6 Merged PR 1770: #4709 Removed Save Special Comment CTA on Checkout Cart Review
#4709 Removed Save Special Comment CTA on Checkout Cart Review
2024-04-12 10:37:43 +00:00
Lorenz Hilpert
ed7dc10246 Bump Version 2024-04-09 10:43:39 +02:00
Lorenz Hilpert
f5251d9069 Merge tag '3.0' into develop
3.0
2024-04-09 09:35:54 +02:00
Lorenz Hilpert
2bd21e168a Merge branch 'release/3.0' 2024-04-09 09:34:33 +02:00
Lorenz Hilpert
3661bf7580 Merge branch 'develop' into release/3.0 2024-04-03 11:59:12 +02:00
Lorenz Hilpert
9f2a6633f7 Anpasssung Selector Für E2E - Lieferadresse, Rechnugsadresse 2024-04-03 11:30:07 +02:00
Nino
3c4d0ea56c Merge branch 'release/3.0' into develop 2024-03-20 12:10:17 +01:00
Nino
56bb784c83 Added Classes and Data Attributes to package-inspection for e2e testing 2024-03-20 12:06:05 +01:00
Nino Righi
c687570b1f Merged PR 1769: #4712 Removed isShippingEnabled check from availabilities modal
#4712 Removed isShippingEnabled check from availabilities modal
2024-03-20 10:42:59 +00:00
Nino Righi
afe5d3468a Merged PR 1768: Merge Develop to Release 3.0
Merge Develop to Release 3.0
2024-03-15 10:21:12 +00:00
Nino Righi
65f43d22ee Merged PR 1767: #4706 AHF Fix History Navigation after Switching Tabs
#4706 AHF Fix History Navigation after Switching Tabs
2024-03-13 14:17:15 +00:00
Nino Righi
67203a8506 Merged PR 1766: #4696 Bugfix Cover Items
#4696 Bugfix Cover Items
2024-03-13 14:12:08 +00:00
Nino Righi
92e522dedf Merged PR 1765: #4696 PickupShelfIn Details Page Clear Previous Selected OrderItemSubsetId fr...
#4696 PickupShelfIn Details Page Clear Previous Selected OrderItemSubsetId from Store after Leaving Page to avoid side effects
2024-03-12 15:31:21 +00:00
Nino Righi
fb46d329dc Merged PR 1764: #4547 WE Updated Annotation Implementation
#4547 WE Updated Annotation Implementation
2024-03-12 14:43:00 +00:00
Lorenz Hilpert
64d0a9fdb9 Merged PR 1763: #4547 Wareneingang // Kontrolle der Service Packstücke
#4547 Wareneingang // Kontrolle der Service Packstücke
2024-03-11 14:51:46 +00:00
Nino Righi
8f47163627 Merged PR 1762: #4692 Hotfix Undefined Values in Route Url
#4692 Hotfix Undefined Values in Route Url
2024-03-07 14:33:36 +00:00
Nino Righi
49f2a44461 Merged PR 1761: #4691 Small Fixes Customer Create
#4691 Small Fixes Customer Create
2024-03-06 16:01:27 +00:00
Nino Righi
a209d59ea9 Merged PR 1760: #4532 Fallback Route if Url contains Undefined or Null values
#4532 Fallback Route if Url contains Undefined or Null values
2024-03-06 12:13:13 +00:00
Nino Righi
03124d8736 Merged PR 1759: #4688 Change PickUpShelf Navigation based on Area In or Out
#4688 Change PickUpShelf Navigation based on Area In or Out
2024-03-06 11:55:11 +00:00
Nino Righi
a3330263f8 Merged PR 1758: #4689 Pickup Shelf Out Update Quantity After FETCHED_PARTIAL in Result List
#4689 Pickup Shelf Out Update Quantity After FETCHED_PARTIAL in Result List
2024-03-04 16:45:50 +00:00
Nino Righi
89092a5f6e Merged PR 1757: #4690 PickupShelfOut Details Display FETCHED_PARTIAL Action Correctly
#4690 PickupShelfOut Details Display FETCHED_PARTIAL Action Correctly
2024-03-04 15:54:43 +00:00
Nino
42fa108bb6 Pickup Shelf Out Details with Supplier Id Filter 2024-03-01 10:43:32 +01:00
Nino
2692588357 Changed Checkout Summary Navigation To Pickup Shelf Out Filter to supplier id 16 2024-02-29 12:47:45 +01:00
Nino Righi
ec26b5f4c0 Merged PR 1756: #4684 Routing to Pickup Shelf Out Update
#4684 Routing to Pickup Shelf Out Update
2024-02-28 11:28:26 +00:00
Nino Righi
ff985bda64 Merged PR 1755: #4684 Checkout Summary link to pickup shelf out updated
#4684 Checkout Summary link to pickup shelf out updated
2024-02-27 13:18:41 +00:00
Nino Righi
ca255cb592 Merged PR 1754: #4615 Tracking Link Update Customer Orders
#4615 Tracking Link Update Customer Orders
2024-02-26 16:19:56 +00:00
Nino Righi
8df5052c76 Merged PR 1753: #4684 Fix Navigation from Checkout Summary to Pickup Shelf Out
#4684 Fix Navigation from Checkout Summary to Pickup Shelf Out
2024-02-26 13:29:48 +00:00
Nino Righi
c78ddb5c8c Merged PR 1752: #4615 Tracking Link Implementation Customer Orders
#4615 Tracking Link Implementation Customer Orders
2024-02-23 08:49:54 +00:00
Lorenz Hilpert
5d84b4a55a #4617 Drucken // Pop Up entfernen wenn Drucker bereits ausgewählt ist (Desktop) 2024-02-21 18:52:28 +01:00
Nino Righi
a6142a5d86 Merged PR 1751: #4617 Fix Always Show Modal on Ipad, Fixed Loading Spinner Bug after Modal Close
#4617 Fix Always Show Modal on Ipad, Fixed Loading Spinner Bug after Modal Close
2024-02-21 17:02:38 +00:00
Nino Righi
fdf50fe11e Merged PR 1748: #4676 Removed updateBreadcrumb Function to prevent adding the breadcrumb by c...
#4676 Removed updateBreadcrumb Function to prevent adding the breadcrumb by closing the process
2024-02-21 12:48:04 +00:00
Nino Righi
e8bf922a67 Merged PR 1750: #4617 Added ipad check, Added implementation to checkout summary and added lo...
#4617 Added ipad check, Added implementation to checkout summary and added loading spinner
2024-02-21 10:38:46 +00:00
Nino Righi
f202ff5291 Merged PR 1749: #4679 Fix Catalog Navigation Splitscreen if hits is 1, fixed minor scroll pos...
#4679 Fix Catalog Navigation Splitscreen if hits is 1, fixed minor scroll position bug
2024-02-20 14:08:46 +00:00
Nino Righi
0c25859b6b Merged PR 1746: #4665 Added new Icon and Implemented Shared Icon Badge component, check if promotionPoints > 0
#4665 Added new Icon and Implemented Shared Icon Badge component, check if promotionPoints > 0
2024-02-20 08:44:07 +00:00
Nino Righi
215cb89aff Merged PR 1747: #4675 Show Fetching Spinner even if data is in cache - for user feedback
#4675 Show Fetching Spinner even if data is in cache - for user feedback
2024-02-20 08:43:11 +00:00
Nino Righi
9256a79087 Merged PR 1745: #4665 Catalog Details RedemptionPoints Badge
#4665 Catalog Details RedemptionPoints Badge
2024-02-16 15:25:51 +00:00
Nino Righi
f1ff9c6c55 Merged PR 1744: #4659 PickupShelf, CustomerOrders - Changed Navigation if Action Command incl...
#4659 PickupShelf, CustomerOrders - Changed Navigation if Action Command includes BACKTOSTOCK
2024-02-16 15:25:03 +00:00
Nino Righi
3f05e57554 Merged PR 1743: #4619 Fix removed memorize decorator on canSetCustomer function
#4619 Fix removed memorize decorator on canSetCustomer function
2024-02-16 15:24:04 +00:00
Anastasiia Chetverykova
2062bf3bab Merged PR 1742: #4617 - Drucken-Pop-Up nicht anzeigen, wenn ein Default Drucker bereits ausge...
#4617 - Drucken-Pop-Up nicht anzeigen, wenn ein Default Drucker bereits ausgewählt ist
2024-02-16 15:23:36 +00:00
Nino Righi
2d71a567ff Merged PR 1740: #4634 Remission Filter Reset Filter
#4634 Remission Filter Reset Filter
2024-02-13 17:20:42 +00:00
Lorenz Hilpert
547e615522 #4664 AHF // Bearbeiten - "Abbrechen" führt zu leerer Seite 2024-02-13 17:33:34 +01:00
Lorenz Hilpert
5d904e9d88 Merged PR 1739: #4662 AHF // "vsl. Lieferdatum" ändern ändert Datum für alle Bestellposten
#4662 AHF // "vsl. Lieferdatum" ändern ändert Datum für alle Bestellposten
2024-02-13 15:34:38 +00:00
Lorenz Hilpert
b7ccde4d44 #4663 AHF // Bearbeiten - Mobilnummer eingeben -> kein Refresh 2024-02-13 15:35:26 +01:00
Lorenz Hilpert
b838f4c475 Merge branch 'develop' into release/3.0 2024-02-01 18:33:25 +01:00
Lorenz Hilpert
2bc97ee574 #4633 WK // nach klick auf "Ändern" ("Name, Vorname" oder Adressen) im Warenkorb -> Suche nicht korrekt 2024-01-31 19:29:21 +01:00
Lorenz Hilpert
f054614cfe clearUserState() ist immer zugänglich. 2024-01-31 10:58:00 +01:00
Lorenz Hilpert
0aa1cddf72 Merge branch 'release/3.0' into develop 2024-01-29 17:37:07 +01:00
Lorenz Hilpert
d39521b9f2 Merge branch 'develop' into release/3.0 2024-01-29 17:36:25 +01:00
Lorenz Hilpert
f5468d7f8e #4624 #4623 Fallback wenn keine Versandoption für den Kundentypen vorhanden ist 2024-01-29 16:01:42 +01:00
Lorenz Hilpert
4ad99270bd #4622 AHF // Filter schließt sich nicht 2024-01-29 15:49:45 +01:00
Lorenz Hilpert
4e098ae962 #4620 Suche nach EAN wirft Fehlermeldung 2024-01-29 14:25:08 +01:00
Lorenz Hilpert
8e00e646fb #4621 Preis von Preisgebundenen Artikel wird nach Kundenauswahl nicht richtig übernommen 2024-01-29 14:19:31 +01:00
Lorenz Hilpert
4fad5a7c2f Merge branch 'develop' into release/3.0 2024-01-26 15:39:53 +01:00
Lorenz Hilpert
5ece030ec8 #2062 Fachbodenbeschriftung 2024-01-25 19:56:33 +01:00
Lorenz Hilpert
54d7c525a9 Null Check PriceMaintained und fallback für delivery kaufoptionen 2024-01-24 14:48:51 +01:00
Lorenz Hilpert
41d4dc4663 #4611 Preisunterschiede im Warenkorb 2024-01-24 13:48:52 +01:00
Lorenz Hilpert
c266c51572 #4611 Deadcode entfernt 2024-01-24 11:09:59 +01:00
Lorenz Hilpert
4ea50f68d1 #4611 Preisunterschiede im Warenkorb 2024-01-24 11:09:02 +01:00
Lorenz Hilpert
e5d61c8622 #Preis // Preisunterschiede im Warenkorb 2024-01-23 17:44:28 +01:00
Lorenz Hilpert
d06c64c08a #4613 IPad 6 Breite angepasst - wegen overflow-x 2024-01-22 10:11:12 +01:00
Lorenz Hilpert
91ebc3e27f #2062 text-right hinzugefügt 2024-01-19 16:19:08 +01:00
Lorenz Hilpert
d643c19642 Merged PR 1737: #4611 Preisunterschiede im Warenkorb
#4611 Preisunterschiede im Warenkorb
2024-01-19 13:57:36 +00:00
Nino Righi
afd1f5e302 Merged PR 1736: #2527 Improved Code, fixed navigation error when adding a new item
#2527 Improved Code, fixed navigation error when adding a new item
2024-01-19 13:09:11 +00:00
Lorenz Hilpert
4099aa0a57 #2062 #4613 Remi Liste Anpassungen 2024-01-19 13:51:49 +01:00
Nino Righi
ebe11b75d1 Merged PR 1735: #2527 Navigation Improvements Dummy Modal
#2527 Navigation Improvements Dummy Modal
2024-01-18 15:06:49 +00:00
Lorenz Hilpert
81f7270cf7 #4611 Preisunterschiede im Warenkorb 2024-01-18 15:50:46 +01:00
Nino Righi
570a8800a0 Merged PR 1734: #4010 Removed Cheaper Price Tooltip From Purchasing Options Modal
#4010 Removed Cheaper Price Tooltip From Purchasing Options Modal
2024-01-18 12:47:31 +00:00
Lorenz Hilpert
25aecffafc Merge branch 'release/3.0' into develop 2024-01-17 17:31:21 +01:00
Lorenz Hilpert
7c48c63584 Merge branch 'develop' into release/3.0 2024-01-17 17:30:50 +01:00
Nino Righi
5bf32b2e72 Merged PR 1733: #4603 Select no default gender
#4603 Select no default gender
2024-01-17 16:12:31 +00:00
Lorenz Hilpert
f44fbe3fdb #4598 ngIf angepasst Kundendetails 2024-01-17 13:21:07 +01:00
Lorenz Hilpert
5df075f448 Merge branch 'develop' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into develop 2024-01-17 13:18:52 +01:00
Lorenz Hilpert
9cee33e286 #4598 Firma soll angezeigt werden wenn eingetragn 2024-01-17 13:18:33 +01:00
Nino Righi
42bf7e4120 Merged PR 1731: #4601 WA, AHF Navigation Dropdown Fix
#4601 WA, AHF Navigation Dropdown Fix
2024-01-17 12:15:25 +00:00
Nino Righi
77ff7ca1a8 Merged PR 1732: #4603 Changed Genders Order
#4603 Changed Genders Order
2024-01-17 12:14:59 +00:00
Lorenz Hilpert
7f195ee627 Merged PR 1730: #4598 Kundendetails // "Geb.-tags"-Feld wird nicht angezeigt, "USt-ID" und "A...
#4598 Kundendetails // "Geb.-tags"-Feld wird nicht angezeigt, "USt-ID" und "Abteilung" dafür immer
2024-01-16 15:12:53 +00:00
Nino Righi
79bec55818 Merged PR 1729: #4600 Fix Product Images Height
#4600 Fix Product Images Height
2024-01-16 14:05:48 +00:00
Nino Righi
35093afaff Merged PR 1728: #4597 Only Print Order Confirmation If Not On Tablet
#4597 Only Print Order Confirmation If Not On Tablet
2024-01-15 16:07:13 +00:00
Nino Righi
358ba3963c Merged PR 1727: #3462 Fix Checkout Review Details Display Name Section if Customer has no shi...
#3462 Fix Checkout Review Details Display Name Section if Customer has no shipping or billing addresses but orderType is shipping
2024-01-15 16:06:49 +00:00
Anastasiia Chetverykova
d47e617f8c Merged PR 1726: #4419 - Pop Up - Wording Änderung
#4419 - Pop Up - Wording Änderung

Related work items: #4419
2024-01-15 12:38:18 +00:00
Nino Righi
55bd001146 Merged PR 1725: #4597 Fix Print Order Confirmation Immediately
#4597 Fix Print Order Confirmation Immediately
2024-01-12 19:50:00 +00:00
Lorenz Hilpert
a9f11426a7 Merge branch 'develop' into release/3.0 2024-01-11 18:47:50 +01:00
Nino Righi
10b86756d2 Merged PR 1724: #4564 Fix customer page empty details view
#4564 Fix customer page empty details view
2024-01-11 16:19:24 +00:00
Lorenz Hilpert
262dd084c1 Merged PR 1723: #4571 - Kundendaten erfassen // Bei Kundenkarten Formular mit Onlinekonto feh...
#4571 - Kundendaten erfassen // Bei Kundenkarten Formular mit Onlinekonto fehlt die Aufklärung über die Konditionen
2024-01-11 10:27:02 +00:00
Nino Righi
abc58c8a78 Merged PR 1722: #4569 Fix Pickup Shelf display searchboxHint correctly
#4569 Fix Pickup Shelf display searchboxHint correctly
2024-01-10 15:39:08 +00:00
Nino Righi
866cd23e41 Merged PR 1721: #4564 Always keep customer updated and check name properties correctly
#4564 Always keep customer updated and check name properties correctly
2024-01-09 19:12:45 +00:00
Lorenz Hilpert
fdcf12c022 Element naming - Vorgangs-ID 2024-01-09 13:54:31 +01:00
Nino Righi
432f1161af Merged PR 1720: #4553 Always take retailPrice from instock request for take away availability
#4553 Always take retailPrice from instock request for take away availability
2024-01-08 12:59:14 +00:00
Nino Righi
82dbce5744 Merged PR 1713: #4291 Gender Refactoring
#4291 Gender Refactoring
2024-01-08 11:46:24 +00:00
Nino
a4b9f5fcf1 Merge branch 'develop' into release/3.0 2024-01-05 14:17:29 +01:00
Nino Righi
7ea9359c30 Merged PR 1719: #4514 Added regex pattern to compartmentCode field inside goods in out order...
#4514 Added regex pattern to compartmentCode field inside goods in out order edit page
2024-01-05 12:09:43 +00:00
Nino Righi
b9a4b0d315 Merged PR 1718: #4552 Added whitespace
#4552 Added whitespace
2024-01-05 09:19:08 +00:00
Anastasiia Chetverykova
7809e7a2b5 Merged PR 1717: #4552 - Packstückprüfung Anzahl Exemplare
#4552 - Packstückprüfung Anzahl Exemplare
2024-01-04 13:35:57 +00:00
Nino Righi
9a8c74b148 Merged PR 1716: #4534 Goods In Out Order Edit Always Show Price with Two Decimal Places
#4534 Goods In Out Order Edit Always Show Price with Two Decimal Places
2024-01-04 10:36:37 +00:00
Nino Righi
ad62e67771 Merged PR 1715: #4525 Improved Scroll Position Handling in Goods In List and Remission Previe...
#4525 Improved Scroll Position Handling in Goods In List and Remission Preview Page
2024-01-04 09:23:28 +00:00
Nino Righi
6feb8079b7 Merged PR 1714: #4550 Fix Multiple Processes Bug
#4550 Fix Multiple Processes Bug
2024-01-04 08:23:31 +00:00
Nino
7f8f48f393 Updated tsconfig 2024-01-03 11:54:03 +01:00
Nino
0fe0c5242d Merge branch 'release/3.0' into develop 2024-01-03 11:52:25 +01:00
Nino
d208bdaf97 Added Package Inspection Class Name in Details Page for Page Objects Targetting 2024-01-02 15:08:19 +01:00
Nino Righi
dc80df4ad4 Merged PR 1712: #4524 Page Article Search Improved Order by Filter Handling
#4524 Page Article Search Improved Order by Filter Handling
2023-12-29 16:12:53 +00:00
Nino Righi
3020609682 Merged PR 1711: #4545 #4548 Fix HSC Breadcrumb and Multiple Processes bug
#4545 #4548 Fix HSC Breadcrumb and Multiple Processes bug
2023-12-29 15:22:26 +00:00
Nino Righi
5c3e1ed2ad Merged PR 1710: #4544 Fix Proveded Store correctly, removed take from filter and cancleSearch...
#4544 Fix Proveded Store correctly, removed take from filter and cancleSearchRequests on process change
2023-12-29 15:12:51 +00:00
Nino Righi
e832feebc5 Merged PR 1709: #4545 Fix Missing Main Breadcrumb
#4545 Fix Missing Main Breadcrumb
2023-12-28 15:10:44 +00:00
Nino Righi
08580d782d Merged PR 1708: #4546 HSC Customer Orders Fixed Navigation Link Active Styling
#4546 HSC Customer Orders Fixed Navigation Link Active Styling
2023-12-28 15:01:40 +00:00
Nino Righi
2d07556341 Merged PR 1707: #4533 Fixed Breadcrumb and Searchbox after Scan
#4533 Fixed Breadcrumb and Searchbox after Scan
2023-12-28 12:23:48 +00:00
Nino Righi
9ad1256019 Merged PR 1706: #4543 Styling Fix Checkout Review for multiple Destinations per OrderType
#4543 Styling Fix Checkout Review for multiple Destinations per OrderType
2023-12-27 16:00:23 +00:00
Nino Righi
250002f057 Merged PR 1705: #4516 Fix Also Show Details Items Group in Pick Up Shelf In
#4516 Fix Also Show Details Items Group in Pick Up Shelf In
2023-12-27 15:59:11 +00:00
Nino Righi
0973b01bf0 Merged PR 1704: #4539 Fix Skip Location Change Filter
#4539 Fix Skip Location Change Filter
2023-12-27 14:39:15 +00:00
Nino Righi
d5254cc150 Merged PR 1703: #4541 Added Errorhandling to Customer Search Store
#4541 Added Errorhandling to Customer Search Store
2023-12-27 08:09:29 +00:00
Nino Righi
adc5a5a280 Merged PR 1702: #4516 WA Implementation of orderType Groups
#4516 WA Implementation of orderType Groups
2023-12-22 16:13:52 +00:00
Nino Righi
2ff033ea55 Merged PR 1701: #4539 Hotfix AHF Open Filter Page does not trigger search request
#4539 Hotfix AHF Open Filter Page does not trigger search request
2023-12-21 17:23:08 +00:00
Nino Righi
cbaac8ed9a Merged PR 1700: #4537 Relocated Component Store provision
#4537 Relocated Component Store provision
2023-12-21 17:19:35 +00:00
Lorenz Hilpert
f0b653fd0f Merged PR 1699: #4533 Breadcrumb wird falsch dargestellt
#4533 Breadcrumb wird falsch dargestellt
2023-12-20 16:17:39 +00:00
Lorenz Hilpert
14eba6e5ea Merged PR 1698: #4485 Kundendaten werden übernommen wenn welche vorhanden sind
#4485 Kundendaten werden übernommen wenn welche vorhanden sind
2023-12-20 14:55:04 +00:00
Lorenz Hilpert
803a8e316c Skip UnitTest for some libs 2023-12-19 17:33:19 +01:00
Nino Righi
83cab7796e Merged PR 1697: #4530 Notification Batch Messages for each type
#4530 Notification Batch Messages for each type

(cherry picked from commit 5073693fc2)
2023-12-19 17:14:37 +01:00
Nino Righi
c70dd30830 Merged PR 1695: #4523 AHF, WA Added other notification types to Email Notification Badge
#4523 AHF, WA Added other notification types to Email Notification Badge

(cherry picked from commit f3cb6236a5)
2023-12-19 17:14:03 +01:00
Lorenz Hilpert
b28bb165d4 Merged PR 1696: #4532 Mitarbeiter klickt auf Einbuchen und erreicht den Tätigkeitskalender
#4532 Mitarbeiter klickt auf Einbuchen und erreicht den Tätigkeitskalender
2023-12-19 13:35:58 +00:00
Nino Righi
5073693fc2 Merged PR 1697: #4530 Notification Batch Messages for each type
#4530 Notification Batch Messages for each type
2023-12-19 13:34:22 +00:00
Nino Righi
f3cb6236a5 Merged PR 1695: #4523 AHF, WA Added other notification types to Email Notification Badge
#4523 AHF, WA Added other notification types to Email Notification Badge
2023-12-15 16:03:34 +00:00
Lorenz Hilpert
4ab9890313 #4485 #4500 Kundenkartenkonto anlage Verhalten and Suche angeglichen 2023-12-15 14:34:24 +01:00
Nino Righi
32d8d81f53 Merged PR 1694: #4526 Hotfix Pickup Shelf Edit show Erneut Senden CTA
#4526 Hotfix Pickup Shelf Edit show Erneut Senden CTA
2023-12-15 10:12:51 +00:00
Nino
0361aa63ff Merge Develop into Release/3.0, corrected itemSize in page catalog list 2023-12-12 16:52:03 +01:00
Nino
2f95c23910 Merge branch 'develop' into release/3.0 2023-12-12 16:35:35 +01:00
Nino Righi
a8cd6ce844 Merged PR 1693: #4522 Pickup Shelf List Added margin-bottom as gap between item groups, remov...
#4522 Pickup Shelf List Added margin-bottom as gap between item groups, removed unused code
2023-12-12 14:18:07 +00:00
Lorenz Hilpert
3bba23cc76 Merged PR 1692: #4380 Abholung als Standard wenn möglich und keine Auswahl getroffen wurde
#4380 Abholung als Standard wenn möglich und keine Auswahl getroffen wurde
2023-12-12 12:43:13 +00:00
Nino Righi
e25f176a7b Merged PR 1691: #4521 Fix Check Page Catalog List if List got already fetched completely
#4521 Fix Check Page Catalog List if List got already fetched completely
2023-12-12 09:39:22 +00:00
Nino Righi
a169d2a4e9 Merged PR 1690: #4518 Fix Pickup Shelf In List additionally Fetch Items after queryParams change
#4518 Fix Pickup Shelf In List additionally Fetch Items after queryParams change
2023-12-11 15:55:32 +00:00
Nino Righi
6a9caa432e Merged PR 1689: #4519 #4520 Page Catalog Search Breadcrumb and Navigation fixes
#4519 #4520 Page Catalog Search Breadcrumb and Navigation fixes
2023-12-11 09:23:35 +00:00
Nino Righi
389948c077 Merged PR 1688: #4510 Fix Time Format in Customer Details
#4510 Fix Time Format in Customer Details
2023-12-08 09:30:29 +00:00
Nino Righi
e7724ed8b9 Merged PR 1687: #4509 Implemented Loading Spinner on Pickup Shelf Details Pages
#4509 Implemented Loading Spinner on Pickup Shelf Details Pages
2023-12-07 10:03:39 +00:00
Nino Righi
c7f1b27fdf Merged PR 1686: #4508 Pickup Shelf In Clear Cover Items after Routing to new Details page
#4508 Pickup Shelf In Clear Cover Items after Routing to new Details page
2023-12-06 15:18:55 +00:00
Lorenz Hilpert
135f0255b8 IPad2 PDP Styling 2023-12-06 16:18:06 +01:00
Nino Righi
65a7aa569d Merged PR 1685: Scroll Position Fix After Process Change
Scroll Position Fix After Process Change
2023-12-05 18:14:32 +00:00
Nino Righi
211eaa6175 Merged PR 1684: Page Catalog Result List - Removed maxBufferSize, Updated ScrollPosition Handling
Page Catalog Result List - Removed maxBufferSize, Updated ScrollPosition Handling
2023-12-05 16:59:23 +00:00
Lorenz Hilpert
8097c6ad9e Merge branch 'performance' into develop 2023-12-05 10:48:17 +01:00
Lorenz Hilpert
b0d76b01d7 Merge branch 'release/3.0' into develop 2023-12-05 10:47:34 +01:00
Lorenz Hilpert
626fd0081f Merge branch 'develop' into release/3.0 2023-12-05 10:47:00 +01:00
Lorenz Hilpert
362fca74bc Warenausgbae list IPad 2 2023-12-04 16:29:14 +01:00
Lorenz Hilpert
b8f0a29f79 IPad 2 Scrolling 2023-12-04 16:22:39 +01:00
Lorenz Hilpert
f54400f00d Merge branch 'develop' into performance 2023-12-04 14:23:30 +01:00
Lorenz Hilpert
54094695b1 #4505 RD // Einbuchen - Bearbeiten Seite wird mal in Split Screen Ansicht mal ohne angezeigt 2023-12-04 13:27:43 +01:00
Nino Righi
1e3e9588da Merged PR 1683: #4501 #4502 Fixed by reverting Changes from #4490
#4501 #4502 Fixed by reverting Changes from #4490
2023-12-04 11:43:07 +00:00
Nino
f04705b659 Merge branch 'release/3.0' into develop 2023-12-01 17:04:02 +01:00
Nino
c22672fad0 Fixed Styling and Layout Issues 2023-12-01 13:07:59 +01:00
Nino
59673a47db Tablet size fix, Navigate After SearchCompleted on Page Catalog and Page Customer Orders 2023-11-30 18:24:32 +01:00
Nino
e56ea0bd4e MaxBufferSize Update Result List Page Catalog 2023-11-30 18:15:58 +01:00
Nino Righi
f8c4d4a842 Merged PR 1682: #4416 RD Checkout, WA, WE, Notifications Component Changes
#4416 RD Checkout, WA, WE, Notifications Component Changes
2023-11-30 16:06:37 +00:00
Lorenz Hilpert
c4dd9214a3 Splitscreen side outlet rendern nur wenn nötig 2023-11-30 16:55:08 +01:00
Nino Righi
4d74b3a89e Merged PR 1679: #4491 Mark Shelf Children Sides Active based on view param
#4491 Mark Shelf Children Sides Active based on view param
2023-11-29 15:31:35 +00:00
Nino Righi
b0b3fd40ce Merged PR 1681: #4490 Improvement added Filter parameter orderitemprocessingstatus on details...
#4490 Improvement added Filter parameter orderitemprocessingstatus on details page request
2023-11-29 15:04:58 +00:00
Lorenz Hilpert
3404c930c5 #4485 - anlage von Kundenkartenkonto - Datenübernahme 2023-11-29 16:04:18 +01:00
Nino Righi
abcd940ed3 Merged PR 1678: #4493 Fix Breadcrumb Navigation if comming from other List
#4493 Fix Breadcrumb Navigation if comming from other List
2023-11-29 10:45:51 +00:00
Nino Righi
c1756942b2 Merged PR 1680: #4492 Added Navigation based On View after certain Actions
#4492 Added Navigation based On View after certain Actions
2023-11-29 10:45:14 +00:00
Lorenz Hilpert
ea4d036066 Merge branch 'develop' into release/3.0 2023-11-24 09:51:21 +01:00
Lorenz Hilpert
101a34bd3f #4484 RD // Online Konto anlegen via "Kundensuche | Keine Suchergebnisse" wirft Fehlermeldung 2023-11-23 18:06:49 +01:00
Lorenz Hilpert
99bad149cb attribute für e2e tests 2023-11-23 13:57:55 +01:00
Lorenz Hilpert
a0bff7164c #4481 RD // Warenkorb - Klick auf "Speichern" bei Benachrichtigung "Email" oder "SMS" enabled "Bestellen"-Button nicht 2023-11-22 15:30:07 +01:00
Lorenz Hilpert
0c4a4130b9 #4488 RD // TK - Artikel-Link führt auf Dashboard 2023-11-21 15:58:38 +01:00
Lorenz Hilpert
8dd1211729 #4487 RD // Abholfach - ändern des vsl. Lieferdatums und "zurückgelegt bis"-Datum wirft Fehler 2023-11-21 10:42:14 +01:00
Lorenz Hilpert
a2f1b8b624 #4478 RD // Abholfach - Routing löst Suche aus 2023-11-20 14:22:32 +01:00
Lorenz Hilpert
98a331ffe5 #4482 RD // Abholfach - Split-Screen raus bei "Bearbeiten" + ""Historie" 2023-11-20 13:38:11 +01:00
Lorenz Hilpert
c0f97c9bae Add doNotTrack option to article search 2023-11-10 18:52:23 +01:00
Lorenz Hilpert
960ffa165f Merge branch 'develop' into release/3.0 2023-11-10 18:33:13 +01:00
Lorenz Hilpert
6bdfbe2eff Refactor breadcrumb filtering in side menu
component
2023-11-10 18:32:56 +01:00
Lorenz Hilpert
80342e61ac #4470 Updated icon names in icons.json 2023-11-10 16:31:27 +01:00
Lorenz Hilpert
6bf3894e4d Add data attributes to pickup shelf list item
component HTML
2023-11-10 15:07:11 +01:00
Lorenz Hilpert
aab29838bf #4470 Add new customer order types to icons and label
colors
2023-11-10 14:35:38 +01:00
Lorenz Hilpert
856ca5651e #4475 Refactor remission-list.component.html button
styles
2023-11-10 14:31:57 +01:00
Lorenz Hilpert
a7d4b8d7fb #4273 Refactor navigation logic in search results and
product card components
2023-11-10 14:09:01 +01:00
Lorenz Hilpert
62d260473c #4474 Refactor clearFilter method to use main_qs from
filter query params
2023-11-09 11:50:02 +01:00
Lorenz Hilpert
bde52a2526 Merge branch 'release/3.0' into develop 2023-11-09 11:39:41 +01:00
Lorenz Hilpert
6243b03cfc #4466 Revert changes to fix display issue in
PickupShelfDetailsBaseComponent
2023-11-08 16:39:03 +01:00
Lorenz Hilpert
d24841800e #4468 Refactor setSelectedOrderItemQuantity to use
updater
2023-11-08 13:39:31 +01:00
Nino Righi
f60628c769 Merged PR 1677: #4467 Fix Display Price even if Price is 0
#4467 Fix Display Price even if Price is 0
2023-11-08 11:55:55 +00:00
Nino Righi
034f697da5 Merged PR 1676: #4462 Added focusSearchbox additionally on side nav click
#4462 Added focusSearchbox additionally on side nav click
2023-11-08 11:55:13 +00:00
Lorenz Hilpert
ec9f80767b Merge branch 'release/3.0' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into release/3.0 2023-11-08 11:05:32 +01:00
Lorenz Hilpert
a5e569cf05 #4451 #4463 Add name method to PickupShelfInService and
PickupShelfOutService
2023-11-08 11:04:58 +01:00
Nino Righi
b62259f9b4 Merged PR 1675: #4457 Fix Filter Routing on Close
#4457 Fix Filter Routing on Close
2023-11-08 09:42:24 +00:00
Nino Righi
95baeaa8a8 Merged PR 1674: #4462 Cursor Should Select Searchbox on Initial Navigation
#4462 Cursor Should Select Searchbox on Initial Navigation
2023-11-07 16:49:56 +00:00
Nino Righi
a5b9115a91 Merged PR 1673: #4459 Fix Reorder Modal handling after Closing Modal without changes
#4459 Fix Reorder Modal handling after Closing Modal without changes
2023-11-07 16:03:23 +00:00
Lorenz Hilpert
1885c58d86 #4464 Add setSelectedOrderItemQuantity method to update
selected order item quantity
2023-11-07 17:01:57 +01:00
Lorenz Hilpert
add55a47d6 Merge branches 'release/3.0' and 'release/3.0' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into release/3.0 2023-11-07 16:29:37 +01:00
Lorenz Hilpert
129f49a9ee #4461 Add sharedRegexRouterLinkActive directive to
side-menu component
2023-11-07 16:29:18 +01:00
Nino Righi
9560eb7ad6 Merged PR 1671: #4458 Fixed Process Naming
#4458 Fixed Process Naming
2023-11-07 15:09:18 +00:00
Nino Righi
772ba29a8e Merged PR 1672: #4457 Fixed routing after Filter close
#4457 Fixed routing after Filter close
2023-11-07 15:08:31 +00:00
Nino Righi
8ac8f6cc1f Merged PR 1670: #4459 Removed Side Outlet after REORDER completed
#4459 Removed Side Outlet after REORDER completed
2023-11-07 12:23:46 +00:00
Lorenz Hilpert
a0f496475c #4453 Add customerInfoDTO to createCustomerRoute 2023-11-06 15:21:36 +01:00
Lorenz Hilpert
8979a388ee #4454 Fix button placement and remove unnecessary
sorting in main actions selector
2023-11-06 14:27:08 +01:00
Lorenz Hilpert
8b9a209c49 #4450 Add RunCheckTrigger to
PickupShelfInDetailsComponent and
PickupShelfOutDetailsComponent
2023-11-06 14:07:27 +01:00
Lorenz Hilpert
f4c3e3ceee #4452 Reset selected compartment info in
PickupShelfDetailsBaseComponent
2023-11-06 13:55:40 +01:00
Lorenz Hilpert
5ca8a83f25 Merge branch 'release/3.0' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into release/3.0 2023-11-03 15:19:10 +01:00
Lorenz Hilpert
006011885f #4448 Add "Create new customer" link to search views 2023-11-03 15:18:50 +01:00
Nino Righi
9c9e061f6d Merged PR 1669: #4431 Adjusted Process Tab Logic for Customer Order Area
#4431 Adjusted Process Tab Logic for Customer Order Area
2023-11-03 09:13:10 +00:00
Lorenz Hilpert
c9782a7d29 Merge branch 'develop' into release/3.0 2023-10-30 09:42:49 +01:00
Nino Righi
59de82def8 Merged PR 1668: #4425 HSC Customer Orders Result List Refactor - Cache, Breadcrumb, Branch Dr...
#4425 HSC Customer Orders Result List Refactor - Cache, Breadcrumb, Branch Dropdown, Process and Scroll Position Fixes
2023-10-27 14:57:05 +00:00
Lorenz Hilpert
dc2617bb5d #4429 Refactor orderItems update in
PickupShelfDetailsStore
2023-10-27 15:14:28 +02:00
Lorenz Hilpert
d80e621563 #4424 Add filter functionality to
getOrderItemsByOrderNumberOrCompartmentCode method
2023-10-27 14:56:44 +02:00
Lorenz Hilpert
63c02e4605 #4424 Add orderItemSubsetId to order item details. 2023-10-27 11:57:42 +02:00
Lorenz Hilpert
3f93fe0869 #4423 Add download availability to shopping cart item 2023-10-27 10:51:44 +02:00
Lorenz Hilpert
9011f76e95 Merge branch 'develop' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into develop 2023-10-27 10:26:05 +02:00
Lorenz Hilpert
dd88e4ad3e Fix breadcrumb filter in side menu component 2023-10-27 10:25:48 +02:00
Nino Righi
a0869aa4a5 Merged PR 1667: #4421 Reset Filter When Navigate from Article Recommendations
#4421 Reset Filter When Navigate from Article Recommendations
2023-10-26 14:54:05 +00:00
Nino Righi
1107264d7c Merged PR 1665: #4417 Abholfach Listen Routing Breadcrumb
#4417 Abholfach Listen Routing Breadcrumb
2023-10-26 14:31:28 +00:00
Nino Righi
31512546d3 Merged PR 1666: #4420 Fix Customer Area Billing Addresses Added Margin
#4420 Fix Customer Area Billing Addresses Added Margin
2023-10-26 14:31:04 +00:00
Lorenz Hilpert
183e7b6945 Add orderItemSubsetId to
PickupShelfDetailsBaseComponent and remove
unnecessary RxJS operators
2023-10-26 16:28:42 +02:00
Nino
fba465d573 Merge branch 'develop' into release/3.0 2023-10-25 16:17:18 +02:00
Lorenz Hilpert
dd6784e3b3 #4396 Archive pickup shelf services 2023-10-25 15:01:07 +02:00
Lorenz Hilpert
9caa0fc0fa Merge branch 'develop' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into develop 2023-10-25 13:44:03 +02:00
Lorenz Hilpert
1102fb4608 #4396 Add all_branches filter to PickupShelfInService
and PickupShelfOutService
2023-10-25 13:43:46 +02:00
Nino Righi
012cc6ac67 Merged PR 1664: #4411 Fix Routing after Applying Filter
#4411 Fix Routing after Applying Filter
2023-10-25 11:23:43 +00:00
Lorenz Hilpert
72de7efc1d #4410 Refactor checkout-summary.component.html layout 2023-10-25 12:34:13 +02:00
Lorenz Hilpert
b8c7bbec88 Revert "Merged PR 1659: #4396 Fix RD getOrderItems on Details page now with correct filter settings"
This reverts commit 9def487ab8.
2023-10-25 11:25:18 +02:00
Lorenz Hilpert
608513b6dc Merged PR 1662: #4405 Fix navigation and error handling in pickup shelf
Bitte noch nicht freigeben. Möchte im daily noch was klären

#4405 Fix navigation and error handling in pickup shelf
components
2023-10-25 09:21:10 +00:00
Nino Righi
fa78eca087 Merged PR 1663: #4408 Fix Side Nav Dropdown gets opened if route is Active
#4408 Fix Side Nav Dropdown gets opened if route is Active
2023-10-24 18:52:31 +00:00
Lorenz Hilpert
77fda0f939 #1989 Add message modal component for customer details
view.
2023-10-24 20:30:56 +02:00
Lorenz Hilpert
81d210a77b #4407 Refactor getLastActivatedCustomerProcessId$() to
filter processes by type 'cart' and handle
undefined lastCustomerProcess
2023-10-24 16:21:01 +02:00
Lorenz Hilpert
5ab4456040 Merge branch 'develop' into release/3.0 2023-10-24 14:21:59 +02:00
Nino Righi
2db45c900a Merged PR 1661: #4406 No Large increase of Global Font Size possible if on screen size tablet
#4406 No Large increase of Global Font Size possible if on screen size tablet
2023-10-24 11:55:13 +00:00
Nino Righi
705dc23908 Merged PR 1660: #4256 Fix HSC Kundenbestellungen Filter and Search History handling
#4256 Fix HSC Kundenbestellungen Filter and Search History handling
2023-10-24 08:22:26 +00:00
Nino Righi
9def487ab8 Merged PR 1659: #4396 Fix RD getOrderItems on Details page now with correct filter settings
#4396 Fix RD getOrderItems on Details page now with correct filter settings
2023-10-23 16:30:16 +00:00
Lorenz Hilpert
50e08f115a #4392 iPad - WA - langer Titel schiebt sich unter Status 2023-10-23 16:15:29 +02:00
Nino Righi
b15693a914 Merged PR 1657: #4403 Fix Abholfach Einbuchen Code Structure
#4403 Fix Abholfach Einbuchen Code Structure
2023-10-23 12:25:38 +00:00
Nino Righi
cbf23b6f30 Merged PR 1658: #4401 Fix Article Search Results Breadcrumb updates now correctly and fixed N...
#4401 Fix Article Search Results Breadcrumb updates now correctly and fixed Navigation after Applying Filter on all screen sizes
2023-10-23 12:25:08 +00:00
Nino
fc45efb4af Merge branch 'develop' into release/3.0 2023-10-20 16:25:57 +02:00
Nino
b4fbcd6d16 Remission Filter Button Styling, Filter Overlay Max Width Changed 2023-10-20 16:23:39 +02:00
Nino
c54e5c27ae #4396 Removed Filter All Branches on Pickup Shelf Result List Request 2023-10-20 15:52:49 +02:00
Nino
4b80765b26 Merge branch 'develop' into feature/4340-RD-Shell-Nav-Menue-Expand-Dropdown 2023-10-20 15:45:43 +02:00
Nino
d223e064c2 #4397 Fix RD Abholfach Zubuchen mit Zusatz 2023-10-20 15:43:49 +02:00
Nino
1f8d6c5898 #4340 Fix Open Dropdown on Init Side-Menu Component 2023-10-19 15:22:25 +02:00
Nino
66555e9c7e Merge branch 'develop' into feature/4340-RD-Shell-Nav-Menue-Expand-Dropdown 2023-10-19 14:58:25 +02:00
Nino
bb81b8f826 Merge branch 'develop' into release/3.0 2023-10-19 13:26:35 +02:00
Nino Righi
ecb5a77fdd Merged PR 1651: #4389 RD Added Pickup Shelf List In Item Loader and trackByGroupFn
#4389 RD Added Pickup Shelf List In Item Loader and trackByGroupFn
2023-10-19 11:24:58 +00:00
Nino Righi
6652c2f97e Merged PR 1650: #4391 Assign new CompartmentCode if action differs from "book in", otherwise...
#4391 Assign new CompartmentCode if action differs from "book in", otherwise use latestCompartmentCode
2023-10-19 08:51:22 +00:00
Nino Righi
e9f16f72cb Merged PR 1649: #4340 Expand Dropdown on Click if menu is on assigned Section
#4340 Expand Dropdown on Click if menu is on assigned Section
2023-10-19 08:19:28 +00:00
Nino Righi
a687b1771f Merged PR 1648: #4358 Improved implementation by using order$ as observable
#4358 Improved implementation by using order$ as observable
2023-10-19 08:18:56 +00:00
Nino
ec79e315e5 #4340 Expand Dropdown on Click if menu is on assigned Section 2023-10-18 15:52:41 +02:00
Nino Righi
af10e66b1a Merged PR 1647: #4310 Show Button always centered
#4310 Show Button always centered
2023-10-18 09:08:17 +00:00
Lorenz Hilpert
2d8a0f514d #4372 RD/ Scanbutton fehlt in Kundensuche 2023-10-18 11:07:06 +02:00
Lorenz Hilpert
02ade0a377 Skandit SDK Lizenz Update 2023-10-18 10:58:17 +02:00
Nino Righi
c2943037d9 Merged PR 1646: #4390 Customer Area, removed navigation cards
#4390 Customer Area, removed navigation cards
2023-10-17 16:10:18 +00:00
Nino Righi
c30d8fa5fd Merged PR 1645: #4374 #4358 Change EstimatedShippingDate, preferredPickUpDate and pickUpDeadl...
#4374 #4358 Change EstimatedShippingDate, preferredPickUpDate and pickUpDeadline on Shelf In and Out fixed
2023-10-17 14:49:50 +00:00
Nino Righi
4fd10bc8a4 Merged PR 1644: #4364 Check if Order is Kulturpass Order if no customer is available
#4364 Check if Order is Kulturpass Order if no customer is available
2023-10-17 13:46:23 +00:00
Lorenz Hilpert
1d25fec9ff #3025 RD // HSC+ Filiale- Automatische Bestellbestätigung per Mail 2023-10-17 15:41:49 +02:00
Nino Righi
6f77527d59 Merged PR 1643: #4382 Changed Layout inside Purchase Options Modal
#4382 Changed Layout inside Purchase Options Modal
2023-10-16 16:21:38 +00:00
Nino Righi
7a2cd5cef8 Merged PR 1642: #4360 Autocomplete Provider Implementation
#4360 Autocomplete Provider Implementation
2023-10-16 16:20:59 +00:00
Lorenz Hilpert
d1de4d96d8 Merge branch 'develop' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into develop 2023-10-16 18:20:45 +02:00
Lorenz Hilpert
dd1652c3a6 Logs entfernt 2023-10-16 18:20:30 +02:00
Lorenz Hilpert
66fd2eed81 #4355 Lieferadresse bearbeiten nicht möglich 2023-10-16 18:20:13 +02:00
Nino Righi
f5d90f97e8 Merged PR 1641: #4370 Only show compartment code if available, never display orderNumber
#4370 Only show compartment code if available, never display orderNumber
2023-10-16 15:39:46 +00:00
Nino Righi
ade3800568 Merged PR 1640: #4348 #4366 Multiple Bugfixes Shelf Edit with changing CompartmentInfo or CompartmentCode
#4348 #4366 Multiple Bugfixes Shelf Edit with changing CompartmentInfo or CompartmentCode
2023-10-16 15:38:48 +00:00
Lorenz Hilpert
486e2e5a28 Fix Build Error 2023-10-16 15:53:22 +02:00
Lorenz Hilpert
86d3b4e3f5 Merge branch 'develop' into release/3.0 2023-10-16 15:51:20 +02:00
Nino Righi
4d669731fb Merged PR 1639: #4376 Styling Fix
#4376 Styling Fix
2023-10-16 13:05:11 +00:00
Nino Righi
5bc81f7048 Merged PR 1638: #4368 Fix Navigation On Filter Close
#4368 Fix Navigation On Filter Close
2023-10-16 13:04:03 +00:00
Nino Righi
6cf6dec001 Merged PR 1636: #4370 Fix dont show compartment or orderNumber if item has processingStatus 1...
#4370 Fix dont show compartment or orderNumber if item has processingStatus 16 or 8192
2023-10-16 13:03:37 +00:00
Nino Righi
526d82752c Merged PR 1637: #4367 Fix Navigation to Shelf Out from Checkout Summary
#4367 Fix Navigation to Shelf Out from Checkout Summary
2023-10-16 07:48:06 +00:00
Nino Righi
7565b2bb54 Merged PR 1635: #4373 Changed Wording and Color of preferredPickUpDate in Checkout Summary
#4373 Changed Wording and Color of preferredPickUpDate in Checkout Summary
2023-10-16 07:45:28 +00:00
Nino Righi
692a32f4d7 Merged PR 1634: #4362 Scroll Position Handling, Bugfix between multiple open Shelf Out processes
#4362 Scroll Position Handling, Bugfix between multiple open Shelf Out processes
2023-10-16 07:44:55 +00:00
Lorenz Hilpert
4039ffdf20 #4365 Weitere Navigationen umgebaut 2023-10-12 16:25:09 +02:00
Lorenz Hilpert
cb39b3b79b #4365 RD // Abholfach - Alte Bestellpostensuche Seite ist erreichbar 2023-10-12 16:18:21 +02:00
Lorenz Hilpert
fe3dfd00ab #4354 Kundendaten erfassen // Rechnungs und Lieferadresse als Standard Adresse festlegen 2023-10-12 16:02:16 +02:00
Nino Righi
08a4b5a2ca Merged PR 1633: #4349 Unselect Items after handle action, update actions on list item
#4349 Unselect Items after handle action, update actions on list item
2023-10-12 13:23:12 +00:00
Lorenz Hilpert
e8a036b6df #4357 Warenausgabe - Trefferliste nachladen unendlich 2023-10-11 17:26:43 +02:00
Lorenz Hilpert
ff698ec6b2 #4345 Warenausgabe - Mehrere Artikel mit verschiedene Status werden zusammen gebunden 2023-10-11 16:40:41 +02:00
Lorenz Hilpert
8644ea515b Merge branch 'feature/splitscreen-pickup-shelf-design' into develop 2023-10-10 14:25:52 +02:00
Lorenz Hilpert
10a77c25e9 Zubuchen im Wareneingang Fix 2023-10-10 14:23:08 +02:00
Lorenz Hilpert
25d3adc28c Bugfix Navigation and Process Creation 2023-10-10 14:03:47 +02:00
Lorenz Hilpert
5cdbbb995f Merge branch 'feature/splitscreen-pickup-shelf-design' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into feature/splitscreen-pickup-shelf-design 2023-10-10 12:05:20 +02:00
Lorenz Hilpert
01a26ef57a Console Logs removed 2023-10-10 12:05:06 +02:00
Lorenz Hilpert
3b337ea127 Cleanup Cache 2023-10-10 12:04:40 +02:00
Nino
c66ef5ba91 Trefferlisten Small Desktop Breakpoint, Eingebaut in Artikelsuche, Kundensuche, Warenausgabe, Einbuchen 2023-10-10 11:53:27 +02:00
Nino
b2edcf8a20 #4347 Fix Navigation on Edit Page from Shelf In and Out 2023-10-09 17:41:00 +02:00
Nino
06af33e37e Added compartmentInfo to every compartmentCode navigation 2023-10-09 17:14:26 +02:00
Nino
1a217d0870 Open New Process if navgation on customer area triggers 2023-10-09 16:01:31 +02:00
Nino
d6c52baf53 Navigation and Styling to Edit Pages 2023-10-09 15:15:23 +02:00
Lorenz Hilpert
f923fdefa4 #4344 Warenausgabe - Statusänderung via Bestellposten Details Seite wird nur nach Seiten Refresh angezeigt 2023-10-09 14:18:55 +02:00
Lorenz Hilpert
bd674a0e14 #4338 Warenausgabe - "Bearbeiten" bringt Fehler 2023-10-09 13:34:34 +02:00
Nino
bd3f8af924 Process Id Fix 2023-10-06 17:57:36 +02:00
Nino
5e720876ac Merge branch 'feature/splitscreen-pickup-shelf-design' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into feature/splitscreen-pickup-shelf-design 2023-10-06 17:43:25 +02:00
Nino
8543db465b Cover Anzeige und Cover navigation 2023-10-06 17:43:06 +02:00
Lorenz Hilpert
ec4951d8dd #4343 Warenausgabe - Öffnen Bestellposten mit Abholfach-Zusatz navigiert zu leere Seite 2023-10-06 15:02:49 +02:00
Lorenz Hilpert
17f1846c69 Merge branch 'feature/splitscreen-pickup-shelf-design' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into feature/splitscreen-pickup-shelf-design 2023-10-06 14:15:54 +02:00
Lorenz Hilpert
6b71a544fe renamed selected into displayed for displaying items and added compartment info 2023-10-06 14:15:38 +02:00
Nino
7f1f097179 Merge branch 'feature/splitscreen-pickup-shelf-design' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into feature/splitscreen-pickup-shelf-design 2023-10-06 14:13:20 +02:00
Nino
a7003b84bf Removed Extends Base Component from Shelf In List 2023-10-06 14:12:59 +02:00
Nino
8a84e69ce3 Fix Pickup Shelf Details In 2023-10-06 14:10:57 +02:00
Lorenz Hilpert
3ebd50a8c1 #4341 Warenausgabe - Kacheln in Trefferliste sind rechts abgeschnitten 2023-10-06 13:43:08 +02:00
Nino
1f7a952c91 Merge branch 'feature/splitscreen-pickup-shelf-design' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into feature/splitscreen-pickup-shelf-design 2023-10-06 11:25:36 +02:00
Nino
560ef57915 Abholfach Details Selected Item and Filter Back Navigation to Details 2023-10-06 11:21:09 +02:00
Lorenz Hilpert
4fb81526ae Split Screen classes fuer e2e tests 2023-10-06 11:13:11 +02:00
Lorenz Hilpert
4bee8117ee #4342 Warenausgabe - Bearbeiten Seite beinhaltet komische Text 2023-10-06 10:25:01 +02:00
Nino
66991684d2 Merge branch 'feature/splitscreen-pickup-shelf-design' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into feature/splitscreen-pickup-shelf-design 2023-10-05 17:48:43 +02:00
Nino
06abcbff51 Update Pickup Shelf In Details 2023-10-05 17:48:19 +02:00
Nino
17197461f7 Update Domain Service Shelf In 2023-10-05 17:47:25 +02:00
Lorenz Hilpert
f036190019 Build Error Fix 2023-10-05 17:41:33 +02:00
Lorenz Hilpert
e68975b0f7 Load Cover Items - Implemented In Details Store 2023-10-05 17:26:12 +02:00
Lorenz Hilpert
692c1cb596 Merge branch 'feature/splitscreen-pickup-shelf-design' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into feature/splitscreen-pickup-shelf-design 2023-10-05 17:16:31 +02:00
Lorenz Hilpert
7ace3b7685 #4338 Warenausgabe - "Bearbeiten" bringt Fehler 2023-10-05 17:16:10 +02:00
Nino
6d6077c54f Added Cover Page and Updated Navigation Routes (added OrderItemSubsetId) 2023-10-05 17:14:23 +02:00
Nino
b60913de3c Shelf In Navigation Update on Shared Components 2023-10-05 15:27:07 +02:00
Nino
357b89f1ea Merge branch 'feature/splitscreen-pickup-shelf-design' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into feature/splitscreen-pickup-shelf-design 2023-10-05 15:14:37 +02:00
Nino
c37b05d4b8 Pickup Shelf In List Select Items, Routing and Actions Update 2023-10-05 15:14:21 +02:00
Lorenz Hilpert
94fe011d49 #4337 Warenaugabe - Abholfachnummer wird lanksbündig angezeigt 2023-10-05 14:16:40 +02:00
Lorenz Hilpert
0e458e81d8 #4336 Warenausgabe - automatisches nachladen durch Scrollen 2023-10-05 14:12:15 +02:00
Lorenz Hilpert
efbdb134a9 Cleanup 2023-10-05 11:43:20 +02:00
Lorenz Hilpert
a97d87ed7b #4335 Fehler bei Öffnung einer Bestellung mit Status "eingetroffen" 2023-10-05 11:40:47 +02:00
Lorenz Hilpert
cb56cfcb00 #4332 Upgrade Bestellung ohne Konto" leitet zum Dashboard weiter 2023-10-05 10:58:36 +02:00
Nino
d13cf0ef8d Init PickUpShelfIn page, Navigation and SubPages 2023-10-04 18:06:28 +02:00
Nino
e6afd6887a Merge branch 'feature/splitscreen-pickup-shelf-design' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into feature/splitscreen-pickup-shelf-design 2023-10-04 15:29:10 +02:00
Nino
7378b7db53 Removed many unnecessary history endpoint requests 2023-10-04 15:28:53 +02:00
Lorenz Hilpert
70f9bb0f73 Skip fetch while another request is being executed 2023-10-04 15:13:57 +02:00
Lorenz Hilpert
2fa7451716 Notification in Details laden und Fix Request lists 2023-10-04 14:29:03 +02:00
Lorenz Hilpert
871aeaed1f Merge branch 'feature/splitscreen-pickup-shelf-design' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into feature/splitscreen-pickup-shelf-design 2023-10-04 13:20:42 +02:00
Lorenz Hilpert
09f0337489 Fetching OrderItemSubsetTasks 2023-10-04 13:19:26 +02:00
Nino
51f36de7dd Merge branch 'develop' into feature/splitscreen-pickup-shelf-design 2023-10-04 12:46:33 +02:00
Nino
0999e1ea51 Fetch Partial Bugfix, Breadcrumb Fix, Details Store Selectors Refactor 2023-10-04 12:45:52 +02:00
Lorenz Hilpert
d079b276cf Attribute für e2e 2023-10-04 10:42:48 +02:00
Nino
e1bd87418c Aufrufe geupdated, bugfixing 2023-10-02 18:10:53 +02:00
Nino
d06af28e11 Merge branch 'develop' into feature/splitscreen-pickup-shelf-design 2023-10-02 17:11:06 +02:00
Nino
c123a29b1d Merge branch 'feature/splitscreen-pickup-shelf-design' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into feature/splitscreen-pickup-shelf-design 2023-10-02 17:08:01 +02:00
Nino
1398a3bdee Added more/less functionality and Added Nav Menu to Customer Area, Small Styling Adjustments 2023-10-02 17:07:43 +02:00
Lorenz Hilpert
340e866aed Funktion zum updaten der OrderItemSubsets 2023-10-02 16:26:24 +02:00
Nino
9338162906 Added Navigation After Actions on Detail Page 2023-10-02 16:03:50 +02:00
Nino
23d61bfa60 Navigation to History and Edit page, Implementation of Edit page, Centered Edit Page Action Buttons 2023-10-02 14:57:55 +02:00
Lorenz Hilpert
7409053cef #4330 Kundendaten // Upgrade Versandbestellung (oder gemischt)-Kundendatensatz wirft Fehler 2023-09-29 17:54:32 +02:00
Nino
0c372b0245 Updated Store and Base component implementation, Fixed Tags Component (also in Customer-Orders), Added new function declarations to implement, Added History and Edit Breadcrumb management 2023-09-29 16:58:16 +02:00
Lorenz Hilpert
dd68405522 #4331 Bestellung // Button "Bestellen" ist erst lange ausgegraut (wird aber nach eine Zeit klickbar) 2023-09-29 16:55:08 +02:00
Lorenz Hilpert
69e792ae41 Merge tag '4323-WBS-Fehlende-Wannenummer' into develop
4323-WBS-Fehlende-Wannenummer
2023-09-29 16:15:57 +02:00
Lorenz Hilpert
02b507aca9 Merge branch 'hotfix/4323-WBS-Fehlende-Wannenummer' 2023-09-29 16:10:57 +02:00
Lorenz Hilpert
05f94c65fc 4323 Remi // WBS ohne Wannennummer -> Fehlermeldung 2023-09-29 16:09:46 +02:00
Lorenz Hilpert
8b6ebd1820 Merge branch 'develop' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into develop 2023-09-29 11:08:16 +02:00
Lorenz Hilpert
45cb411e17 #4329 HSC - OLA im Warenkorb 2023-09-29 11:07:54 +02:00
Nino Righi
dec66de61d Merged PR 1632: #4322 Fix Checkout Summary If an Order has no items, dont display that Order
#4322 Fix Checkout Summary If an Order has no items, dont display that Order
2023-09-29 08:54:08 +00:00
Nino
e9a490d7f3 Details Page Completed Store hookup 2023-09-28 17:19:42 +02:00
Nino
280b28a474 Merge branch 'develop' into feature/splitscreen-pickup-shelf-design 2023-09-28 10:16:41 +02:00
Lorenz Hilpert
cfba5f34d4 #4317 AddressSelectionModalComponent - warning entfernt 2023-09-27 18:37:52 +02:00
Nino
582e2d988c Pickup Shelf Out Details Page 2023-09-27 18:16:44 +02:00
Lorenz Hilpert
4c627986d1 #4185 OLA im Warenkorb - spinner ersetzt 2023-09-27 18:01:01 +02:00
Nino
299dab43b9 Init Pickup Shelf Out Details Page and startet Header Implementation 2023-09-26 17:30:28 +02:00
Nino
ce0823a6fd Pickup Shelf Out List Actions Implementation 2023-09-26 17:02:30 +02:00
Nino
e0963e9b65 Merge branch 'feature/splitscreen-pickup-shelf-design' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into feature/splitscreen-pickup-shelf-design 2023-09-25 20:45:37 +02:00
Nino
a88552f975 List Styling Completed 2023-09-25 20:44:16 +02:00
Lorenz Hilpert
66a7bab287 Action Handler Impl 2023-09-25 19:04:37 +02:00
Lorenz Hilpert
088d9e1b6f Group Pipe von UiCommon in eigene Lib ausgelagert 2023-09-25 11:40:43 +02:00
Lorenz Hilpert
29619b2fec Paging Abholfach Store Fix 2023-09-22 17:05:52 +02:00
Nino
a5effc89a7 Merge branch 'feature/splitscreen-pickup-shelf-design' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into feature/splitscreen-pickup-shelf-design 2023-09-22 16:19:25 +02:00
Nino
e7fe2a2676 Update Result List Splitscreen 2023-09-22 16:17:33 +02:00
Lorenz Hilpert
53bb01db2d Fix Process Change 2023-09-22 15:05:59 +02:00
Nino
003d0cbcb2 Merge branch 'develop' into feature/splitscreen-pickup-shelf-design 2023-09-22 10:49:31 +02:00
Nino
a71c627a30 Pickup Shelf List Init 2023-09-22 10:45:15 +02:00
Lorenz Hilpert
261c851514 Caching und State Änderungen für Ausgewählte Items 2023-09-21 17:08:51 +02:00
Nino
58cfcba738 Merge branch 'develop' into feature/splitscreen-pickup-shelf-design 2023-09-21 16:39:25 +02:00
Nino Righi
50dac899c9 Merged PR 1631: #4304 Page Article Search Fixed Routing Bug After Searching Article with EAN...
#4304 Page Article Search Fixed Routing Bug After Searching Article with EAN inside Filter Page with Small Desktop Screen Size
2023-09-21 08:11:23 +00:00
Nino
9fe25f0f73 Added Loading Spinner and Searchbox Hint Message To Search Main and Filter View 2023-09-20 18:09:47 +02:00
Nino
678c961ea9 Merge branch 'develop' into feature/splitscreen-pickup-shelf-design 2023-09-20 17:32:39 +02:00
Lorenz Hilpert
f6b4633ac4 #4303 Kundensuche - kein Splittscreen 2023-09-20 14:45:53 +02:00
Lorenz Hilpert
0ecd2916a2 Caching Abholfach Liste 2023-09-20 14:29:57 +02:00
Lorenz Hilpert
e786b60bfc #4303 Kundensuche - kein Splittscreen 2023-09-20 10:29:31 +02:00
Nino
8c079e9064 Splitscreen Search Main Design 2023-09-19 17:51:32 +02:00
Nino
3b08fe438b Merge branch 'develop' into feature/splitscreen-pickup-shelf-design 2023-09-19 15:55:57 +02:00
Nino
fedbdcc35c Init Splitscreen Routing 2023-09-19 15:30:55 +02:00
Lorenz Hilpert
ac656ddc04 Breadcrumb fue abholfach 2023-09-19 15:23:28 +02:00
Nino Righi
85d8d75da8 Merged PR 1630: #4299 Take Price and priceMaintained from Catalog First
#4299 Take Price and priceMaintained from Catalog First
2023-09-19 12:20:54 +00:00
Nino
e6d389d848 Added Main Side View Component 2023-09-19 10:58:05 +02:00
Lorenz Hilpert
664053f231 Store for Detail Pages 2023-09-19 09:52:35 +02:00
Nino Righi
18b2230dd7 Merged PR 1629: #4301 RD Design Adjustments
#4301 RD Design Adjustments
2023-09-18 14:05:28 +00:00
Lorenz Hilpert
0876ed3acc Added Directive Shared Scroll Container 2023-09-18 15:48:33 +02:00
Lorenz Hilpert
7b4edbee8b Html Tag Fuer PickupShelfFilter Fix 2023-09-18 15:35:22 +02:00
Lorenz Hilpert
05ef1edfeb Wording Fix WE WA 2023-09-18 15:34:06 +02:00
Lorenz Hilpert
fb8db78bbd Breadcrumb Fix 2023-09-18 15:06:36 +02:00
Lorenz Hilpert
aecc4a477f Fix delayWhenFilterIsNotReady 2023-09-18 14:56:22 +02:00
Lorenz Hilpert
fd63ce8b3c Abholfach Infrastruktur - WE und WA 2023-09-18 14:23:16 +02:00
Nino Righi
423cd498cf Merged PR 1628: #4271 Added canAdd request for adding items to Kulturpass Cart Modal
#4271 Added canAdd request for adding items to Kulturpass Cart Modal
2023-09-18 08:42:26 +00:00
Nino Righi
b421c8b08c Merged PR 1627: #4298 Removed Add New Process Menu for Tablet
#4298 Removed Add New Process Menu for Tablet
2023-09-14 15:22:30 +00:00
Nino
4304286f48 Fix Show Filter Page on Tablet if Navigation To Filter Triggered from Result Page (Article Search and Customer Orders) 2023-09-14 16:23:50 +02:00
Nino Righi
df308c98ff Merged PR 1626: #4299 Hotfix Kulturpass Fallback if Delivery Availability Is Missing
#4299 Hotfix Kulturpass Fallback if Delivery Availability Is Missing
2023-09-14 14:02:44 +00:00
Lorenz Hilpert
1d1221e8c5 Navigation Fix Customer Guard ohne Prozess Id 2023-09-14 10:55:53 +02:00
Lorenz Hilpert
e2a6eac0a2 #4258 Abstände Breadcrumb 2023-09-13 18:43:30 +02:00
Lorenz Hilpert
4e54baf9fb Fix Customer Navigation 2023-09-13 18:38:35 +02:00
Lorenz Hilpert
7593e420de #4258 Abstände 2 2023-09-13 18:17:56 +02:00
Lorenz Hilpert
84ca80a1c9 #4258 Abstände 1 2023-09-13 18:17:43 +02:00
Lorenz Hilpert
7265f4d4ce Shell Navigation Kunden 2023-09-13 16:29:47 +02:00
Lorenz Hilpert
fca1eacc6e Bugfix Navigation Kunden und Prozesserstellung 2023-09-13 16:26:25 +02:00
Lorenz Hilpert
384c32dd1f Merge branch 'split-screen-demo' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into split-screen-demo 2023-09-13 13:22:40 +02:00
Lorenz Hilpert
983d075d5a Umbau Kundenbereich Split Screen 2023-09-13 13:21:53 +02:00
Nino
29ce32f3fe Shared Splitscreen Customer Orders Implementation 2023-09-12 17:48:27 +02:00
Nino
d9e67ec9be Shared Split Screen Checkout Implementation 2023-09-12 15:07:10 +02:00
Nino
a1e7ee2997 Routing Fix on Tablet 2023-09-11 18:20:19 +02:00
Nino
653ed1c1b2 Display Article Search Main and Filter correctly on Tablet 2023-09-11 18:12:20 +02:00
Nino
d7a3641fed Ean Search Bugfix 2023-09-11 16:53:43 +02:00
Nino
71cd95587d Finetuning, corrected naming and fixed breadcrumb bug 2023-09-11 14:53:37 +02:00
Nino
4ca12ba5c7 Merge branch 'develop' into split-screen-demo 2023-09-11 11:51:00 +02:00
Nino
bb189abe01 Side Outlet Clear directly after Navigation 2023-09-11 11:31:29 +02:00
Nino
f4e6d14a9c Product Search Routing Refactor, new Split Screen Router Logic, Clear Side Outlet 2023-09-08 16:31:30 +02:00
Nino Righi
a7f0522d57 Merged PR 1625: #4255 Fixed Publication Date Range Filter issues
#4255 Fixed Publication Date Range Filter issues
2023-09-06 16:09:59 +00:00
Nino Righi
cf38eef3b8 Merged PR 1624: #4272 Menu Items Alignment and Display Icons Correctly if Creating New Process in Tablet View
#4272 Menu Items Alignment and Display Icons Correctly if Creating New Process in Tablet View
2023-09-06 15:42:58 +00:00
Nino
104179a2e6 Created Shared Split Screen Component 2023-09-06 15:27:42 +02:00
Nino
4e2be8e397 Shell Top Bar and Shell Process Bar improved class naming for e2e page objects 2023-09-05 12:15:45 +02:00
Nino Righi
732b5a7fb1 Merged PR 1623: #4278 Fix Customer Order Removed Double Search Request and keep queryParams i...
#4278 Fix Customer Order Removed Double Search Request and keep queryParams in sync with filter settings
2023-09-04 16:29:45 +00:00
Nino Righi
0441401d9f Merged PR 1622: #4205 Article Search Details Search for Row Correctly and Split Links if ther...
#4205 Article Search Details Search for Row Correctly and Split Links if there is more than 1
2023-09-04 14:47:06 +00:00
Lorenz Hilpert
564afb7e32 Merged PR 1621: #4272 Menü zeigt Bestellungen, Kundenkarte und Details an
#4272 Menü zeigt Bestellungen, Kundenkarte und Details an
2023-09-04 13:17:47 +00:00
Nino Righi
5167ba21a6 Merged PR 1620: #4262 Fix HSC Selection Of Branch Dropdown Does Not Clear Main Searchbox Anymore
#4262 Fix HSC Selection Of Branch Dropdown Does Not Clear Main Searchbox Anymore
2023-09-01 14:44:40 +00:00
Lorenz Hilpert
b2319e8ea6 Split Screen Demo 2023-09-01 11:51:14 +02:00
Lorenz Hilpert
f8a2166967 #3968-Preisgebunden-Fix 2023-09-01 10:29:29 +02:00
Lorenz Hilpert
6a70d149db Merge branch 'feature/3968-Artikeldetails-Mehrwertsteuer-2' into develop 2023-08-31 14:31:50 +02:00
Lorenz Hilpert
306f5ed7f9 Merge devlop 2023-08-31 14:29:42 +02:00
Lorenz Hilpert
6a5d478e62 #4268 #4264 Warenkorb OLA 2023-08-30 17:51:01 +02:00
Lorenz Hilpert
b440ddbe82 Merge branch 'hotfix/4270-4269-Archiv-Artikel'
(cherry picked from commit f4df6e8799)
2023-08-30 14:38:54 +02:00
Lorenz Hilpert
6b8051f9df Merge tag '4270-4269-Archiv-Artikel' into develop
Merge Hotfix 4270-4269-Archiv-Artikel
2023-08-30 10:43:47 +02:00
Lorenz Hilpert
f4df6e8799 Merge branch 'hotfix/4270-4269-Archiv-Artikel' 2023-08-30 10:31:58 +02:00
Lorenz Hilpert
e9a63fd553 #4274 Kaufoption - Preis nicht übernommen 2023-08-29 11:31:58 +02:00
Nino Righi
a8535d5f3e Merged PR 1618: #4191 Removed First Item Activation on Autocomplete if only 1 Item is selectable
#4191 Removed First Item Activation on Autocomplete if only 1 Item is selectable
2023-08-28 15:06:45 +00:00
Lorenz Hilpert
23b77c7e48 #4269 Preis wird nicht von Shipping AVA übernommen 2023-08-28 17:01:20 +02:00
Nino
878bf44d0b #3968 Article Search Details display vat and if priceMaintained true 2023-08-28 16:51:52 +02:00
Lorenz Hilpert
8b6188a6b5 #4270 Kaufoptionen Bestellung via Mehrfachauswahl wirft Fehler 2023-08-28 14:39:37 +02:00
Lorenz Hilpert
822625a1c2 #4269 PDP Preisanzeige 2023-08-28 14:36:29 +02:00
Lorenz Hilpert
d6e0d92132 (cherry picked from commit d09b5b1ce7) 2023-08-24 20:18:19 +02:00
Lorenz Hilpert
da6489eb7a Merge tag '4266-Archivartikel' into develop
Hotfix 4266 Archivartikel Preisauswahl
2023-08-24 20:06:36 +02:00
Lorenz Hilpert
819827cc4c Merge branch 'hotfix/4266-Archivartikel' 2023-08-24 20:04:40 +02:00
Lorenz Hilpert
d09b5b1ce7 #4266 Archivartikel nach Preis-Eingabe Button ausgegraut 2023-08-24 20:03:59 +02:00
Lorenz Hilpert
cc03ef4f9c #4264 Fix Ola Refresh Calls 2023-08-24 12:58:53 +02:00
Lorenz Hilpert
b4dbd8889d Merge branch 'develop' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into develop 2023-08-24 12:12:50 +02:00
Lorenz Hilpert
483faad86a #4264 - Bestellen-Button ausgegraut 2023-08-24 11:57:47 +02:00
Michael Auer
0dbc745ed0 Merge tag '2.3' into develop
# Conflicts:
#	apps/isa-app/src/app/shell/shell.component.html
2023-08-24 11:56:11 +02:00
Michael Auer
180e93a7da Merge branch 'release/2.3' 2023-08-24 11:50:39 +02:00
Lorenz Hilpert
5c6f416391 #4263 Versand - Fehler vor Kundensuche 2023-08-23 14:56:57 +02:00
Lorenz Hilpert
d97b6afac8 #4205 Reihensuche 2023-08-23 14:31:55 +02:00
Lorenz Hilpert
771816f3af #4185 OLA Warenkorb - 500 Fix 2023-08-22 13:47:22 +02:00
Lorenz Hilpert
0626538aea #4261 Fehler bei Artikel aus Liste in Warenkorb - Weiter Button War Nicht Aktiv 2023-08-21 15:33:35 +02:00
Lorenz Hilpert
a1ad4e4a05 #4261 Fehler bei Artikel aus Liste in Warenkorb 2023-08-21 15:12:22 +02:00
Lorenz Hilpert
6df48eb555 #4255 Neue Filteroption - Erscheinungsdatum 2023-08-21 14:18:40 +02:00
Lorenz Hilpert
27ab4526e2 Logs entfernt und kleinere Änderungen rückgängig gemacht 2023-08-18 12:48:09 +02:00
Lorenz Hilpert
9a24b34fbc #4255 Verbesserung des Datumsinputs 2023-08-18 12:45:27 +02:00
Lorenz Hilpert
d01e01534b #4185 Bugfix - Bestellabschluss 2023-08-17 17:01:33 +02:00
Lorenz Hilpert
5bca1f2a81 Bugfix - zu viele aurufe bei ola 2023-08-16 15:26:08 +02:00
Lorenz Hilpert
807b300885 #4185 OLA im Warenkorb 2023-08-16 14:54:14 +02:00
Lorenz Hilpert
b16ffa4352 Merge branch 'develop' into release/3.0 2023-08-11 15:34:45 +02:00
Lorenz Hilpert
da79d04ef4 Bugfix Erscheinungsdatum 2023-08-11 15:34:09 +02:00
Lorenz Hilpert
cf619df576 Merge branch 'release/3.0' into develop 2023-08-11 10:29:47 +02:00
Lorenz Hilpert
8054c96315 #3376 Erscheinungstermin Filter Option Mit Input Box 2023-08-11 10:28:14 +02:00
Nino Righi
2363f424f5 Merged PR 1617: #3360 Show Branch Tooltip
#3360 Show Branch Tooltip
2023-08-11 08:11:16 +00:00
Lorenz Hilpert
6ab1ea2e70 #4254 Bestellungen ohne Konto werden nicht als Kunde erkannt 2023-08-10 14:03:18 +02:00
Lorenz Hilpert
c9ce7d6762 #4253 Kundensuche - Typo 2023-08-09 17:53:58 +02:00
Lorenz Hilpert
6ee1b0a7f8 #4250 Vorgänge zählen nicht hoch 2023-08-09 16:50:54 +02:00
Lorenz Hilpert
d881920312 Merge branch 'develop' into release/3.0 2023-08-07 07:07:36 +02:00
Lorenz Hilpert
516465db37 #4246 UI Searchbox Hint Erneut anzeigen
(cherry picked from commit 9671683a93)
2023-08-06 05:11:40 +02:00
Lorenz Hilpert
08e95cec55 #4245 Wannernummer-Prüfung - Leerzeichen entfernen
(cherry picked from commit 15c50779b4)
2023-08-06 05:10:46 +02:00
Lorenz Hilpert
9671683a93 #4246 UI Searchbox Hint Erneut anzeigen 2023-08-04 15:56:51 +02:00
Lorenz Hilpert
d909d6e804 #4236 Kulturpass - Artikel ohne Preisbindung erhalten günstigeren Preis
(cherry picked from commit 1d865c47d7)
2023-08-03 17:06:46 +02:00
Lorenz Hilpert
15c50779b4 #4245 Wannernummer-Prüfung - Leerzeichen entfernen 2023-08-03 17:05:45 +02:00
Lorenz Hilpert
1d865c47d7 #4236 Kulturpass - Artikel ohne Preisbindung erhalten günstigeren Preis 2023-08-03 13:57:09 +02:00
Lorenz Hilpert
5bdfec7c3f #4222 Packstückprüfung aktiviert 2023-08-02 10:55:54 +02:00
Nino Righi
6b0beba1d9 Merged PR 1616: #3378 SSC Sync PDP and Search Result List
#3378 SSC Sync PDP and Search Result List
2023-08-01 16:16:57 +00:00
Lorenz Hilpert
9d886cd33f Merge branch 'develop' into release/3.0 2023-07-31 18:31:30 +02:00
Michael Auer
6bc265a358 Merge branch 'release/2.3' 2023-07-11 12:20:14 +02:00
5400 changed files with 461073 additions and 91764 deletions

5
.gitignore vendored
View File

@@ -5,6 +5,8 @@
/tmp
/out-tsc
/
# dependencies
/node_modules
@@ -47,4 +49,5 @@ testem.log
.DS_Store
Thumbs.db
libs/swagger/src/lib/*
libs/swagger/src/lib/*
*storybook.log

1
.husky/pre-commit Normal file
View File

@@ -0,0 +1 @@
npm run pretty-quick

View File

@@ -24,6 +24,6 @@ ARG BuildUniqueID
LABEL build.uniqueid="${BuildUniqueID:-1}"
RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb -q -O /tmp/chrome.deb && apt update && apt install -y /tmp/chrome.deb
# ignore exitcode, sonst gibts keinen container
RUN npm test || true
RUN npm run ci || true
ENTRYPOINT [ "/bin/sleep", "60000" ]

View File

@@ -1,4 +0,0 @@
- Neue Icon Module (z.B. mit SVG sprites)
- Breadcrumb Navigation (Neu)
- Remissions Produkt Liste (Refactoring / Neu)
- Angular Version (Upgrade)

View File

File diff suppressed because it is too large Load Diff

View File

@@ -1,25 +0,0 @@
# Scan
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.2.0.
## Code scaffolding
Run `ng generate component component-name --project scan` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project scan`.
> Note: Don't forget to add `--project scan` or else it will be added to the default project in your `angular.json` file.
## Build
Run `ng build scan` to build the project. The build artifacts will be stored in the `dist/` directory.
## Publishing
After building your library with `ng build scan`, go to the dist folder `cd dist/scan` and run `npm publish`.
## Running unit tests
Run `ng test scan` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.

View File

@@ -1,7 +0,0 @@
{
"$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../../dist/adapter/scan",
"lib": {
"entryFile": "src/public-api.ts"
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "@adapter/scan",
"version": "0.0.1",
"peerDependencies": {
"@angular/common": "^12.2.0",
"@angular/core": "^12.2.0"
},
"dependencies": {
"tslib": "^2.3.0"
}
}

View File

@@ -1,20 +0,0 @@
:host {
@apply block relative;
}
.scanner-container {
width: 100vw;
max-width: 95vw;
max-height: calc(95vh - 120px);
}
.close-scanner {
@apply block px-6 py-4 bg-white text-brand border-2 border-solid border-brand rounded-full text-lg font-bold mx-auto mt-4;
}
@screen desktop {
.scanner-container {
max-width: 900px;
max-height: 900px;
}
}

View File

@@ -1,4 +0,0 @@
<div class="scanner-container" #scanContainer></div>
<button class="close-scanner" type="button" (click)="close()">
Scan abbrechen
</button>

View File

@@ -1,100 +0,0 @@
import { Component, ChangeDetectionStrategy, ElementRef, ViewChild, NgZone, AfterViewInit, OnDestroy } from '@angular/core';
import { UiMessageModalComponent, UiModalService } from '@ui/modal';
import { Barcode, BarcodePicker, ScanResult, ScanSettings } from 'scandit-sdk';
@Component({
selector: 'app-scandit-overlay',
templateUrl: 'scandit-overlay.component.html',
styleUrls: ['scandit-overlay.component.css'],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class ScanditOverlayComponent implements AfterViewInit, OnDestroy {
private _barcodePicker: BarcodePicker;
private _onScan?: (code: string) => void;
private _onClose?: () => void;
@ViewChild('scanContainer', { read: ElementRef, static: true }) scanContainer: ElementRef;
constructor(private _zone: NgZone, private _modal: UiModalService) {}
ngAfterViewInit(): void {
this.createBarcodePicker()
.then(() => {
this._barcodePicker.on('scan', (scanResult) => {
this._zone.run(() => this.handleScanrResult(scanResult));
});
})
.catch((err: Error) => {
this._modal
.open({
content: UiMessageModalComponent,
title: 'Zugriff auf Kamera verweigert',
data: { message: 'Falls Sie den Zugriff erlauben möchten, können Sie das über die Webseiteinstellung Ihres Browsers.' },
})
.afterClosed$.subscribe(() => {
this._onClose?.();
});
});
}
async createBarcodePicker() {
this._barcodePicker = await BarcodePicker.create(this.scanContainer.nativeElement, {
playSoundOnScan: true,
vibrateOnScan: true,
});
this._barcodePicker.applyScanSettings(this.getScanSettings());
}
getScanSettings(): ScanSettings {
return new ScanSettings({
blurryRecognition: false,
enabledSymbologies: [
Barcode.Symbology.EAN8,
Barcode.Symbology.EAN13,
Barcode.Symbology.UPCA,
Barcode.Symbology.UPCE,
Barcode.Symbology.CODE128,
Barcode.Symbology.CODE39,
Barcode.Symbology.CODE93,
Barcode.Symbology.INTERLEAVED_2_OF_5,
Barcode.Symbology.QR,
],
codeDuplicateFilter: 1000,
});
}
onScan(fn: (code: string) => void) {
this._onScan = fn;
}
onClose(fn: () => void) {
this._onClose = fn;
}
handleScanrResult(scanRestul: ScanResult) {
let result: string | undefined;
if (scanRestul.barcodes.length) {
result = scanRestul.barcodes[0].data;
} else if (scanRestul.texts.length) {
result = scanRestul.texts[0].value;
}
if (result) {
this._onScan?.(result);
}
}
close() {
this._onClose?.();
}
ngOnDestroy(): void {
this._zone.runOutsideAngular(() => {
this._barcodePicker?.destroy(true);
});
}
}

View File

@@ -1,82 +0,0 @@
import { Injectable } from '@angular/core';
import { Observable, Subscriber } from 'rxjs';
import { ScanAdapter } from '../scan-adapter';
import { Overlay } from '@angular/cdk/overlay';
import { configure } from 'scandit-sdk';
// import { ScanditModalComponent } from './scandit-modal';
import { Config } from '@core/config';
import { ComponentPortal } from '@angular/cdk/portal';
import { ScanditOverlayComponent } from './scandit-overlay.component';
import { EnvironmentService } from '@core/environment';
@Injectable()
export class ScanditScanAdapter implements ScanAdapter {
readonly name = 'Scandit';
constructor(private readonly _config: Config, private _overlay: Overlay, private _environmentService: EnvironmentService) {}
async init(): Promise<boolean> {
if (this._environmentService.isTablet()) {
await configure(this._config.get('licence.scandit'), {
engineLocation: '/scandit/',
});
return true;
}
return false;
}
scan(): Observable<string> {
return new Observable((observer) => {
const overlay = this.createOverlay();
const portal = this.createPortal();
const ref = overlay.attach(portal);
const sub = new Subscriber();
const complete = () => {
overlay.detach();
ref.destroy();
sub.unsubscribe();
sub.complete();
observer.complete();
};
sub.add(
overlay.backdropClick().subscribe(() => {
complete();
})
);
ref.instance.onScan((code) => {
observer.next(code);
complete();
});
ref.instance.onClose(() => {
complete();
});
return complete;
});
}
createOverlay() {
const overlay = this._overlay.create({
positionStrategy: this._overlay.position().global().centerHorizontally().centerVertically(),
hasBackdrop: true,
});
return overlay;
}
createPortal() {
const portal = new ComponentPortal(ScanditOverlayComponent);
return portal;
}
}

View File

@@ -1,11 +0,0 @@
/*
* Public API Surface of scan
*/
export * from './lib/scandit';
export * from './lib/dev.scan-adapter';
export * from './lib/native.scan-adapter';
export * from './lib/scan-adapter';
export * from './lib/scan.module';
export * from './lib/scan.service';
export * from './lib/tokens';

View File

@@ -1,19 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/lib",
"declaration": true,
"declarationMap": true,
"inlineSources": true,
"types": [],
"lib": [
"dom",
"es2018"
]
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
]
}

View File

@@ -1,10 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "./tsconfig.lib.json",
"compilerOptions": {
"declarationMap": false
},
"angularCompilerOptions": {
"compilationMode": "partial"
}
}

View File

@@ -1,14 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/spec",
"types": [
"jasmine"
]
},
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}

View File

@@ -1,25 +0,0 @@
# ProductImage
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.1.2.
## Code scaffolding
Run `ng generate component component-name --project product-image` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project product-image`.
> Note: Don't forget to add `--project product-image` or else it will be added to the default project in your `angular.json` file.
## Build
Run `ng build product-image` to build the project. The build artifacts will be stored in the `dist/` directory.
## Publishing
After building your library with `ng build product-image`, go to the dist folder `cd dist/product-image` and run `npm publish`.
## Running unit tests
Run `ng test product-image` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).

View File

@@ -1,7 +0,0 @@
{
"$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../../dist/cdn/product-image",
"lib": {
"entryFile": "src/public-api.ts"
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "@cdn/product-image",
"version": "0.0.1",
"peerDependencies": {
"@angular/common": "^10.1.2",
"@angular/core": "^10.1.2"
},
"dependencies": {
"tslib": "^2.0.0"
}
}

View File

@@ -1,8 +0,0 @@
/*
* Public API Surface of product-image
*/
export * from './lib/product-image.service';
export * from './lib/product-image.module';
export * from './lib/product-image.pipe';
export * from './lib/tokens';

View File

@@ -1,24 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/lib",
"declaration": true,
"declarationMap": true,
"inlineSources": true,
"types": [],
"lib": [
"dom",
"es2018"
]
},
"angularCompilerOptions": {
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"enableResourceInlining": true
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
]
}

View File

@@ -1,10 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "./tsconfig.lib.json",
"compilerOptions": {
"declarationMap": false
},
"angularCompilerOptions": {
"compilationMode": "partial"
}
}

View File

@@ -1,14 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/spec",
"types": [
"jasmine"
]
},
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}

View File

@@ -1,17 +0,0 @@
{
"extends": "../../../tslint.json",
"rules": {
"directive-selector": [
true,
"attribute",
"cdn",
"camelCase"
],
"component-selector": [
true,
"element",
"cdn",
"kebab-case"
]
}
}

View File

@@ -1,25 +0,0 @@
# Core
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 15.0.0.
## Code scaffolding
Run `ng generate component component-name --project core` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project core`.
> Note: Don't forget to add `--project core` or else it will be added to the default project in your `angular.json` file.
## Build
Run `ng build core` to build the project. The build artifacts will be stored in the `dist/` directory.
## Publishing
After building your library with `ng build core`, go to the dist folder `cd dist/core` and run `npm publish`.
## Running unit tests
Run `ng test core` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.

View File

@@ -1,7 +0,0 @@
{
"$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../../dist/core/application",
"lib": {
"entryFile": "src/public-api.ts"
}
}

View File

@@ -1,6 +0,0 @@
// start:ng42.barrel
export * from './application.module';
export * from './application.service';
export * from './defs';
export * from './store';
// end:ng42.barrel

View File

@@ -1,35 +0,0 @@
import { ApplicationState } from './application.state';
import { ApplicationProcess } from '../defs';
import * as selectors from './application.selectors';
describe('applicationSelectors', () => {
it('should select the processes', () => {
const processes: ApplicationProcess[] = [{ id: 1, name: 'Vorgang 1', section: 'customer' }];
const state: ApplicationState = {
processes,
section: 'customer',
};
expect(selectors.selectProcesses.projector(state)).toEqual(processes);
});
it('should select the section', () => {
const state: ApplicationState = {
processes: [],
section: 'customer',
};
expect(selectors.selectSection.projector(state)).toEqual('customer');
});
it('should select the activatedProcess', () => {
const processes: ApplicationProcess[] = [
{ id: 1, name: 'Vorgang 1', section: 'customer', activated: 100 },
{ id: 2, name: 'Vorgang 2', section: 'customer', activated: 300 },
{ id: 3, name: 'Vorgang 3', section: 'customer', activated: 200 },
];
const state: ApplicationState = {
processes,
section: 'customer',
};
expect(selectors.selectActivatedProcess.projector(state)).toEqual(processes[1]);
});
});

View File

@@ -1,5 +0,0 @@
/*
* Public API Surface of application
*/
export * from './lib';

View File

@@ -1,7 +0,0 @@
{
"$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../../dist/core/auth",
"lib": {
"entryFile": "src/public-api.ts"
}
}

View File

@@ -1,125 +0,0 @@
import { coerceArray, coerceStringArray } from '@angular/cdk/coercion';
import { Injectable } from '@angular/core';
import { Config } from '@core/config';
import { isNullOrUndefined } from '@utils/common';
import { AuthConfig, OAuthService } from 'angular-oauth2-oidc';
import { JwksValidationHandler } from 'angular-oauth2-oidc-jwks';
import { asapScheduler, BehaviorSubject } from 'rxjs';
@Injectable({
providedIn: 'root',
})
export class AuthService {
private readonly _initialized = new BehaviorSubject<boolean>(false);
get initialized$() {
return this._initialized.asObservable();
}
private _authConfig: AuthConfig;
constructor(private _config: Config, private readonly _oAuthService: OAuthService) {
this._oAuthService.events?.subscribe((event) => {
if (event.type === 'token_received') {
console.log('SSO Token Expiration:', new Date(this._oAuthService.getAccessTokenExpiration()));
}
});
}
async init() {
if (this._initialized.getValue()) {
throw new Error('AuthService is already initialized');
}
this._authConfig = this._config.get('@core/auth');
this._authConfig.redirectUri = window.location.origin;
this._authConfig.silentRefreshRedirectUri = window.location.origin + '/silent-refresh.html';
this._authConfig.useSilentRefresh = true;
this._oAuthService.configure(this._authConfig);
this._oAuthService.tokenValidationHandler = new JwksValidationHandler();
this._oAuthService.setupAutomaticSilentRefresh();
try {
await this._oAuthService.loadDiscoveryDocumentAndTryLogin();
} catch (error) {
this.login();
}
this._initialized.next(true);
}
isAuthenticated() {
return this._oAuthService.hasValidIdToken();
}
getToken() {
return this._oAuthService.getAccessToken();
}
getClaims() {
const token = this._oAuthService.getAccessToken();
return this.parseJwt(token);
}
getClaimByKey(key: string) {
const claims = this.getClaims();
if (isNullOrUndefined(claims)) {
return null;
}
return claims[key];
}
parseJwt(token: string) {
if (isNullOrUndefined(token)) {
return null;
}
const base64Url = token.split('.')[1];
const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
const encoded = window.atob(base64);
return JSON.parse(encoded);
}
login() {
this._oAuthService.initLoginFlow();
}
setKeyCardToken(token: string) {
this._oAuthService.customQueryParams = {
temp_token: token,
};
}
async logout() {
await this._oAuthService.revokeTokenAndLogout();
// asapScheduler.schedule(() => {
// window.location.reload();
// }, 250);
}
hasRole(role: string | string[]) {
const roles = coerceArray(role);
const userRoles = this.getClaimByKey('role');
if (isNullOrUndefined(userRoles)) {
return false;
}
return roles.every((r) => userRoles.includes(r));
}
async refresh() {
try {
if (this._authConfig.responseType.includes('code') && this._authConfig.scope.includes('offline_access')) {
await this._oAuthService.refreshToken();
} else {
await this._oAuthService.silentRefresh();
}
} catch (error) {
console.error(error);
}
}
}

View File

@@ -1,4 +0,0 @@
// start:ng42.barrel
export * from './auth.module';
export * from './auth.service';
// end:ng42.barrel

View File

@@ -1,5 +0,0 @@
/*
* Public API Surface of auth
*/
export * from './lib';

View File

@@ -1,7 +0,0 @@
{
"$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../../dist/core/breadcrumb",
"lib": {
"entryFile": "src/public-api.ts"
}
}

View File

@@ -1 +0,0 @@
describe('Breadcrumb Actions', () => {});

View File

@@ -1,7 +0,0 @@
/*
* Public API Surface of breadcrumb
*/
export * from './lib/breadcrumb.service';
export * from './lib/core-breadcrumb.module';
export * from './lib/defs';

View File

@@ -1,7 +0,0 @@
{
"$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../../dist/core/cache",
"lib": {
"entryFile": "src/public-api.ts"
}
}

View File

@@ -1,4 +0,0 @@
export interface CacheOptions {
ttl?: number;
persist?: boolean;
}

View File

@@ -1,80 +0,0 @@
import { Injectable } from '@angular/core';
import { CacheOptions } from './cache-options';
import { Cached } from './cached';
@Injectable({
providedIn: 'root',
})
export class CacheService {
constructor() {}
set(token: Object, data: any, options?: CacheOptions) {
const persist = options?.persist;
const ttl = options?.ttl;
const cached: Cached = {
data,
};
if (ttl) {
cached.until = Date.now() + ttl;
}
if (persist) {
localStorage.setItem(this.getKey(token), this.serialize(cached));
} else {
sessionStorage.setItem(this.getKey(token), this.serialize(cached));
}
Object.freeze(cached);
return cached;
}
get<T = any>(token: Object, from: 'session' | 'persist' = 'session'): T {
let cached: Cached;
if (from === 'session') {
cached = this.deserialize(sessionStorage.getItem(this.getKey(token)));
} else if (from === 'persist') {
cached = this.deserialize(localStorage.getItem(this.getKey(token)));
}
if (!cached) {
return undefined;
}
if (cached.until < Date.now()) {
this.delete(token, from);
return undefined;
}
return cached.data;
}
delete(token: Object, from: 'session' | 'persist' = 'session') {
if (from === 'session') {
sessionStorage.removeItem(this.getKey(token));
} else if (from === 'persist') {
localStorage.removeItem(this.getKey(token));
}
}
private getKey(token: Object) {
return this.hash(JSON.stringify(token));
}
private hash(data: string): string {
let hash = 0;
for (let i = 0; i < data.length; i++) {
hash = data.charCodeAt(i) + ((hash << 5) - hash);
}
return hash.toString(16);
}
private serialize(data: Cached): string {
return JSON.stringify(data);
}
private deserialize(data: string): Cached {
return JSON.parse(data);
}
}

View File

@@ -1,4 +0,0 @@
export interface Cached {
until?: number;
data?: any;
}

View File

@@ -1,6 +0,0 @@
/*
* Public API Surface of cache
*/
export * from './lib/cache.service';
export * from './lib/cache.module';

View File

@@ -1,7 +0,0 @@
{
"$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../../dist/core/command",
"lib": {
"entryFile": "src/public-api.ts"
}
}

View File

@@ -1,6 +0,0 @@
// start:ng42.barrel
export * from './action-handler.interface';
export * from './command.module';
export * from './command.service';
export * from './tokens';
// end:ng42.barrel

View File

@@ -1,5 +0,0 @@
/*
* Public API Surface of command
*/
export * from './lib';

View File

@@ -1,7 +0,0 @@
{
"$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../../dist/core/config",
"lib": {
"entryFile": "src/public-api.ts"
}
}

View File

@@ -1,36 +0,0 @@
// unit test JsonConfigLoader
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
import { createServiceFactory, SpectatorService } from '@ngneat/spectator';
import { CORE_JSON_CONFIG_LOADER_URL } from '../tokens';
import { JsonConfigLoader } from './json.config-loader';
describe('JsonConfigLoader', () => {
let spectator: SpectatorService<JsonConfigLoader>;
const createService = createServiceFactory({
imports: [HttpClientTestingModule],
service: JsonConfigLoader,
mocks: [],
providers: [{ provide: CORE_JSON_CONFIG_LOADER_URL, useValue: '/assets/config.json' }],
});
let httpTestingController: HttpTestingController;
beforeEach(() => {
spectator = createService();
httpTestingController = spectator.inject(HttpTestingController);
});
it('should create', () => {
expect(spectator.service).toBeTruthy();
});
describe('load', () => {
it('should call the provided url', async () => {
const reqPromise = spectator.service.load();
const req = httpTestingController.expectOne('/assets/config.json');
req.flush({ unit: 'test' });
const result = await reqPromise;
httpTestingController.verify();
expect(result).toEqual({ unit: 'test' });
});
});
});

View File

@@ -1,8 +0,0 @@
// start:ng42.barrel
export * from './config-module-options';
export * from './config.module';
export * from './config';
export * from './tokens';
export * from './config-loaders';
export * from './utils';
// end:ng42.barrel

View File

@@ -1,5 +0,0 @@
/*
* Public API Surface of config
*/
export * from './lib';

View File

@@ -1,7 +0,0 @@
{
"$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../../dist/core/environment",
"lib": {
"entryFile": "src/public-api.ts"
}
}

View File

@@ -1,6 +0,0 @@
/*
* Public API Surface of environment
*/
export * from './lib/environment.service';
export * from './lib/environment.module';

View File

@@ -1,7 +0,0 @@
{
"$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../../dist/core/logger",
"lib": {
"entryFile": "src/public-api.ts"
}
}

View File

@@ -1,8 +0,0 @@
// start:ng42.barrel
export * from './console-log.provider';
export * from './log-level';
export * from './log.provider';
export * from './logger.module';
export * from './logger.service';
export * from './tokens';
// end:ng42.barrel

View File

@@ -1,5 +0,0 @@
/*
* Public API Surface of logger
*/
export * from './lib';

View File

@@ -1,7 +0,0 @@
{
"$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../dist/core",
"lib": {
"entryFile": "src/public-api.ts"
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "core",
"version": "0.0.1",
"peerDependencies": {
"@angular/common": "^15.0.0",
"@angular/core": "^15.0.0"
},
"dependencies": {
"tslib": "^2.3.0"
}
}

View File

@@ -1,7 +0,0 @@
{
"$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../../dist/core/signalr",
"lib": {
"entryFile": "src/public-api.ts"
}
}

View File

@@ -1,6 +0,0 @@
/*
* Public API Surface of signalr
*/
export * from './lib/signalr-hub-options';
export * from './lib/signalr.hub';

View File

@@ -1,22 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { CoreComponent } from './core.component';
describe('CoreComponent', () => {
let component: CoreComponent;
let fixture: ComponentFixture<CoreComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [CoreComponent],
}).compileComponents();
fixture = TestBed.createComponent(CoreComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@@ -1,12 +0,0 @@
import { Component } from '@angular/core';
@Component({
selector: 'lib-core',
template: `
<p>
core works!
</p>
`,
styles: [],
})
export class CoreComponent {}

View File

@@ -1,9 +0,0 @@
import { NgModule } from '@angular/core';
import { CoreComponent } from './core.component';
@NgModule({
declarations: [CoreComponent],
imports: [],
exports: [CoreComponent],
})
export class CoreModule {}

View File

@@ -1,16 +0,0 @@
import { TestBed } from '@angular/core/testing';
import { CoreService } from './core.service';
describe('CoreService', () => {
let service: CoreService;
beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(CoreService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});

View File

@@ -1,8 +0,0 @@
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class CoreService {
constructor() {}
}

View File

@@ -1,7 +0,0 @@
/*
* Public API Surface of core
*/
export * from './lib/core.service';
export * from './lib/core.component';
export * from './lib/core.module';

View File

@@ -1,14 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"outDir": "../../out-tsc/lib",
"declaration": true,
"declarationMap": true,
"inlineSources": true,
"types": []
},
"exclude": [
"**/*.spec.ts"
]
}

View File

@@ -1,10 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "./tsconfig.lib.json",
"compilerOptions": {
"declarationMap": false
},
"angularCompilerOptions": {
"compilationMode": "partial"
}
}

View File

@@ -1,14 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"outDir": "../../out-tsc/spec",
"types": [
"jasmine"
]
},
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}

View File

@@ -1,25 +0,0 @@
# Availability
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.1.2.
## Code scaffolding
Run `ng generate component component-name --project availability` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project availability`.
> Note: Don't forget to add `--project availability` or else it will be added to the default project in your `angular.json` file.
## Build
Run `ng build availability` to build the project. The build artifacts will be stored in the `dist/` directory.
## Publishing
After building your library with `ng build availability`, go to the dist folder `cd dist/availability` and run `npm publish`.
## Running unit tests
Run `ng test availability` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).

View File

@@ -1,7 +0,0 @@
{
"$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../../dist/domain/availability",
"lib": {
"entryFile": "src/public-api.ts"
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "@domain/availability",
"version": "0.0.1",
"peerDependencies": {
"@angular/common": "^10.1.2",
"@angular/core": "^10.1.2"
},
"dependencies": {
"tslib": "^2.0.0"
}
}

View File

@@ -1,16 +0,0 @@
import { TestBed } from '@angular/core/testing';
import { DomainAvailabilityService } from './availability.service';
describe('AvailabilityService', () => {
let service: DomainAvailabilityService;
beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(DomainAvailabilityService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});

View File

@@ -1,625 +0,0 @@
import { Injectable } from '@angular/core';
import { ItemDTO } from '@swagger/cat';
import {
AvailabilityDTO,
BranchDTO,
OLAAvailabilityDTO,
StoreCheckoutBranchService,
StoreCheckoutSupplierService,
SupplierDTO,
} from '@swagger/checkout';
import { combineLatest, Observable, of } from 'rxjs';
import {
AvailabilityRequestDTO,
AvailabilityService,
AvailabilityDTO as SwaggerAvailabilityDTO,
AvailabilityType,
} from '@swagger/availability';
import { AvailabilityDTO as CatAvailabilityDTO } from '@swagger/cat';
import { map, shareReplay, switchMap, withLatestFrom, mergeMap, timeout, first } from 'rxjs/operators';
import { isArray, memorize } from '@utils/common';
import { LogisticianDTO, LogisticianService } from '@swagger/oms';
import { ResponseArgsOfIEnumerableOfStockInfoDTO, StockDTO, StockInfoDTO, StockService } from '@swagger/remi';
import { PriceDTO } from '@swagger/availability';
import { AvailabilityByBranchDTO, ItemData } from './defs';
import { Availability } from './defs/availability';
@Injectable()
export class DomainAvailabilityService {
constructor(
private _availabilityService: AvailabilityService,
private _logisticanService: LogisticianService,
private _stockService: StockService,
private _supplierService: StoreCheckoutSupplierService,
private _branchService: StoreCheckoutBranchService
) {}
@memorize({ ttl: 10000 })
memorizedAvailabilityShippingAvailability(request: Array<AvailabilityRequestDTO>) {
return this._availabilityService.AvailabilityShippingAvailability(request).pipe(shareReplay(1));
}
@memorize()
getSuppliers(): Observable<SupplierDTO[]> {
return this._supplierService.StoreCheckoutSupplierGetSuppliers({}).pipe(
map((response) => response.result),
shareReplay(1)
);
}
@memorize()
getTakeAwaySupplier(): Observable<SupplierDTO> {
return this._supplierService.StoreCheckoutSupplierGetSuppliers({}).pipe(
map(({ result }) => result?.find((supplier) => supplier?.supplierNumber === 'F')),
shareReplay(1)
);
}
@memorize()
getBranches(): Observable<BranchDTO[]> {
return this._branchService.StoreCheckoutBranchGetBranches({}).pipe(
map((response) => response.result),
shareReplay(1)
);
}
@memorize()
getStockByBranch(branchId: number): Observable<StockDTO> {
return this._stockService.StockGetStocksByBranch({ branchId }).pipe(
map((response) => response.result),
map((result) => result?.find((_) => true)),
shareReplay(1)
);
}
@memorize()
getDefaultStock(): Observable<StockDTO> {
return this._stockService.StockCurrentStock().pipe(
map((response) => response.result),
shareReplay(1)
);
}
@memorize()
getDefaultBranch(): Observable<BranchDTO> {
return this._stockService.StockCurrentBranch().pipe(
map((response) => ({
id: response.result.id,
name: response.result.name,
address: response.result.address,
branchType: response.result.branchType,
branchNumber: response.result.branchNumber,
changed: response.result.changed,
created: response.result.created,
isDefault: response.result.isDefault,
isOnline: response.result.isOnline,
key: response.result.key,
label: response.result.label,
pId: response.result.pId,
shortName: response.result.shortName,
status: response.result.status,
version: response.result.version,
})),
shareReplay(1)
);
}
@memorize({})
getLogisticians(): Observable<LogisticianDTO> {
return this._logisticanService.LogisticianGetLogisticians({}).pipe(
map((response) => response.result?.find((l) => l.logisticianNumber === '2470')),
shareReplay(1)
);
}
getTakeAwayAvailabilityByBranches({
branchIds,
itemId,
price,
quantity,
}: {
branchIds: number[];
itemId: number;
price: PriceDTO;
quantity: number;
}): Observable<AvailabilityByBranchDTO[]> {
return this._stockService.StockStockRequest({ stockRequest: { branchIds, itemId } }).pipe(
map((response) => response.result),
withLatestFrom(this.getTakeAwaySupplier()),
map(([result, supplier]) => {
const availabilities: AvailabilityByBranchDTO[] = result.map((stockInfo) => {
return {
availableQuantity: stockInfo.availableQuantity,
availabilityType: quantity <= stockInfo.inStock ? 1024 : 1, // 1024 (=Available)
inStock: stockInfo.inStock,
supplierSSC: quantity <= stockInfo.inStock ? '999' : '',
supplierSSCText: quantity <= stockInfo.inStock ? 'Filialentnahme' : '',
price,
supplier: { id: supplier?.id },
branchId: stockInfo.branchId,
};
});
return availabilities;
}),
shareReplay(1)
);
}
@memorize({ ttl: 10000 })
getTakeAwayAvailability({
item,
quantity,
branch,
}: {
item: ItemData;
quantity: number;
branch?: BranchDTO;
}): Observable<AvailabilityDTO> {
const request = !!branch ? this.getStockByBranch(branch.id) : this.getDefaultStock();
return request.pipe(
switchMap((s) =>
combineLatest([
this._stockService.StockInStock({ articleIds: [item.itemId], stockId: s.id }),
this.getTakeAwaySupplier(),
this.getDefaultBranch(),
])
),
map(([response, supplier, defaultBranch]) => {
const price = item?.price;
return this._mapToTakeAwayAvailability({ response, supplier, branchId: branch?.id ?? defaultBranch?.id, quantity, price });
}),
shareReplay(1)
);
}
@memorize({ ttl: 10000 })
getTakeAwayAvailabilityByBranch({
branch,
itemId,
price,
quantity,
}: {
branch: BranchDTO;
itemId: number;
price: PriceDTO;
quantity: number;
}): Observable<AvailabilityDTO> {
return combineLatest([
this._stockService.StockStockRequest({ stockRequest: { branchIds: [branch.id], itemId } }),
this.getTakeAwaySupplier(),
]).pipe(
map(([response, supplier]) => {
return this._mapToTakeAwayAvailability({ response, supplier, branchId: branch.id, quantity, price });
}),
shareReplay(1)
);
}
getTakeAwayAvailabilityByEan({
eans,
price,
quantity,
branchId,
}: {
eans: string[];
price: PriceDTO;
quantity: number;
branchId?: number;
}): Observable<AvailabilityDTO> {
const request = !!branchId ? this.getStockByBranch(branchId) : this.getDefaultStock();
return request.pipe(
switchMap((s) => this._stockService.StockInStockByEAN({ eans, stockId: s.id })),
withLatestFrom(this.getTakeAwaySupplier(), this.getDefaultBranch()),
map(([response, supplier, defaultBranch]) => {
return this._mapToTakeAwayAvailability({ response, supplier, branchId: branchId ?? defaultBranch.id, quantity, price });
}),
shareReplay(1)
);
}
getTakeAwayAvailabilitiesByEans({ eans }: { eans: string[] }): Observable<StockInfoDTO[]> {
const eansFiltered = Array.from(new Set(eans));
return this.getDefaultStock().pipe(
switchMap((s) => this._stockService.StockInStockByEAN({ eans: eansFiltered, stockId: s.id })),
withLatestFrom(this.getTakeAwaySupplier(), this.getDefaultBranch()),
map((response) => response[0].result),
shareReplay(1)
);
}
@memorize({ ttl: 10000 })
getPickUpAvailability({
item,
branch,
quantity,
}: {
item: ItemData;
quantity: number;
branch: BranchDTO;
}): Observable<Availability<AvailabilityDTO, SwaggerAvailabilityDTO>> {
return this._availabilityService
.AvailabilityStoreAvailability([
{
qty: quantity,
ean: item?.ean,
itemId: item?.itemId ? String(item?.itemId) : null,
shopId: branch?.id,
price: item?.price,
},
])
.pipe(
map((r) => this._mapToPickUpAvailability(r.result)?.find((_) => true)),
shareReplay(1)
);
}
@memorize({ ttl: 10000 })
getDeliveryAvailability({ item, quantity }: { item: ItemData; quantity: number }): Observable<AvailabilityDTO> {
return this.memorizedAvailabilityShippingAvailability([
{
ean: item?.ean,
itemId: item?.itemId ? String(item?.itemId) : null,
price: item?.price,
qty: quantity,
},
]).pipe(
timeout(5000),
map((r) => this._mapToShippingAvailability(r.result)?.find((_) => true)),
shareReplay(1)
);
}
@memorize({ ttl: 10000 })
getDigDeliveryAvailability({ item, quantity }: { item: ItemData; quantity: number }): Observable<AvailabilityDTO> {
return this.memorizedAvailabilityShippingAvailability([
{
qty: quantity,
ean: item?.ean,
itemId: item?.itemId ? String(item?.itemId) : null,
price: item?.price,
},
]).pipe(
timeout(5000),
map((r) => {
const availabilities = r.result;
const preferred = availabilities?.find((f) => f.preferred === 1);
const availability: AvailabilityDTO = {
availabilityType: preferred?.status,
ssc: preferred?.ssc,
sscText: preferred?.sscText,
supplier: { id: preferred?.supplierId },
isPrebooked: preferred?.isPrebooked,
estimatedShippingDate: preferred?.requestStatusCode === '32' ? preferred?.altAt : preferred?.at,
estimatedDelivery: preferred?.estimatedDelivery,
price: preferred?.price,
logistician: { id: preferred?.logisticianId },
supplierProductNumber: preferred?.supplierProductNumber,
supplierInfo: preferred?.requestStatusCode,
lastRequest: preferred?.requested,
};
return availability;
}),
shareReplay(1)
);
}
@memorize({ ttl: 10000 })
getB2bDeliveryAvailability({
item,
quantity,
branch,
}: {
item: ItemData;
quantity: number;
branch?: BranchDTO;
}): Observable<AvailabilityDTO> {
const logistician$ = this.getLogisticians();
const currentBranch$ = this.getDefaultBranch();
return currentBranch$.pipe(
timeout(5000),
mergeMap((defaultBranch) =>
this.getPickUpAvailability({ item, quantity, branch: branch ?? defaultBranch }).pipe(
mergeMap((availability) =>
logistician$.pipe(
map((logistician) => ({ ...(availability?.length > 0 ? availability[0] : []), logistician: { id: logistician.id } }))
)
),
shareReplay(1)
)
)
);
}
@memorize({ ttl: 10000 })
getDownloadAvailability({ item }: { item: ItemData }): Observable<AvailabilityDTO> {
return this.memorizedAvailabilityShippingAvailability([
{
ean: item?.ean,
itemId: item?.itemId ? String(item?.itemId) : null,
price: item?.price,
qty: 1,
},
]).pipe(
map((r) => {
const availabilities = r.result;
const preferred = availabilities?.find((f) => f.preferred === 1);
const availability: AvailabilityDTO = {
availabilityType: preferred?.status,
ssc: preferred?.ssc,
sscText: preferred?.sscText,
supplier: { id: preferred?.supplierId },
isPrebooked: preferred?.isPrebooked,
estimatedShippingDate: preferred?.requestStatusCode === '32' ? preferred?.altAt : preferred?.at,
price: preferred?.price,
supplierProductNumber: preferred?.supplierProductNumber,
logistician: { id: preferred?.logisticianId },
supplierInfo: preferred?.requestStatusCode,
lastRequest: preferred?.requested,
};
return availability;
}),
shareReplay(1)
);
}
@memorize({ ttl: 10000 })
getTakeAwayAvailabilities(items: { id: number; price: PriceDTO }[], branchId: number) {
return this._stockService.StockGetStocksByBranch({ branchId }).pipe(
map((req) => req.result?.find((_) => true)?.id),
switchMap((stockId) =>
stockId
? this._stockService.StockInStock({ articleIds: items.map((i) => i.id), stockId })
: of({ result: [] } as ResponseArgsOfIEnumerableOfStockInfoDTO)
),
timeout(20000),
withLatestFrom(this.getTakeAwaySupplier()),
map(([response, supplier]) => {
return response.result?.map((stockInfo) =>
this._mapToTakeAwayAvailabilities({
stockInfo,
supplier,
quantity: 1,
price: items?.find((i) => i.id === stockInfo.itemId)?.price,
})
);
}),
shareReplay(1)
);
}
@memorize({ ttl: 10000 })
getPickUpAvailabilities(payload: AvailabilityRequestDTO[], preferred?: boolean) {
return this._availabilityService.AvailabilityStoreAvailability(payload).pipe(
timeout(20000),
map((response) => (preferred ? this._mapToPickUpAvailability(response.result) : response.result))
);
}
@memorize({ ttl: 10000 })
getDeliveryAvailabilities(payload: AvailabilityRequestDTO[]) {
return this.memorizedAvailabilityShippingAvailability(payload).pipe(
timeout(20000),
map((response) => this._mapToShippingAvailability(response.result))
);
}
@memorize({ ttl: 10000 })
getDigDeliveryAvailabilities(payload: AvailabilityRequestDTO[]) {
return this.memorizedAvailabilityShippingAvailability(payload).pipe(
timeout(20000),
map((response) => this._mapToShippingAvailability(response.result))
);
}
@memorize({ ttl: 10000 })
getB2bDeliveryAvailabilities(payload: AvailabilityRequestDTO[]) {
const logistician$ = this.getLogisticians();
return this.getPickUpAvailabilities(payload, true).pipe(
timeout(20000),
switchMap((availability) =>
logistician$.pipe(map((logistician) => ({ availability: [...availability], logistician: { id: logistician.id } })))
),
shareReplay(1)
);
}
getPriceForAvailability(
purchasingOption: string,
catalogAvailability: CatAvailabilityDTO | AvailabilityDTO,
availability: AvailabilityDTO
): PriceDTO {
switch (purchasingOption) {
case 'take-away':
return availability?.price || catalogAvailability?.price;
case 'delivery':
case 'dig-delivery':
if (catalogAvailability?.price?.value?.value < availability?.price?.value?.value) {
return catalogAvailability?.price;
}
return availability?.price || catalogAvailability?.price;
}
return availability?.price;
}
isAvailable({ availability }: { availability: AvailabilityDTO }) {
if (availability?.supplier?.id === 16 && availability?.inStock == 0) {
return false;
}
return [2, 32, 256, 1024, 2048, 4096].some((code) => availability?.availabilityType === code);
}
mapToOlaAvailability({
availability,
item,
quantity,
}: {
availability: AvailabilityDTO;
item: ItemDTO;
quantity: number;
}): OLAAvailabilityDTO {
return {
status: availability?.availabilityType,
at: availability?.estimatedShippingDate,
ean: item?.product?.ean,
itemId: item?.id,
format: item?.product?.format,
isPrebooked: availability?.isPrebooked,
logisticianId: availability?.logistician?.id,
price: availability?.price,
qty: quantity,
ssc: availability?.ssc,
sscText: availability?.sscText,
supplierId: availability?.supplier?.id,
supplierProductNumber: availability?.supplierProductNumber,
};
}
private _mapToTakeAwayAvailability({
response,
supplier,
branchId,
quantity,
price,
}: {
response: ResponseArgsOfIEnumerableOfStockInfoDTO;
supplier: SupplierDTO;
branchId: number;
quantity: number;
price: PriceDTO;
}): AvailabilityDTO {
const stockInfo = response.result?.find((si) => si.branchId === branchId);
const inStock = stockInfo?.inStock ?? 0;
const availability: AvailabilityDTO = {
availabilityType: quantity <= inStock ? 1024 : 1, // 1024 (=Available)
inStock: inStock,
supplierSSC: quantity <= inStock ? '999' : '',
supplierSSCText: quantity <= inStock ? 'Filialentnahme' : '',
price: price ?? stockInfo?.retailPrice,
supplier: { id: supplier?.id },
// TODO: Change after API Update
// LH: 2021-03-09 preis Property hat nun ein Fallback auf retailPrice
// retailPrice: (stockInfo as any)?.retailPrice,
};
return availability;
}
private _mapToTakeAwayAvailabilities({
stockInfo,
quantity,
price,
supplier,
}: {
stockInfo: StockInfoDTO;
quantity: number;
price: PriceDTO;
supplier: SupplierDTO;
}) {
const inStock = stockInfo?.inStock ?? 0;
const availability = {
itemId: stockInfo.itemId,
availabilityType: quantity <= inStock ? (1024 as AvailabilityType) : (1 as AvailabilityType), // 1024 (=Available)
inStock: inStock,
supplierSSC: quantity <= inStock ? '999' : '',
supplierSSCText: quantity <= inStock ? 'Filialentnahme' : '',
price,
supplier: { id: supplier?.id },
};
return availability;
}
private _mapToPickUpAvailability(availabilities: SwaggerAvailabilityDTO[]): Availability<AvailabilityDTO, SwaggerAvailabilityDTO>[] {
if (isArray(availabilities)) {
const preferred = availabilities.filter((f) => f.preferred === 1);
const totalAvailable = availabilities.reduce((sum, av) => sum + (av?.qty || 0), 0);
return preferred.map((p) => {
return [
{
orderDeadline: p?.orderDeadline,
availabilityType: p?.status,
ssc: p?.ssc,
sscText: p?.sscText,
supplier: { id: p?.supplierId },
isPrebooked: p?.isPrebooked,
estimatedShippingDate: p?.requestStatusCode === '32' ? p?.altAt : p?.at,
price: p?.price,
inStock: totalAvailable,
supplierProductNumber: p?.supplierProductNumber,
supplierInfo: p?.requestStatusCode,
lastRequest: p?.requested,
itemId: p.itemId,
},
p,
];
});
}
}
private _mapToShippingAvailability(availabilities: SwaggerAvailabilityDTO[]) {
const preferred = availabilities.filter((f) => f.preferred === 1);
return preferred.map((p) => {
return {
availabilityType: p?.status,
ssc: p?.ssc,
sscText: p?.sscText,
isPrebooked: p?.isPrebooked,
estimatedShippingDate: p?.requestStatusCode === '32' ? p?.altAt : p?.at,
estimatedDelivery: p?.estimatedDelivery,
price: p?.price,
supplierProductNumber: p?.supplierProductNumber,
supplierInfo: p?.requestStatusCode,
lastRequest: p?.requested,
itemId: p.itemId,
priceMaintained: p.priceMaintained,
};
});
}
getInStockByEan(params: { eans: string[]; branchId?: number }): Observable<Record<string, StockInfoDTO>> {
let branchId$ = of(params.branchId);
if (!params.branchId) {
branchId$ = this.getDefaultBranch().pipe(
first(),
map((b) => b.id)
);
}
const stock$ = branchId$.pipe(
mergeMap((branchId) => this._stockService.StockGetStocksByBranch({ branchId }).pipe(map((response) => response.result?.[0])))
);
return stock$.pipe(
mergeMap((stock) =>
this._stockService.StockInStockByEAN({ eans: params.eans, stockId: stock.id }).pipe(
map((response) => {
const result = response.result ?? [];
for (const stockInfo of result) {
stockInfo.ean = stockInfo.ean;
}
return result.reduce<Record<string, StockInfoDTO>>((acc, stockInfo) => {
acc[stockInfo.ean] = stockInfo;
return acc;
}, {});
})
)
)
);
}
getInStock({ itemIds, branchId }: { itemIds: number[]; branchId: number }): Observable<StockInfoDTO[]> {
return this.getStockByBranch(branchId).pipe(
mergeMap((stock) =>
this._stockService.StockInStock({ articleIds: itemIds, stockId: stock.id }).pipe(map((response) => response.result))
)
);
}
}

View File

@@ -1,3 +0,0 @@
export * from './availability-by-branch-dto';
export * from './availability';
export * from './item-data';

View File

@@ -1,8 +0,0 @@
/*
* Public API Surface of availability
*/
export * from './lib/availability.service';
export * from './lib/in-stock.service';
export * from './lib/availability.module';
export * from './lib/defs';

View File

@@ -1,24 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/lib",
"declaration": true,
"declarationMap": true,
"inlineSources": true,
"types": [],
"lib": [
"dom",
"es2018"
]
},
"angularCompilerOptions": {
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"enableResourceInlining": true
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
]
}

View File

@@ -1,10 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "./tsconfig.lib.json",
"compilerOptions": {
"declarationMap": false
},
"angularCompilerOptions": {
"compilationMode": "partial"
}
}

View File

@@ -1,14 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/spec",
"types": [
"jasmine"
]
},
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}

View File

@@ -1,17 +0,0 @@
{
"extends": "../../../tslint.json",
"rules": {
"directive-selector": [
true,
"attribute",
"lib",
"camelCase"
],
"component-selector": [
true,
"element",
"lib",
"kebab-case"
]
}
}

View File

@@ -1,25 +0,0 @@
# Cart
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.1.2.
## Code scaffolding
Run `ng generate component component-name --project cart` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project cart`.
> Note: Don't forget to add `--project cart` or else it will be added to the default project in your `angular.json` file.
## Build
Run `ng build cart` to build the project. The build artifacts will be stored in the `dist/` directory.
## Publishing
After building your library with `ng build cart`, go to the dist folder `cd dist/cart` and run `npm publish`.
## Running unit tests
Run `ng test cart` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).

View File

@@ -1,7 +0,0 @@
{
"$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../../dist/domain/cart",
"lib": {
"entryFile": "src/public-api.ts"
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "@domain/cart",
"version": "0.0.1",
"peerDependencies": {
"@angular/common": "^10.1.2",
"@angular/core": "^10.1.2"
},
"dependencies": {
"tslib": "^2.0.0"
}
}

View File

@@ -1,7 +0,0 @@
/*
* Public API Surface of cart
*/
export * from './lib/cart.service';
export * from './lib/cart.module';
export * from './lib/defs/cart-item.model';

View File

@@ -1,24 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/lib",
"declaration": true,
"declarationMap": true,
"inlineSources": true,
"types": [],
"lib": [
"dom",
"es2018"
]
},
"angularCompilerOptions": {
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"enableResourceInlining": true
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
]
}

View File

@@ -1,10 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "./tsconfig.lib.json",
"compilerOptions": {
"declarationMap": false
},
"angularCompilerOptions": {
"compilationMode": "partial"
}
}

View File

@@ -1,14 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/spec",
"types": [
"jasmine"
]
},
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}

View File

@@ -1,17 +0,0 @@
{
"extends": "../../../tslint.json",
"rules": {
"directive-selector": [
true,
"attribute",
"lib",
"camelCase"
],
"component-selector": [
true,
"element",
"lib",
"kebab-case"
]
}
}

View File

@@ -1,25 +0,0 @@
# Catalog
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.1.2.
## Code scaffolding
Run `ng generate component component-name --project catalog` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project catalog`.
> Note: Don't forget to add `--project catalog` or else it will be added to the default project in your `angular.json` file.
## Build
Run `ng build catalog` to build the project. The build artifacts will be stored in the `dist/` directory.
## Publishing
After building your library with `ng build catalog`, go to the dist folder `cd dist/catalog` and run `npm publish`.
## Running unit tests
Run `ng test catalog` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).

View File

@@ -1,7 +0,0 @@
{
"$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../../dist/domain/catalog",
"lib": {
"entryFile": "src/public-api.ts"
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "@domain/catalog",
"version": "0.0.1",
"peerDependencies": {
"@angular/common": "^10.1.2",
"@angular/core": "^10.1.2"
},
"dependencies": {
"tslib": "^2.0.0"
}
}

View File

@@ -1,16 +0,0 @@
import { TestBed } from '@angular/core/testing';
import { CatalogService } from './catalog.service';
describe('CatalogService', () => {
let service: CatalogService;
beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(CatalogService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});

View File

@@ -1,122 +0,0 @@
import { Injectable } from '@angular/core';
import { ApplicationService } from '@core/application';
import { AutocompleteTokenDTO, PromotionService, QueryTokenDTO, SearchService } from '@swagger/cat';
import { memorize } from '@utils/common';
import { map, shareReplay } from 'rxjs/operators';
@Injectable()
export class DomainCatalogService {
constructor(
private searchService: SearchService,
private promotionService: PromotionService,
private applicationService: ApplicationService
) {}
@memorize()
getFilters() {
return this.searchService.SearchSearchFilter().pipe(
map((res) => res.result),
shareReplay()
);
}
@memorize()
getOrderBy() {
return this.searchService.SearchSearchSort().pipe(
map((res) => res.result),
shareReplay()
);
}
getSearchHistory({ take }: { take: number }) {
return this.searchService.SearchHistory(take ?? 5).pipe(map((res) => res.result));
}
@memorize({ ttl: 120000 })
search({ queryToken }: { queryToken: QueryTokenDTO }) {
return this.searchService
.SearchSearch({
queryToken,
stockId: null,
})
.pipe(shareReplay());
}
@memorize({ ttl: 120000 })
searchWithStockId({ queryToken }: { queryToken: QueryTokenDTO }) {
return this.searchService
.SearchSearch2({
queryToken,
stockId: queryToken?.stockId ?? null,
})
.pipe(shareReplay());
}
getDetailsById({ id }: { id: number }) {
return this.searchService.SearchDetail({
id,
stockId: null,
});
}
getDetailsByEan({ ean }: { ean: string }) {
return this.searchService.SearchDetailByEAN({
ean,
stockId: null,
});
}
searchByIds({ ids }: { ids: number[] }) {
return this.searchService.SearchById({
ids,
stockId: null,
});
}
searchByEans({ eans }: { eans: string[] }) {
return this.searchService.SearchByEAN({
stockId: null,
branchNumber: null,
eans,
});
}
searchTop({ queryToken }: { queryToken: QueryTokenDTO }) {
return this.searchService.SearchTop({
stockId: null,
queryToken,
});
}
searchComplete({ queryToken }: { queryToken: AutocompleteTokenDTO }) {
return this.searchService.SearchAutocomplete({
stockId: null,
queryToken,
});
}
@memorize()
getPromotionPoints({ items }: { items: { id: number; quantity: number; price?: number }[] }) {
return this.promotionService
.PromotionLesepunkte({
items,
stockId: null,
})
.pipe(shareReplay());
}
@memorize()
getSettings() {
return this.searchService.SearchSettings().pipe(
map((res) => res.result),
shareReplay()
);
}
getRecommendations({ digId }: { digId: number }) {
return this.searchService.SearchGetRecommendations({
digId: digId + '',
sessionId: this.applicationService.activatedProcessId + '',
});
}
}

View File

@@ -1,8 +0,0 @@
/*
* Public API Surface of catalog
*/
export * from './lib/catalog.service';
export * from './lib/thumbnail.service';
export * from './lib/thumbnail-url.pipe';
export * from './lib/catalog.module';

View File

@@ -1,24 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/lib",
"declaration": true,
"declarationMap": true,
"inlineSources": true,
"types": [],
"lib": [
"dom",
"es2018"
]
},
"angularCompilerOptions": {
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"enableResourceInlining": true
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
]
}

View File

@@ -1,10 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "./tsconfig.lib.json",
"compilerOptions": {
"declarationMap": false
},
"angularCompilerOptions": {
"compilationMode": "partial"
}
}

View File

@@ -1,14 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/spec",
"types": [
"jasmine"
]
},
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}

View File

@@ -1,17 +0,0 @@
{
"extends": "../../../tslint.json",
"rules": {
"directive-selector": [
true,
"attribute",
"lib",
"camelCase"
],
"component-selector": [
true,
"element",
"lib",
"kebab-case"
]
}
}

View File

@@ -1,25 +0,0 @@
# Checkout
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.2.14.
## Code scaffolding
Run `ng generate component component-name --project checkout` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project checkout`.
> Note: Don't forget to add `--project checkout` or else it will be added to the default project in your `angular.json` file.
## Build
Run `ng build checkout` to build the project. The build artifacts will be stored in the `dist/` directory.
## Publishing
After building your library with `ng build checkout`, go to the dist folder `cd dist/checkout` and run `npm publish`.
## Running unit tests
Run `ng test checkout` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).

View File

@@ -1,7 +0,0 @@
{
"$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../../dist/domain/checkout",
"lib": {
"entryFile": "src/public-api.ts"
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "@domain/checkout",
"version": "0.0.1",
"dependencies": {
"tslib": "^2.0.0"
},
"peerDependencies": {
"@angular/common": "^8.2.14",
"@angular/core": "^8.2.14"
}
}

View File

@@ -1,24 +0,0 @@
import { ModuleWithProviders, NgModule } from '@angular/core';
import { StoreModule } from '@ngrx/store';
import { DomainCheckoutService } from './checkout.service';
import { domainCheckoutReducer } from './store/domain-checkout.reducer';
import { storeFeatureName } from './store/domain-checkout.state';
@NgModule({
declarations: [],
imports: [StoreModule.forFeature(storeFeatureName, domainCheckoutReducer)],
providers: [DomainCheckoutService],
})
export class DomainCheckoutModule {
static forRoot(): ModuleWithProviders<DomainCheckoutModule> {
return {
ngModule: RootDomainCheckoutModule,
providers: [DomainCheckoutService],
};
}
}
@NgModule({
imports: [StoreModule.forFeature(storeFeatureName, domainCheckoutReducer)],
})
export class RootDomainCheckoutModule {}

View File

@@ -1,982 +0,0 @@
import { Injectable } from '@angular/core';
import { Store } from '@ngrx/store';
import {
AddToShoppingCartDTO,
AvailabilityDTO,
BranchDTO,
BuyerDTO,
BuyerResult,
CheckoutDTO,
CommunicationDetailsDTO,
DestinationDTO,
NotificationChannel,
OLAAvailabilityDTO,
PayerDTO,
PaymentDTO,
PaymentType,
ResponseArgsOfDestinationDTO,
ShippingAddressDTO,
ShoppingCartDTO,
StoreCheckoutService,
UpdateShoppingCartItemDTO,
InputDTO,
ItemPayload,
StoreCheckoutShoppingCartService,
StoreCheckoutPaymentService,
StoreCheckoutBuyerService,
StoreCheckoutPayerService,
StoreCheckoutBranchService,
ItemsResult,
} from '@swagger/checkout';
import {
DisplayOrderDTO,
DisplayOrderItemDTO,
OrderCheckoutService,
ReorderValues,
ResponseArgsOfValueTupleOfIEnumerableOfDisplayOrderDTOAndIEnumerableOfKeyValueDTOOfStringAndString,
} from '@swagger/oms';
import { isNullOrUndefined, memorize } from '@utils/common';
import { combineLatest, Observable, of, concat, isObservable, throwError } from 'rxjs';
import { bufferCount, catchError, filter, first, map, mergeMap, shareReplay, switchMap, tap, withLatestFrom } from 'rxjs/operators';
import * as DomainCheckoutSelectors from './store/domain-checkout.selectors';
import * as DomainCheckoutActions from './store/domain-checkout.actions';
import { DomainAvailabilityService } from '@domain/availability';
import { HttpErrorResponse } from '@angular/common/http';
import { ApplicationService } from '@core/application';
import { CustomerDTO, EntityDTOContainerOfAttributeDTO } from '@swagger/crm';
@Injectable()
export class DomainCheckoutService {
constructor(
private store: Store<any>,
private applicationService: ApplicationService,
private storeCheckoutService: StoreCheckoutService,
private orderCheckoutService: OrderCheckoutService,
private availabilityService: DomainAvailabilityService,
private _shoppingCartService: StoreCheckoutShoppingCartService,
private _paymentService: StoreCheckoutPaymentService,
private _buyerService: StoreCheckoutBuyerService,
private _payerService: StoreCheckoutPayerService,
private _branchService: StoreCheckoutBranchService
) {}
//#region shoppingcart
getShoppingCart({ processId, latest }: { processId: number; latest?: boolean }): Observable<ShoppingCartDTO> {
let _latest = latest;
return this.store.select(DomainCheckoutSelectors.selectShoppingCartByProcessId, { processId }).pipe(
filter((cart) => {
if (isNullOrUndefined(cart)) {
this.createShoppingCart({ processId }).subscribe();
return false;
} else if (cart && _latest) {
_latest = false;
this._shoppingCartService
.StoreCheckoutShoppingCartGetShoppingCart({
shoppingCartId: cart.id,
})
.pipe(
map((response) => response.result),
tap((shoppingCart) =>
this.store.dispatch(
DomainCheckoutActions.setShoppingCart({
processId,
shoppingCart,
})
)
)
)
.subscribe();
return false;
}
return true;
})
);
}
createShoppingCart({ processId }: { processId: number }): Observable<ShoppingCartDTO> {
return this._shoppingCartService.StoreCheckoutShoppingCartCreateShoppingCart().pipe(
map((response) => response.result),
tap((shoppingCart) =>
this.store.dispatch(
DomainCheckoutActions.setShoppingCart({
processId,
shoppingCart,
})
)
)
);
}
addItemToShoppingCart({ processId, items }: { processId: number; items: AddToShoppingCartDTO[] }): Observable<ShoppingCartDTO> {
return this.getShoppingCart({ processId }).pipe(
first(),
mergeMap((cart) =>
this._shoppingCartService
.StoreCheckoutShoppingCartAddItemToShoppingCart({
items,
shoppingCartId: cart.id,
})
.pipe(
map((response) => response.result),
tap((shoppingCart) =>
this.store.dispatch(
DomainCheckoutActions.setShoppingCart({
processId,
shoppingCart,
})
)
),
tap((shoppingCart) => this.updateProcessCount(processId, shoppingCart?.items?.length))
)
)
);
}
setDestinationForCustomer({
processId,
customerFeatures,
}: {
processId: number;
customerFeatures: { [key: string]: string };
}): Observable<BuyerResult> {
return this.getShoppingCart({ processId }).pipe(
first(),
mergeMap((shoppingCart) =>
this._shoppingCartService
.StoreCheckoutShoppingCartSetLogisticianOnDestinationsByBuyer({
shoppingCartId: shoppingCart?.id,
payload: { customerFeatures },
})
.pipe(map((response) => response.result))
)
);
}
canAddDestination({ processId, destinationDTO }: { processId: number; destinationDTO: DestinationDTO }) {
return this.getShoppingCart({ processId }).pipe(
first(),
mergeMap((cart) =>
this._shoppingCartService.StoreCheckoutShoppingCartCanAddDestination({
shoppingCartId: cart.id,
payload: destinationDTO,
})
),
map((response) => {
if (response.result?.ok) {
return true;
}
return Object.values(response.invalidProperties).join('; ') || response.message;
})
);
}
canAddItem({
processId,
availability,
orderType,
}: {
processId: number;
availability: OLAAvailabilityDTO;
orderType: string;
}): Observable<true | string> {
return this.getShoppingCart({ processId }).pipe(
first(),
withLatestFrom(this.store.select(DomainCheckoutSelectors.selectCustomerFeaturesByProcessId, { processId })),
mergeMap(([shoppingCart, customerFeatures]) =>
this._shoppingCartService
.StoreCheckoutShoppingCartCanAddItem({
shoppingCartId: shoppingCart?.id,
payload: {
customerFeatures,
availabilities: [availability],
orderType,
},
})
.pipe(
map((response) => {
if (response.result.ok) {
return true;
}
return response.message;
})
)
)
);
}
canAddItems({
processId,
payload,
orderType,
}: {
processId: number;
payload: ItemPayload[];
orderType: string;
}): Observable<ItemsResult[]> {
return this.getShoppingCart({ processId }).pipe(
first(),
withLatestFrom(this.store.select(DomainCheckoutSelectors.selectCustomerFeaturesByProcessId, { processId })),
mergeMap(([shoppingCart, customerFeatures]) => {
payload = payload?.map((p) => {
return {
...p,
customerFeatures,
orderType,
};
});
return this._shoppingCartService
.StoreCheckoutShoppingCartCanAddItems({
shoppingCartId: shoppingCart.id,
payload,
})
.pipe(
map((response) => {
// TODO: remove this when the API is fixed
return (response.result as unknown) as ItemsResult[];
})
);
})
);
}
updateShoppingCartItemAvailability({
shoppingCartId,
shoppingCartItemId,
availability,
}: {
shoppingCartId: number;
shoppingCartItemId: number;
availability: AvailabilityDTO;
}) {
return this._shoppingCartService.StoreCheckoutShoppingCartUpdateShoppingCartItemAvailability({
shoppingCartId,
shoppingCartItemId,
availability,
});
}
updateItemInShoppingCart({
processId,
shoppingCartItemId,
update,
}: {
processId: number;
shoppingCartItemId: number;
update: UpdateShoppingCartItemDTO;
}): Observable<ShoppingCartDTO> {
return this.getShoppingCart({ processId }).pipe(
first(),
mergeMap((shoppingCart) =>
this._shoppingCartService
.StoreCheckoutShoppingCartUpdateShoppingCartItem({
shoppingCartId: shoppingCart.id,
shoppingCartItemId,
values: update,
})
.pipe(
map((response) => response.result),
tap((shoppingCart) => this.store.dispatch(DomainCheckoutActions.setShoppingCart({ processId, shoppingCart }))),
tap((shoppingCart) => this.updateProcessCount(processId, shoppingCart?.items?.length))
)
)
);
}
//#endregion
//#region Checkout
getCheckout({ processId, refresh }: { processId: number; refresh?: boolean }): Observable<CheckoutDTO> {
let _refresh = refresh;
return this.store.select(DomainCheckoutSelectors.selectCheckoutByProcessId, { processId }).pipe(
filter((checkout) => {
if (isNullOrUndefined(checkout) || _refresh) {
_refresh = false;
this.createCheckout({ processId }).subscribe();
return false;
}
return true;
})
);
}
createCheckout({ processId }: { processId: number }) {
return this.getShoppingCart({ processId }).pipe(
first(),
mergeMap((shoppingCart) =>
this.storeCheckoutService
.StoreCheckoutCreateOrRefreshCheckout({
shoppingCartId: shoppingCart?.id,
})
.pipe(
map((response) => response.result),
tap((checkout) => this.store.dispatch(DomainCheckoutActions.setCheckout({ processId, checkout })))
)
)
);
}
/* @internal */
_setNotificationChannels({
processId,
notificationChannels,
}: {
processId: number;
notificationChannels: NotificationChannel;
}): Observable<CheckoutDTO> {
return this.getCheckout({ processId }).pipe(
first(),
mergeMap((checkout) =>
this.storeCheckoutService
.StoreCheckoutSetNotificationChannels({
checkoutId: checkout.id,
notificationChannel: notificationChannels,
})
.pipe(
map((response) => response.result),
tap((checkout) => this.store.dispatch(DomainCheckoutActions.setCheckout({ processId, checkout })))
)
)
);
}
getPayment({ processId }: { processId: number }): Observable<PaymentDTO> {
return this.getCheckout({ processId }).pipe(
first(),
mergeMap((checkout) =>
this._paymentService
.StoreCheckoutPaymentGetCheckoutPayment({
checkoutId: checkout.id,
})
.pipe(map((response) => response.result))
)
);
}
getOlaErrors({ processId }: { processId: number }): Observable<number[]> {
return this.store.select(DomainCheckoutSelectors.selectOlaErrorsByProcessId, { processId });
}
setPayment({ processId, paymentType }: { processId: number; paymentType: PaymentType }): Observable<CheckoutDTO> {
return this.getCheckout({ processId }).pipe(
first(),
mergeMap((checkout) =>
this._paymentService
.StoreCheckoutPaymentSetPaymentType({
checkoutId: checkout?.id,
paymentType,
})
.pipe(
map((response) => response.result),
tap((checkout) => this.store.dispatch(DomainCheckoutActions.setCheckout({ processId, checkout })))
)
)
);
}
_setBuyer({ processId, buyer }: { processId: number; buyer: BuyerDTO }): Observable<CheckoutDTO> {
return this.getCheckout({ processId }).pipe(
first(),
mergeMap((checkout) => {
console.log('checkout', checkout, processId);
return this._buyerService
.StoreCheckoutBuyerSetBuyerPOST({
checkoutId: checkout?.id,
buyerDTO: buyer,
})
.pipe(
map((response) => response.result),
tap((checkout) => this.store.dispatch(DomainCheckoutActions.setCheckout({ processId, checkout })))
);
})
);
}
_setPayer({ processId, payer }: { processId: number; payer: PayerDTO }): Observable<CheckoutDTO> {
return this.getCheckout({ processId }).pipe(
first(),
mergeMap((checkout) =>
this._payerService
.StoreCheckoutPayerSetPayerPOST({
checkoutId: checkout?.id,
payerDTO: payer,
})
.pipe(
map((response) => response.result),
tap((checkout) => this.store.dispatch(DomainCheckoutActions.setCheckout({ processId, checkout })))
)
)
);
}
setSpecialCommentOnItem({ processId, specialComment }: { processId: number; specialComment: string }) {
const shoppingCart$ = this.getShoppingCart({ processId }).pipe(first());
return shoppingCart$.pipe(
mergeMap((cart) =>
concat(
...cart.items.map((item) =>
this._shoppingCartService.StoreCheckoutShoppingCartUpdateShoppingCartItem({
shoppingCartId: cart.id,
shoppingCartItemId: item.id,
values: { specialComment },
})
)
).pipe(bufferCount(cart.items?.length))
)
);
}
checkAvailabilities({ processId }: { processId: number }): Observable<any> {
const shoppingCart$ = this.getShoppingCart({ processId }).pipe(first());
const itemsToCheck$ = shoppingCart$.pipe(
map((cart) => cart?.items?.filter((item) => item?.data?.features?.orderType === 'Download' && !item.data.availability.lastRequest))
);
return itemsToCheck$.pipe(
withLatestFrom(shoppingCart$),
switchMap(async ([items, cart]) => {
const errorIds = [];
for (const item of items) {
const availability = await this.availabilityService
.getDownloadAvailability({
item: {
ean: item.data.product.ean,
itemId: Number(item.data.product.catalogProductNumber),
price: item.data.availability.price,
},
})
.toPromise();
if (!availability || !this.availabilityService.isAvailable({ availability })) {
errorIds.push(item.id);
} else {
await this.updateShoppingCartItemAvailability({
shoppingCartId: cart.id,
shoppingCartItemId: item.id,
availability: {
...availability,
lastRequest: new Date().toISOString(),
},
}).toPromise();
}
}
this.setOlaErrors({ processId, errorIds });
if (errorIds.length > 0) {
throw throwError(new Error(`Artikel nicht verfügbar`));
} else {
return of(undefined);
}
})
);
}
updateAvailabilities({ processId }: { processId: number }): Observable<any> {
const shoppingCart$ = this.getShoppingCart({ processId }).pipe(first());
const itemsToUpdate$ = shoppingCart$.pipe(
map((cart) =>
cart?.items?.filter(
(item) => item?.data?.features?.orderType === 'DIG-Versand' || item?.data?.features?.orderType === 'B2B-Versand'
)
)
);
return itemsToUpdate$.pipe(
mergeMap((itemsToUpdate) => {
if (!(itemsToUpdate?.length > 0)) {
return of(undefined);
}
return concat(
...itemsToUpdate.map(async (itemToUpdate) => {
const orderType = itemToUpdate?.data?.features?.orderType;
let availability$: Observable<AvailabilityDTO>;
if (orderType === 'DIG-Versand') {
availability$ = this.availabilityService.getDigDeliveryAvailability({
item: {
ean: itemToUpdate.data.product.ean,
itemId: Number(itemToUpdate.data.product.catalogProductNumber),
price: itemToUpdate.data.availability.price,
},
quantity: itemToUpdate.data.quantity,
});
} else if (orderType === 'B2B-Versand') {
const branch = await this.applicationService.getSelectedBranch$(processId).pipe(first()).toPromise();
availability$ = this.availabilityService.getB2bDeliveryAvailability({
item: {
ean: itemToUpdate.data.product.ean,
itemId: Number(itemToUpdate.data.product.catalogProductNumber),
price: itemToUpdate.data.availability.price,
},
quantity: itemToUpdate.data.quantity,
branch,
});
}
if (!isObservable(availability$)) {
return of(undefined);
}
return availability$.pipe(
mergeMap((availability) => {
let updatedAvailability = availability;
// Bei Preisupdate der Versandoptionen soll immer der Preis genommen werden, der im Warenkorb steht
if (orderType === 'DIG-Versand' || orderType === 'B2B-Versand') {
const itemPrice = itemToUpdate.data.availability.price;
updatedAvailability = {
...availability,
price: itemPrice,
};
}
return this.updateItemInShoppingCart({
processId,
shoppingCartItemId: itemToUpdate.id,
update: {
availability: updatedAvailability,
},
});
})
);
})
).pipe(bufferCount(itemsToUpdate.length));
})
);
}
completeCheckout({ processId }: { processId: number }): Observable<DisplayOrderDTO[]> {
const refreshShoppingCart$ = this.getShoppingCart({ processId, latest: true }).pipe(first());
const refreshCheckout$ = this.getCheckout({ processId, refresh: true }).pipe(first());
const itemOrderOptions$ = this.getShoppingCart({ processId }).pipe(
first(),
map((shoppingCart) => {
const shoppingCartItems = shoppingCart?.items?.map((item) => item.data) || [];
const hasTakeAway = shoppingCartItems.some((item) => item.features.orderType === 'Rücklage');
const hasPickUp = shoppingCartItems.some((item) => item.features.orderType === 'Abholung');
const hasDownload = shoppingCartItems.some((item) => item.features.orderType === 'Download');
const hasDelivery = shoppingCartItems.some((item) => item.features.orderType === 'Versand');
const hasDigDelivery = shoppingCartItems.some((item) => item.features.orderType === 'DIG-Versand');
const hasB2BDelivery = shoppingCartItems.some((item) => item.features.orderType === 'B2B-Versand');
return {
hasTakeAway,
hasPickUp,
hasDownload,
hasDelivery,
hasDigDelivery,
hasB2BDelivery,
};
}),
shareReplay()
);
const customerTypes$ = this.getCustomerFeatures({ processId }).pipe(
first(),
map((features) => {
const isOnline = !!features?.webshop;
const isGuest = !!features?.guest;
const isB2B = !!features?.b2b;
const hasCustomerCard = !!features?.p4mUser;
const isStaff = !!features?.staff;
return { isOnline: isOnline, isGuest, isB2B, hasCustomerCard, isStaff };
})
);
const setSpecialComment$ = this.getSpecialComment({ processId }).pipe(
first(),
mergeMap((specialComment) => {
if (!!specialComment) {
return this.setSpecialCommentOnItem({ processId, specialComment });
}
return of(specialComment);
})
);
const shippingAddressDestination$ = this.getCheckout({ processId }).pipe(
first(),
map((checkout) => checkout?.destinations?.filter((dest) => dest.data.target === 2 || dest.data.target === 16)),
shareReplay()
);
const setBuyer$ = this.getBuyer({ processId }).pipe(
first(),
mergeMap((buyer) => this._setBuyer({ processId, buyer }))
);
const setNotificationChannels$ = this.getNotificationChannels({ processId }).pipe(
first(),
mergeMap((notificationChannels) => this._setNotificationChannels({ processId, notificationChannels }))
);
const setPayer$ = combineLatest([itemOrderOptions$, customerTypes$]).pipe(
first(),
mergeMap(([itemOrderOptions, customerTypes]) => {
if (
customerTypes.isB2B ||
itemOrderOptions.hasB2BDelivery ||
itemOrderOptions.hasDelivery ||
itemOrderOptions.hasDigDelivery ||
itemOrderOptions.hasDownload
) {
return this.getPayer({ processId }).pipe(first());
}
return of(undefined);
}),
mergeMap((payer) => (payer ? this._setPayer({ processId, payer }) : of(undefined)))
);
const updateDestination$ = itemOrderOptions$.pipe(
withLatestFrom(this.getCustomerFeatures({ processId })),
mergeMap(([{ hasDownload, hasDelivery, hasDigDelivery, hasB2BDelivery }, customerFeatures]) => {
const needsUpdate = hasDownload || hasDelivery || hasDigDelivery || hasB2BDelivery;
return needsUpdate ? this.setDestinationForCustomer({ processId, customerFeatures }) : of(undefined);
})
);
const checkAvailabilities$ = this.checkAvailabilities({ processId });
const updateAvailabilities$ = this.updateAvailabilities({ processId });
const setPaymentType$ = itemOrderOptions$.pipe(
mergeMap(({ hasDownload, hasDelivery, hasDigDelivery, hasB2BDelivery }) => {
const paymentType = hasDownload || hasDelivery || hasDigDelivery || hasB2BDelivery ? 128 /* Rechnung */ : 4; /* Bar */
return this.setPayment({ processId, paymentType });
}),
shareReplay()
);
const setDestination$ = combineLatest([
this.getCheckout({ processId }).pipe(first()),
shippingAddressDestination$,
this.getShippingAddress({ processId }).pipe(first()),
]).pipe(
mergeMap(([checkout, destinations, shippingAddress]) => {
const obs: Observable<ResponseArgsOfDestinationDTO>[] = [];
if (destinations?.length > 0) {
destinations.forEach((destination) => {
const updatedDestination: DestinationDTO = { ...destination.data, shippingAddress: { ...shippingAddress } };
obs.push(
this.storeCheckoutService.StoreCheckoutUpdateDestination({
checkoutId: checkout.id,
destinationId: destination.id,
destinationDTO: updatedDestination,
})
);
});
return concat(...obs).pipe(bufferCount(destinations?.length));
}
return of(destinations);
}),
shareReplay()
);
const completeOrder$ = this.getCheckout({ processId }).pipe(
first(),
mergeMap((checkout) =>
this.orderCheckoutService
.OrderCheckoutCreateOrderPOST({
checkoutId: checkout.id,
})
.pipe(
catchError((error) => {
if (error instanceof HttpErrorResponse) {
if (error.status === 409) {
this.store.dispatch(DomainCheckoutActions.setOrders({ orders: error.error.result }));
}
return throwError(error);
}
}),
map((response) => {
this.store.dispatch(DomainCheckoutActions.setOrders({ orders: response.result }));
return response.result;
})
)
)
);
return updateDestination$
.pipe(tap(console.log.bind(window, 'updateDestination$')))
.pipe(
mergeMap((_) => refreshShoppingCart$.pipe(tap(console.log.bind(window, 'refreshShoppingCart$')))),
mergeMap((_) => setSpecialComment$.pipe(tap(console.log.bind(window, 'setSpecialComment$')))),
mergeMap((_) => refreshCheckout$.pipe(tap(console.log.bind(window, 'refreshCheckout$')))),
mergeMap((_) => checkAvailabilities$.pipe(tap(console.log.bind(window, 'checkAvailabilities$')))),
mergeMap((_) => updateAvailabilities$.pipe(tap(console.log.bind(window, 'updateAvailabilities$')))),
mergeMap((_) => setBuyer$.pipe(tap(console.log.bind(window, 'setBuyer$')))),
mergeMap((_) => setNotificationChannels$.pipe(tap(console.log.bind(window, 'setNotificationChannels$')))),
mergeMap((_) => setPayer$.pipe(tap(console.log.bind(window, 'setPayer$')))),
mergeMap((_) => setPaymentType$.pipe(tap(console.log.bind(window, 'setPaymentType$')))),
mergeMap((_) => setDestination$.pipe(tap(console.log.bind(window, 'setDestination$'))))
)
.pipe(mergeMap((_) => completeOrder$.pipe(tap(console.log.bind(window, 'completeOrder$')))));
}
completeKulturpassOrder({
processId,
orderItemSubsetId,
}: {
processId: number;
orderItemSubsetId: number;
}): Observable<ResponseArgsOfValueTupleOfIEnumerableOfDisplayOrderDTOAndIEnumerableOfKeyValueDTOOfStringAndString> {
const refreshShoppingCart$ = this.getShoppingCart({ processId, latest: true }).pipe(first());
const refreshCheckout$ = this.getCheckout({ processId, refresh: true }).pipe(first());
const setBuyer$ = this.getBuyer({ processId }).pipe(
first(),
mergeMap((buyer) => this._setBuyer({ processId, buyer }))
);
const setPayer$ = this.getPayer({ processId }).pipe(
first(),
mergeMap((payer) => this._setPayer({ processId, payer }))
);
const checkAvailabilities$ = this.checkAvailabilities({ processId });
const updateAvailabilities$ = this.updateAvailabilities({ processId });
return refreshShoppingCart$.pipe(
mergeMap((_) => refreshCheckout$),
mergeMap((_) => checkAvailabilities$),
mergeMap((_) => updateAvailabilities$),
mergeMap((_) => setBuyer$),
mergeMap((_) => setPayer$),
mergeMap((checkout) =>
this.orderCheckoutService.OrderCheckoutCreateKulturPassOrder({
payload: {
checkoutId: checkout.id,
orderItemSubsetId: String(orderItemSubsetId),
},
})
)
);
}
updateDestination({
processId,
destinationId,
destination,
}: {
processId: number;
destinationId: number;
destination: DestinationDTO;
}): Observable<DestinationDTO> {
return this.getCheckout({ processId }).pipe(
first(),
mergeMap((checkout) =>
this.storeCheckoutService
.StoreCheckoutUpdateDestination({
destinationId,
checkoutId: checkout.id,
destinationDTO: destination,
})
.pipe(
map((response) => response.result),
tap((destination) =>
this.store.dispatch(
DomainCheckoutActions.setCheckoutDestination({
processId,
destination,
})
)
)
)
)
);
}
//#endregion
//#region Common
canSetCustomer({
processId,
customerFeatures,
}: {
processId: number;
customerFeatures?: { [key: string]: string };
}): Observable<{ ok?: boolean; filter?: { [key: string]: string }; message?: string; create?: InputDTO }> {
return this.getShoppingCart({ processId }).pipe(
first(),
mergeMap((shoppingCart) =>
this._shoppingCartService
.StoreCheckoutShoppingCartCanAddBuyer({
shoppingCartId: shoppingCart.id,
payload: { customerFeatures },
})
.pipe(
map((response) => ({
ok: response.result.ok,
filter: response.result.queryToken?.filter || {},
message: response.message,
create: response.result.create,
}))
)
)
);
}
setNotificationChannels({ processId, notificationChannels }: { processId: number; notificationChannels: NotificationChannel }): void {
this.store.dispatch(DomainCheckoutActions.setNotificationChannels({ processId, notificationChannels }));
}
getNotificationChannels({ processId }: { processId: number }): Observable<NotificationChannel> {
return this.store.select(DomainCheckoutSelectors.selectNotificationChannels, { processId });
}
setBuyerCommunicationDetails({ processId, mobile, email }: { processId: number; mobile?: string; email?: string }): void {
this.store.dispatch(DomainCheckoutActions.setBuyerCommunicationDetails({ processId, mobile, email }));
}
getBuyerCommunicationDetails({ processId }: { processId: number }): Observable<CommunicationDetailsDTO> {
return this.store.select(DomainCheckoutSelectors.selectBuyerCommunicationDetails, { processId });
}
getSetableCustomerTypes(processId: number): Observable<{ [key: string]: boolean }> {
return this.canSetCustomer({ processId, customerFeatures: undefined }).pipe(
map((res) => {
let setableTypes: { [key: string]: boolean } = {
store: false,
guest: false,
webshop: false,
b2b: false,
};
res.create?.options?.values?.forEach((option) => {
setableTypes[option.value] = option.enabled !== false;
});
// if (Object.keys(res.filter).length === 0) {
// return setableTypes;
// }
// const customerTypes = res.filter?.customertype?.split(';') || [];
// const customerAttributes = res.filter?.customerattributes?.split(';') || [];
// const typesAndAttributes = [...customerTypes, ...customerAttributes];
// if (typesAndAttributes.includes('webshop') && !typesAndAttributes.includes('!guest')) {
// typesAndAttributes.push('guest');
// }
// for (const key in setableTypes) {
// if (Object.prototype.hasOwnProperty.call(setableTypes, key)) {
// if (typesAndAttributes.includes(key)) {
// setableTypes[key] = true;
// } else if (typesAndAttributes.includes(`!${key}`)) {
// setableTypes[key] = false;
// } else {
// setableTypes[key] = false;
// }
// }
// }
return setableTypes;
})
);
}
@memorize()
getBranches(): Observable<BranchDTO[]> {
return this._branchService
.StoreCheckoutBranchGetBranches({
take: 999,
})
.pipe(
map((r) => {
return r.result.filter(
(branch) => branch.status === 1 && branch.branchType === 1 && branch.isOnline === true && branch.isShippingEnabled === true
);
}),
shareReplay()
);
}
reorder(orderId: number, orderItemId: number, orderItemSubsetId: number, data: ReorderValues) {
return this.orderCheckoutService
.OrderCheckoutReorder({ orderId, orderItemId, orderItemSubsetId, data })
.pipe(map((response) => response.result));
}
setOlaErrors({ processId, errorIds }: { processId: number; errorIds: number[] }) {
this.store.dispatch(
DomainCheckoutActions.setOlaError({
processId,
olaErrorIds: errorIds,
})
);
}
getCustomerFeatures({ processId }: { processId: number }): Observable<{ [key: string]: string }> {
return this.store.select(DomainCheckoutSelectors.selectCustomerFeaturesByProcessId, { processId });
}
setShippingAddress({ processId, shippingAddress }: { processId: number; shippingAddress: ShippingAddressDTO }) {
this.store.dispatch(DomainCheckoutActions.setShippingAddress({ processId, shippingAddress }));
}
getShippingAddress({ processId }: { processId: number }): Observable<ShippingAddressDTO> {
return this.store.select(DomainCheckoutSelectors.selectShippingAddressByProcessId, { processId });
}
removeProcess({ processId }: { processId: number }) {
this.store.dispatch(DomainCheckoutActions.removeProcess({ processId }));
}
setCustomer({ processId, customerDto }: { processId: number; customerDto: CustomerDTO }) {
this.store.dispatch(DomainCheckoutActions.setCustomer({ processId, customer: customerDto }));
}
getCustomer({ processId }: { processId: number }): Observable<CustomerDTO> {
return this.store.select(DomainCheckoutSelectors.selectCustomerByProcessId, { processId });
}
setPayer({ processId, payer }: { processId: number; payer: PayerDTO }) {
this.store.dispatch(DomainCheckoutActions.setPayer({ processId, payer }));
}
getPayer({ processId }: { processId: number }): Observable<PayerDTO> {
return this.store.select(DomainCheckoutSelectors.selectPayerByProcessId, { processId });
}
setBuyer({ processId, buyer }: { processId: number; buyer: BuyerDTO }) {
this.store.dispatch(DomainCheckoutActions.setBuyer({ processId, buyer }));
}
getBuyer({ processId }: { processId: number }): Observable<BuyerDTO> {
return this.store.select(DomainCheckoutSelectors.selectBuyerByProcessId, { processId });
}
getOrders(): Observable<DisplayOrderDTO[]> {
return this.store.select(DomainCheckoutSelectors.selectOrders);
}
updateOrderItem(item: DisplayOrderItemDTO) {
this.store.dispatch(DomainCheckoutActions.updateOrderItem({ item }));
}
removeAllOrders() {
this.store.dispatch(DomainCheckoutActions.removeAllOrders());
}
setSpecialComment({ processId, agentComment }: { processId: number; agentComment: string }) {
this.store.dispatch(DomainCheckoutActions.setSpecialComment({ processId, agentComment }));
}
getSpecialComment({ processId }: { processId: number }) {
return this.store.select(DomainCheckoutSelectors.selectSpecialComment, { processId });
}
//#endregion
//#region Common
private updateProcessCount(processId: number, count: number) {
this.applicationService.patchProcessData(processId, { count });
}
//#endregion
}

Some files were not shown because too many files have changed in this diff Show More