Compare commits

...

675 Commits

Author SHA1 Message Date
Michael Auer
6c04a5b3b6 Merge branch 'release/1.2' 2020-12-15 14:29:22 +01:00
Michael Auer
d5df65ab43 Merge branch 'develop' into release/1.2 2020-12-15 14:11:28 +01:00
Michael Auer
195532d14b Merge tag '1.1-google-analytics' into develop 2020-12-07 16:31:49 +01:00
Michael Auer
66d6ef8e40 Merge branch 'hotfix/1.1-google-analytics' 2020-12-07 16:31:48 +01:00
Lorenz Hilpert
d06512160a Fix Google Analytics
(cherry picked from commit 4c67792f08)
2020-12-07 12:03:28 +01:00
Lorenz Hilpert
6f936072d0 Merged PR 415: Fix Google Analytics
Fix Google Analytics
2020-12-07 10:56:22 +00:00
Lorenz Hilpert
4c67792f08 Fix Google Analytics 2020-12-07 11:55:28 +01:00
Lorenz Hilpert
becd0a1f2c Merged PR 411: #1190 Button soll inaktiv sein, solange Availability noch nicht geladen wurde
#1190 Button soll inaktiv sein, solange Availability noch nicht geladen wurde

Related work items: #1101
2020-11-23 16:53:26 +00:00
Lorenz Hilpert
8b3213cc8c #1190 Button soll inaktiv sein, solange Availability noch nicht geladen wurde 2020-11-23 17:52:35 +01:00
Lorenz Hilpert
f5a614c735 Merged PR 410: Tabindex for searchinput
Tabindex for searchinput
2020-11-13 14:40:52 +00:00
Lorenz Hilpert
bd89cfb8f1 Tabindex for searchinput 2020-11-13 15:39:54 +01:00
Michael Auer
7dbba2b5ba ~ Version Bump: 1.2 2020-11-13 14:16:31 +01:00
Michael Auer
8c187378e0 Revert "Disable Warenausgabe Navigation"
This reverts commit 0588612adb.
2020-11-13 14:15:30 +01:00
Michael Auer
21adae7141 Merge tag '1.1' into develop 2020-11-13 14:14:17 +01:00
Michael Auer
64a9a457db Merge branch 'release/1.1' 2020-11-13 14:14:13 +01:00
Lorenz Hilpert
0588612adb Disable Warenausgabe Navigation 2020-11-12 16:58:22 +01:00
Lorenz Hilpert
3bf52b7ce3 Merged PR 409: #1224 PCL// Bei Änderung des Status erscheint Fehlermeldung
#1224 PCL// Bei Änderung des Status erscheint Fehlermeldung
2020-11-12 14:41:49 +00:00
Lorenz Hilpert
0723f80051 #1224 PCL// Bei Änderung des Status erscheint Fehlermeldung 2020-11-12 15:40:49 +01:00
Lorenz Hilpert
1eec0afa8f Merged PR 408: Remission #1219 Bugfix
Related work items: #1219
2020-11-11 14:03:37 +00:00
Lorenz Hilpert
802b59bcd2 Merged PR 407: #1219 Remission // Artikel zu Remi hinzufügen wirft Fehler
#1219 Remission // Artikel zu Remi hinzufügen wirft Fehler
2020-11-11 14:02:12 +00:00
Lorenz Hilpert
4d9c8c3cea #1219 Remission // Artikel zu Remi hinzufügen wirft Fehler 2020-11-11 15:01:21 +01:00
Lorenz Hilpert
bd53dcb52c Merged PR 406: Zahlungsart für Warenaugabe 2020-11-11 13:22:35 +00:00
Lorenz Hilpert
608d95b77f Merged PR 405: #1222 - WA // Zahlart anzeigen
#1222 - WA // Zahlart anzeigen
2020-11-11 10:33:12 +00:00
Lorenz Hilpert
50505f8a7b #1222 - WA // Zahlart anzeigen 2020-11-11 11:31:43 +01:00
Lorenz Hilpert
1e92e1bf20 Merged PR 404: #1213 - RetailPrice.Vat wird nun als MwSt angezeigt
#1213 - RetailPrice.Vat wird nun als MwSt angezeigt
2020-11-09 09:49:21 +00:00
Lorenz Hilpert
a57109ac60 #1213 - RetailPrice.Vat wird nun als MwSt angezeigt 2020-11-09 10:46:50 +01:00
Nico Hanus
9704ecd9d2 fix config urls for feature 2020-11-05 16:12:21 +01:00
Nico Hanus
415999bb58 change helm name for feature 2020-11-05 15:59:43 +01:00
Nico Hanus
6fa7f93e3d enable feature Build for new stage 2020-11-05 15:50:19 +01:00
Sebastian Neumair
db8d209c75 Merged PR 400: #1203 Refetch Items and Reset Search Results on New Search
#1203 Refetch Items and Reset Search Results on New Search

Related work items: #1203
2020-10-29 09:14:26 +00:00
Sebastian Neumair
92f089ccad Merged PR 399: #1203 Refetch Items and Reset Search Results on New Search
#1203 Refetch Items and Reset Search Results on New Search
2020-10-28 17:18:10 +00:00
Sebastian
da117e3070 #1203 Refetch Items and Reset Search Results on New Search 2020-10-28 17:56:24 +01:00
Sebastian Neumair
acad176c8c Merged PR 398: #1198 Add KT and GEB Icons (SVGs)
Related work items: #1198
2020-10-27 16:52:42 +00:00
Sebastian Neumair
b0a146cda3 Merged PR 397: #1198 Add KT and GEB Icons (SVGs)
#1198 Add KT and GEB Icons (SVGs)
2020-10-27 16:47:57 +00:00
Sebastian
5375862093 #1198 Add KT and GEB Icons (SVGs) 2020-10-27 17:46:01 +01:00
Sebastian Neumair
d6839f4884 Merged PR 395: #982 #1024 #1162 #1164 #1166 #1167 #1176 #1177 #1182 Merge WA PCL to Release
Related work items: #982, #1024, #1162, #1164, #1166, #1167, #1176, #1177, #1182
2020-10-27 10:17:45 +00:00
Sebastian Neumair
0101ccb8f6 Merged PR 394: #1167 UpdateStyling for long Vorgang-ID + Add Format Icon
Related work items: #1167
2020-10-27 09:18:17 +00:00
Sebastian
347a78f658 #1167 UpdateStyling for long Vorgang-ID + Add Format Icon 2020-10-27 10:07:38 +01:00
Sebastian
f869232f3b 2020-10-27 10:07:15 +01:00
Sebastian Neumair
1758761085 Merged PR 393: #1166 Align Edit Button on WA Page with other secondary CTAs
#1166 Align Edit Button on WA Page with other secondary CTAs

Related work items: #1166
2020-10-27 08:23:31 +00:00
Sebastian
1550eea5ac #1166 Align Edit Button on WA Page with other secondary CTAs 2020-10-27 09:19:04 +01:00
Sebastian Neumair
7e3fc0ac4d Merged PR 392: #1182 Set Partial Qty on SetSupplier
#1182 Set Partial Qty  on SetSupplier

Related work items: #1182
2020-10-26 18:51:05 +00:00
Sebastian
c0a475bc44 #1182 Set Partial Qty on SetSupplier 2020-10-26 18:14:21 +01:00
Sebastian Neumair
f72e9de980 Merged PR 391: #1164 Fix iPad Bug Where WA Search Page Not Scrollable on
#1164 Fix iPad Bug Where WA Search Page Not Scrollable on

Related work items: #1164
2020-10-26 11:36:46 +00:00
Sebastian
51f2ec6d73 #1164 Fix iPad Bug Where WA Search Page Not Scrollable on 2020-10-26 12:31:26 +01:00
Sebastian Neumair
cea4dbf329 Merged PR 390: #1182 Reset Partial PickUp Qty After All States Are Set
#1182 Reset Partial PickUp Qty After All States Are Set
2020-10-26 09:04:27 +00:00
Sebastian
26aac3a1f5 #1182 Reset Partial PickUp Qty After All States Are Set 2020-10-26 09:54:24 +01:00
Sebastian Neumair
3035175943 Merged PR 389: #1185 Add FromSearch to HistoryState To Identify Origin from Result Page
#1185 Add FromSearch to HistoryState To Identify Origin from Result Page
2020-10-23 12:00:03 +00:00
Sebastian
0c76ef6463 #1185 Add FromSearch to HistoryState To Identify Origin from Result Page 2020-10-23 13:45:19 +02:00
Sebastian Neumair
9e664837d9 Merged PR 388: #1024 Add Focused Event Delay to trigger Reset Event
#1024 Add Focused Event Delay to trigger Reset Event

Related work items: #1024
2020-10-23 09:19:44 +00:00
Sebastian
93647dc748 #1024 Add Focused Event Delay to trigger Reset Event 2020-10-23 11:15:01 +02:00
Sebastian Neumair
89679a94b0 Merged PR 387: #1180 Set Dropdown Max Height to 488px
#1180 Set Dropdown Max Height to 488px
2020-10-22 19:59:41 +00:00
Sebastian
3be5897f5b #1180 Set Dropdown Max Height to 488px 2020-10-22 21:58:23 +02:00
Sebastian Neumair
961c69f318 Merged PR 386: #1177 Ensure New Data is Fetched For Result Page OnInit
#1177 Ensure New Data is Fetched For Result Page OnInit

Related work items: #1176, #1177
2020-10-22 19:33:19 +00:00
Sebastian
865cdd8076 #1177 Ensure New Data is Fetched For Result Page OnInit 2020-10-22 21:27:46 +02:00
Sebastian
dba5e19b84 #1177 Ensure New Data is Fetched For Result Page OnInit 2020-10-22 21:26:08 +02:00
Sebastian Neumair
f4868585b5 Merged PR 385: #1178 Fix Safari-Bug With Button Position Not Respecting Status Bar
#1178 Fix Safari-Bug With Button Position Not Respecting Status Bar
2020-10-22 17:39:59 +00:00
Sebastian
4465bf8787 #1178 Fix Safari-Bug With Button Position Not Respecting Status Bar 2020-10-22 19:35:35 +02:00
Sebastian Neumair
cebbd27ef6 Merged PR 384: #1024 Remove Reset Option on Blur Event [Shelf Edit Page]
#1024 Remove Reset Option on Blur Event [Shelf Edit Page]

Related work items: #1024
2020-10-22 17:03:12 +00:00
Sebastian
0a9de9eaab #1024 Remove Reset Option on Blur Event [Shelf Edit Page] 2020-10-22 18:56:27 +02:00
Sebastian
3cdf1656d7 #1024 Remove Reset X on Blur Event 2020-10-22 18:54:29 +02:00
Sebastian Neumair
f85f31a46e Merged PR 383: #982 Shelf Searchbar - Listen for keycode instead of Enter Event
#982 Shelf Searchbar - Listen for keycode instead of Enter Event

(iOS Keyboard does not emit Enter Event)

Related work items: #982
2020-10-22 12:39:53 +00:00
Sebastian
f747b6aad7 #982 Shelf Searchbar - Listen for keycode instead of Enter Event
(iOS Keyboard does not emit Enter Event)
2020-10-22 14:34:34 +02:00
Sebastian Neumair
239f940b28 Merged PR 380: #1162 Check for ChangeDetectorRef Before Running Change Detection
#1162 Check for ChangeDetectorRef Before Running Change Detection

[Product Details Component]

Related work items: #1162
2020-10-21 08:22:40 +00:00
Sebastian
b1884e4c05 #1162 Check for ChangeDetectorRef Before Running Change Detection
[Product Details Component]
2020-10-21 10:17:02 +02:00
Sebastian Neumair
6ec6d04fbc Merged PR 377: #1153 Center Apply Filters Button in Remi Overlay
#1153 Center Apply Filters Button in Remi Overlay

Related work items: #1153
2020-10-20 10:03:11 +00:00
Sebastian Neumair
982fd1066b Merged PR 376: #1153 CenterFilter Apply Button in Remi Overlay
#1153 CenterFilter Apply Button in Remi Overlay

Related work items: #1153
2020-10-20 08:50:50 +00:00
Sebastian
749e38d634 #1153 CenterFilter Apply Button in Remi Overlay 2020-10-20 10:46:38 +02:00
Sebastian Neumair
5a7d13202b Merged PR 375: Fix Protected Variable Access in Text Input Component Template 2020-10-19 15:28:28 +00:00
Sebastian Neumair
52db2ba39e Merged PR 374: Fix Protected Variable Access in Text Input Component Template
Fix Protected Variable Access in Text Input Component Template
2020-10-19 15:25:24 +00:00
Sebastian
a8ff13dd60 Fix Protected Variable Access in Text Input Component Template 2020-10-19 17:24:19 +02:00
Sebastian Neumair
078c8b74fa Merged PR 373: Merge Tested Develop Branch to Release Branch
Related work items: #877, #988, #1007, #1067, #1074, #1084, #1085, #1086, #1087, #1100, #1102, #1113, #1131, #1144
2020-10-19 14:49:08 +00:00
Sebastian Neumair
50b8b1e042 Merged PR 372: #1085 Set Partial Quantity On UI Change to Checkmark or SelectAll 2020-10-19 13:36:54 +00:00
Sebastian
0a6e92075f #1085 Add Print Error Message on Abholfachetikett Druck 2020-10-19 15:34:21 +02:00
Sebastian
173696f82e #1085 Set Partial Quantity On UI Change to Checkmark or SelectAll 2020-10-19 15:24:02 +02:00
Sebastian Neumair
877a0f9f79 Merged PR 371: #1085 Set BackToStock on Status 262144
#1085 Set BackToStock on Status 262144
2020-10-19 09:33:21 +00:00
Sebastian
7b4f35caed #1085 Set BackToStock on Status 262144 2020-10-19 11:32:31 +02:00
Michael Auer
6bee9ac8c0 ~ azure-pipelines.yml: changed base patch version to 0 (prepare for upcoming release branches) 2020-10-19 10:44:56 +02:00
Sebastian Neumair
c7968177e8 Merged PR 370: #1085 Refresh View After Partial Remit In Case of No Navigation
#1085 Refresh View After Partial Remit In Case of No Navigation
2020-10-19 08:42:36 +00:00
Sebastian
d8cf263bb7 #1085 Refresh View After Partial Remit In Case of No Navigation 2020-10-19 10:41:07 +02:00
Sebastian Neumair
85dc13771f Merged PR 369: Fix UI Bug To Show Quantity on Details page
Fix UI Bug To Show Quantity on Details page
2020-10-19 07:39:33 +00:00
Sebastian
312da5a73b Fix UI Bug To Show Quantity on Details page 2020-10-19 09:38:02 +02:00
Sebastian Neumair
23c44241ae Merged PR 368: #1144 Update Dropdown Available Status Unit Test & Allow Mutiple Status Changes & Navigate on Determine Supplier
#1144 Update Dropdown Available Status Unit Test & Allow Mutiple Status Changes & Navigate on Determine Supplier
#1137 UI Fixes

Related work items: #1144
2020-10-16 15:39:31 +00:00
Sebastian Neumair
4ab7210e26 Merged PR 367: #1144 Update Dropdown Available Status Unit Test & Allow Mutiple Status Changes & Navigate on Determine Supplier
#1144 Update Dropdown Available Status Unit Test & Allow Mutiple Status Changes & Navigate on Determine Supplier

Related work items: #1144
2020-10-16 15:36:01 +00:00
Sebastian
4a8034d8fb #1144 Update Dropdown Available Status Unit Test 2020-10-16 17:31:58 +02:00
Sebastian
04043e3fd8 2020-10-16 17:31:58 +02:00
Sebastian
26fd7183f7 #1085 Remove Secondary & Primary CtA Options from Dropdown Options 2020-10-16 14:05:32 +02:00
Sebastian
7cfe74b84e #1137 Fix SCSS Spacings File 2020-10-16 12:24:28 +02:00
Sebastian Neumair
d137d1db31 Merged PR 366: #1137 Fix UI Regressions
#1137 Fix UI Regressions
2020-10-16 10:22:32 +00:00
Sebastian
d837f90527 #1137 Add Negative Spacings 2020-10-16 12:21:39 +02:00
Sebastian
414328cf49 #1137 Right Align Bearbeiten Button on Detail Page 2020-10-16 12:16:52 +02:00
Sebastian
f7dddfdd80 #1137 Left Align Dropdown Text (Status Change Dropdown) 2020-10-16 11:50:34 +02:00
Sebastian
18cc0e63ad #1137 Right Align Filter Overlay "select all" 2020-10-16 11:47:27 +02:00
Sebastian
1736fbd838 #1087 Change from .key to .command as primary action identifier 2020-10-16 11:27:48 +02:00
Sebastian Neumair
084afb6971 Merged PR 365: #1085 Show Print Shippingnote in Dropdown
#1085 Show Print Shippingnote in Dropdown

Related work items: #1085
2020-10-16 08:42:13 +00:00
Sebastian
8a1173aaca #1085 Show Print Shippingnote in Dropdown 2020-10-16 10:38:46 +02:00
Sebastian Neumair
e8c28e4728 Merged PR 364: #1085 Change Disabled Button Font Color to White | #1087 Add Check To Identify Clicked Button For Loading Indicator
#1085 Change Disabled Button Font Color to White
#1087 Add Check To Identify Clicked Button For Loading Indicator

Related work items: #1085, #1087
2020-10-15 14:32:30 +00:00
Sebastian
07198b4ede #1087 Update Button Loading Indicator Pipe 2020-10-15 16:26:42 +02:00
Sebastian
2c2825a88f #1087 Fix Spec File Naming for Btn Loading Pipe 2020-10-15 16:25:34 +02:00
Sebastian
c70e9c4202 #1087 Add Check To Identify Clicked Button For Loading Indicator 2020-10-15 16:18:34 +02:00
Sebastian
b19a47d044 #1085 Change Disabled Button Font Color to White 2020-10-15 16:01:58 +02:00
Sebastian Neumair
def80dcf76 Merged PR 363: #1087 Catch Error Creating Lieferschein & Reset Loading State | #1085 Reset Loader on Empty List of Receipts to Print
#1087 Catch Error Creating Lieferschein & Reset Loading State
#1085 Reset Loader on Empty List of Receipts to Print

Related work items: #1087
2020-10-15 12:08:13 +00:00
Sebastian
7683887387 #1085 Reset Loader on Empty List of Receipts to Print 2020-10-15 14:06:18 +02:00
Sebastian
dda86d9975 #1087 Catch Error Creating Lieferschein & Reset Loading State 2020-10-15 13:42:28 +02:00
Sebastian Neumair
27c15fab46 Merged PR 362: #1067 Show Only One Compartment Code Per Group | #1085 Add CREATE_SHIPPINGNOTE as Indicator for creating a shipping note
#1067 Show Only One Compartment Code Per Group
#1085 Add CREATE_SHIPPINGNOTE as Indicator for creating a shipping note

Related work items: #1067, #1085
2020-10-15 11:24:33 +00:00
Sebastian Neumair
5a182bf07b Merged PR 361: #1085 Add CREATE_SHIPPINGNOTE as Indicator for creating a note
#1085 Add CREATE_SHIPPINGNOTE as Indicator for creating a note
2020-10-15 10:33:18 +00:00
Sebastian
abf8c0b0dd #1085 Add CREATE_SHIPPINGNOTE as Indicator for creating a note 2020-10-15 12:32:19 +02:00
Sebastian Neumair
0ec7e45179 Merged PR 360: #1067 Show Only One Compartment Code Per Group
#1067 Show Only One Compartment Code Per Group

Related work items: #1067
2020-10-15 10:17:39 +00:00
Sebastian
a74859c2d2 #1067 Show Only One Compartment Code Per Group 2020-10-15 12:11:32 +02:00
Sebastian Neumair
dfa8e94e26 Merged PR 359: #1007 Teilabholungs Dropdown
#1007 Teilabholungs Dropdown

Related work items: #1007
2020-10-15 08:22:39 +00:00
Sebastian Neumair
53232d4a63 Merged PR 358: #1007 Fix Dropdown Not Shown After Error
#1007 Fix Dropdown Not Shown After Error

Related work items: #1007
2020-10-15 07:37:18 +00:00
Sebastian
b671ea0b03 #1007 Fix Dropdown Not Shown After Error 2020-10-14 18:09:18 +02:00
Sebastian Neumair
92ef685474 Merged PR 357: #1074 Focus Searchbar after Click on Clear Button
#1074 Focus Searchbar after Click on Clear Button

Related work items: #1074
2020-10-14 14:57:53 +00:00
Sebastian Neumair
bf25d9c716 Merged PR 356: #1074 Focus Searchbar after Click on Clear Button
#1074 Focus Searchbar after Click on Clear Button

Related work items: #1074
2020-10-14 14:53:13 +00:00
Sebastian
36ae4e06b9 #1074 Focus Searchbar after Click on Clear Button 2020-10-14 16:51:57 +02:00
Sebastian Neumair
f9b6addafd Merged PR 355: #1131 Fix Duplicate Search Request From Details Effects
#1131 Fix Duplicate Search Request From Details Effects

Related work items: #1131
2020-10-14 12:50:51 +00:00
Sebastian Neumair
8312942ffd Merged PR 354: #1131 Fix Duplicate Search Request From Details Effects
#1131 Fix Duplicate Search Request From Details Effects

Related work items: #1131
2020-10-14 12:50:02 +00:00
Sebastian
8293d80004 #1131 Fix Duplicate Search Request From Details Effects 2020-10-14 14:49:00 +02:00
Sebastian Neumair
ee365eaa1e Merged PR 353: #1085 #1087 #1084 #1085 #1113
#1085 #1087 #1084 #1085

Related work items: #1085, #1087, #1113
2020-10-14 11:11:00 +00:00
Sebastian
11fa26e68a Integrate Changes from Develop 2020-10-14 12:52:17 +02:00
Sebastian Neumair
f23bb2f096 Merged PR 352: #1085 Fetch Button Actions from Server | Refactor Button Logic | #1113 Update Wording on Shelf Search Page | #1085 Add Loading Spinners to Buttons | Add Skeleton Loader to Features on Detail Page
#1085 Fetch Button Actions from Server | Refactor Button Logic | #1113 Update Wording on Shelf Search Page |  #1085 Add Loading Spinners to Buttons | Add Skeleton Loader to Features on Detail Page

Related work items: #1085, #1087, #1113
2020-10-14 10:35:59 +00:00
Sebastian
5c10d1548b #1085 Add Skeleton Loader for Features on Details Page 2020-10-14 12:28:15 +02:00
Sebastian
4664d7d2e7 #1085 Add Skeleton Loader for Features on Details Page 2020-10-14 11:59:57 +02:00
Sebastian
f49756f839 #1085 Remove Filter Button from Details Page 2020-10-14 11:20:28 +02:00
Sebastian
57aa15a710 #1087 Add Spinner to Buttons while status change in progress 2020-10-14 11:14:44 +02:00
Sebastian
0edd316195 #1087 Allow to Print Abholfachetikett 2020-10-14 11:04:24 +02:00
Sebastian
a246c39be3 #1113 Update Wording on Shelf Search Page
Remove Title and Author From Search Suggestions
2020-10-14 10:28:03 +02:00
Sebastian
3d7173d50f #1087 Update Breadcrumb When Changing Status on History Page 2020-10-14 10:18:33 +02:00
Sebastian
2ed4c608a0 #1087 Refactor All Logic To Dedicated Service 2020-10-13 22:13:21 +02:00
Sebastian
d4c35a255c #1087 Re-Add Comment Section 2020-10-13 20:47:41 +02:00
Sebastian
b5b75ac967 #1085 (WiP) Add Partial Pickup 2020-10-13 16:20:58 +02:00
Sebastian
e30d36b93a #1085 (WiP) Fetch Button Display Logic From Server 2020-10-13 14:11:20 +02:00
Sebastian Neumair
d56f3e8221 Merged PR 351: #1087 Create & Print Lieferschein
Related work items: #1087
2020-10-13 07:10:16 +00:00
Sebastian
c491b47114 #1087 Lieferschein erneut drucken 2020-10-13 09:05:28 +02:00
Sebastian
61ba54066c #1087 HistoryDropdown (Special Case: Create & Print Shipping Note)
Add ShelfShippingNoteService & ShelfOrderDetailsService
2020-10-12 15:02:41 +02:00
Lorenz Hilpert
4dba96683f Merged PR 350: #1007 Min und Max Wert als default setzen wenn über bbzw unterschritten
#1007 Min und Max Wert als default setzen wenn über bbzw unterschritten
2020-10-12 07:37:08 +00:00
Sebastian
bb4d344737 #1087 Add Teilabholung Create and Print Shipping Note 2020-10-09 19:36:31 +02:00
Sebastian
75e6cb9d3f #1087 Add Teilabholung Create and Print Shipping Note 2020-10-09 19:30:53 +02:00
Sebastian
9b7aebd9fa #1087 Filter Duplicate Receipts in Store 2020-10-09 18:12:16 +02:00
Lorenz Hilpert
63c5967b6f #1007 Min und Max Wert als default setzen wenn über bbzw unterschritten 2020-10-09 17:11:09 +02:00
Sebastian
60b7913c7a #1087 Identify Receipts to Create and Print 2020-10-09 16:54:01 +02:00
Sebastian
c8a9e73b8b #1087 Fetch and Show Belegdaten 2020-10-09 16:19:36 +02:00
Sebastian
8a4c18df43 #1087 Fetch Receipts for Belegdaten on DetailsPage [Store] 2020-10-09 13:09:03 +02:00
Sebastian
b15d158617 #1087 Add Verification Code and Bezahlt-Marker on Detail Page 2020-10-09 11:22:40 +02:00
Sebastian Neumair
972de14e20 Merged PR 347: #1084 PCL Trefferliste | #1086 PCL Bearbeiten Seite
#1084 PCL Trefferliste | #1086 PCL Bearbeiten Seite

Related work items: #1084, #1086, #1102
2020-10-09 09:10:26 +00:00
Sebastian
3332c7e23c #1087 Add Create Lieferschein and Print Plus Button Styling 2020-10-08 17:09:10 +02:00
Sebastian
647129bbf2 #1087 Add Logic When To Display Print ShippingNote CtA 2020-10-08 15:13:14 +02:00
Sebastian
ca2f2cc24f #1087 Add Features to OrderDetailsCardInput 2020-10-08 15:10:55 +02:00
Sebastian Neumair
84c68da6f6 Merged PR 346: #1084 Trefferliste PCL
Related work items: #1084
2020-10-08 12:29:18 +00:00
Sebastian Neumair
014741e25a Merged PR 345: #1086 Edit Page Pay And Collect With Editable Meldenummer and Inline Validation
#1086

Related work items: #1086, #1102
2020-10-08 12:11:22 +00:00
Sebastian
df4493a5c3 #1084 Show Feature Spacer Only For Prebooked Feature 2020-10-08 13:04:15 +02:00
Sebastian
e59f2747b1 #1084 Hide Vorgemerkt Marker for Abgeholt Status 2020-10-08 13:04:15 +02:00
Sebastian
23c0690fd4 #1084 Show Changed Date for Status Storniert and Nicht Lieferbar 2020-10-08 13:03:43 +02:00
Sebastian
a508c587cb #1084 Center Format Detail Icon 2020-10-08 13:03:43 +02:00
Sebastian
42d0bf9d99 #1084 Change Font Sizing for Abholfachnummer 2020-10-08 13:03:43 +02:00
Sebastian
2d4413e7c7 #1094 Add Cursor Pointer to Result Card 2020-10-08 13:03:43 +02:00
Sebastian
b8ea8ed625 #1086 Layout Improvements Edit Page 2020-10-08 12:53:49 +02:00
Sebastian
602fb4fa4f #1086 Add Unit Tets for ShelfEditFormService and sscText Pipe 2020-10-08 12:16:36 +02:00
Sebastian
e249bcca5f #1086 Set sscText on Form Submit 2020-10-08 00:45:17 +02:00
Sebastian
694779d9ff §1086 Remove Duplicate Requests for available sscCodes 2020-10-08 00:24:30 +02:00
Sebastian
9af1bec78b #1086 Add Option To Change Meldenummer With Suggestion and Validation 2020-10-07 23:47:22 +02:00
Lorenz Hilpert
3eaad281d3 Merged PR 344: Dropdown bei 10+ Exemplareren durch Input ersetzt
Dropdown bei 10+ Exemplareren durch Input ersetzt

Related work items: #1007
2020-10-07 14:53:09 +00:00
Sebastian Neumair
808fd95783 Merged PR 343: #877 Set Filters on Initial Customer Search & Remove filtering results
#877 Set Filters on Initial Customer Search & Remove filtering results

Related work items: #877
2020-10-07 14:35:27 +00:00
Lorenz Hilpert
5d4b0b684c Dropdown bei 10+ Exemplareren durch Input ersetzt 2020-10-07 16:32:46 +02:00
Sebastian
2b5c737377 #988 Set Filters on Initial Customer Search & Remove filtering results 2020-10-07 11:28:10 +02:00
Sebastian Neumair
512e6fecdb Merged PR 342: #988 Start Search On Click Autocomplete Result
#988 Start Search On Click Autocomplete Result

Related work items: #988
2020-10-07 08:47:14 +00:00
Sebastian
9a34cb0cff #988 Start Search On Click Autocomplete Result 2020-10-06 17:11:14 +02:00
Sebastian Neumair
7b8b3c10a6 Merged PR 341: #1100 Add CustomerType to User Model & Set Payer For B2B Customers
#1100 Add CustomerType to User Model & Set Payer For B2B Customers

Related work items: #1100
2020-10-06 10:32:09 +00:00
Sebastian
4cab1ad4a3 #1100 Add CustomerType to User Model & Set Payer For B2B Customers 2020-10-06 12:28:54 +02:00
Sebastian Neumair
e05c14a2ce Merged PR 337: Merge Warenausgabe Bug Fixes from develop to release || #1053 #1076 #1080 #1077 #1073 #1069
#1053 #1076 #1080 #1077 #1073 #1069

Related work items: #1069, #1076, #1077, #1080
2020-10-01 09:59:02 +00:00
Sebastian Neumair
68217ad2bb Merged PR 338: #1089 Check if sscText has value before populating form
#1089 Check if sscText has value before populating form

Related work items: #1089
2020-10-01 09:58:41 +00:00
Sebastian Neumair
b86c8fc083 Merged PR 339: #1090 Check if Filters Exist Before Fetching Filters
#1090 Check if Filters Exist Before Fetching Filters

Related work items: #1090
2020-10-01 09:58:22 +00:00
Sebastian Neumair
7bf7a0a70b Merged PR 340: #1091 Update Google Analytics Id
#1091 Update Google Analytics Id

Related work items: #1091
2020-10-01 09:58:08 +00:00
Sebastian
6da59ab62c Update Google Analytics Id 2020-10-01 11:43:22 +02:00
Sebastian
0a8632381d #1090 Check if Filters Exist Before Fetching Filters 2020-10-01 11:36:59 +02:00
Sebastian
3f45c80f60 #1090 Check if Filters Exist Before Fetching Filters 2020-10-01 11:33:09 +02:00
Sebastian
b1d7c81ee1 #1090 Check If Filter Exist Before Fetching Filters 2020-10-01 11:05:58 +02:00
Sebastian
890e09ac69 #1089 Check if sscText has value before populating form 2020-10-01 09:57:51 +02:00
Lorenz Hilpert
f5e9ea81bf Merged PR 336: #1053 - Dropdown Auswahl aktiviert Bulletpoints
#1053 - Dropdown Auswahl aktiviert Bulletpoints
2020-09-30 10:24:15 +00:00
Lorenz Hilpert
c97990217c #1053 - Dropdown Auswahl aktiviert Bulletpoints 2020-09-30 12:21:19 +02:00
Sebastian Neumair
7fd5eb4c8e Merged PR 335: #1076 Refetch Filters On Restore Processes from User State
#1076 Refetch Filters On Restore Processes from User State

Related work items: #1076
2020-09-29 15:08:00 +00:00
Sebastian Neumair
3a4c9d7bd4 Merged PR 331: #1080 Use Pending Filters For Autocomplete Search
#1080 Use Pending Filters For Autocomplete Search

Related work items: #1080
2020-09-29 15:07:43 +00:00
Sebastian
0d019d6ab7 #1076 Refetch Filters On Restore Processes from User State 2020-09-29 17:06:07 +02:00
Sebastian Neumair
8d0e6484b9 Merged PR 334: #1077 Set Pending Filters When SelectFilter[] has length
#1077 Set Pending Filters When SelectFilter[] has length

Related work items: #1076
2020-09-25 10:35:52 +00:00
Sebastian
cfa15b59f6 #1077 Set Pending Filters When SelectFilter[] has length 2020-09-25 12:22:51 +02:00
Lorenz Hilpert
fddb74ca26 Merged PR 333: #1053 Dropdown Auswahl aktiviert Bulletpoints
#1053 Dropdown Auswahl aktiviert Bulletpoints
2020-09-25 09:51:18 +00:00
Sebastian
d5a3fd47a7 #1080 Resolve Merge Conflicts 2020-09-25 11:48:30 +02:00
Lorenz Hilpert
c896d61016 #1053 Dropdown Auswahl aktiviert Bulletpoints 2020-09-25 11:01:56 +02:00
Sebastian
5cf9eced6b #1080 Update flatten function to handle empty options array 2020-09-25 10:55:52 +02:00
Sebastian
749d5bba02 #1080 Use Pending Filters for Autocomplete 2020-09-25 10:55:52 +02:00
Sebastian
6f5c6fa51c #1080 [WiP] Use Pending Filters for Autocomplete 2020-09-25 10:54:51 +02:00
Sebastian Neumair
d5699fdd05 Merged PR 332: #1077 Cancel Pending Search Requests and Hide Autocomplete during active search
#1077 Cancel Pending Search Requests and Hide Autocomplete during active search

Related work items: #1077
2020-09-25 08:52:20 +00:00
Sebastian
395526027b #1077 Cancel Request on Filter Overlay Close During Search & Reset State 2020-09-24 21:31:49 +02:00
Sebastian
a6dd070b4e #1077 Cancel Request on Filter Overlay Close During Search & Reset State 2020-09-24 21:25:45 +02:00
Sebastian
7013638631 #1077 Add Unit Tests for Hide Autocomplete Suggestions While Loading 2020-09-24 20:16:46 +02:00
Sebastian
36c8d2517a #1077 Hide Autocomplete While Loading 2020-09-24 16:05:20 +02:00
Sebastian
a2101328e7 #1077 Fail-Safe create Cancel-Sub if not existing on cancellation 2020-09-24 16:03:51 +02:00
Lorenz Hilpert
d96e14a154 Merged PR 330: #1073 Suche endet in Fehlermeldung
#1073 Suche endet in Fehlermeldung
2020-09-24 12:10:35 +00:00
Sebastian Neumair
3be12ad944 Merged PR 329: #1069 Update Button Sizing
#1069 Update Button Sizing

Related work items: #1069
2020-09-24 12:07:21 +00:00
Lorenz Hilpert
0716388141 #1073 Suche endet in Fehlermeldung 2020-09-24 14:06:49 +02:00
Sebastian
1260a1e9f8 #1077 Add Unit Tests For Cancellation 2020-09-24 13:59:28 +02:00
Sebastian
56ddf5b8b9 #1077 Cancel Request On Navigation 2020-09-24 12:47:18 +02:00
Sebastian
725307c022 #1069 Update Button Sizing 2020-09-24 11:13:31 +02:00
Sebastian Neumair
8a94ea3d82 Merged PR 328: #1076 Sync User State Processes With NgrxProcesses & Set Filters ForEach
Related work items: #1076
2020-09-24 08:38:15 +00:00
Sebastian
90d17ef359 #1076 Remove Unused rxjs operator imports 2020-09-23 23:54:30 +02:00
Sebastian
f866db3097 #1076 Remove Unused Import of AsyncScheduler 2020-09-23 23:53:04 +02:00
Sebastian
7f13b79547 #1076 Show Active Filter After Login 2020-09-23 23:45:01 +02:00
Sebastian
42d22dd514 #1076 Sync User State Processes With NgrxProcesses & Set Filters ForEach 2020-09-23 22:20:01 +02:00
Sebastian
b521e9dea0 2020-09-23 22:20:01 +02:00
Sebastian Neumair
57aa5701ad Merged PR 323: #925 Favicons | #1066 Catch Payer Undefined Error | #1061 View Destroyed Fix | #985 Checkmark Margin |
Related work items: #1066
2020-09-22 15:07:12 +00:00
Lorenz Hilpert
b773cb2d25 Merged PR 322: build error fix: NodeJS.Timer
build error fix: NodeJS.Timer
2020-09-22 10:04:20 +00:00
Lorenz Hilpert
5c141d3bbe build error fix: NodeJS.Timer 2020-09-22 12:03:14 +02:00
Lorenz Hilpert
7a2a9237f7 Merged PR 321: #925 Design // Favoriten-Icon für ISA
#925 Design // Favoriten-Icon für ISA
2020-09-22 10:01:52 +00:00
Sebastian Neumair
c38c94cd36 Merged PR 320: #1066 Catch Payer Undefined in AddPayerReference Response
#1066 Catch Payer Undefined in AddPayerReference Response

Related work items: #1066
2020-09-22 10:00:18 +00:00
Lorenz Hilpert
75fb2045db #925 Design // Favoriten-Icon für ISA 2020-09-22 11:58:53 +02:00
Sebastian
1aafe81b37 #1066 Catch Payer Undefined in AddPayerReference Respomse 2020-09-22 11:49:47 +02:00
Lorenz Hilpert
ca5798e244 Merged PR 319: #1061 View Destroy aus Artikelsuche - Suchfeld
#1061 View Destroy aus Artikelsuche - Suchfeld
2020-09-22 09:49:11 +00:00
Lorenz Hilpert
3458b0a642 #1061 View Destroy aus Artikelsuche - Suchfeld 2020-09-22 11:43:48 +02:00
Lorenz Hilpert
8d905cf94d Merged PR 318: #985 WA Checkmark Margin
#985 WA Checkmark Margin
2020-09-22 08:40:08 +00:00
Lorenz Hilpert
768eac723d #985 WA Checkmark Margin 2020-09-22 10:37:59 +02:00
Lorenz Hilpert
da03e220ed Merged PR 317: lib Builds nicht mehr notwendig
lib Builds nicht mehr notwendig

Co-authored-by: s.neumair@paragon-data.de <s.neumair@paragon-data.de>
2020-09-21 14:06:14 +00:00
Lorenz Hilpert
1985d4df51 lib Builds nicht mehr notwendig
Co-authored-by: s.neumair@paragon-data.de <s.neumair@paragon-data.de>
2020-09-21 16:04:46 +02:00
Sebastian Neumair
a28d2c05b3 Merged PR 316: #913 Show All Open Remissions #929 Stop Amoklauf #1049 Vorgemerkt-Marker #975 Store CleanUp #939 Personal-Wechsel Offene Remi
Related work items: #913, #929, #939, #975, #1049
2020-09-21 02:43:48 +00:00
Sebastian Neumair
7b77e8c234 Merged PR 315: #913 Hide Deleted Shipping Documents
+ Update Logic On Which Shipping Document to Display for a Given Remission

Related work items: #913
2020-09-18 12:05:57 +00:00
Sebastian
cc667c13bb #913 Hide Deleted Shipping Documents
+ Update Logic On Which Shipping Document to Display for a Given Remission
2020-09-17 21:40:58 +02:00
Sebastian Neumair
ca4803fda2 Merged PR 314: #929 Stop Amoklauf (UpdateShippingDocuent pipes to process and then take 1 ensures only one update is made)
+ Add ProductGroupName to continued process shipping document products

Related work items: #929
2020-09-17 15:53:04 +00:00
Lorenz Hilpert
df058030b0 Merged PR 312: Customer features werden nicht angezugt wenn disabled oder keine description
Customer features werden nicht angezugt wenn disabled oder  keine description
2020-09-17 15:24:15 +00:00
Lorenz Hilpert
d31db9f430 Merged PR 313: #1049 Vorgemerkt-Marker in Bestellpostendetails anzeigen
#1049 Vorgemerkt-Marker in Bestellpostendetails anzeigen
2020-09-17 15:23:57 +00:00
Sebastian
6d1d7ed65c #929 Add ProductGroupName to continued process shipping document products 2020-09-17 17:01:58 +02:00
Lorenz Hilpert
b2f3e58b59 #1049 Vorgemerkt-Marker in Bestellpostendetails anzeigen 2020-09-17 16:35:46 +02:00
Lorenz Hilpert
824f3babc4 Customer features werden nicht angezugt wenn disabled oder keine description 2020-09-17 16:26:30 +02:00
Sebastian
349259a3bd #929 Take1 on updateShippingDocument 2 update remi process in store once 2020-09-17 16:05:53 +02:00
Lorenz Hilpert
e2af856a24 Merged PR 310: #1028 - Update styling for ipad
#1028 - Update styling for ipad
2020-09-17 13:24:45 +00:00
Lorenz Hilpert
9debb4a4e2 Merged PR 311: removed color settings for vs code
removed color settings for vs code
2020-09-17 13:24:34 +00:00
Lorenz Hilpert
f68f4ae9fa removed color settings for vs code 2020-09-17 15:23:19 +02:00
Lorenz Hilpert
c532123a2c #1028 - Update styling for ipad 2020-09-17 15:21:15 +02:00
Lorenz Hilpert
4d196aa4eb Merged PR 309: #975 cleanup search results
#975 cleanup search results
2020-09-17 12:47:42 +00:00
Lorenz Hilpert
6e76c0d48e #975 cleanup search results 2020-09-17 14:40:13 +02:00
Lorenz Hilpert
25270474e7 Merged PR 308: #939 Personal-wechsel-bei-offener-Remi
#939 Personal-wechsel-bei-offener-Remi
2020-09-17 12:26:01 +00:00
Sebastian Neumair
97ddbac01e Merged PR 307: #913 Show all open remissions instead of all remissions of the last 7 days
+ Reduce number of http requests by getting all data from queryReturns call
+ reduce number of productGroup calls with shareReplay

Related work items: #913
2020-09-17 11:55:13 +00:00
Lorenz Hilpert
fd55d3a65e #939 Personal-wechsel-bei-offener-Remi 2020-09-17 13:54:14 +02:00
Sebastian
ca8c1b5f6b #913 Refactor QueryReturns to minimize no of server calls
+ Update cmf dependencies to ^0.1.34
2020-09-17 13:01:52 +02:00
Sebastian
ec5f494ba5 Remove unneccessary receipt calls and get all data with return calls 2020-09-17 13:01:34 +02:00
Sebastian
152feb010f Show All Open Remissions
Cache Products Group Name Request
Hide Deleted Shipping Documents (Remissions) (WiP)
2020-09-17 13:01:34 +02:00
Sebastian Neumair
c93e568ea1 Merged PR 301: #991 #995 #1022 Merge Warenausgabe Fixes
Related work items: #991, #995, #1022
2020-09-17 08:54:38 +00:00
Lorenz Hilpert
31b3d67974 Merged PR 306: Detailseite Header Bestellkanal
Detailseite Header Bestellkanal

Related work items: #1041
2020-09-16 17:18:30 +00:00
Lorenz Hilpert
a969ed775e Merged PR 305: #975 ISA_NGRX_STATE exceeded the quota
#975 ISA_NGRX_STATE exceeded the quota
2020-09-16 17:17:59 +00:00
Lorenz Hilpert
3ea3f54286 Detailseite Header Bestellkanal 2020-09-16 18:37:05 +02:00
Sebastian Neumair
c241545bd1 Merged PR 304: #1033 Remove Nachbestellen CtA on Status "Storniert Lieferant" (2048)
#1033 Remove Nachbestellen CtA on Status "Storniert Lieferant" (2048)

Related work items: #1033
2020-09-16 16:25:52 +00:00
Lorenz Hilpert
196a0c309a #975 ISA_NGRX_STATE exceeded the quota 2020-09-16 18:25:00 +02:00
Sebastian
288737aed3 #1033 Remove Nachbestellen CtA on Status "Storniert Lieferant" (2048) 2020-09-16 17:35:25 +02:00
Lorenz Hilpert
edc3329f5a Merged PR 303: Remission // Personal wechsel bei offener Remi
Related work items: #939
2020-09-16 15:23:14 +00:00
Lorenz Hilpert
6813eadced 2020-09-16 16:51:11 +02:00
Lorenz Hilpert
5a069e5fce Remission Lib hinzugefügt 2020-09-16 16:50:11 +02:00
Sebastian Neumair
7189cc31d1 Merged PR 302: #1033 Remove "Nachbestellt" Option in Status Change Dropdowns
#1033 Remove "Nachbestellt" Option in Status Change Dropdowns

Related work items: #1033
2020-09-16 08:30:39 +00:00
Sebastian
d1570d2079 #1033 Remove "Nachbestellt" Option in Status Change Dropdowns 2020-09-15 18:43:43 +02:00
Sebastian Neumair
1f60ee2eb9 Merged PR 299: #1022 Fix Header Column Sizing for Shelf Header (Details Page and Edit Page)
Related work items: #1022
2020-09-15 13:33:18 +00:00
Sebastian Neumair
c9d078047e Merged PR 300: #995 #992 Apply Pending Filters On Click Searchbar Icon & Center Apply Filter Button On Small Desktop Devices
Related work items: #991, #995
2020-09-15 13:33:11 +00:00
Sebastian
76fce84661 #992 Minimize button Width to extend arrow up&down clickable area 2020-09-15 15:24:31 +02:00
Sebastian
ecf4437cf6 #995 Apply Pending Filters On Click Searchbar Icon 2020-09-15 15:03:07 +02:00
Sebastian
c04ad8fd4d #992 Center Apply Filter Button on very small desktop devices 2020-09-15 14:40:15 +02:00
Sebastian Neumair
56c2b16916 Merged PR 298: #1022 Eliminate unused width-container utility classes
#1022 Eliminate unused width-container utility classes
2020-09-15 09:02:06 +00:00
Sebastian
e6d03dc5ea #1022 Eliminate unused width-container utility classes 2020-09-15 10:50:21 +02:00
Sebastian Neumair
d2998d42f3 Merged PR 297: #1022 Fix Header Column Sizing for Shelf Header (Details Page and Edit Page)
#1022 Fix Header Column Sizing for Shelf Header (Details Page and Edit Page)

Related work items: #1022
2020-09-15 08:29:09 +00:00
Sebastian
af31afac17 #1022 Fix Header Column Sizing for Shelf Header (Details Page and Edit Page) 2020-09-15 10:23:03 +02:00
Sebastian Neumair
73fa821f19 Merged PR 296: Merge Bugfixes from Develop to Release Branch
Related work items: #893, #991, #1012, #1013, #1016, #1029
2020-09-14 16:02:30 +00:00
Sebastian Neumair
f83e0bc88c Merged PR 295: #1092 Check Scanned Barcode Value before writing to store
#1092 Check Scanned Barcode Value before writing to store

Related work items: #1029
2020-09-14 13:23:07 +00:00
Sebastian
2d1a5aad44 #1092 Check Scanned Barcode Value before writing to store 2020-09-14 15:22:16 +02:00
Sebastian Neumair
fdd18e656c Merged PR 294: #1092 Synchronize Scanned Value With Store for Reuse in Filter Overlay
+ Filter Scan Started Event

Related work items: #1029
2020-09-14 13:08:37 +00:00
Lorenz Hilpert
7d2d0a1af4 Merged PR 293: #1031 Fix: Printer-Dialog an iPad erscheint nicht
#1031 Fix:  Printer-Dialog an iPad erscheint nicht
2020-09-14 13:06:55 +00:00
Sebastian
77cccd225f + Filter Scan Started Event 2020-09-14 15:06:10 +02:00
Lorenz Hilpert
bb591b8fca #1031 Fix: Printer-Dialog an iPad erscheint nicht 2020-09-14 14:46:23 +02:00
Sebastian Neumair
81b59440eb Merged PR 292: #1029 Update Searchbar Query After Scanning With Scanned Value
#1029 Der gescannte Wert wird vor der Suche jetzt in der Suchfeld geschrieben.

// Da ich lokal nicht den nativen Container testen kann, kann ich das Scanning nicht testen. Kann sein das nochmal Aenderungen vonnoeten sind.
2020-09-14 12:32:43 +00:00
Sebastian
9809e75b33 Fix Apply Filters Button Position 2020-09-14 14:31:46 +02:00
Sebastian
c588ed7784 #1029 Update Searchbar Query After Scanning With Scanned Value 2020-09-14 14:10:19 +02:00
Sebastian Neumair
21d9b67086 Merged PR 291: #991 Add Shadow to Up&Down Button
#991 Add Shadow to Up&Down Button

Related work items: #991
2020-09-14 11:25:00 +00:00
Lorenz Hilpert
774815966b Merged PR 290: Merge 2020-09-14 10:54:04 +00:00
Sebastian
f6bf2d21ee #991 Add Shadow to Up&Down Button 2020-09-14 12:52:54 +02:00
Lorenz Hilpert
1b9f5bf0b9 Merged PR 289: #1028 WA // Anmerkung styling
#1028 WA // Anmerkung styling
2020-09-14 10:42:31 +00:00
Lorenz Hilpert
39655965e8 #1028 WA // Anmerkung styling 2020-09-14 12:31:51 +02:00
Sebastian Neumair
faecc6f857 Merged PR 287: #991 Show Filter Button on Safari Browser
Related work items: #991
2020-09-14 08:39:14 +00:00
Sebastian Neumair
edbc5279b3 Merged PR 288: #1013 Fix Duplicate Check in AddResult Reducer
Related work items: #1013
2020-09-14 08:38:54 +00:00
Sebastian
2aa7acad6a #991 Add Box Shadow to apply filters button 2020-09-14 10:27:58 +02:00
Sebastian
a74c05be60 #1013 Fix Duplicate Check in AddResult Reducer 2020-09-14 10:27:24 +02:00
Sebastian
038cb6c7a8 #991 Various UI Fixes for Filter Button on iPad
Unsubscribe updateHeight oDestroy
Position FIlter Button on iPad Sticky to allow for scrolling
2020-09-13 22:34:31 +02:00
Sebastian
7e33832197 #991 Fix Button Not Shown on Safari Browser 2020-09-11 17:56:16 +02:00
Lorenz Hilpert
1e83a3efbe Merged PR 286: Fix Fehlermeldung filters of undefined in der Warenausgabe
Fix Fehlermeldung filters of undefined in der Warenausgabe
2020-09-11 14:54:48 +00:00
Lorenz Hilpert
732bc9e4aa Fix Fehlermeldung filters of undefined in der Warenausgabe 2020-09-11 16:22:23 +02:00
Lorenz Hilpert
d05ff90031 Merged PR 285: #1005 Anmerkungen werden nicht angezeigt
#1005 Anmerkungen werden nicht angezeigt
2020-09-11 13:53:49 +00:00
Lorenz Hilpert
f36050882f #1005 Anmerkungen werden nicht angezeigt 2020-09-11 15:52:05 +02:00
Sebastian Neumair
07bcddf7b5 Merged PR 283: #1013 Remove Clear Results on Add Result To Update Result List
#1013 Remove Clear Results on Add Result To Update Result List

+ check if all results are loaded before fetching new results

Related work items: #1013
2020-09-11 10:43:25 +00:00
Sebastian Neumair
efaa5d1106 Merged PR 284: #1016 Check for presence of order details before navigating
#1016 Check for presence of order details before navigating

Related work items: #1016
2020-09-11 10:43:18 +00:00
Sebastian
2f4f8bd95c #1016 Check for presence of order details before navigating 2020-09-11 12:40:00 +02:00
Sebastian
ddc92958ac #1013 Remove Clear Results on Add Result To Update Result List
+ check if all results are loaded before fetching new results
2020-09-11 12:14:53 +02:00
Sebastian Neumair
c4b254b26c Merged PR 282: Set Correct Skip on Subsequent Search
Related work items: #1012
2020-09-11 09:09:52 +00:00
Sebastian
ce9efd3f28 Fix Skip Eval Falsy on 0 Value 2020-09-11 11:07:42 +02:00
Sebastian Neumair
e06099f1a4 Merged PR 279: Fix Process Being Incorrectly Updated From Add Cart To Process Causing Process Errors and Empty Result List
Related work items: #893
2020-09-10 14:10:58 +00:00
Sebastian Neumair
3d67ebf6f1 Merged PR 281: #913 Update RegEx to spot customer card numbers
& allow for customer card numbers with spaces
2020-09-10 14:10:51 +00:00
Lorenz Hilpert
f33bc7ee50 Merged PR 280: #896 Abschluss von wieder geöffnetem Warenbegleitschein nicht möglich
#896 Abschluss von wieder geöffnetem Warenbegleitschein nicht möglich
2020-09-10 13:28:37 +00:00
Sebastian
624eb87467 #913 Update RegEx to spot customer card numbers
& allow for customer card numbers with spaces
2020-09-10 15:26:32 +02:00
Lorenz Hilpert
1bdbaa5c31 #896 Abschluss von wieder geöffnetem Warenbegleitschein nicht möglich 2020-09-10 14:53:58 +02:00
Sebastian
63d65c3679 Fix Process Being Incorrectly Updated From Add Cart To Process 2020-09-10 14:30:22 +02:00
Michael Auer
4ef6cc7d3e ~ version bump: 1.1 2020-09-10 07:07:56 +02:00
Lorenz Hilpert
7ebaf68117 Merged PR 278: Run Command > npx prettier --write .
Run Command > npx prettier --write .
2020-09-09 14:16:49 +00:00
Lorenz Hilpert
0b0f0706b7 Run Command > npx prettier --write . 2020-09-09 16:15:14 +02:00
Lorenz Hilpert
b8924fbf43 Merged PR 218: prettier and vs code recommendations 2020-09-09 14:03:07 +00:00
Lorenz Hilpert
f043d9a019 Merge branch 'develop' into prettier-and-vscode-extensions 2020-09-09 16:02:17 +02:00
Sebastian Neumair
038cfc6862 Merged PR 277: fix: Remove branchNumber from GoodsInService Search Method Params
fix: Remove branchNumber from GoodsInService Search Method Params
2020-09-09 13:54:38 +00:00
Sebastian
0e33288a2a fix: Remove branchNumber from GoodsInService Search Method Params 2020-09-09 15:49:49 +02:00
Michael Auer
c3682f2c05 MERGE branch integration into develop (CONFLICTS resolved) 2020-09-09 15:24:42 +02:00
Lorenz Hilpert
0c5e7430f6 Merged PR 276: Output hashing enabled
Output hashing enabled
2020-09-09 10:03:18 +00:00
Lorenz Hilpert
ae89a4e3db Output hashing enabled 2020-09-09 12:01:37 +02:00
Sebastian Neumair
dffa0e3627 Merged PR 275: Fix Product Search Page Scanning
Fix Product Search Page Scanning

Related work items: #274, #950
2020-09-09 09:24:23 +00:00
Sebastian
2d384debd6 Remove Barcde Search p-tag used for debuggingpurposes 2020-09-08 21:39:33 +02:00
Sebastian
3cc35fef03 Fix Product Search Page Scanning 2020-09-08 21:26:29 +02:00
Lorenz Hilpert
f3c8e9024f Merged PR 274: Mit der letzten Integration ersetzt
Mit der letzten Integration ersetzt
2020-09-08 15:33:34 +00:00
Lorenz Hilpert
9c175efa5f Mit der letzten Integration ersetzt 2020-09-08 17:32:11 +02:00
Lorenz Hilpert
84777be5cf Merged PR 273: #274 Anzeige Uhrzeit in der Trefferliste
#274 Anzeige Uhrzeit in der Trefferliste

Related work items: #274
2020-09-08 15:13:13 +00:00
Lorenz Hilpert
484ffda3ef Text Uhr hinzugefügt 2020-09-08 17:12:29 +02:00
Lorenz Hilpert
5643da6693 #274 Anzeige Uhrzeit in der Trefferliste 2020-09-08 17:09:51 +02:00
Lorenz Hilpert
5c0b057e4c Merged PR 272: #274 - Artikel Scan Fehler
#274 - Artikel Scan Fehler

Related work items: #274
2020-09-08 15:07:56 +00:00
Lorenz Hilpert
6d6c3073fb #274 - Artikel Scan Fehler 2020-09-08 17:06:36 +02:00
Sebastian Neumair
fe3915be9f Merged PR 271: Show Date and Time on Geandert Timestamp on Detail Page
Show Date and Time on Geandert Timestamp on Detail Page

Related work items: #274
2020-09-08 14:26:28 +00:00
Sebastian
a1ded4ff38 Show Date and Time on Geandert Timestamp on Detail Page 2020-09-08 16:24:19 +02:00
Sebastian Neumair
2be18e4b56 Merged PR 269: #581 Show Eingetroffen CtA On Status Abgeholt
#581 Show Eingetroffen CtA On Status Abgeholt

Related work items: #581
2020-09-08 13:41:07 +00:00
Sebastian
91613997d3 #581 Show Eingetroffen CtA On Status Abgeholt 2020-09-08 15:37:39 +02:00
Lorenz Hilpert
ad9defeeb9 Merged PR 268: Sonderfälle haben nun Geändert als Info Feld
Sonderfälle haben nun Geändert als Info Feld

Related work items: #274
2020-09-08 13:28:13 +00:00
Lorenz Hilpert
774ed0a30f Sonderfälle haben nun Geändert als Info Feld 2020-09-08 15:26:25 +02:00
Lorenz Hilpert
be565cbc74 Merged PR 267: #950 Fix Auswertung Scan Result
#950 Fix Auswertung Scan Result
2020-09-08 12:41:56 +00:00
Lorenz Hilpert
be4c91b2a7 #950 Fix Auswertung Scan Result 2020-09-08 14:39:47 +02:00
Lorenz Hilpert
9a3ca38b7a Merged PR 266: #950 stringyfiy Barcode
#950 stringyfiy Barcode
2020-09-08 11:31:30 +00:00
Lorenz Hilpert
f3c2df64c9 #950 stringyfiy Barcode 2020-09-08 13:30:49 +02:00
Michael Auer
3b101a9e1a azure-pipelines.yml: ! corrected branch expression for release-branches 2020-09-08 13:08:39 +02:00
Lorenz Hilpert
e4c12f575b Merged PR 265: #950 NativeContainerService für Scanning
#950 NativeContainerService für Scanning
2020-09-08 11:03:20 +00:00
Lorenz Hilpert
211fd78dc7 #950 NativeContainerService für Scanning 2020-09-08 12:58:10 +02:00
Michael Auer
60971792ec azure-pipelines.yml: added release/* for prod-build 2020-09-08 11:41:39 +02:00
Sebastian Neumair
77e0dad4a2 Merged PR 264: #954 Edit Page: Optimize Layout for Safari & Text Color Disabled State
Related work items: #954
2020-09-08 08:25:46 +00:00
Sebastian
4783dfbd48 #950 Increase Dropdown Elements Size 2020-09-07 22:30:59 +02:00
Sebastian
7dc22689d6 Add Option To Ignore TouchEvents in ClickOutsideDirective 2020-09-07 22:02:49 +02:00
Sebastian
740206fd08 Edit Page: Optimize Layout for Safari & Text Color Disabled State 2020-09-07 21:32:59 +02:00
Lorenz Hilpert
853e49a231 Merged PR 263: #963, #935
Related work items: #935, #963
2020-09-07 17:23:47 +00:00
Sebastian Neumair
86496869c5 Merged PR 262: #260 Detail Page: Highlight Selected Value
Related work items: #260
2020-09-07 15:35:17 +00:00
Lorenz Hilpert
dfb96c735d #963 Shelf Detail Store: Identifier OrderItemSubsetId anstatt OrderItemId 2020-09-07 17:34:02 +02:00
Lorenz Hilpert
7023635c2d Query Update: Fetch Data for Details from all Branches 2020-09-07 17:22:13 +02:00
Sebastian
90cde380d2 Merge remote-tracking branch 'origin/feature/189-Warenausgabe/Detail-Page-Dropdown-Highlight-Selected-Value' into feature/189-Warenausgabe/Detail-Page-Dropdown-Highlight-Selected-Value 2020-09-07 17:12:48 +02:00
Sebastian
8c98fbb564 Detail Page: Highlight Selected Value 2020-09-07 17:12:40 +02:00
Sebastian
60a794a6ab Detail Page: Highlight Selected Value 2020-09-07 17:01:29 +02:00
Sebastian Neumair
3b23a6af7b Merged PR 261: Show Title and Contributors on Edit Page
Move title pipe to shelf pipe module for reusuability

Related work items: #193
2020-09-07 13:36:43 +00:00
Sebastian
ee4ccd9e84 Merge branch 'feature/189-Warenausgabe/957-Show-Error-On-Edit-Page-Submit-Failure' into feature/189-Warenausgabe/main 2020-09-07 13:35:35 +02:00
Sebastian Neumair
4c8006c836 Merged PR 260: #957 Show error message for failed submit requests on edit page / + Restore Scroll Position
Related work items: #957
2020-09-07 11:28:02 +00:00
Sebastian
f4c9fe355a Show Title and Contributors on Edit Page
Move title pipe to shelf pipe module
2020-09-07 13:25:13 +02:00
Sebastian
283803d55a #261 Patch PickUpDeadline (compartmentStop) from Edit Page 2020-09-07 12:23:15 +02:00
Sebastian
a8016b0c7d #957 Show error message for failed submit requests on edit page 2020-09-07 12:03:23 +02:00
Sebastian
bf75dc5db7 Merge branch 'feature/189-Warenausgabe/264-Warenausgabe-Edit-Page-QA-Feedback' into feature/189-Warenausgabe/main 2020-09-07 11:00:17 +02:00
Sebastian Neumair
16dfcab4a7 Merged PR 259: #264 Edit Page: Full Width Input and Price with two decimal places
Related work items: #264
2020-09-07 08:49:26 +00:00
Sebastian
62acbdecc5 Warenausgabe Edit Page: Show Price with two decimal places 2020-09-04 20:56:40 +02:00
Sebastian Neumair
6e2ff83336 Merged PR 258: Add Scroll Position Restoration on Shelf Details Page 2020-09-04 15:08:27 +00:00
Sebastian Neumair
66a2fd772a Merged PR 257: Add Underscore between compartmentCode and compartmentInfo
Add Underscore between compartmentCode and compartmentInfo

Related work items: #952
2020-09-04 15:08:05 +00:00
Sebastian
aca691fe2e Add Scroll Position Restoration on Shelf Details Page 2020-09-04 17:05:30 +02:00
Sebastian
9c4f2b8395 Add FullWidth Support to Text Input Component 2020-09-04 16:19:06 +02:00
Sebastian
d529ed0b17 Add Scroll Position Restoration Directive 2020-09-04 15:26:42 +02:00
Sebastian
c5e73bf578 Add Underscore between compartmentCode and compartmentInfo 2020-09-04 14:23:18 +02:00
Sebastian Neumair
9aa9e2155b Merged PR 256: #948 #949 Post-QA Bug Fixes and Improvements to Warenausgabe
Related work items: #944, #947, #948, #949
2020-09-04 10:58:28 +00:00
Sebastian Neumair
c7407c5036 Merged PR 254: #949 #948 Show Error Message on Shelf History Page | Catch Invalid SearchQuery Error in Searchbar Component
Related work items: #948, #949
2020-09-04 10:51:08 +00:00
Sebastian Neumair
7bd2e51148 Merged PR 255: Set Results Hits Based on Actual Result Hits (old: filterdCustomer hits)
Set Results Hits Based on Actual Result Hits (old: filterdCustomer hits)

Related work items: #877
2020-09-04 10:50:35 +00:00
Sebastian
8c988f0917 Set Results Hits Based on Actual Result Hits (old: filterdCustomer hits) 2020-09-04 12:31:17 +02:00
Sebastian
3b19f5c6ab Reactivate Old Edit Page For Entry Via Customer Module 2020-09-04 11:44:30 +02:00
Sebastian
79a1a5befc Warenausgabe Breadcrumb Header: Hide Filter on History and Edit Page 2020-09-04 10:58:41 +02:00
Sebastian Neumair
b2496e1c57 Merged PR 252: Set Correct Last Previous Path on Status Change
Related work items: #947
2020-09-03 21:59:03 +00:00
Sebastian
6a5546d0f2 #948 Catch Invalid SearchQuery Error in Searchbar Component 2020-09-03 23:56:11 +02:00
Sebastian
c72de1f08b Show Error Message on Shelf History Page 2020-09-03 23:40:24 +02:00
Lorenz Hilpert
1ac67cf1e5 Merged PR 253: Padding angepasst
Padding angepasst
2020-09-03 21:32:51 +00:00
Lorenz Hilpert
ad1cb0ff5d Padding angepasst 2020-09-03 23:31:01 +02:00
Sebastian Neumair
0270216f49 Merged PR 250: Add Search with CustomerCard (query for customerNumber before querying))
Related work items: #944
2020-09-03 15:10:10 +00:00
Sebastian Neumair
881ee9d8c7 Merged PR 251: Add Error Log (stacktrace) for startRemission Calls
Add Error Log (stacktrace) for startRemission Calls

Related work items: #929
2020-09-03 15:09:49 +00:00
Sebastian
6cd15f8eba Add Error Log (stacktrace) for startRemission Calls 2020-09-03 17:05:08 +02:00
Sebastian
03e4bcf760 Await Navigation Before Replacing last visited path 2020-09-03 12:40:56 +02:00
Sebastian
a3c53096ad Breadcrumb Management & History State Management on Status Change (WiP) 2020-09-03 12:12:16 +02:00
Sebastian
39de228eff Add Search with CustomerCard (query for customerNumber before querying)) 2020-09-03 10:55:04 +02:00
Lorenz Hilpert
7597832cbf Merged PR 248: Feature Warenausgeb
Related work items: #264
2020-09-02 16:14:45 +00:00
Lorenz Hilpert
cc69a0a24e Layout Fix; Edit Navigation Fix 2020-09-02 18:14:10 +02:00
Lorenz Hilpert
29160abb97 Merge branch 'develop' into feature/189-Warenausgabe/main 2020-09-02 17:45:55 +02:00
Sebastian Neumair
a68d9bc906 Merged PR 247: #264 Bearbeiten Detail Seite + Various Bug Fixes
Related work items: #264
2020-09-02 15:34:03 +00:00
Lorenz Hilpert
2bf7987280 Merged PR 243: Message bei Inaktivität geädnert
Message bei Inaktivität geädnert

Related work items: #738
2020-09-02 15:33:56 +00:00
Sebastian
3e81c825cf Merge branch 'feature/189-Warenausgabe/264-Bearbeiten/689-Edit-Form-Content-And-Styling' into feature/189-Warenausgabe/264-Bearbeiten/main 2020-09-02 17:25:08 +02:00
Sebastian
342dd04452 Update Calendar To Disable Sundays 2020-09-02 17:04:45 +02:00
Sebastian
9bc9be8538 Fix Duplicate Lieferdatum 2020-09-02 15:25:44 +02:00
Sebastian
41791981d7 Breadcrumb & Bookmark Styling 2020-09-02 15:12:58 +02:00
Sebastian
3fb6cd29f7 Update Search Result Hits in Breadcrumb 2020-09-02 12:21:28 +02:00
Sebastian
c2d021104c Merge remote-tracking branch 'origin/feature/189-Warenausgabe/264-Bearbeiten/689-Edit-Form-Content-And-Styling' into feature/189-Warenausgabe/264-Bearbeiten/689-Edit-Form-Content-And-Styling 2020-09-02 11:21:44 +02:00
Sebastian
4b3aedc685 Update Status, EstimatedShippingDate and PickUp Date in History Header 2020-09-02 11:21:39 +02:00
Lorenz Hilpert
0454d7e687 Order Details Card Anzeige Geändert 2020-09-02 11:18:09 +02:00
Sebastian
cfdf151b56 Remove Divider When Estimated Shipping Date or PickUp Date Not Shown 2020-09-02 07:34:23 +02:00
Sebastian
6cd85bcb58 Add Sticky Header on Edit Page 2020-09-01 21:24:33 +02:00
Sebastian
be05cf7fdd Update Placeholder for "Anmerkung" from "-" to "" 2020-09-01 20:54:56 +02:00
Sebastian
e4a58baba0 Fix SpecialComment Patch with undefined 2020-09-01 20:49:35 +02:00
Lorenz Hilpert
1620df76b9 Header zur Hinstory hinzugefügt 2020-09-01 18:38:41 +02:00
Lorenz Hilpert
a1c7167e50 Status Sortierung, Datepicker Styling, ROrderItem und OrderItemSubset Patch fix
Co-authored-by: s.neumair@paragon-data.de <s.neumair@paragon-data.de>
2020-09-01 17:30:34 +02:00
Michael Auer
6e7925a18c merge tag '923-Druckerdialog-Druckliste-ist-nicht-scrollbar' into develop 2020-09-01 15:27:13 +02:00
Michael Auer
053e28483e merge tag '875-Breadcrumb-Remission-Review-Zuruecksetzen-Verhalten' into develop 2020-09-01 15:25:37 +02:00
Michael Auer
b5d7f084f2 merge tag '889-Warenausgabe-Button-in-Navgation-deaktivieren' into develop 2020-09-01 15:23:34 +02:00
Sebastian
1c1a6c05c2 Update Editable Fields 2020-09-01 11:26:26 +02:00
Sebastian
3ebe35a0f6 Update ProcessingStatus Mapping and Wording 2020-09-01 11:14:05 +02:00
Sebastian
bd0d9765fd Update Processing Status Mapping on Details Page 2020-09-01 10:13:59 +02:00
Sebastian
b8faf2f2d6 Update ProcessingStatus Mapping 2020-09-01 09:43:02 +02:00
Sebastian
eb280d4533 Add Navigation on Patch Complete (incl. ProcessingStatus changed case)
+ Minor Stzling Changes Label Edit Page
+ Only Show enabled Status Options in Processing Status Dropdown
2020-08-31 22:30:05 +02:00
Lorenz Hilpert
720efdb3a4 Merge from Main Feature and Calling Update Requests for Shelf Items 2020-08-31 18:36:35 +02:00
Lorenz Hilpert
994ff7b31a Push Missing Changes 2020-08-31 13:22:04 +02:00
Lorenz Hilpert
cc55656b76 Merge branch 'feature/189-Warenausgabe/main'
Conflicts:
	apps/sales/src/app/modules/shelf/components/order-details-card/order-details-card.component.html
	apps/sales/src/app/modules/shelf/components/order-item-details/order-item-details.component.html
	apps/sales/src/app/modules/shelf/components/search-result-group/search-result-group.component.html
	apps/sales/src/app/modules/shelf/constants/processing-status-name.map.ts
	apps/sales/src/app/modules/shelf/pages/shelf-order-details/shelf-order-details.component.html
	apps/sales/src/app/modules/shelf/pages/shelf-order-details/shelf-order-details.component.ts
	apps/sales/src/app/modules/shelf/pipes/shelf-pipes.module.ts
	apps/sales/src/app/modules/shelf/shared/services/shelf-navigation.service.ts
	apps/sales/src/app/modules/shelf/shelf-routing.module.ts
	apps/sales/src/app/store/customer/shelf/details/details.actions.ts
	apps/sales/src/app/store/customer/shelf/details/details.effects.ts
	apps/sales/src/app/store/customer/shelf/details/details.facade.ts
	apps/sales/src/app/store/customer/shelf/details/details.reducer.ts
	apps/swagger/oms/src/lib/models/order-item-list-item-dto.ts
2020-08-31 13:21:40 +02:00
Sebastian
5f1733e147 Fix LabelPipe 2020-08-31 11:43:05 +02:00
Sebastian
d9c25dacf3 Fix Build Error 2020-08-31 11:31:47 +02:00
Lorenz Hilpert
a762c6b1b4 #260 Fix Teilabholung Id Falsch gesetzt 2020-08-31 05:16:41 +02:00
Lorenz Hilpert
570f237399 Anpassung Store/Facade; Routing enthält Status; 2020-08-31 04:40:00 +02:00
Lorenz Hilpert
cea4d9e4fb #258 Mehr - Weniger Pfeile geändert 2020-08-31 04:38:59 +02:00
Lorenz Hilpert
1518c0e41b Swagger Gen - Print API 2020-08-26 13:06:50 +02:00
Lorenz Hilpert
8ac66c12cb #258 - Warenausgabe // Detailseite - "Mehr" and "Weniger" - MwSt Wert laden 2020-08-20 17:52:10 +02:00
Lorenz Hilpert
8a2df5d060 Warenausgabe Details Sticky Buttons & setArrivedAndPrint function angepasst 2020-08-20 15:56:02 +02:00
Lorenz Hilpert
65aa27e64f Änderung Patch Comment 2020-08-20 14:47:23 +02:00
Lorenz Hilpert
6e78b4bacd #258 missing changes in order-item-details html 2020-08-20 12:27:54 +02:00
Lorenz Hilpert
b3509b510e #258 - Detailseite - "Mehr" and "Weniger" 2020-08-20 12:27:24 +02:00
Lorenz Hilpert
e143067a52 #854 - status Storniert x 2020-08-20 11:57:14 +02:00
Lorenz Hilpert
b1a5e0827a #853 - Abstände Format Icon 2020-08-20 11:45:33 +02:00
Holger Moritz
ea15f1941e Merged PR 246: Styling für Druckerdialog - Dropdown Max Höhe 350px
Styling für Druckerdialog - Dropdown Max Höhe 350px

Related work items: #923
2020-08-20 09:05:10 +00:00
Lorenz Hilpert
c7549b8594 #261 - Detailseite - Abholfrist 2020-08-19 17:29:08 +02:00
Lorenz Hilpert
a79e84fad8 #262 - Detailseite - Status ändern 2020-08-19 15:53:43 +02:00
Lorenz Hilpert
c9d7faf9a1 #263 - Detailseite - Anmerkung hinzufügen 2020-08-19 12:55:51 +02:00
Lorenz Hilpert
d87ceb1f74 #854 - status Storniert x Icon Anpassung 2020-08-18 17:45:35 +02:00
Lorenz Hilpert
c8fa18ed29 #855 Zeilenabstände 2020-08-18 17:32:36 +02:00
Lorenz Hilpert
2d5d461f02 Styling für Druckerdialog - Dropdown Max Höhe 350px 2020-08-18 16:50:49 +02:00
Lorenz Hilpert
87885cb0bd Message bei Inaktivität geädnert 2020-08-18 16:08:05 +02:00
Lorenz Hilpert
ad929324df Ändeung deadline, Styling Warenausgabe, Mehrfachauswahl 2020-08-18 15:33:31 +02:00
Lorenz Hilpert
ee2805332b Merge branch 'feature/189-Warenausgabe/264-Bearbeiten/main' into feature/189-Warenausgabe/main 2020-08-11 13:51:21 +02:00
Lorenz Hilpert
c1c2f3c41f Navigation zur Orderitem History 2020-08-11 12:49:03 +02:00
Lorenz Hilpert
a618ff0b63 Merge branch 'feature/189-Warenausgabe/main' into feature/189-Warenausgabe/578-Details-bestellt/main 2020-08-11 12:40:13 +02:00
Lorenz Hilpert
47e468b585 Detailseite für Warenausgabe bestellt/nachbestellt 2020-08-11 12:38:58 +02:00
Günther Schmidlehner
6729a86e02 Merge branch 'hotfix/875-Breadcrumb-Remission-Review-Zuruecksetzen-Verhalten' 2020-08-05 19:02:46 +02:00
Sebastian
c04f39f9df #875 Remove State Setting When Clicking On Remission Breadcrumb
+ Update Library to handle read-only objects in continueProcess
2020-08-04 12:28:51 +02:00
Günther Schmidlehner
49793da5be Merge branch 'hotfix/889-Warenausgabe-Button-in-Navgation-deaktivieren' 2020-08-03 15:55:30 +02:00
Lorenz Hilpert
c1b3e5f759 Menu Anpassung active class entfernt und Navigation Abholfach entfernt 2020-08-03 13:06:57 +02:00
Lorenz Hilpert
2a9d3419e6 Deactivated Style angepasst 2020-08-03 10:22:42 +02:00
Lorenz Hilpert
b1cfa3639b Routing für Warenausgabe deaktiviert und Icon Disabled wird angezeigt 2020-07-31 11:05:08 +02:00
Sebastian
891d2723c8 Fix Autocomplete Selection Changes Pending Filters 2020-07-30 17:57:55 +02:00
Sebastian
1b65354900 Fix Filters Empty on First Open 2020-07-30 17:20:23 +02:00
Sebastian
5a8c6111ff (WiP) Patch Form 2020-07-30 17:01:03 +02:00
Sebastian
fd1e2bfd84 (WiP) Create OrderNumber Edit Component 2020-07-30 12:11:30 +02:00
Sebastian
e388ca553e (WiP) Bearbeiten Seite Ui 2020-07-29 18:10:23 +02:00
Sebastian
cf6fbf9799 (WiP) Add Item Edit Form 2020-07-28 18:24:52 +02:00
Sebastian Neumair
56a2fce2b3 Merged PR 241: Add Intersection Observer Polyfill
+ Update Core Services due to changes in OMS

Related work items: #885
2020-07-28 14:38:21 +00:00
Sebastian Neumair
87397a9c1a Merged PR 240: #859 #860 #861 #862 #863 #864
Related work items: #859, #860, #861, #862, #863, #864
2020-07-28 14:38:10 +00:00
Lorenz Hilpert
8c2a7c0800 Added changeStatus Action and Effect for Shelf 2020-07-28 16:16:52 +02:00
Sebastian
a177c78dda Add .npmrc 2020-07-28 16:15:34 +02:00
Sebastian
5a8b9a8c12 Update Core Services Depending on OMS and Cat 2020-07-28 16:08:40 +02:00
Sebastian
8859265986 Add Intersection Observer Polyfill
+ Remove npmrc
2020-07-28 14:50:12 +02:00
Sebastian
eadbbff776 (WiP) Add Edit Order Item Header 2020-07-28 10:46:57 +02:00
Sebastian
91541e7282 (WiP) Basic General Form
+ Fix Unit Tests
2020-07-27 22:49:14 +02:00
Sebastian
bad1a4de6a Merge #578 (WiP) to access details page 2020-07-24 19:20:25 +02:00
Sebastian
6a7cc2f5c5 (WiP) Commit Initial SetUp Pages
WiP


WiP
2020-07-24 17:36:55 +02:00
Lorenz Hilpert
fa2da7d37b Store, Datepicker, Shelf Details by OrderNumber 2020-07-24 17:20:16 +02:00
Lorenz Hilpert
442c4a7b92 Merge branch 'feature/189-Warenausgabe/578-Details-bestellt/main' of ssh.dev.azure.com:v3/hugendubel/ISA/ISA-Frontend into feature/189-Warenausgabe/578-Details-bestellt/main 2020-07-24 14:29:39 +02:00
Lorenz Hilpert
ab62bc5de8 Update ISA OMS Swagger Generated Files 2020-07-24 14:29:21 +02:00
Sebastian
aae2039f3b Merge remote-tracking branch 'origin/feature/189-Warenausgabe/264-Bearbeiten/main' into feature/189-Warenausgabe/264-Bearbeiten/main 2020-07-24 12:06:40 +02:00
Sebastian
607c770d7d #864 Fix Resetting Filters To Default on Open - Close FIlter Overlay
+ Refactor pendingFilters in FilterService
2020-07-24 12:05:28 +02:00
Sebastian
eafff18078 #863 Hide Autocomplete Results on Click Outside 2020-07-24 12:05:28 +02:00
Sebastian
66973323e9 #863 Add Unit Test for ClickOutside Directive 2020-07-24 12:05:28 +02:00
Sebastian
e86c3a9355 #861 Update Filter Button Inactive Color to #9cb1c6 2020-07-24 12:05:28 +02:00
Sebastian
4d2d653cfa #860 Update Derivation of Wording on Reset / SelectAll Button 2020-07-24 12:05:28 +02:00
Sebastian
685e401e2d #859 Reset Filters on Warenausgabe Start Page (Search Page) 2020-07-24 12:05:28 +02:00
Sebastian Neumair
6f99586bd5 Merged PR 239: #860 #861 #862 #863 #864
Related work items: #860, #861, #862, #863, #864
2020-07-24 07:58:18 +00:00
Sebastian
918298f5fa Add Unit Tests for LogHeader, LogBody and History Log Component 2020-07-23 11:29:01 +02:00
Sebastian
9dd0d00cd7 Show All Log Entries 2020-07-22 22:30:52 +02:00
Sebastian
c491896291 Merge branch 'fix/864-Reset-Filters-On-SearchResults' into feature/189-Warenausgabe/277-Filter/main 2020-07-22 14:42:16 +02:00
Sebastian
15264399d3 #864 Fix Resetting Filters To Default on Open - Close FIlter Overlay
+ Refactor pendingFilters in FilterService
2020-07-22 14:35:11 +02:00
Sebastian
cb80c8d02c Merge branch 'feature/863-Close-Autocomplete-On-Click-Outside' into feature/189-Warenausgabe/277-Filter/main 2020-07-22 11:28:18 +02:00
Sebastian
1b02f2a9d3 #863 Hide Autocomplete Results on Click Outside 2020-07-22 11:22:56 +02:00
Sebastian
7fd7c2625b #863 Add Unit Test for ClickOutside Directive 2020-07-21 22:51:29 +02:00
Sebastian
c885942690 Merge branch 'fix/861-Filter-Button-Color-Module-Customer' into feature/189-Warenausgabe/277-Filter/main 2020-07-21 21:22:10 +02:00
Sebastian
118a987b4e #861 Update Filter Button Inactive Color to #9cb1c6 2020-07-21 21:21:52 +02:00
Sebastian
6b91b232ac Merge branch 'fix/860-Remove-All-Filters-sWording-In-Select-Filter' into feature/189-Warenausgabe/277-Filter/main 2020-07-21 21:09:51 +02:00
Sebastian
69556e3f06 #860 Update Derivation of Wording on Reset / SelectAll Button 2020-07-21 21:09:22 +02:00
Sebastian
6e435685e4 Merge remote-tracking branch 'origin/feature/189-Warenausgabe/277-Filter/main' into feature/189-Warenausgabe/277-Filter/main 2020-07-21 20:02:37 +02:00
Sebastian
2da58b28d9 Add Header Component and Add Reload History to refetch data 2020-07-21 17:41:38 +02:00
Sebastian Neumair
9139c5e135 Merged PR 238: #859 Reset Filters on Warenausgabe Start Page (Search Page)
Related work items: #859
2020-07-21 13:14:27 +00:00
Sebastian Neumair
b23b58925c Merged PR 237: #859 Reset Filters on Warenausgabe Start Page (Search Page)
Related work items: #859
2020-07-21 13:14:16 +00:00
Sebastian
17785bf0d4 #859 Reset Filters on Warenausgabe Start Page (Search Page) 2020-07-21 15:00:22 +02:00
Sebastian
e78c2fa8a0 #805 Add Timeline (css only) 2020-07-21 12:15:08 +02:00
Sebastian
ef656eef67 [WiP] Add Content And Styling for History Page 2020-07-21 10:22:09 +02:00
Sebastian
283f3da39d [Navigation] Set Up Store Operations to Allow fo Back Button To Work
Move History Page Navigiation to ShelfNavigationService
2020-07-21 10:22:09 +02:00
Sebastian
a36f0cc0a3 Get History for OrderItemSubsetId and Add Unit Tests for Effects 2020-07-21 10:22:09 +02:00
Sebastian
a2194ef191 Set Up Provisional Navigation To History 2020-07-21 10:22:09 +02:00
Sebastian Neumair
f6f36eba23 Merged PR 235: #850 #851 #852 Change Error Message Color Searchbar and Wording | Change Color on Select All and Arrow Up And Down in Filter Overlay | Remove Box Shadow From Shelf FIlter Overlay Select Filter Arrow
Related work items: #850, #851, #852
2020-07-21 08:00:18 +00:00
Sebastian Neumair
259266d138 Merged PR 233: #848 Show ResetButton On Filter Overlay Despite No Selected Filters | #849 Changing Primary Filters Does Not Affect Select Filters
Related work items: #848, #849
2020-07-21 07:59:51 +00:00
Sebastian Neumair
30eb82cca7 Merged PR 236: #850 #851 #852 Change Error Message Color Searchbar and Wording | Change Color on Select All and Arrow Up And Down in Filter Overlay | Remove Box Shadow From Shelf FIlter Overlay Select Filter Arrow
Related work items: #850, #851, #852
2020-07-21 07:59:39 +00:00
Sebastian Neumair
f87ebc2e55 Merged PR 232: #805 Fix Update Current Availability in validateAvailability
#805 Fix Update Current Availability in validateAvailability

+ Update Unit Tests

Related work items: #805
2020-07-21 07:59:26 +00:00
Sebastian
23535b63aa Merge branch 'fix/850-851-852-Styling-And-Color-Code-Fixes-For-Warenausgabe-Filters' into feature/189-Warenausgabe/277-Filter/main 2020-07-21 00:49:25 +02:00
Sebastian
eb80bd8447 #851 Change Color on Select All and Arrow Up And Down in Filter Overlay 2020-07-21 00:45:38 +02:00
Sebastian
a63fa7cebd #852 Remove Box Shadow From Shelf FIlter Overlay Select Filter Arrow 2020-07-21 00:37:56 +02:00
Sebastian
d239ddf651 #850 Change Error Message Color Searchbar and Wording 2020-07-21 00:32:49 +02:00
Sebastian
469340a305 Merge branch 'fix/848-849-Filter-Reset-On-Unselected-Filters-And-PrimaryFilters-Not-Affects-Selected-Filters' into feature/189-Warenausgabe/277-Filter/main 2020-07-21 00:14:01 +02:00
Sebastian
77e771980c #749 Show ResetButton On Filter Overlay Despite No Selected Filters 2020-07-21 00:10:56 +02:00
Sebastian
294712f6e0 #849 Changing Primary Filters Does Not Affect Select Filters 2020-07-20 23:19:21 +02:00
Sebastian
2e6f7a828b #805 Fix Update Current Availability in validateAvailability
+ Update Unit Tests
2020-07-20 21:15:48 +02:00
Michael Auer
6475f509f6 Merge tag '843-remove-address-validation-before-redirect-in-customer-search-result' into develop
ISA-1.0.893
2020-07-17 14:44:13 +02:00
Michael Auer
2e4ddcb958 Merge branch 'hotfix/843-remove-address-validation-before-redirect-in-customer-search-result' 2020-07-17 14:44:10 +02:00
Sebastian
7704a2ba97 #843 Remove Address Validation Before Redirect in CustomerSearchComp 2020-07-17 12:45:55 +02:00
Michael Auer
2e3bcf3cf4 Merge tag '835-gastkundenanlage-not-possible' into develop
ISA-1.0.883

# Conflicts:
#	apps/sales/src/app/modules/customer/components/create-customer-card/create-customer-card.component.ts
2020-07-17 12:36:41 +02:00
Sebastian Neumair
1e7ffce711 Merged PR 229: #805 #659 #841 Bestellpostensplit - Availability is sum of all supplier qtys Fix Disabled Guest Button In Create Customer Component & Set PreferredSupplier Availability for download articles
Related work items: #659, #805, #841
2020-07-17 00:08:41 +00:00
Sebastian Neumair
ebd0d31948 Merged PR 230: #737 Store LastFilterGroupChanged based on current filter & target
Related work items: #737
2020-07-17 00:08:22 +00:00
Sebastian Neumair
203fd91b5f Merged PR 231: #806 Prevent the filter apply button from jumping on open & close
Related work items: #806
2020-07-17 00:08:11 +00:00
Sebastian
386dd9263d #806 Prevent the filter apply button from jumping on open & close 2020-07-16 15:19:40 +02:00
Sebastian
9c779e4027 #737 Store LastFilterGroupChanged based on current filter & target
+ Add Unit Tests
2020-07-16 10:32:15 +02:00
Sebastian
98666063ce #841 Set PreferredSupplier Availability for download articles 2020-07-15 17:59:06 +02:00
Sebastian
50aa8716ae #805 #659 Bestellpostensplit - Availability is sum of all supplier qtys
Fix unneccessary console.log
2020-07-15 14:54:39 +02:00
Sebastian Neumair
3fa8fc8fd1 Merged PR 225: #810 #833 #830 Fix Mapping of DestinationDTO | Fix Backspace Searchbar Bug | Fix Filter Overlay Clear Results
Related work items: #810, #830, #833
2020-07-15 10:06:37 +00:00
Sebastian Neumair
407a812ce4 Merged PR 227: #823 Implement wew Logic to only reset select filters on "Alle Filter Zuruecksetzen"
Related work items: #823
2020-07-15 10:05:48 +00:00
Sebastian
8ed6d60ad5 Merge branch 'feature/189-Warenausgabe/277-Filter/685-Filterbereich' into feature/189-Warenausgabe/277-Filter/main 2020-07-14 23:13:54 +02:00
Sebastian
22d6cae3a6 Handle no result in FetchResultsDone
+ Improve Desktop Filter Overlay Layout
2020-07-14 23:09:01 +02:00
Sebastian
96b9f8cf16 Merge branch 'feature/189-Warenausgabe/277-Filter/823-Reset-Filters-Instead-Of-Delete-Filters' into feature/189-Warenausgabe/277-Filter/main 2020-07-14 16:59:26 +02:00
Sebastian
7647503cc6 #823 Reset Filters Now Only Resets Select Filter Options 2020-07-14 16:56:27 +02:00
Sebastian
8d3d095500 Merge branch 'feature/189-Warenausgabe/276-Startseite/828-Use-Search-Query-From-Searchbar-In-Filter-Overlay' into feature/189-Warenausgabe/276-Startseite/main 2020-07-14 13:32:36 +02:00
Sebastian
0aaf1d8f40 828 Share Query Across Searchbars (Search Page<--> FilterOverlay)
+ Updated Wording on search page
2020-07-14 13:28:09 +02:00
Sebastian Neumair
10cc8e75b8 Merged PR 224: #833 Fix Backspace Behaviour in Searchbar
Related work items: #833
2020-07-13 16:00:58 +00:00
Sebastian
2409651dc7 Merge branch 'feature/189-Warenausgabe/276-Startseite/833-Autocomplete-Searchbar-On-Backspace' into feature/189-Warenausgabe/276-Startseite/main 2020-07-13 17:51:57 +02:00
Sebastian
31a4774ba0 #833 Fix Backspace Behaviour in Searchbar 2020-07-13 17:42:28 +02:00
Sebastian Neumair
543cf21354 Merged PR 223: #810 Fix Mapping of DestinationDTO
+ NgRx Store Setup für Customer (der Store wird noch nicht verwendet, ich würde aber versuchen nach und nach den Customer Store von ngxs zu NgRx umzuziehen)
Der ngxs Store sowie die gesamte Logik ist undurchschaubar und wird uns mittelfristig vor Probleme stellen.

Related work items: #810, #811, #829, #832
2020-07-13 14:04:37 +00:00
Sebastian
f13a3e4782 Merge remote-tracking branch 'origin/feature/829-Get-And-Set-Delivery-And-Invoice-Address-On-Customer' into feature/829-Get-And-Set-Delivery-And-Invoice-Address-On-Customer 2020-07-13 16:00:50 +02:00
Sebastian
dee2f77151 #832 Fix Wrong Delivery Address in Order Checkout 2020-07-13 15:55:43 +02:00
Sebastian
72bebedd70 Merge remote-tracking branch 'origin/feature/189-Warenausgabe/276-Startseite/main' into feature/189-Warenausgabe/276-Startseite/main 2020-07-13 13:56:38 +02:00
Sebastian
9c4ea77045 #830 Fix Filter Overlay Close Results Cleared Error 2020-07-13 13:34:34 +02:00
Sebastian
57be60e452 #832 Fix Wrong Delivery Address in Order Checkout 2020-07-13 13:29:37 +02:00
Sebastian
cef1fa1e6f Remove VS Code Workbench Color Customization Settings 2020-07-13 12:43:32 +02:00
Lorenz Hilpert
653a0f8b51 Merged PR 222: Fehlermeldung beim starten => .reduce of undefined
Fehlermeldung beim starten => .reduce of undefined
2020-07-13 10:34:52 +00:00
Sebastian
21d91b99d5 #810 Fix Mapping of DestinationDTO 2020-07-13 12:22:48 +02:00
Lorenz Hilpert
fcaf694f0a Fehlermeldung beim starten => .reduce of undefined 2020-07-13 12:17:28 +02:00
Lorenz Hilpert
c45344f6b2 Merged PR 221: No optimization for test build
No optimization for test build
2020-07-13 09:31:08 +00:00
Lorenz Hilpert
245528a548 No optimization for test build 2020-07-13 11:15:56 +02:00
Sebastian Neumair
8a3271a3de Merged PR 219: #823 Reset Filters in Shelf Filter Overlay
Related work items: #666, #667, #668, #683, #685, #772, #773, #816, #823
2020-07-13 08:34:44 +00:00
Sebastian Neumair
e0115348a4 Merged PR 220: #830 Fix Filter Overlay Close Results Cleared Error
Related work items: #830
2020-07-13 08:32:32 +00:00
Sebastian
59405c41f6 Merge branch 'feature/189-Warenausgabe/276-Startseite/816-Einmalige-Abfrage-der-Suchergebnisse' into feature/189-Warenausgabe/276-Startseite/main 2020-07-13 08:44:21 +02:00
Sebastian
f6a4e3e413 #830 Fix Filter Overlay Close Results Cleared Error 2020-07-13 08:41:22 +02:00
Sebastian
f701c7dd46 #829 Initial NgRx Customers Store SetUp
Add Effects (WiP)


Further Implement Customer Store incl. first Unit Tests
2020-07-12 21:04:23 +02:00
Sebastian Neumair
c868ccc761 Merged PR 217: #823 Reset Filters in Shelf Filter Overlay
Related work items: #823
2020-07-10 13:21:00 +00:00
Lorenz Hilpert
d48cc25f96 Added vscode recommendations 2020-07-10 15:14:30 +02:00
Sebastian
9fdcc5bfad Merge branch 'feature/189-Warenausgabe/277-Filter/823-Reset-Filters-Instead-Of-Delete-Filters' into feature/189-Warenausgabe/277-Filter/main 2020-07-10 14:19:33 +02:00
Sebastian
bc6e5774c6 Fix Unit Tests 2020-07-10 14:19:13 +02:00
Lorenz Hilpert
f7d951d95e Added Prettier and Husky 2020-07-10 13:04:20 +02:00
Sebastian
c1c51eb45c Merge branch 'feature/189-Warenausgabe/277-Filter/823-Reset-Filters-Instead-Of-Delete-Filters' into feature/189-Warenausgabe/277-Filter/main 2020-07-09 19:02:49 +02:00
Sebastian
b08fab4266 #823 Reset Filters in Shelf Filter Overlay 2020-07-09 18:58:39 +02:00
Sebastian Neumair
7a645d3b94 Merged PR 216: #666 #816 iPad Scanning and Remove HitsOnly Call & Retrieve first Order Results on SearchPage
Related work items: #666, #816
2020-07-09 08:49:55 +00:00
Sebastian Neumair
fb751b0094 Merged PR 215: #816 Remove HitsOnly Call & Retrieve first Order Results on SearchPage
Fix Order Service Call to Get Warenausgabe Results

Related work items: #816
2020-07-09 01:28:44 +00:00
Sebastian
807928c67a Merge branch 'feature/189-Warenausgabe/276-Startseite/816-Einmalige-Abfrage-der-Suchergebnisse' into feature/189-Warenausgabe/276-Startseite/main 2020-07-08 21:59:35 +02:00
Sebastian
b1f1fe4133 #816 Remove HitsOnly Call & Retrieve first Order Results on SearchPage
Fix Order Service Call to Get Warenausgabe Results
2020-07-08 21:58:57 +02:00
Nico Hanus
bec683c654 enable nginx for testing 2020-07-08 15:22:07 +02:00
Sebastian Neumair
7885ed3207 Merged PR 214: #666 [iPad Scanning] Open Scanner on Scan Icon Click
+ Fix Set Filters in Search Page Call
+ Update Autocomplete Selection OnClick
+ Remove Autoresults on Searchbar X Icon

Related work items: #666
2020-07-08 08:30:50 +00:00
Sebastian
27a3b02ae3 Merge branch 'feature/189-Warenausgabe/276-Startseite/666-Ipad-Scanning' into feature/189-Warenausgabe/276-Startseite/main 2020-07-08 09:52:32 +02:00
Sebastian
86817060f3 [iPad Scanning] Open Scanner on Scan Icon Click
[Fix] Select Filters In HitsOnly Call {Search}

Set Autocomplete Result on Click


Close Autoresults on Searchbar X Icon


Reset Focus on Input after Clicking Autocomplete Result
2020-07-08 08:18:43 +02:00
Lorenz Hilpert
74053040bc Merged PR 213: merge integration into develop with resolved merge conflict
Related work items: #43, #268, #608, #612, #616, #622, #623, #624, #631, #635, #648, #651, #652, #653, #654, #657, #661, #663, #724, #729, #733, #742, #761, #763, #771, #787, #788
2020-07-07 13:09:16 +00:00
Lorenz Hilpert
321470797b Merge branch 'integration' into develop 2020-07-07 15:05:33 +02:00
Sebastian Neumair
86cde05804 Merged PR 211: #804 Fix Country Errors Mapping
#804 Fix Country Errors Mapping

Related work items: #804
2020-07-07 12:47:18 +00:00
Sebastian
d011bebba5 #804 Fix Country Errors Mapping 2020-07-07 12:20:23 +02:00
Sebastian Neumair
470c58a165 Merged PR 210: #276 #274 #277 [Warenausgabe] --- [Startseite] [Filter] [Trefferliste]
Related work items: #664, #665, #666, #667, #668, #671, #680, #681, #682, #683, #684, #685, #686, #687
2020-07-07 09:50:54 +00:00
Sebastian Neumair
0a02bfca1d Merged PR 209: #667 #668 #772 #683 #685 #773 Autocomplete &Filters from Backend
Related work items: #667, #668, #683, #685, #772, #773
2020-07-07 08:43:06 +00:00
Sebastian
76afd571df Fix Imports from Merge 2020-07-07 10:05:08 +02:00
Sebastian
1dbdd0b5d4 Merge Main Feature Branch 2020-07-07 09:59:22 +02:00
Sebastian
1bcbaca4bc Merge branch 'feature/189-Warenausgabe/276-Startseite/667-Autovervollstaendigung' into feature/189-Warenausgabe/276-Startseite/main 2020-07-07 09:47:34 +02:00
Sebastian
03f77de3d7 #667 #668 #772 #683 #685 #773
Autocomplete and Filters from Backend
2020-07-07 09:47:20 +02:00
Sebastian
93359a8f10 Merge remote-tracking branch 'origin/feature/189-Warenausgabe/276-Startseite/main' into feature/189-Warenausgabe/276-Startseite/main 2020-07-06 17:33:14 +02:00
Sebastian
bbb476329f Add Unit Test for History State Reducer 2020-07-06 17:32:54 +02:00
Lorenz Hilpert
0c74a80c56 Merged PR 208: #673 #677 #678 #679 Trefferliste fertiggestellt
#673 #677 #678 #679 Trefferliste fertiggestellt
2020-07-06 13:32:19 +00:00
Lorenz Hilpert
f588e23b7a #673 #677 #678 #679 Trefferliste fertiggestellt 2020-07-06 14:30:22 +02:00
Sebastian
03e46f33a7 Merge branch 'feature/189-Warenausgabe/594-Historie/719-Navigation' into feature/189-Warenausgabe/594-Historie/main 2020-07-03 11:48:15 +02:00
Sebastian
72236cbec2 Add Unit Test for History State Reducer 2020-07-03 11:44:19 +02:00
Sebastian Neumair
ccaefc4a03 Merged PR 207: Update Search for Orders in Warenausgabe
+ WiP for History Page (Store)
2020-07-03 09:06:06 +00:00
Sebastian
4bdff93db9 Update call to search for orders in Warenausgabe 2020-07-02 17:58:23 +02:00
Sebastian
0b706743b8 [History] Basic Store SetUp (WiP) 2020-07-02 16:52:30 +02:00
Lorenz Hilpert
5f16f8ec64 TASKS.md Upgedated 2020-07-02 13:17:36 +02:00
Lorenz Hilpert
3e6733f75b Merge branch 'feature/189-Warenausgabe/main' of ssh.dev.azure.com:v3/hugendubel/ISA/ISA-Frontend into feature/189-Warenausgabe/main 2020-07-02 13:09:49 +02:00
Lorenz Hilpert
e54c842c48 Added TASKS.md file 2020-07-02 13:09:25 +02:00
Lorenz Hilpert
2187775833 Merged PR 206: Trefferliste 2020-07-02 10:57:09 +00:00
Lorenz Hilpert
9ffe988573 Merge branch 'feature/189-Warenausgabe/main' into feature/189-Warenausgabe/274-Trefferliste/main 2020-07-02 12:54:55 +02:00
Lorenz Hilpert
a0470d24f7 Trefferliste Positionierung Vormerker 2020-07-02 11:40:41 +02:00
Sebastian Neumair
c1b12297bb Merged PR 205: Warenausgabe Suche und Filter Overlay (ohne Fetching der Filter und Autovervollständigung da BE noch nicht fertig=
Sobald das Backend fertig ist werden die restlichen ToDos erledigt.

Related work items: #664, #665, #666, #667, #668, #671, #680, #681, #682, #683, #684, #685, #686, #687
2020-07-02 08:34:48 +00:00
Lorenz Hilpert
e96826c175 #678 [Trefferliste] [Kachel] Bookmark - Hinzugefügt 2020-07-02 10:31:15 +02:00
Lorenz Hilpert
aa587de5ac Store SearchFacade.getResultGroupedByCustomer teile ausgelagert 2020-07-02 10:30:26 +02:00
Sebastian
47e9518353 Merge branch 'feature/189-Warenausgabe/277-Filter/685-Filterbereich' into feature/189-Warenausgabe/277-Filter/main 2020-06-30 22:21:18 +02:00
Sebastian
b8c717a071 #685 Manage Focus for Searchbar on Filter Overlay Close 2020-06-30 22:03:18 +02:00
Lorenz Hilpert
9c6e1e063c #679 [Trefferliste] [Kachel] Bezahlt Marker - pro Item 2020-06-30 17:18:43 +02:00
Lorenz Hilpert
91f52b22cd #679 [Trefferliste] [Kachel] Bezahlt Marker 2020-06-30 17:13:00 +02:00
Sebastian
f15cbbaf93 #685 add FetchFillter & FetchFilterDone to get filters for shelf overlay
+ Remove Icon Component for Close Buttons in FIlter Overlays
2020-06-30 16:33:37 +02:00
Sebastian
8d68647d45 #685 Add Customer Theme to Shelf Filter Overlay
+ Set Focus on Searchbar Submit Button on Filter Selection
2020-06-30 14:12:51 +02:00
Nico Hanus
6a34553c9f added version in docker to npm package.json 2020-06-30 11:46:54 +02:00
Sebastian
8df2ee5018 #685 Autocomplete Suggestion Positioning 2020-06-30 09:44:23 +02:00
Sebastian
006a124e4b #685 Filterbereich 2020-06-29 18:14:07 +02:00
Lorenz Hilpert
b0a42948c8 Styling 2020-06-29 17:45:15 +02:00
Lorenz Hilpert
6795bc560e #675 #677 Trefferliste Anzeige udn Styling 2020-06-29 17:41:41 +02:00
Sebastian
8c25634fd0 Merge branch 'feature/189-Warenausgabe/277-Filter/684-Suchfeld' into feature/189-Warenausgabe/277-Filter/main 2020-06-29 15:44:46 +02:00
Sebastian
53d8213002 #684 Add Searchbar to Remisison Overlay 2020-06-29 15:42:15 +02:00
Sebastian
7f8b31f8f3 #684 [Refactor] Remove Scandit Imports in Shared Lib 2020-06-29 15:42:15 +02:00
Sebastian
d8e04dd50d #684 [Refactor] Search Component for all use cases
Remove unused imports and change default for allowScan


Update Imports
2020-06-29 15:42:15 +02:00
Sebastian
3f83e2c08d #684 [Store] Add Selectors for PrimaryFilters and SelectedFilters
Fix Imports to prevent circular dependencies
2020-06-29 15:42:15 +02:00
Sebastian
60c3cbc44d [Store] Add Selectors for PrimaryFilters and SelectedFilters 2020-06-29 10:12:26 +02:00
Sebastian Neumair
5d3a503d86 Merged PR 204: #788 Hide Truck Icon when primary CtA "In den Warenkorb" is dissbled
#788 Hide Truck Icon when primary CtA "In den Warenkorb" is dissbled

Related work items: #787, #788
2020-06-29 08:09:29 +00:00
Sebastian
46f85de55c Fix Imports To Prevent Circular Dependencies 2020-06-29 10:03:04 +02:00
Sebastian
36a2770d1d #788 Hide Truck Icon when primary CtA "In den Warenkorb" is dissbled 2020-06-29 09:49:33 +02:00
Sebastian
fb6c69fd89 Merge Store Changes from Main Branch 2020-06-26 11:46:21 +02:00
Lorenz Hilpert
5aa9e26be7 Merged PR 202: Store für Shelf Anpassungen 2020-06-26 08:48:33 +00:00
Lorenz Hilpert
affdf6fe05 Shelf State Data FetchResults 2020-06-26 10:42:42 +02:00
Sebastian
3a571ab3f9 Merge branch 'feature/189-Warenausgabe/277-Filter/681-Filter-View' into feature/189-Warenausgabe/277-Filter/main 2020-06-26 10:41:59 +02:00
Sebastian
0bda33a327 #683 Add Chips to Filter View 2020-06-26 10:39:14 +02:00
Sebastian
a012599f27 #681 Open Shelf Filter Overlay 2020-06-25 14:38:35 +02:00
Sebastian Neumair
e382e1a562 Merged PR 201: #722 Remove erroneous false value for undefined addresses
Logik Setzung des Kommas im Address-String hat false returned. Jetzt mit ternary geloest.

Related work items: #722
2020-06-25 11:45:44 +00:00
Sebastian
1fd09e5ded Merge branch 'feature/189-Warenausgabe/277-Filter/680-Statusleiste' into feature/189-Warenausgabe/277-Filter/main 2020-06-25 11:07:29 +02:00
Sebastian
6930f44633 #680 [Filter] Statusleiste 2020-06-25 10:28:11 +02:00
Sebastian
cccf7d1d70 #722 Remove erroneous false value for undefined addresses 2020-06-24 15:32:12 +02:00
Sebastian
7aa258ac9e Update Store by Adding Set and Clear Filters 2020-06-24 15:26:48 +02:00
Lorenz Hilpert
03bb8c3484 SearchState anpassungen 2020-06-24 13:36:58 +02:00
Lorenz Hilpert
98ccc48424 Shelf State Erweiterung 2020-06-24 12:17:06 +02:00
Sebastian
8c246803ad Merge branch 'feature/189-Warenausgabe/276-Startseite/668-Suchverhalten' into feature/189-Warenausgabe/276-Startseite/main 2020-06-24 11:55:42 +02:00
Sebastian
b0eae87a5d Set Search Input in Ngrx Store 2020-06-24 11:30:37 +02:00
Sebastian
03e441f5af Merge Ngrx Store Base 2020-06-24 10:24:07 +02:00
Sebastian
4f16bef6e3 [Refactor] CollectingShelfService Method searchWarenausgabe 2020-06-24 10:19:53 +02:00
Sebastian
e9061b4ef0 Merge remote-tracking branch 'refs/remotes/origin/feature/189-Warenausgabe/276-Startseite/main'
Conflicts:
	apps/sales/src/scss/_theme.scss
	apps/sales/src/scss/_variables.scss
2020-06-24 09:46:42 +02:00
Sebastian
3e387a3390 #667 Add Automplete Result Styling 2020-06-24 09:21:23 +02:00
Sebastian
ba7be52b85 #665 Customize Searchbar for Desktop 2020-06-24 09:20:43 +02:00
Sebastian
a2c35ec67b #664 Add Searchbar Component incl. Data Retrieval and Navigation Logic
[Shelf Searchbar iPad] Basic Styling Setup


Add AutoFocus to search input


Add Logic For Switching Between Search and Scan Icon


#664 Add Searchbar Component incl. Data Retrieval and Navigation Logic
2020-06-24 09:20:43 +02:00
Lorenz Hilpert
4ab9603238 State für Warenausgabe initial erstellt
Co-authored-by: s.neumair@paragon-data.de <s.neumair@paragon-data.de>
2020-06-23 18:35:09 +02:00
Lorenz Hilpert
c8e22cb19c Merged PR 200: Merge from develop 2020-06-23 16:04:43 +00:00
Sebastian Neumair
f41a7142e3 Merged PR 199: [Fix] TaskCalendar State
[Fix] TaskCalendar State
2020-06-23 16:03:34 +00:00
Sebastian
720e6c293e [Fix] TaskCalendar State 2020-06-23 18:02:02 +02:00
Lorenz Hilpert
24c4df5b9f Merged PR 198: [DISABLED] Merge Tätigkeitskalender into develop
Navigation zur Seite Tätigkeitskalender ist nicht aktiv

Related work items: #563, #568
2020-06-23 14:44:31 +00:00
Lorenz Hilpert
f23140cba5 Merge branch 'develop' into feature/ISA-9-Filiale-Taetigkeitskalender 2020-06-23 16:29:40 +02:00
Lorenz Hilpert
613c928ec4 Routing für task-calendar entfernt 2020-06-23 16:05:41 +02:00
Sebastian
0f80935e76 Merge branch 'feature/189-Warenausgabe/276-Startseite/667-Autovervollstaendigung' into feature/189-Warenausgabe/276-Startseite/main 2020-06-23 14:50:13 +02:00
Sebastian
ce43e0261e #667 Add Automplete Result Styling 2020-06-23 14:43:17 +02:00
Nico Hanus
0dd86af01d added version in docker to npm package.json 2020-06-23 14:32:27 +02:00
Lorenz Hilpert
bf8a11ea08 Merged PR 197: #537 - Meldetext von Downloads und NonBooks richtig anzeigen
#537 -  Meldetext von Downloads und NonBooks richtig anzeigen
2020-06-23 10:42:27 +00:00
Lorenz Hilpert
46cbda0357 Merge remote-tracking branch 'origin/develop' into develop 2020-06-23 12:40:18 +02:00
Lorenz Hilpert
2f42c6c8c8 #537 - Meldetext von Downloads und NonBooks richtig anzeigen 2020-06-23 12:32:15 +02:00
Nico Hanus
923e8a1dd4 fix docker build with pull 2020-06-23 08:42:37 +02:00
Sebastian
50694b1e26 Merge branch 'feature/189-Warenausgabe/276-Startseite/665-Desktop-Suchfeld' into feature/189-Warenausgabe/276-Startseite/main 2020-06-22 19:01:41 +02:00
Sebastian
1d09cf0dc2 #665 Customize Searchbar for Desktop 2020-06-22 18:58:21 +02:00
Lorenz Hilpert
d3e61d5ab8 Merged PR 195: #759 Meldetext // Für downloads anzeigen
#759 Meldetext // Für downloads anzeigen
2020-06-22 16:39:22 +00:00
Lorenz Hilpert
4add376957 #759 Meldetext // Für downloads anzeigen 2020-06-22 17:36:08 +02:00
Sebastian
86e802f4b8 Merge branch 'feature/189-Warenausgabe/276-Startseite/664-Ipad-Suchfeld' into feature/189-Warenausgabe/276-Startseite/main 2020-06-22 15:58:35 +02:00
Sebastian
1bddf2b4f1 #664 Add Searchbar Component incl. Data Retrieval and Navigation Logic
[Shelf Searchbar iPad] Basic Styling Setup


Add AutoFocus to search input


Add Logic For Switching Between Search and Scan Icon


#664 Add Searchbar Component incl. Data Retrieval and Navigation Logic
2020-06-22 15:57:45 +02:00
Lorenz Hilpert
6b8423e5c5 Merge branch 'integration' into develop 2020-06-18 17:52:14 +02:00
Sebastian Neumair
3717f56665 Merged PR 131: Fix Import selectTaskById in EditTaskComponent
Fix Import selectTaskById in EditTaskComponent
2020-06-02 14:36:03 +00:00
Sebastian
45fca71f3b Fix Import selectTaskById in EditTaskComponent 2020-06-02 16:34:43 +02:00
Sebastian Neumair
f8faffca41 Merged PR 129: Add addImageToTask to TaskCalendarFacade to upload confirmation image
Add addImageToTask to TaskCalendarFacade to upload confirmation image
2020-06-02 14:20:31 +00:00
Sebastian
93e9b232cf Add addImageToTask to TaskCalendarFacade to upload confirmation image 2020-06-02 16:04:03 +02:00
Sebastian
18df1c7a96 Merge remote-tracking branch 'origin/feature/ISA-9-Filiale-Taetigkeitskalender' into feature/ISA-9-Filiale-Taetigkeitskalender 2020-05-26 16:32:53 +02:00
Sebastian
cdeade29d7 Add Border to Task Items 2020-05-26 13:54:15 +02:00
Lorenz Hilpert
235023ae9f Merged PR 92: Aufgabe erledigen: Store Methoden und Service-Aufrufe in Effekten
Related work items: #563
2020-05-26 11:35:11 +00:00
Lorenz Hilpert
aadf5efc5e State for Task Articles 2020-05-26 12:39:56 +02:00
Sebastian
04389de476 Add Overflow Scroll to Calender View Component
Add Sticky Nav


Add Media Query for Calendar Component Height

Update Layout Border Radius
2020-05-26 11:41:14 +02:00
Sebastian Neumair
a2da0da586 Merged PR 88: Modal Dialog Service + Basic Component Styling
Related work items: #568
2020-05-25 15:20:20 +00:00
Sebastian
969e5d74e5 Update npmrc 2020-05-25 15:55:18 +02:00
Sebastian
1fbbe1161b Add Basic Layout Styling for TaskViewComponent & Modal Edit Task 2020-05-25 14:57:03 +02:00
Lorenz Hilpert
711cb2cce7 Store Actions And Effects Get Files 2020-05-25 14:35:59 +02:00
Sebastian
8226bd69f5 Add Components for Modal Dialoue + Icons 2020-05-25 09:57:42 +02:00
Sebastian
157d1f8942 Merge branch 'feature/572-Modaler-Dialog-Styling' into feature/ISA-568-Add-Shared-Modal-Dialogue-Service 2020-05-22 12:13:54 +02:00
Sebastian
e50afa3306 Update Modal Dialog Service 2020-05-22 12:10:55 +02:00
Lorenz Hilpert
baa8b21a15 Update Task Calendar Actions 2020-05-22 12:08:23 +02:00
Lorenz Hilpert
6ac461be61 Scss Datei Für Modalen Dialog Sytling 2020-05-22 10:45:20 +02:00
Sebastian
1b46534bf0 Add ModalService 2020-05-20 17:52:21 +02:00
Sebastian
ed59777e04 Show Tasks in Task List View
Show Item in Task List Component
2020-05-20 13:58:57 +02:00
Sebastian
fe300effa8 Add Routing to Tasks 2020-05-19 18:07:30 +02:00
Sebastian
489dc9a014 Get Current Branch, Set Default Filters and Show Fetched Items 2020-05-19 18:07:15 +02:00
Sebastian
9c5c4b4880 Merge branch 'feature/2020-02-item13-taetigkeitskalendar' into feature/ISA-9-Filiale-Taetigkeitskalender 2020-05-19 14:41:39 +02:00
Sebastian
3b26c27a80 Get, Set, Patch Tasks in Redux Store 2020-05-19 13:01:52 +02:00
Lorenz Hilpert
e5732e70b7 @swagger/eis lib angelegt & @ngrx/store basis angelegt 2020-05-18 18:59:14 +02:00
Lorenz Hilpert
91939a0fc9 Merge develop into feature/2020-02-item13-taetigkeitskalendar 2020-05-18 12:57:05 +02:00
Sebastian Neumair
91432a649b Add calendar component 2020-01-31 17:05:55 +01:00
Sebastian Neumair
9b94d716e7 Add routing to calendar component 2020-01-30 16:01:59 +01:00
Sebastian Neumair
a618beb8e6 Add Icon for Taetigkeitskalender inactive state 2020-01-30 15:04:26 +01:00
Sebastian Neumair
e9bef54215 Set up Store (WIP) 2020-01-29 11:30:59 +01:00
1516 changed files with 47480 additions and 9161 deletions

16
.npmrc
View File

@@ -1,13 +1,3 @@
registry=https://pkgs.dev.azure.com/hugendubel/_packaging/hugendubel%40Local/npm/registry/
always-auth=true
; Treat this auth token like a password. Do not share it with anyone, including Microsoft support. This token expires on or before 25.08.2020.
; begin auth token
//pkgs.dev.azure.com/hugendubel/_packaging/hugendubel%40Local/npm/registry/:username=hugendubel
//pkgs.dev.azure.com/hugendubel/_packaging/hugendubel%40Local/npm/registry/:_password=M2JkaDdwNjIzbWVoZGlmeDU3N2Ficjc3M252NXBkaWg1M2VtaW94dXp5amwyejNkaW5yYQ==
//pkgs.dev.azure.com/hugendubel/_packaging/hugendubel%40Local/npm/registry/:email=npm requires email to be set but doesn't use the value
//pkgs.dev.azure.com/hugendubel/_packaging/hugendubel%40Local/npm/:username=hugendubel
//pkgs.dev.azure.com/hugendubel/_packaging/hugendubel%40Local/npm/:_password=M2JkaDdwNjIzbWVoZGlmeDU3N2Ficjc3M252NXBkaWg1M2VtaW94dXp5amwyejNkaW5yYQ==
//pkgs.dev.azure.com/hugendubel/_packaging/hugendubel%40Local/npm/:email=npm requires email to be set but doesn't use the value
; end auth token
@isa:registry=https://pkgs.dev.azure.com/hugendubel/_packaging/hugendubel%40Local/npm/registry/
@cmf:registry=https://pkgs.dev.azure.com/hugendubel/_packaging/hugendubel%40Local/npm/registry/
always-auth=true

10
.prettierignore Normal file
View File

@@ -0,0 +1,10 @@
# Add files here to ignore them from prettier formatting
/dist
/coverage
/helmvalues
/apps/swagger
/ng-swagger-gen
*.json
*.yml

5
.prettierrc.json Normal file
View File

@@ -0,0 +1,5 @@
{
"singleQuote": true,
"printWidth": 140
}

9
.vscode/extensions.json vendored Normal file
View File

@@ -0,0 +1,9 @@
{
"recommendations": [
"johnpapa.angular2",
"esbenp.prettier-vscode",
"angular.ng-template",
"ms-vscode.vscode-typescript-tslint-plugin",
"eg2.vscode-npm-script"
]
}

View File

@@ -1,9 +1,11 @@
#stage 1
FROM node:10-stretch as node
ARG IS_PRODUCTION=false
ARG SEMVERSION=1.0.0
WORKDIR /app
COPY . .
RUN umask 0022
RUN npm version ${SEMVERSION}
RUN npm install --always-auth=false
RUN if [ "${IS_PRODUCTION}" = "true" ] ; then npm run-script build-prod ; else npm run-script build ; fi

4
TASKS.md Normal file
View File

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

View File

@@ -31,7 +31,9 @@
"libs/ui/tsconfig.lib.json",
"libs/ui/tsconfig.spec.json"
],
"exclude": ["**/node_modules/**"]
"exclude": [
"**/node_modules/**"
]
}
}
}
@@ -47,6 +49,7 @@
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "dist/sales",
"outputHashing": "all",
"index": "apps/sales/src/index.html",
"main": "apps/sales/src/main.ts",
"polyfills": "apps/sales/src/polyfills.ts",
@@ -55,11 +58,16 @@
"apps/sales/src/favicon.ico",
"apps/sales/src/assets",
"apps/sales/src/manifest.webmanifest",
"apps/sales/src/browserconfig.xml",
"apps/sales/src/silent-refresh.html"
],
"styles": ["apps/sales/src/styles.scss"],
"styles": [
"apps/sales/src/styles.scss"
],
"stylePreprocessorOptions": {
"includePaths": ["apps/sales/src/scss"]
"includePaths": [
"apps/sales/src/scss"
]
},
"scripts": []
},
@@ -89,25 +97,7 @@
],
"serviceWorker": true
},
"development": {
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"aot": true,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"budgets": [
{
"type": "initial",
"maximumWarning": "2mb",
"maximumError": "5mb"
}
],
"serviceWorker": true
}
"development": {}
}
},
"serve": {
@@ -143,7 +133,14 @@
"polyfills": "apps/sales/src/polyfills.ts",
"tsConfig": "apps/sales/tsconfig.spec.json",
"karmaConfig": "apps/sales/karma.conf.js",
"styles": ["apps/sales/src/styles.scss"],
"styles": [
"apps/sales/src/styles.scss"
],
"stylePreprocessorOptions": {
"includePaths": [
"apps/sales/src/scss"
]
},
"scripts": [],
"assets": [
"apps/sales/src/favicon.ico",
@@ -159,7 +156,9 @@
"apps/sales/tsconfig.app.json",
"apps/sales/tsconfig.spec.json"
],
"exclude": ["**/node_modules/**"]
"exclude": [
"**/node_modules/**"
]
}
}
}
@@ -188,7 +187,9 @@
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": "apps/sales-e2e/tsconfig.e2e.json",
"exclude": ["**/node_modules/**"]
"exclude": [
"**/node_modules/**"
]
}
}
}
@@ -221,7 +222,9 @@
"libs/sso/tsconfig.lib.json",
"libs/sso/tsconfig.spec.json"
],
"exclude": ["**/node_modules/**"]
"exclude": [
"**/node_modules/**"
]
}
}
}
@@ -254,7 +257,9 @@
"apps/swagger/availability/tsconfig.lib.json",
"apps/swagger/availability/tsconfig.spec.json"
],
"exclude": ["**/node_modules/**"]
"exclude": [
"**/node_modules/**"
]
}
}
}
@@ -287,7 +292,9 @@
"apps/swagger/checkout/tsconfig.lib.json",
"apps/swagger/checkout/tsconfig.spec.json"
],
"exclude": ["**/node_modules/**"]
"exclude": [
"**/node_modules/**"
]
}
}
}
@@ -320,7 +327,9 @@
"apps/swagger/crm/tsconfig.lib.json",
"apps/swagger/crm/tsconfig.spec.json"
],
"exclude": ["**/node_modules/**"]
"exclude": [
"**/node_modules/**"
]
}
}
}
@@ -353,7 +362,9 @@
"apps/swagger/isa/tsconfig.lib.json",
"apps/swagger/isa/tsconfig.spec.json"
],
"exclude": ["**/node_modules/**"]
"exclude": [
"**/node_modules/**"
]
}
}
}
@@ -386,7 +397,9 @@
"apps/swagger/oms/tsconfig.lib.json",
"apps/swagger/oms/tsconfig.spec.json"
],
"exclude": ["**/node_modules/**"]
"exclude": [
"**/node_modules/**"
]
}
}
}
@@ -419,7 +432,9 @@
"apps/swagger/print/tsconfig.lib.json",
"apps/swagger/print/tsconfig.spec.json"
],
"exclude": ["**/node_modules/**"]
"exclude": [
"**/node_modules/**"
]
}
}
}
@@ -452,7 +467,44 @@
"apps/swagger/cat/tsconfig.lib.json",
"apps/swagger/cat/tsconfig.spec.json"
],
"exclude": ["**/node_modules/**"]
"exclude": [
"**/node_modules/**"
]
}
}
}
},
"@swagger/eis": {
"projectType": "library",
"root": "apps/swagger/eis",
"sourceRoot": "apps/swagger/eis/src",
"prefix": "lib",
"architect": {
"build": {
"builder": "@angular-devkit/build-ng-packagr:build",
"options": {
"tsConfig": "apps/swagger/eis/tsconfig.lib.json",
"project": "apps/swagger/eis/ng-package.json"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "apps/swagger/eis/src/test.ts",
"tsConfig": "apps/swagger/eis/tsconfig.spec.json",
"karmaConfig": "apps/swagger/eis/karma.conf.js"
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"apps/swagger/eis/tsconfig.lib.json",
"apps/swagger/eis/tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**"
]
}
}
}
@@ -491,7 +543,112 @@
}
}
}
},
"@isa/remission": {
"projectType": "library",
"root": "apps/isa/remission",
"sourceRoot": "apps/isa/remission/src",
"prefix": "lib",
"architect": {
"build": {
"builder": "@angular-devkit/build-ng-packagr:build",
"options": {
"tsConfig": "apps/isa/remission/tsconfig.lib.json",
"project": "apps/isa/remission/ng-package.json"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "apps/isa/remission/src/test.ts",
"tsConfig": "apps/isa/remission/tsconfig.spec.json",
"karmaConfig": "apps/isa/remission/karma.conf.js"
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"apps/isa/remission/tsconfig.lib.json",
"apps/isa/remission/tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**"
]
}
}
}
},
"@domain/crm": {
"projectType": "library",
"root": "apps/domain/crm",
"sourceRoot": "apps/domain/crm/src",
"prefix": "crm",
"architect": {
"build": {
"builder": "@angular-devkit/build-ng-packagr:build",
"options": {
"tsConfig": "apps/domain/crm/tsconfig.lib.json",
"project": "apps/domain/crm/ng-package.json"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "apps/domain/crm/src/test.ts",
"tsConfig": "apps/domain/crm/tsconfig.spec.json",
"karmaConfig": "apps/domain/crm/karma.conf.js"
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"apps/domain/crm/tsconfig.lib.json",
"apps/domain/crm/tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**"
]
}
}
}
},
"@domain/checkout": {
"projectType": "library",
"root": "apps/domain/checkout",
"sourceRoot": "apps/domain/checkout/src",
"prefix": "checkout",
"architect": {
"build": {
"builder": "@angular-devkit/build-ng-packagr:build",
"options": {
"tsConfig": "apps/domain/checkout/tsconfig.lib.json",
"project": "apps/domain/checkout/ng-package.json"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "apps/domain/checkout/src/test.ts",
"tsConfig": "apps/domain/checkout/tsconfig.spec.json",
"karmaConfig": "apps/domain/checkout/karma.conf.js"
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"apps/domain/checkout/tsconfig.lib.json",
"apps/domain/checkout/tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**"
]
}
}
}
}
},
"defaultProject": "sales"
}
}

View File

@@ -0,0 +1,25 @@
# 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

@@ -0,0 +1,32 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma'),
],
client: {
clearContext: false, // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../../../coverage/domain/checkout'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true,
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true,
});
};

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,16 @@
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'checkout-checkout',
template: `
<p>
checkout works!
</p>
`,
styles: [],
})
export class CheckoutComponent implements OnInit {
constructor() {}
ngOnInit() {}
}

View File

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

View File

@@ -0,0 +1,12 @@
import { TestBed } from '@angular/core/testing';
import { CheckoutService } from './checkout.service';
describe('CheckoutService', () => {
beforeEach(() => TestBed.configureTestingModule({}));
it('should be created', () => {
const service: CheckoutService = TestBed.get(CheckoutService);
expect(service).toBeTruthy();
});
});

View File

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

View File

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

View File

@@ -0,0 +1,15 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js/dist/zone';
import 'zone.js/dist/zone-testing';
import { getTestBed } from '@angular/core/testing';
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
declare const require: any;
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

View File

@@ -0,0 +1,26 @@
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/lib",
"target": "es2015",
"declaration": true,
"inlineSources": true,
"types": [],
"lib": [
"dom",
"es2018"
]
},
"angularCompilerOptions": {
"annotateForClosureCompiler": true,
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"fullTemplateTypeCheck": true,
"strictInjectionParameters": true,
"enableResourceInlining": true
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
]
}

View File

@@ -0,0 +1,17 @@
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/spec",
"types": [
"jasmine",
"node"
]
},
"files": [
"src/test.ts"
],
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}

View File

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

25
apps/domain/crm/README.md Normal file
View File

@@ -0,0 +1,25 @@
# Crm
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 crm` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project crm`.
> Note: Don't forget to add `--project crm` or else it will be added to the default project in your `angular.json` file.
## Build
Run `ng build crm` to build the project. The build artifacts will be stored in the `dist/` directory.
## Publishing
After building your library with `ng build crm`, go to the dist folder `cd dist/crm` and run `npm publish`.
## Running unit tests
Run `ng test crm` 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

@@ -0,0 +1,32 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma'),
],
client: {
clearContext: false, // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../../../coverage/domain/crm'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true,
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true,
});
};

View File

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

View File

@@ -0,0 +1,8 @@
{
"name": "@domain/crm",
"version": "0.0.1",
"peerDependencies": {
"@angular/common": "^8.2.14",
"@angular/core": "^8.2.14"
}
}

View File

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

View File

@@ -0,0 +1,16 @@
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'crm-crm',
template: `
<p>
crm works!
</p>
`,
styles: [],
})
export class CrmComponent implements OnInit {
constructor() {}
ngOnInit() {}
}

View File

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

View File

@@ -0,0 +1,12 @@
import { TestBed } from '@angular/core/testing';
import { CrmService } from './crm.service';
describe('CrmService', () => {
beforeEach(() => TestBed.configureTestingModule({}));
it('should be created', () => {
const service: CrmService = TestBed.get(CrmService);
expect(service).toBeTruthy();
});
});

View File

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

View File

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

View File

@@ -0,0 +1,15 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js/dist/zone';
import 'zone.js/dist/zone-testing';
import { getTestBed } from '@angular/core/testing';
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
declare const require: any;
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

View File

@@ -0,0 +1,26 @@
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/lib",
"target": "es2015",
"declaration": true,
"inlineSources": true,
"types": [],
"lib": [
"dom",
"es2018"
]
},
"angularCompilerOptions": {
"annotateForClosureCompiler": true,
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"fullTemplateTypeCheck": true,
"strictInjectionParameters": true,
"enableResourceInlining": true
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
]
}

View File

@@ -0,0 +1,17 @@
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/spec",
"types": [
"jasmine",
"node"
]
},
"files": [
"src/test.ts"
],
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}

View File

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

View File

@@ -0,0 +1,25 @@
# Remission
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 remission` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project remission`.
> Note: Don't forget to add `--project remission` or else it will be added to the default project in your `angular.json` file.
## Build
Run `ng build remission` to build the project. The build artifacts will be stored in the `dist/` directory.
## Publishing
After building your library with `ng build remission`, go to the dist folder `cd dist/remission` and run `npm publish`.
## Running unit tests
Run `ng test remission` 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

@@ -0,0 +1,32 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma'),
],
client: {
clearContext: false, // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../../../coverage/isa/remission'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true,
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true,
});
};

View File

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

View File

@@ -0,0 +1,8 @@
{
"name": "@isa/remission",
"version": "0.0.1",
"peerDependencies": {
"@angular/common": "^8.2.14",
"@angular/core": "^8.2.14"
}
}

View File

@@ -0,0 +1,3 @@
// start:ng42.barrel
export * from './uid-generator.service';
// end:ng42.barrel

View File

@@ -0,0 +1,27 @@
import { Injectable } from '@angular/core';
function* getUniqueNumber(): IterableIterator<number> {
let timeStamp = Date.now();
while (true) {
yield timeStamp++;
}
}
@Injectable({ providedIn: 'root' })
export class UidGeneratorService {
private generator = getUniqueNumber();
constructor() {}
generate(options: { type: 'string' }): string;
generate(options: { type: 'number' }): number;
generate(options: { type: 'string' | 'number' } = { type: 'string' }): string | number {
const id = this.generator.next();
if (options.type === 'string') {
return id.value.toString(32);
}
return id.value;
}
}

View File

@@ -0,0 +1,21 @@
import { Injectable } from '@angular/core';
import { Mapper } from './mapper';
@Injectable()
export class FeaturesToAssortmentMapping implements Mapper<{ key: string; name: string; value?: string }[], string> {
get sourceName(): string {
return 'Features';
}
get targetName(): string {
return 'Assortment';
}
map(source: { key: string; name: string; value?: string }[]): string {
if (!source || (!!source.length && !source.find((feat) => feat.hasOwnProperty('key')))) {
return '';
}
return source.reduce((acc, curr) => acc + `${curr.name || ''}|${curr.key.slice(curr.key.length - 1, curr.key.length)}`, '');
}
}

View File

@@ -0,0 +1,41 @@
import { Injectable } from '@angular/core';
import { Mapper } from './mapper';
import { ItemDTO } from '@isa/catsearch-api';
import { Product } from '../models/product';
@Injectable()
export class ItemDtoToProductMapping implements Mapper<ItemDTO, Product> {
get sourceName(): string {
return 'ItemDTO';
}
get targetName(): string {
return 'Product';
}
map(source: ItemDTO): Product {
return {
// tslint:disable-next-line: no-string-literal
id: (source.ids && source.ids[0]) || source['id'],
imageId: source.product.ean,
contributors: source.product.contributors,
name: source.product.name,
format: source.product.format,
formatDetail: source.product.formatDetail,
ean: source.product.ean,
productGroup: source.product.productGroup,
productGroupName: '',
features:
source.features &&
source.features.map((feature) => ({
name: feature.value,
key: feature.key[feature.key.length - 1],
})),
// tslint:disable-next-line: no-string-literal TODO update ItemDTO interface
sourceProduct: { ...source.product, catalogProductNumber: source['id'] },
sourcePrice:
(source.storeAvailabilities && source.storeAvailabilities[0] && source.storeAvailabilities[0].price) ||
(source.catalogAvailability && source.catalogAvailability.price),
} as Product;
}
}

View File

@@ -0,0 +1,7 @@
export abstract class Mapper<TSource = any, TTarget = any> {
abstract get sourceName(): string;
abstract get targetName(): string;
abstract map(source: TSource): TTarget;
}

View File

@@ -0,0 +1,12 @@
import { Injectable, Injector } from '@angular/core';
import { Mapper } from './mapper';
@Injectable({ providedIn: 'root' })
export class MappingService {
constructor(private injector: Injector) {}
get<T extends Mapper>(sourceName: string, targetName: string): T {
const mappers = this.injector.get(Mapper) as Mapper[];
return mappers.find((f) => f.sourceName === sourceName && f.targetName === targetName) as T;
}
}

View File

@@ -0,0 +1,28 @@
import { Injectable } from '@angular/core';
import { PriceDTO } from '@cmf/inventory-api';
import { Mapper } from './mapper';
import { Product } from '../models/product';
@Injectable()
export class ProductToPriceDTOMapping implements Mapper<Product, PriceDTO> {
defaultPrice: PriceDTO = null;
constructor() {}
get sourceName(): string {
return 'Product';
}
get targetName(): string {
return 'PriceDTO';
}
map(source: Product): PriceDTO {
if (source.sourcePrice) {
return source.sourcePrice;
} else {
return this.defaultPrice;
throw Error('Keine Preisinformationen vorhanden');
}
}
}

View File

@@ -0,0 +1,25 @@
import { Injectable } from '@angular/core';
import { ProductDTO } from '@cmf/inventory-api';
import { Mapper } from './mapper';
import { Product } from '../models/product';
@Injectable()
export class ProductToProductDTOMapping implements Mapper<Product, ProductDTO> {
constructor() {}
get sourceName(): string {
return 'Product';
}
get targetName(): string {
return 'ProductDTO';
}
map(source: Product): ProductDTO {
if (source.sourceProduct) {
return source.sourceProduct;
} else {
throw Error('Keine Produktinformationen vorhanden');
}
}
}

View File

@@ -0,0 +1,40 @@
import { Injectable } from '@angular/core';
import { Mapper } from './mapper';
import { ReceiptDTO } from '@cmf/inventory-api';
import { ReceiptItemDtoToRemissionProductMapping } from './receipt-item-dto-to-remission-product.mapping';
import { MappingService } from './mapping.service';
import { ShippingDocument } from '../models/shipping-document';
@Injectable()
export class ReceiptDTOToShippingDocumentMapping
implements Mapper<ReceiptDTO, ShippingDocument> {
constructor(private mappingService: MappingService) {}
get sourceName() {
return 'ReceiptDTO';
}
get targetName() {
return 'ShippingDocument';
}
map(source: ReceiptDTO): ShippingDocument {
const productMapper = this.mappingService.get<
ReceiptItemDtoToRemissionProductMapping
>('ReceiptItemDTO', 'RemissionProduct');
return {
id: source.id,
shippingDocumentNumber: source.receiptNumber,
packageNumber:
source.packages &&
source.packages[0] &&
source.packages[0].data &&
source.packages[0].data.packageNumber,
products: source.items.map((item) =>
productMapper.map(item.data || item)
),
isCompleted: !!source.completed || source.status === 4 ? true : false,
isDeleted: source.status === 4,
};
}
}

View File

@@ -0,0 +1,38 @@
import { Mapper } from './mapper';
import { ReceiptItemDTO } from '@cmf/inventory-api';
import { Injectable } from '@angular/core';
import { RemissionProduct } from '../models/remission-product';
@Injectable()
export class ReceiptItemDtoToRemissionProductMapping implements Mapper<ReceiptItemDTO, RemissionProduct> {
get sourceName() {
return 'ReceiptItemDTO';
}
get targetName() {
return 'RemissionProduct';
}
map(source: ReceiptItemDTO): RemissionProduct {
return {
id: source.id,
imageId: source.product && source.product.ean,
contributors: source.product && source.product.contributors,
name: source.product && source.product.name,
format: source.product && source.product.format,
formatDetail: source.product && source.product.formatDetail,
ean: source.product && source.product.ean,
price: source.price && source.price.value.value,
currency: source.price && source.price.value.currency,
productGroup: source.product && source.product.productGroup,
productGroupName: '',
inStock: null,
remainingQuantity: null,
remissionQuantity: source.quantity,
placementType: 'Leistung',
remissionReason: '',
edition: source.product && source.product.volume,
features: [],
} as RemissionProduct;
}
}

View File

@@ -0,0 +1,73 @@
import { Injectable } from '@angular/core';
import { ReturnItemDTO } from '@cmf/inventory-api';
import { Mapper } from './mapper';
import { RemissionProduct } from '../models/remission-product';
@Injectable()
export class ReturnItemDtoToRemissionProductMapping implements Mapper<ReturnItemDTO, RemissionProduct> {
get sourceName(): string {
return 'ReturnItemDTO';
}
get targetName(): string {
return 'RemissionProduct';
}
private getFeatures(assortment: string) {
const featuresString = assortment && assortment.split('|');
let features = [];
if (featuresString) {
features = featuresString.slice(1, featuresString.length).map((str, index) => {
return {
[str.split(';')[0]]: assortment.split('|')[index].split(';')[1] || assortment.split('|')[index],
};
});
}
const uniqueKeys = Array.from(new Set(features.map((feature) => Object.keys(feature)).reduce((acc, curr) => acc.concat(curr), [])));
const result = uniqueKeys.map((key) => {
return {
[key]: features
.map((feature) => {
if (feature.hasOwnProperty(key)) {
return feature[key];
}
})
.filter((f) => !!f)
.join(', ')
.toString()
.trim(),
};
});
return result;
}
map(source: ReturnItemDTO): RemissionProduct {
return {
id: source.id,
imageId: source.product.ean,
contributors: source.product.contributors,
name: source.product.name,
format: source.product.format,
formatDetail: source.product.formatDetail,
ean: source.product.ean,
price: source.retailPrice.value.value,
currency: source.retailPrice.value.currency,
productGroup: source.product.productGroup,
productGroupName: '',
inStock: null, // info retrieved separately
remissionQuantity: source.predefinedReturnQuantity,
remainingQuantity: source.remainingQuantityInStock,
placementType: source.placementType,
remissionReason: source.returnReason,
edition: source.product.volume,
isManuallyAdded: source.source && source.source === 'manually-added' ? true : false,
catalogProductNumber: source.product.catalogProductNumber,
features: this.getFeatures(source.assortment), // assortment (semicolon separiert ohne 'SO') z.B. "Wirtschaft|B"
isResidual: source.descendantOf && source.descendantOf.enabled ? true : false || !!source.impediment,
} as RemissionProduct;
}
}

View File

@@ -0,0 +1,43 @@
import { ReturnSuggestionDTO } from '@cmf/inventory-api';
import { Injectable } from '@angular/core';
import { Mapper } from './mapper';
import { RemissionProduct } from '../models/remission-product';
@Injectable()
export class ReturnSuggestionDtoToRemissionProductMapping implements Mapper<ReturnSuggestionDTO, RemissionProduct> {
get sourceName(): string {
return 'ReturnSuggestionDTO';
}
get targetName(): string {
return 'RemissionProduct';
}
map(source: ReturnSuggestionDTO): RemissionProduct {
return {
id: source.id,
imageId: source.product.ean,
contributors: source.product.contributors,
name: source.product.name,
format: source.product.format,
formatDetail: source.product.formatDetail,
ean: source.product.ean,
price: source.retailPrice.value.value,
currency: source.retailPrice.value.currency,
productGroup: source.product.productGroup,
productGroupName: '',
inStock: 0,
remissionQuantity: source.returnItem && source.returnItem.data.predefinedReturnQuantity,
remainingQuantity: 0,
placementType: source.placementType,
remissionReason: source.returnReason,
edition: source.product.volume,
catalogProductNumber: source.product.catalogProductNumber,
features: [],
isResidual:
!!source.impediment ||
// tslint:disable-next-line: no-string-literal
(source['descendantOf'] && !!source['descendantOf'].enabled),
} as RemissionProduct;
}
}

View File

@@ -0,0 +1,23 @@
import { Injectable } from '@angular/core';
import { SupplierDTO } from '@cmf/inventory-api';
import { RemissionSupplier } from '../models';
import { Mapper } from './mapper';
@Injectable()
export class SupplierDtoToRemissionSupplier implements Mapper<SupplierDTO, RemissionSupplier> {
get sourceName(): string {
return 'SupplierDTO';
}
get targetName(): string {
return 'RemissionSupplier';
}
map(source: SupplierDTO): RemissionSupplier {
return {
name: source.name || '',
supplierNumber: source.supplierNumber || '',
id: source.id,
};
}
}

View File

@@ -0,0 +1,53 @@
import { createRandomId } from '../util';
import { VATType } from '@cmf/trade-api';
import { Product } from '../../models/product';
export const product: Product = {
id: createRandomId(),
imageId: '9783836270236',
contributors: 'Sascha Kersken',
name: 'Remission für Fortgeschrittene',
format: 'HC',
formatDetail: 'Buch (Kartoniert, Paperback)',
ean: '2638489561882',
productGroup: '111',
productGroupName: 'Krimi/Spannung',
features: [
{
key: 'SOB',
name: 'Basissortiment',
},
{
key: 'SOE',
name: 'Extrasortiment',
},
],
sourcePrice: {
value: {
value: 100,
currency: 'EUR',
currencySymbol: '€',
},
vat: {
inPercent: 7,
vatType: VATType.MediumRate,
},
},
sourceProduct: {
name: 'Remission für Fortgeschrittene',
ean: '2638489561882',
contributors: 'Sascha Kersken',
supplierProductNumber: '123ABC',
catalogProductNumber: '123XYZ',
manufacturer: 'Hugendubel',
format: 'HC',
formatDetail: 'Buch (Kartoniert, Paperback)',
},
};
export function removeSourcePriceAndProductFromProduct(prod: Product): Partial<Product> {
delete prod.sourcePrice;
delete prod.sourceProduct;
return prod;
}

View File

@@ -0,0 +1,16 @@
import { CapacityType } from '../../models/capacity-type';
export const remissionCapacities: CapacityType[] = [
{
name: 'Leistunsgplätze',
available: 100,
utilized: Math.floor(Math.random() * 100),
label: 'Titel',
},
{
name: 'Stapelplätze',
available: 100,
utilized: Math.floor(Math.random() * 100),
label: 'Exemplaren',
},
];

View File

@@ -0,0 +1,88 @@
import { remissionTargets } from './remission-targets';
import { remissionSources } from './remission-sources';
import { Filter } from '../../models/filter';
import { RemissionFilter } from '../../models/remission-filter';
export const filter: Filter[] = [
{
id: 'ce9ee0be',
name: 'Aktionen',
options: [
{
id: '6e99',
name: 'Weihnachtsaktion',
},
{ id: 'a6a0', name: 'Osteraktion' },
{ id: '035d', name: 'Herbstaktion' },
],
},
{
id: '421228ce',
name: 'Abteilung & Warengruppe',
options: [
{
id: 'a7zd70',
name: 'Romane',
options: [
{
id: '111',
name: 'Romane HC',
},
{
id: '112',
name: 'Romane TB',
},
{
id: '113',
name: 'Historische Romane HC',
},
],
},
{
id: 'ah55wm',
name: 'Krimi',
options: [
{
id: '120',
name: 'Krimi HC',
},
{
id: '121',
name: 'Krimi TB',
},
{
id: '122',
name: 'Krimi allgemein',
},
],
},
],
},
];
export const filterUeberlauf: Filter[] = [
{
id: 'bi1uc0az',
name: 'Abteilung',
options: [
{
id: '6e99',
name: 'DVD',
},
{ id: 'a6a0', name: 'Hörbuch' },
{ id: '035d', name: 'Kinderwelt' },
{ id: '6t78', name: 'Bewusster Leben' },
{ id: '2k49', name: 'Bewusster Leben' },
],
},
];
export const remissionFilter: RemissionFilter = {
filter: {},
skip: 0,
take: 25,
target: remissionTargets[1],
source: remissionSources[0],
};

View File

@@ -0,0 +1,3 @@
import { RemissionPlacementType } from '../../types/remission-placement-types';
export const remissionPlacementTypes: RemissionPlacementType[] = ['Stapel', 'Leistung'];

View File

@@ -0,0 +1,18 @@
import { Printer } from '../../models/printer';
export const printers: Printer[] = [
{
enabled: true,
key: '\\DBHPSS8301.dbh.localETI_HILBLE',
value: 'SE Label-Drucker',
selected: true,
description: 'Label-Drucker in der SE',
},
{
enabled: true,
key: '\\dbhpss8301.dbh.localkkm_se_igel_01',
value: 'SE Label-Drucker über IGEL',
selected: false,
description: 'Label-Drucker in der SE, am IGEL angeschlossen',
},
];

View File

@@ -0,0 +1,22 @@
import { RemissionProcess } from '../../models/remission-process';
import { remissionCapacities } from './remission-capacities';
import { createRandomStringId, createRandomId } from '../util';
import { remissionFilter } from './remission-filter';
import { ShippingDocument } from '../../models';
export const remissionProcessTemplateMock: RemissionProcess = {
id: createRandomId(),
returnGroup: createRandomId(),
stockId: createRandomId(),
capacities: remissionCapacities,
filter: remissionFilter,
};
export const remissionProcessTemplates: RemissionProcess[] = [remissionProcessTemplateMock];
export function createRemissionProcessFromTemplate(remission: RemissionProcess): RemissionProcess {
const shippingDocuments = [{ id: createRandomId(), shippingDocumentNumber: createRandomStringId(), products: [] } as ShippingDocument];
const remissionId = createRandomId();
return { ...remission, externalId: remissionId, shippingDocuments };
}

View File

@@ -0,0 +1,490 @@
import { createRandomId } from '../util';
import { RemissionProduct } from '../../models/remission-product';
export const remissionProducts: RemissionProduct[] = [
{
id: createRandomId(),
imageId: '9783864906466',
contributors: 'Max Mustermann',
name: 'Remission für Dummies',
format: 'HC',
formatDetail: 'Buch (Gebunden)',
ean: '6294261363805',
price: 38.9,
currency: 'EUR',
productGroup: '121',
productGroupName: 'Krimi/Spannung',
inStock: 40,
remissionQuantity: 25,
remainingQuantity: 15,
placementType: 'Stapel',
remissionReason: 'Kulanz',
edition: '1.',
features: [
{
key: 'SOB',
name: 'Basissortiment',
},
],
},
{
id: createRandomId(),
imageId: '9783836270236',
contributors: 'Sascha Kersken',
name: 'Remission für Fortgeschrittene',
format: 'HC',
formatDetail: 'Buch (Kartoniert, Paperback)',
ean: '2638489561882',
price: 10,
currency: 'EUR',
productGroup: '111',
productGroupName: 'Krimi/Spannung',
inStock: 10,
remissionQuantity: 9,
remainingQuantity: 1,
placementType: 'Leistung',
remissionReason: 'Falschlieferung',
edition: '1.',
features: [
{
key: 'SOB',
name: 'Basissortiment',
},
{
key: 'SOE',
name: 'Extrasortiment',
},
],
},
{
id: createRandomId(),
imageId: '9783836270236',
contributors: 'Hugen Dubel',
name: 'So werden Sie zum Remissions-Experten',
format: 'TB',
formatDetail: 'Taschenbuch',
ean: '4638419565833',
price: 15.29,
currency: 'EUR',
productGroup: '133',
productGroupName: 'Esoterik',
inStock: 100,
remissionQuantity: 1,
remainingQuantity: 99,
placementType: 'Leistung',
remissionReason: 'Herstellerfehler',
edition: '3.',
features: [
{
key: 'SOB',
name: 'Basissortiment',
},
{
key: 'SOZ',
name: 'Zentralsortiment',
},
],
},
{
id: createRandomId(),
imageId: '9783836270236',
contributors: 'Pötzsch, Oliver',
name: 'Der Spielmann',
format: 'TB',
formatDetail: 'Taschenbuch',
ean: '4169898411136',
price: 5.99,
currency: 'EUR',
productGroup: '935',
productGroupName: 'Fantasie',
inStock: 2,
remissionQuantity: 1,
remainingQuantity: 1,
placementType: 'Leistung',
remissionReason: 'Herstellerfehler',
edition: '1.',
features: [
{
key: 'SOB',
name: 'Basissortiment',
},
],
},
{
id: createRandomId(),
imageId: '9783836270236',
contributors: 'Homann, Eberhard, Homann, Klaudia',
name: 'Individualreiseführer mit Extra-Reisekarte und Karten-Download',
format: 'HC',
formatDetail: 'Buch (Kartoniert, Paperback)',
ean: '9723831038123',
price: 19.95,
currency: 'EUR',
productGroup: '112',
productGroupName: 'Krimi',
inStock: 5,
remissionQuantity: 5,
remainingQuantity: 0,
placementType: 'Leistung',
remissionReason: 'Herstellerfehler',
edition: '',
features: [
{
key: 'SOB',
name: 'Basissortiment',
},
{
key: 'SOE',
name: 'Extrasortiment',
},
],
},
{
id: createRandomId(),
imageId: '9783836270236',
contributors: 'Blümm, Florian',
name: 'Mit wenig Geld um die Welt',
format: 'TB',
formatDetail: 'Taschenbuch',
ean: '6169892433336',
price: 7,
currency: 'EUR',
productGroup: '312',
productGroupName: 'Abenteuer/Reise',
inStock: 45,
remissionQuantity: 3,
remainingQuantity: 42,
placementType: 'Leistung',
remissionReason: 'Kulanz',
edition: '1.',
features: [
{
key: 'SOB',
name: 'Basissortiment',
},
],
},
{
id: createRandomId(),
imageId: '9783836270236',
contributors: 'Murakami, Haruki, Gräfe, Ursula',
name: 'Wovon ich rede, wenn ich vom Laufen rede',
format: 'TB',
formatDetail: 'Taschenbuch (Kartoniert, Paperback)',
ean: '4642419565833',
price: 11.49,
currency: 'EUR',
productGroup: '112',
productGroupName: 'Krimi',
inStock: 250,
remissionQuantity: 10,
remainingQuantity: 240,
placementType: 'Leistung',
remissionReason: 'Herstellerfehler',
edition: '2.',
features: [
{
key: 'SOB',
name: 'Basissortiment',
},
{
key: 'SOZ',
name: 'Zentralsortiment',
},
],
},
{
id: createRandomId(),
imageId: '9783836270236',
contributors: 'McKeown, Patrick',
name: 'Erfolgsfaktor Sauerstoff',
format: 'EB',
formatDetail: 'E-Book (E-Book)',
ean: '4638419765833',
price: 15.99,
currency: 'EUR',
productGroup: '973',
productGroupName: 'Wissenschaft',
inStock: 12,
remissionQuantity: 8,
remainingQuantity: 4,
placementType: 'Stapel',
remissionReason: 'Kulanz',
edition: '1.',
features: [
{
key: 'SOB',
name: 'Basissortiment',
},
{
key: 'SOZ',
name: 'Zentralsortiment',
},
],
},
{
id: createRandomId(),
imageId: '9783864906466',
contributors: 'Lobrecht, Felix',
name: 'Sonne und Beton',
format: 'HC',
formatDetail: 'Buch (Gebunden)',
ean: '6294261363805',
price: 3.9,
currency: 'EUR',
productGroup: '112',
productGroupName: 'Krimi/Spannung',
inStock: 33,
remissionQuantity: 11,
remainingQuantity: 22,
placementType: 'Stapel',
remissionReason: 'Kulanz',
edition: '4.',
features: [
{
key: 'SOB',
name: 'Basissortiment',
},
],
},
{
id: createRandomId(),
imageId: '9783836270236',
contributors: 'Dorléans, Marie',
name: 'Auf leisen Sohlen durch die Nacht',
format: 'TB',
formatDetail: 'Taschenbuch',
ean: '4638529565833',
price: 15.29,
currency: 'EUR',
productGroup: '133',
productGroupName: 'Esoterik',
inStock: 100,
remissionQuantity: 1,
remainingQuantity: 99,
placementType: 'Leistung',
remissionReason: 'Herstellerfehler',
edition: '6.',
features: [
{
key: 'SOB',
name: 'Basissortiment',
},
{
key: 'SOZ',
name: 'Zentralsortiment',
},
],
},
{
id: createRandomId(),
imageId: '9783864906466',
contributors: 'May, Sabine',
name: 'ADAC Reiseführer Algarve',
format: 'HC',
formatDetail: 'Buch (Gebunden)',
ean: '6294261363305',
price: 6.95,
currency: 'EUR',
productGroup: '312',
productGroupName: 'Abenteuer/Reise',
inStock: 30,
remissionQuantity: 10,
remainingQuantity: 20,
placementType: 'Stapel',
remissionReason: 'Kulanz',
edition: '1.',
features: [
{
key: 'SOB',
name: 'Basissortiment',
},
],
},
{
id: createRandomId(),
imageId: '9783864906466',
contributors: 'Schützsack, Lara',
name: 'Sonne, Moon und Sterne',
format: 'HC',
formatDetail: 'Buch (Gebunden)',
ean: '6374261363305',
price: 6.95,
currency: 'EUR',
productGroup: '312',
productGroupName: 'Abenteuer/Reise',
inStock: 30,
remissionQuantity: 10,
remainingQuantity: 20,
placementType: 'Stapel',
remissionReason: 'Kulanz',
edition: '2.',
features: [
{
key: 'SOB',
name: 'Basissortiment',
},
],
},
{
id: createRandomId(),
imageId: '9783864906466',
contributors: 'Taleb, Nassim Nicholas',
name: 'Skin in the Game',
format: 'HC',
formatDetail: 'Buch (Kartoniert, Paperback)',
ean: '6294266323805',
price: 14.49,
currency: 'EUR',
productGroup: '112',
productGroupName: 'Krimi/Spannung',
inStock: 10,
remissionQuantity: 3,
remainingQuantity: 7,
placementType: 'Stapel',
remissionReason: 'Herstellerfehler',
edition: '4.',
features: [
{
key: 'SOB',
name: 'Basissortiment',
},
],
},
{
id: createRandomId(),
imageId: '9783864906466',
contributors: 'Gehrmann, Markus Don Alfred',
name: 'Fraktale',
format: 'HC',
formatDetail: 'Buch (Kartoniert, Paperback)',
ean: '6294261363805',
price: 208.99,
currency: 'EUR',
productGroup: '111',
productGroupName: 'Krimi/Spannung',
inStock: 2,
remissionQuantity: 2,
remainingQuantity: 0,
placementType: 'Stapel',
remissionReason: 'Herstellerfehler',
edition: '1.',
features: [
{
key: 'SOB',
name: 'Basissortiment',
},
],
},
{
id: createRandomId(),
imageId: '9783864906466',
contributors: 'Fowler, Martin',
name: 'Refactoring',
format: 'EB',
formatDetail: 'E-Book (E-Book)',
ean: '3214231363805',
price: 42,
currency: 'EUR',
productGroup: '113',
productGroupName: 'Krimi/Spannung',
inStock: 3,
remissionQuantity: 2,
remainingQuantity: 1,
placementType: 'Stapel',
remissionReason: 'Herstellerfehler',
edition: '10.',
features: [
{
key: 'SOB',
name: 'Basissortiment',
},
],
},
{
id: createRandomId(),
imageId: '9783836270236',
contributors: 'Frankl, Viktor E.',
name: "Man's Search for Meaning",
format: 'TB',
formatDetail: 'Taschenbuch (Kartoniert, Paperback)',
ean: '7638229565833',
price: 12.9,
currency: 'EUR',
productGroup: '133',
productGroupName: 'Esoterik',
inStock: 5,
remissionQuantity: 1,
remainingQuantity: 4,
placementType: 'Leistung',
remissionReason: 'Herstellerfehler',
edition: '6.',
features: [
{
key: 'SOB',
name: 'Basissortiment',
},
{
key: 'SOZ',
name: 'Zentralsortiment',
},
],
},
{
id: createRandomId(),
imageId: '9783864906466',
contributors: 'Heinemeyer, Christoph',
name: 'Brandsicherheit durch Konstruktion und Stahlsortenwahl',
format: 'EB',
formatDetail: 'E-Book (E-Book)',
ean: '4212431233805',
price: 16.99,
currency: 'EUR',
productGroup: '113',
productGroupName: 'Krimi/Spannung',
inStock: 49,
remissionQuantity: 4,
remainingQuantity: 45,
placementType: 'Stapel',
remissionReason: 'Herstellerfehler',
edition: '1.',
features: [
{
key: 'SOB',
name: 'Basissortiment',
},
],
},
{
id: createRandomId(),
imageId: '9783864906466',
contributors: 'Heinemeyer, Elfriede; Ottenjann, Helmut',
name: 'Alte Bauernmöbel aus dem nordwestlichen Niedersachsen',
format: 'EB',
formatDetail: 'E-Book (E-Book)',
ean: '4212477733805',
price: 16.99,
currency: 'EUR',
productGroup: '113',
productGroupName: 'Krimi/Spannung',
inStock: 28,
remissionQuantity: 14,
remainingQuantity: 14,
placementType: 'Stapel',
remissionReason: 'Herstellerfehler',
edition: '1.',
features: [
{
key: 'SOB',
name: 'Basissortiment',
},
],
},
];
export function createRemissionProduct(product: Partial<RemissionProduct>): RemissionProduct {
const baseProduct = remissionProducts[0];
const newProduct = { ...baseProduct, ...product };
return newProduct;
}

View File

@@ -0,0 +1,11 @@
export const remissionReasons = [
'Beschädigtes Exemplar',
'Kulanz',
'Falschlieferung',
'Zu spät geliefert',
'Alte oder falsche Auflage geliefert',
'Herstellerfehler',
'LFA',
'Veranstaltungsüberhang',
'Anderer Remigrund',
];

View File

@@ -0,0 +1,3 @@
import { RemissionSourceType } from '../../types/remission-source.type';
export const remissionSources: RemissionSourceType[] = ['zentral', 'ueberlauf'];

View File

@@ -0,0 +1,14 @@
import { RemissionSupplier } from '../../models/remission-supplier';
export const remissionTargets: RemissionSupplier[] = [
{
id: 123,
name: 'Libri',
supplierNumber: 'abc-yyz',
},
{
id: 456,
name: 'Blank',
supplierNumber: '123-890',
},
];

View File

@@ -0,0 +1,9 @@
import { createRandomStringId, createRandomId } from '../util';
import { ShippingDocument } from '../../models/shipping-document';
export const shippingDocument: ShippingDocument = {
id: createRandomId(),
shippingDocumentNumber: createRandomStringId(),
products: [],
isCompleted: false,
};

View File

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

View File

@@ -0,0 +1,629 @@
import { Injectable } from '@angular/core';
import {
Observable,
of,
BehaviorSubject,
Subject,
merge,
combineLatest,
} from 'rxjs';
import { delay, distinctUntilChanged, map } from 'rxjs/operators';
import { createRandomStringId, createRandomId } from './util';
import {
product,
removeSourcePriceAndProductFromProduct,
} from './data/product';
import { RemissionService } from '../services/remission.service';
import { RemissionProcess } from '../models/remission-process';
import { RemissionProduct } from '../models/remission-product';
import {
remissionProducts,
createRemissionProduct,
} from './data/remission-products';
import { remissionProcessTemplateMock } from './data/remission-process-template';
import { ShippingDocument } from '../models/shipping-document';
import { shippingDocument } from './data/shipping-document';
import { RemissionFilter } from '../models/remission-filter';
import { Printer } from '../models/printer';
import { printers } from './data/remission-printers';
import { Product } from '../models/product';
import { RemissionSourceType } from '../types/remission-source.type';
import { Filter } from '../models/filter';
import { filterUeberlauf, filter } from './data/remission-filter';
import { RemissionPlacementType } from '../types/remission-placement-types';
import { remissionPlacementTypes } from './data/remission-placement-types';
import { remissionReasons } from './data/remission-reasons';
import { RemissionSupplier } from '../models/remission-supplier';
import { remissionTargets } from './data/remission-targets';
import { remissionSources } from './data/remission-sources';
import { ActionResult, CapacityType } from '../models';
@Injectable({ providedIn: 'root' })
export class MockRemissionService extends RemissionService {
private delayInMs = 100;
private remissionSubjectStore = new Map<
number,
BehaviorSubject<RemissionProcess>
>();
private remissionSubjectIdRef = new Map<number, number>();
private reloadProductsSubject = new Subject();
private productSubject = new BehaviorSubject<RemissionProduct[]>(
remissionProducts
);
private getRemissionFromStore = (
remissionProcessId: number
): BehaviorSubject<RemissionProcess> => {
const remission =
this.remissionSubjectStore.get(remissionProcessId) ||
this.remissionSubjectStore.get(
this.remissionSubjectIdRef.get(remissionProcessId)
);
return remission;
};
private saveRemissionInStore = (
remissionProcessId: number,
remissionSubject: BehaviorSubject<RemissionProcess>
) => {
this.remissionSubjectStore.set(remissionProcessId, remissionSubject);
};
createProcess(source?: RemissionProcess): Observable<RemissionProcess> {
const process = { ...remissionProcessTemplateMock, ...source };
const processSubject = new BehaviorSubject<RemissionProcess>(process);
this.saveRemissionInStore(process.id, processSubject);
return processSubject.pipe(distinctUntilChanged(), delay(this.delayInMs));
}
getRemissionProducts(params: {
remissionProcessId: number;
}): Observable<{
skip?: number;
take?: number;
hits?: number;
items: RemissionProduct[];
completed: boolean;
}> {
const processSubject = this.getRemissionFromStore(
params.remissionProcessId
);
if (!processSubject) {
throw new Error('Prozess nicht gefunden');
}
const process$ = merge(
processSubject,
this.reloadProductsSubject.pipe(map((_) => processSubject.value))
);
const products$ = this.productSubject.asObservable();
return combineLatest(process$, products$).pipe(
map(([process, products]) => {
// tslint:disable-next-line: no-shadowed-variable
const filter = process.filter;
const result: {
skip?: number;
take?: number;
hits?: number;
items: RemissionProduct[];
completed: boolean;
} = {
skip: filter.skip,
take: filter.take,
hits: 0,
items: [...products],
completed: false,
};
const productGroupFilter = filter.filter['421228ce'] || [];
if (productGroupFilter.length > 0) {
result.items = result.items.filter((product) =>
productGroupFilter.some((s) => product.productGroup === s)
);
}
const actionFilter = filter.filter['ce9ee0be'] || [];
result.hits = result.items.length;
result.items = result.items.slice(
result.skip,
result.skip + result.take
);
result.completed = result.skip + result.take >= result.hits;
return result;
})
);
}
startRemission(params: {
remissionProcessId: number;
config?: {
createShippingDocument?: boolean;
};
}): Observable<RemissionProcess> {
const processSubject = this.remissionSubjectStore.get(
params.remissionProcessId
);
if (!processSubject) {
throw new Error('Prozess nicht gefunden');
}
const process = processSubject.value;
const id = createRandomId();
const doc: ShippingDocument = shippingDocument;
this.remissionSubjectIdRef.set(id, process.id);
processSubject.next({
...process,
id,
shippingDocuments: [doc],
});
return of(processSubject.value).pipe(delay(this.delayInMs));
}
continueProcess(source: RemissionProcess): Observable<RemissionProcess> {
let processSubject = this.getRemissionFromStore(source.id);
if (!processSubject) {
processSubject = new BehaviorSubject<RemissionProcess>(source);
}
this.saveRemissionInStore(processSubject.value.id, processSubject);
return processSubject.pipe(distinctUntilChanged(), delay(this.delayInMs));
}
continueProcessFromScan(containerId: string): Observable<RemissionProcess> {
return of();
}
updateRemissionFilter({
remissionProcessId,
changes,
}: {
remissionProcessId: number;
changes: Partial<RemissionFilter>;
}): Observable<RemissionFilter> {
const processSubject = this.getRemissionFromStore(remissionProcessId);
if (!!processSubject) {
const process = processSubject.value;
const nextProcess = {
...process,
filter: { ...process.filter, ...changes },
};
processSubject.next(nextProcess);
return of(nextProcess.filter).pipe(delay(this.delayInMs));
} else {
throw new Error('Prozess nicht gefunden');
}
}
completeRemission(params: {
remissionProcessId: number;
}): Observable<boolean> {
let processSubject = this.remissionSubjectStore.get(
params.remissionProcessId
);
if (!processSubject) {
const refId = this.remissionSubjectIdRef.get(params.remissionProcessId);
if (!!refId) {
processSubject = this.remissionSubjectStore.get(refId);
}
processSubject.next(processSubject.value);
processSubject.complete();
return of(false).pipe(delay(this.delayInMs));
} else {
return of(true).pipe(delay(this.delayInMs));
}
}
getRemission(params: {
remissionProcessId: number;
}): Observable<RemissionProcess> {
const remission = this.getRemissionFromStore(params.remissionProcessId);
if (!remission) {
throw new Error('Prozess nicht gefunden');
}
return remission.pipe(distinctUntilChanged(), delay(this.delayInMs));
}
isPrintingRequired({
remissionProcessId,
}: {
remissionProcessId: number;
}): Observable<boolean> {
const remission = this.getRemissionFromStore(remissionProcessId);
if (!remission) {
return of(false).pipe(delay(this.delayInMs));
}
switch (remission.value.filter.target.name) {
case 'Libri':
return of(true).pipe(delay(this.delayInMs));
case 'Blank':
return of(false).pipe(delay(this.delayInMs));
}
}
getPrinters(): Observable<Printer[]> {
return of(printers).pipe(delay(this.delayInMs));
}
printRemissionList(params: {
remissionProcessId: number;
printerKey: string;
}): Observable<boolean> {
const remission = this.getRemissionFromStore(params.remissionProcessId);
if (!remission) {
return of(false).pipe(delay(this.delayInMs));
}
return of(true).pipe(delay(this.delayInMs));
}
printShippingDocument(params: {
remissionProcessId: number;
shippingDocumentId?: number;
printerKey: string;
}): Observable<boolean> {
const remission = this.getRemissionFromStore(params.remissionProcessId);
if (!remission || !params.printerKey) {
return of(false).pipe(delay(this.delayInMs));
}
return of(true).pipe(delay(this.delayInMs));
}
searchProduct({ ean }: { ean: string }): Observable<Product> {
const searchResult = product;
return of(searchResult).pipe(delay(this.delayInMs));
}
getFilters(params: { remissionProcessId: number }): Observable<Filter[]> {
const remission = this.getRemissionFromStore(params.remissionProcessId);
const filterForGivenSourceType =
remission.value.filter.source === 'zentral' ? filter : filterUeberlauf;
return of(filterForGivenSourceType).pipe(delay(this.delayInMs));
}
getPlacementTypes(): Observable<RemissionPlacementType[]> {
return of(remissionPlacementTypes).pipe(delay(this.delayInMs));
}
getRemissionReasons(): Observable<string[]> {
return of(remissionReasons).pipe(delay(this.delayInMs));
}
getRemissionTargets(): Observable<RemissionSupplier[]> {
return of(remissionTargets).pipe(delay(this.delayInMs));
}
getRemissionSources(): Observable<RemissionSourceType[]> {
return of(remissionSources).pipe(delay(this.delayInMs));
}
getShippingDocuments(params: {
remissionProcessId: number;
shippingDocumentId: number;
}): Observable<ShippingDocument> {
const remissionSub = this.getRemissionFromStore(params.remissionProcessId);
return remissionSub.pipe(
map((remission) =>
remission.shippingDocuments.find(
(shippingDoc) => shippingDoc.id === params.shippingDocumentId
)
),
distinctUntilChanged(),
delay(this.delayInMs)
);
}
deleteProductFromRemissionList(input: {
remissionProcessId: number;
remissionProductId: number;
}): Observable<ActionResult<boolean>> {
return of({
error: false,
result: true,
});
}
addProductToRemit(input: {
product: Product;
remissionReason: string;
remissionQuantity: number;
}): Observable<RemissionProduct> {
const productToAdd = removeSourcePriceAndProductFromProduct({ ...product });
const newProduct = createRemissionProduct({
remissionReason: input.remissionReason,
remissionQuantity: input.remissionQuantity,
...productToAdd,
});
const newProductSubject = [...this.productSubject.value, newProduct];
this.productSubject.next(newProductSubject);
return of(newProduct).pipe(delay(this.delayInMs));
}
addProductToShippingDocument(params: {
remissionProcessId: number;
remissionProductId: number;
shippingDocumentId: number;
placementType?: RemissionPlacementType;
quantity?: number;
inStock?: number;
}): Observable<ActionResult<boolean>> {
const processSubject = this.getRemissionFromStore(
params.remissionProcessId
);
const process = processSubject.value;
const products = this.productSubject.value;
if (!processSubject) {
throw new Error('Prozess nicht gefunden');
}
let productToAdd = products.find(
(product) => product.id === params.remissionProductId
);
let newProducts = products.filter(
(product) => product.id !== params.remissionProductId
);
if (!!params.placementType || !!params.quantity) {
const productToUpdateInProductList = {
...productToAdd,
remissionQuantity: productToAdd.remissionQuantity - params.quantity,
};
newProducts =
productToAdd.remissionQuantity - params.quantity < 1
? newProducts
: [...newProducts, productToUpdateInProductList];
productToAdd = {
...productToAdd,
remissionQuantity: Number(params.quantity),
};
}
const shippingDocumentToUpdate = process.shippingDocuments.find(
(document) => document.id === params.shippingDocumentId
);
const updatedShippingDocument = {
...shippingDocumentToUpdate,
products: [...shippingDocumentToUpdate.products, productToAdd],
};
const updatedProcess = {
...process,
shippingDocuments: [
...process.shippingDocuments.filter(
(document) => document.id !== params.shippingDocumentId
),
updatedShippingDocument,
],
};
processSubject.next(updatedProcess);
this.productSubject.next(newProducts);
return of<ActionResult<boolean>>({
error: false,
result: true,
}).pipe(delay(this.delayInMs));
}
removeProductFromShippingDocument(params: {
remissionProcessId: number;
shippingDocumentId: number;
remissionProductId: number;
placementType?: string;
}): Observable<boolean> {
const processSubject = this.getRemissionFromStore(
params.remissionProcessId
);
const process = processSubject.value;
const products = this.productSubject.value;
if (!processSubject) {
throw new Error('Prozess nicht gefunden');
}
const shippingDocumentToUpdate = process.shippingDocuments.find(
(document) => document.id === params.shippingDocumentId
);
const updatedShippingDocument = {
...shippingDocumentToUpdate,
products: shippingDocumentToUpdate.products.filter(
(product) => product.id !== params.remissionProductId
),
};
const productToRemove = shippingDocumentToUpdate.products.find(
(product) => product.id === params.remissionProductId
);
const productInProductList = products.find(
(product) => product.id === params.remissionProductId
);
const updatedProductInProductList = !!productInProductList
? {
...productInProductList,
remissionQuantity:
Number(productInProductList.remissionQuantity) +
Number(productToRemove.remissionQuantity),
}
: productToRemove;
const updatedProcess = {
...process,
shippingDocuments: [
...process.shippingDocuments.filter(
(document) => document.id !== params.shippingDocumentId
),
updatedShippingDocument,
],
};
const updatedProducts = [
...this.productSubject.value.filter(
(product) => product.id !== updatedProductInProductList.id
),
updatedProductInProductList,
];
processSubject.next(updatedProcess);
this.productSubject.next(updatedProducts);
return of(true).pipe(delay(this.delayInMs));
}
reloadProducts(): void {
this.reloadProductsSubject.next();
}
createShippingDocument(params: {
remissionProcessId: number;
}): Observable<ShippingDocument> {
const processSubject = this.getRemissionFromStore(
params.remissionProcessId
);
if (!processSubject) {
throw new Error('Prozess nicht gefunden');
}
const process = processSubject.value;
const newShippingDocument: ShippingDocument = {
...shippingDocument,
id: createRandomId(),
shippingDocumentNumber: createRandomStringId(),
};
const updatedShippingDocuments = [
...process.shippingDocuments,
newShippingDocument,
];
const updatedProcess = {
...process,
shippingDocuments: updatedShippingDocuments,
};
processSubject.next(updatedProcess);
return of(newShippingDocument).pipe(delay(this.delayInMs));
}
completeShippingDocument(params: {
remissionProcessId: number;
shippingDocumentId: number;
containerId: string;
}): Observable<ActionResult<boolean>> {
const processSubject = this.getRemissionFromStore(
params.remissionProcessId
);
if (!processSubject) {
throw new Error('Prozess nicht gefunden');
}
const process = processSubject.value;
const shippingContainerToUpdate = process.shippingDocuments.find(
(document) => document.id === params.shippingDocumentId
);
const updatedShippingContainer = {
...shippingContainerToUpdate,
isCompleted: true,
};
const updatedProcess = {
...process,
shippingDocuments: [
...process.shippingDocuments.filter(
(document) => document.id !== params.shippingDocumentId
),
updatedShippingContainer,
],
};
processSubject.next(updatedProcess);
return of({
error: false,
message: '',
}).pipe(delay(this.delayInMs));
}
completeRemissions(params: {
remissionProcessId: number;
}): Observable<boolean> {
return;
}
getAllRemissions(params: {
showOpen?: boolean;
showOpenLastWeekOnly?: boolean;
showCompleted?: boolean;
showCompletedLastWeekOnly?: boolean;
receiptNumber?: string;
returnGroup?: number;
take?: number;
}): Observable<RemissionProcess[]> {
return;
}
getUncompletedRemissions(): Observable<RemissionProcess[]> {
return of([]);
}
deleteRemission(): Observable<boolean> {
return of(true);
}
deleteShippingDocument(): Observable<
ActionResult<{ deleted: boolean; completedRemissionsExist: boolean }>
> {
return of({
result: {
deleted: true,
completedRemissionsExist: false,
},
});
}
getAllShippingDocuments(): Observable<ShippingDocument[]> {
return;
}
getCapacities(params: {
selectedFilters?: { [filterId: string]: string[] };
supplierId: number;
}): Observable<CapacityType[]> {
return of([]);
}
}

View File

@@ -0,0 +1,7 @@
export function createRandomId(): number {
return Math.floor(Math.random() * Math.pow(10, 10));
}
export function createRandomStringId(): string {
return createRandomId().toString();
}

View File

@@ -0,0 +1,11 @@
import { StringDictionary } from '@cmf/core';
export interface ActionResult<T> {
error?: boolean;
errorReasons?: StringDictionary<string>;
http?: {
code: number;
};
message?: string;
result?: T;
}

View File

@@ -0,0 +1,21 @@
export interface CapacityType {
/**
* Kapazitätsbezeichnung / Name (z.B. Leistungsplatz)
*/
name: string;
/**
* Kapazitätsauslastung (abs.)
*/
utilized: number;
/**
* Verfügbare Kapazität
*/
available: number;
/**
* Kapazitätsname (z.B. Titel)
*/
label: string;
}

View File

@@ -0,0 +1,43 @@
export interface Filter {
/**
* ID der Filterkategorie
*/
id: string;
/**
* Name der Filterkategorie
*/
name: string;
/**
* Liste der Filteroptionen (die Filteroptionen der jeweiligen Filterkategorie)
*/
options: FilterOption[];
/**
* Maximale Anzahl ausgewählter Filter Optionen
*/
max?: number;
}
export interface FilterOption {
/**
* ID der Filteroption
*/
id: string;
/**
* Name der Filteroption
*/
name: string;
/**
* Key der Filteroption
*/
key?: string;
/**
* Liste der Filteroptionen (die Filteroptionen der jeweiligen Filterkategorie)
*/
options?: FilterOption[];
}

View File

@@ -0,0 +1,14 @@
// start:ng42.barrel
export * from './action-result';
export * from './capacity-type';
export * from './filter';
export * from './printer';
export * from './product';
export * from './remission-filter';
export * from './remission-process';
export * from './remission-product';
export * from './remission-products-filter';
export * from './remission-supplier';
export * from './remission-selected-filters';
export * from './shipping-document';
// end:ng42.barrel

View File

@@ -0,0 +1,26 @@
export interface Printer {
/**
* Ist Drucker aktiv
*/
enabled: boolean;
/**
* Pfad des Druckers
*/
key: string;
/**
* Name des Druckers
*/
value: string;
/**
* Ist Drucker ausgewählt
*/
selected: boolean;
/**
* Beschreibung des Druckers
*/
description: string;
}

View File

@@ -0,0 +1,63 @@
import { PriceDTO, ProductDTO } from '@cmf/inventory-api';
export interface Product {
/**
* Produkt PK
*/
id?: number;
/**
* Autor(en)
*/
contributors?: string;
/**
* Bild Identifikationsnummber
*/
imageId?: string;
/**
* Name des Artikels
*/
name?: string;
/**
* Format des Buchs Kurzform (z.B: HC)
*/
format?: string;
/**
* Format des Buchs Langform (z.B: Buch (gebunden))
*/
formatDetail?: string;
/**
* Artikelnummer
*/
ean?: string;
/**
* Produktgruppe (z.B. 112)
*/
productGroup?: string;
/**
* Name der Produktgruppe (z.B. Romane)
*/
productGroupName?: string;
/**
* Artikel-Features (z.B. key: 'SOE')
*/
features: { key: string; name: string }[];
/**
* Produkt-Stammdaten
*/
sourceProduct?: ProductDTO;
/**
* Preis (VK)
*/
sourcePrice?: PriceDTO;
}

View File

@@ -0,0 +1,30 @@
import { RemissionSupplier } from './remission-supplier';
import { RemissionSourceType } from '../types/remission-source.type';
import { RemissionSelectedFilters } from './remission-selected-filters';
export interface RemissionFilter {
/**
* Liste aller Produktfilter
*/
filter?: RemissionSelectedFilters;
/**
* Artikel-Ursprung (zentrales Sortiment oder Überlauf)
*/
source: RemissionSourceType;
/**
* Remissions-Ziel / Lieferant (z.B. Libri)
*/
target: RemissionSupplier;
/**
* Skip
*/
skip: number;
/**
* Take
*/
take: number;
}

View File

@@ -0,0 +1,50 @@
import { CapacityType } from './capacity-type';
import { ShippingDocument } from './shipping-document';
import { RemissionFilter } from './remission-filter';
export interface RemissionProcess {
/**
* RemissionProcess PK
*/
id: number;
/**
* Group ID
*/
returnGroup: number;
/**
* Remissionsnummer
*/
externalId?: number;
/**
* PK Lager
*/
stockId: number;
/**
* Kapazitäts-Informationen (z.B. Leistungsplatz 2 von 5 Artikel)
*/
capacities: CapacityType[];
/**
* Liste aller Produktfilter
*/
filter: RemissionFilter;
/**
* Warenbegleitschein
*/
shippingDocuments?: ShippingDocument[];
/**
* Beginn der Retourenerstellung / Remission
*/
startDate?: string;
/**
* Bereits Abgeschlossen
*/
completed?: boolean;
}

View File

@@ -0,0 +1,115 @@
import { RemissionPlacementType } from '../types/remission-placement-types';
import { RemissionSupplier } from './remission-supplier';
export interface RemissionProduct {
/**
* Produkt PK
*/
id: number;
/**
* Bild Identifikationsnummber
*/
imageId: string;
/**
* Autor(en)
*/
contributors: string;
/**
* Name des Artikels
*/
name: string;
/**
* Format des Buchs Kurzform (z.B: HC)
*/
format: string;
/**
* Format des Buchs Langform (z.B: Buch (gebunden))
*/
formatDetail: string;
/**
* Artikelnummer
*/
ean: string;
/**
* Preis des Artikels
*/
price: number;
/**
* Währeng des Artikelpreis
*/
currency: string;
/**
* Produktgruppe (z.B. 112)
*/
productGroup: string;
/**
* Name der Produktgruppe (z.B. Romane)
*/
productGroupName: string;
/**
* Aktueller Bestand des Artikels
*/
inStock: number;
/**
* Remi-Menge
*/
remissionQuantity: number;
/**
* Aktueller Bestand minus Remi-Menge
*/
remainingQuantity: number;
/**
* Artikel-Platzierung (z.B. Stapelplatz)
*/
placementType: RemissionPlacementType;
/**
* Grund für Remissions (Remi-Grund)
*/
remissionReason: string;
/**
* Ausgabe / Edition
*/
edition: string;
/**
* Artikel-Features (z.B. key: 'SOE')
*/
features: { key: string; name: string }[];
/**
* Produktnummer des internen Warenkatalogs
*/
catalogProductNumber?: string;
/**
* Restmenge (=Teilmenge des Artikels auf Warenbegleitschein)
*/
isResidual?: boolean;
/**
* Remissions-Ziel / Lieferant (z.B. Libri)
*/
target?: RemissionSupplier;
/**
* Wurde das Produkt manuell zur Remissionsliste hinzugefügt
*/
isManuallyAdded?: boolean;
}

View File

@@ -0,0 +1,31 @@
import { RemissionSupplier } from './remission-supplier';
import { CapacityType } from './capacity-type';
import { Filter } from './filter';
import { RemissionSourceType } from '../types/remission-source.type';
export interface RemissionProductsFilter {
/**
* PK Lager
*/
stockId: number;
/**
* Artikel-Ursprung (zentrales Sortiment oder Überlauf)
*/
source: RemissionSourceType;
/**
* Remissions-Ziel / Lieferant (z.B. Libri)
*/
target: RemissionSupplier;
/**
* Kapazitäts-Informationen (z.B. Leistungsplatz 2 von 5 Artikel)
*/
capacities: CapacityType[];
/**
* Liste aller Produktfilter
*/
filter: Filter[];
}

View File

@@ -0,0 +1,10 @@
export interface RemissionSelectedFilters {
ueberlauf?: {
Blank?: { [filterId: string]: string[] };
ZL?: { [filterId: string]: string[] };
};
zentral?: {
Blank?: { [filterId: string]: string[] };
ZL?: { [filterId: string]: string[] };
};
}

View File

@@ -0,0 +1,16 @@
export interface RemissionSupplier {
/**
* PK
*/
id: number;
/**
* Name des Lieferanten (z.B. ZL)
*/
name: string;
/**
* Lieferantennummer
*/
supplierNumber: string;
}

View File

@@ -0,0 +1,35 @@
import { RemissionProduct } from './remission-product';
export interface ShippingDocument {
/**
* ShippingDocument ID
*/
id?: number;
/**
* Warenbegleitscheinnummer
*/
shippingDocumentNumber?: string;
/**
* Liste aller Produkte auf dem Warenbegleitschein
*/
products?: RemissionProduct[];
/**
* Status des Wannenbegleitschein
* True = Wanne ist abgeschlossen
*/
isCompleted?: boolean;
/**
* Wurde die Wanne bereits gelöscht
* True = Wanne ist gelöscht
*/
isDeleted?: boolean;
/**
* Wannennummer (Paketnummer)
*/
packageNumber?: string;
}

View File

@@ -0,0 +1,15 @@
import { Injectable } from '@angular/core';
@Injectable()
export class RemissionModuleOptions {
/**
* Sollen Testdaten (Services) verwendet werden
*/
useMock?: boolean;
endpoints?: {
catsearch?: string;
remi?: string;
print?: string;
};
}

View File

@@ -0,0 +1,142 @@
import { RemissionModuleOptions } from './remission-module.options';
import { CatsearchApiRequestOptions } from '@isa/catsearch-api';
import { RemiApiRequestOptions } from '@isa/remi-api';
import { PrintApiRequestOptions } from '@isa/print-api';
import { NgModule, ModuleWithProviders } from '@angular/core';
import { RestRemissionService } from './services/rest-remission.service';
import { MockRemissionService } from './mock/mock-remission.service';
import { Mapper } from './mappings/mapper';
import { ReturnSuggestionDtoToRemissionProductMapping } from './mappings/return-suggestion-dto-to-remission-product.mapping';
import { ItemDtoToProductMapping } from './mappings/item-dto-to-product.mapping';
import { ProductToPriceDTOMapping } from './mappings/product-to-price-dto';
import { ProductToProductDTOMapping } from './mappings/product-to-product-dto';
import { ReturnItemDtoToRemissionProductMapping } from './mappings/return-item-dto-to-remission-product.mapping';
import { ReceiptItemDtoToRemissionProductMapping } from './mappings/receipt-item-dto-to-remission-product.mapping';
import { ReceiptDTOToShippingDocumentMapping } from './mappings/receipt-dto-to-shipping-document.mapping';
import { RemissionService } from './services/remission.service';
import { BaseUrlInterceptor, CatchResponseArgsErrorInterceptor, LogErrorInterceptor } from '@cmf/core';
import { HTTP_INTERCEPTORS } from '@angular/common/http';
import { FeaturesToAssortmentMapping } from './mappings/features-to-assortment.mapping';
import { SupplierDtoToRemissionSupplier } from './mappings/supplier-dto-to-remssion-supplier.mapping';
export function catsearchApiRequestOptionsFactory(options: RemissionModuleOptions): CatsearchApiRequestOptions {
return {
baseUrl: (options.endpoints && options.endpoints.catsearch) || '',
catchResponseArgsError: true,
};
}
export function remiApiRequestOptionsFactory(options: RemissionModuleOptions): RemiApiRequestOptions {
return {
baseUrl: (options.endpoints && options.endpoints.remi) || '',
catchResponseArgsError: true,
};
}
export function printApiRequestOptionsFactory(options: RemissionModuleOptions): PrintApiRequestOptions {
return {
baseUrl: (options.endpoints && options.endpoints.print) || '',
catchResponseArgsError: true,
};
}
export function remissionServiceFactory(options: RemissionModuleOptions, rest: RestRemissionService, mock: MockRemissionService) {
return options.useMock ? mock : rest;
}
@NgModule({
declarations: [],
imports: [],
exports: [],
})
export class RemissionModule {
static forRoot(options: RemissionModuleOptions): ModuleWithProviders {
return {
ngModule: RemissionModule,
providers: [
{
provide: RemissionModuleOptions,
useValue: options,
},
{
provide: CatsearchApiRequestOptions,
useFactory: catsearchApiRequestOptionsFactory,
deps: [RemissionModuleOptions],
},
{
provide: RemiApiRequestOptions,
useFactory: remiApiRequestOptionsFactory,
deps: [RemissionModuleOptions],
},
{
provide: PrintApiRequestOptions,
useFactory: printApiRequestOptionsFactory,
deps: [RemissionModuleOptions],
},
{
provide: Mapper,
useClass: ReturnSuggestionDtoToRemissionProductMapping,
multi: true,
},
{
provide: Mapper,
useClass: ItemDtoToProductMapping,
multi: true,
},
{
provide: Mapper,
useClass: ProductToPriceDTOMapping,
multi: true,
},
{
provide: Mapper,
useClass: ProductToProductDTOMapping,
multi: true,
},
{
provide: Mapper,
useClass: ReturnItemDtoToRemissionProductMapping,
multi: true,
},
{
provide: Mapper,
useClass: ReceiptItemDtoToRemissionProductMapping,
multi: true,
},
{
provide: Mapper,
useClass: ReceiptDTOToShippingDocumentMapping,
multi: true,
},
{
provide: Mapper,
useClass: FeaturesToAssortmentMapping,
multi: true,
},
{
provide: Mapper,
useClass: SupplierDtoToRemissionSupplier,
multi: true,
},
{
provide: RemissionService,
useFactory: remissionServiceFactory,
deps: [RemissionModuleOptions, RestRemissionService, MockRemissionService],
},
{
provide: HTTP_INTERCEPTORS,
useClass: BaseUrlInterceptor,
multi: true,
},
{
provide: HTTP_INTERCEPTORS,
useClass: CatchResponseArgsErrorInterceptor,
multi: true,
},
{
provide: HTTP_INTERCEPTORS,
useClass: LogErrorInterceptor,
multi: true,
},
],
};
}
}

View File

@@ -0,0 +1,4 @@
// start:ng42.barrel
export * from './rest-filter.service';
export * from './rest-remission-products.service';
// end:ng42.barrel

View File

@@ -0,0 +1,127 @@
import { Injectable } from '@angular/core';
import { Observable, of } from 'rxjs';
import { StringDictionary, InputDTO, OptionDTO } from '@cmf/core';
import { RemiService, FilterParams } from '@isa/remi-api';
import { map, shareReplay } from 'rxjs/operators';
import { FilterOption, Filter } from '../models/filter';
import { RemissionSourceType } from '../types/remission-source.type';
import { RemissionFilter, RemissionSelectedFilters } from '../models';
@Injectable({ providedIn: 'root' })
export class RestFilterService {
private cachedFilters$ = new Map<string, Observable<InputDTO[]>>();
constructor(private remiService: RemiService) {}
mapOptionToFilterOption(option: OptionDTO): FilterOption {
const result = {
id: option.value,
key: option.key,
name: option.label,
options: !!option.values && option.values.length > 0 ? option.values.map((i) => this.mapOptionToFilterOption(i)) : undefined,
};
return result;
}
getFilter(params: { remissionSourceType: RemissionSourceType; supplierId: number; stockId: number }): Observable<Filter[]> {
return this.getRestFilter({
remissionSourceType: params.remissionSourceType,
supplierId: params.supplierId,
stockId: params.stockId,
}).pipe(
map((response) =>
response.map((input) => ({
id: input.key,
key: input.key,
name: input.label,
max: input.options.max,
options: input.options.values.map((option) => this.mapOptionToFilterOption(option)),
}))
)
);
}
getRestFilter(params: { remissionSourceType: RemissionSourceType; supplierId: number; stockId: number }): Observable<InputDTO[]> {
const cacheIdentifier = params.remissionSourceType + params.supplierId;
if (!this.cachedFilters$.get(cacheIdentifier)) {
this.cachedFilters$.set(cacheIdentifier, this.getFiltersFromService(params).pipe(shareReplay()));
}
return this.cachedFilters$
.get(cacheIdentifier)
.pipe(map((result) => this.getSourceTypeSpecificFilters(result, params.remissionSourceType)));
}
createQueryRemiTokenFilter(params: {
remissionSourceType: RemissionSourceType;
remissionTargetName: string;
stockId: number;
filter: RemissionFilter;
}): Observable<StringDictionary<string>> {
const queryTokenFilter: StringDictionary<string> = {};
const filter =
params.filter.filter[params.remissionSourceType] && params.filter.filter[params.remissionSourceType][params.remissionTargetName];
if (!filter) {
return of({});
}
for (const key in filter) {
if (filter.hasOwnProperty(key) && Array.isArray(filter[key])) {
const values = filter[key].filter((value) => !!value);
queryTokenFilter[key] = values.join(';');
}
}
return of(queryTokenFilter);
}
getSourceTypeSpecificFilters(inputs: InputDTO[], remissionSourceType: RemissionSourceType): InputDTO[] {
return remissionSourceType === 'zentral' ? inputs : inputs.filter((option) => option.key !== 'aktionen');
}
private getFiltersFromService(params: {
remissionSourceType: RemissionSourceType;
supplierId: number;
stockId: number;
}): Observable<InputDTO[]> {
let filter$: Observable<InputDTO[]>;
const filterQuery: FilterParams = {
stockId: params.stockId,
supplierId: params.supplierId,
};
if (params.remissionSourceType === 'zentral') {
filter$ = this.remiService.getPflichtremissionFilter(filterQuery).pipe(map((response) => response.result));
} else {
filter$ = this.remiService.getUeberlaufFilter(filterQuery).pipe(map((response) => response.result));
}
return filter$;
}
checkFilterValidity(filter: RemissionSelectedFilters): boolean {
const isValidRemissionSelectedFilter = filter.hasOwnProperty('zentral') && filter.hasOwnProperty('ueberlauf');
return isValidRemissionSelectedFilter;
}
resetRemissionSelectedFilters(): RemissionSelectedFilters {
return {
ueberlauf: {
Blank: {},
ZL: {},
},
zentral: {
Blank: {},
ZL: {},
},
};
}
getSelectedFilters(filter: RemissionFilter): { [filterId: string]: string[] } {
return (filter.filter && filter.filter[filter.source] && filter.filter[filter.source][filter.target.name]) || {};
}
}

View File

@@ -0,0 +1,333 @@
import { Injectable } from '@angular/core';
import { Observable, combineLatest, BehaviorSubject, forkJoin, of } from 'rxjs';
import { RemiService, ReturnApiService } from '@isa/remi-api';
import { RestFilterService } from './rest-filter.service';
import {
switchMap,
map,
flatMap,
mergeMap,
startWith,
take,
shareReplay,
} from 'rxjs/operators';
import { filter as rxjsFilter } from 'rxjs/operators';
import { MappingService } from '../mappings/mapping.service';
import { Mapper } from '../mappings/mapper';
import { ReturnSuggestionDTO, ReturnItemDTO } from '@cmf/inventory-api';
import { RemissionFilter } from '../models/remission-filter';
import { RemissionProduct } from '../models/remission-product';
import { KeyValueDTO } from '@cmf/core';
@Injectable({ providedIn: 'root' })
export class RestRemissionProductsService {
constructor(
private remiService: RemiService,
private returnApi: ReturnApiService,
private restFilterService: RestFilterService,
private mapping: MappingService
) {}
// Store priority products for supplierId
priorityProducts = new Map<number, BehaviorSubject<number[]>>([
[1, new BehaviorSubject<number[]>([])],
[2, new BehaviorSubject<number[]>([])],
]);
productGroupNames$: Observable<KeyValueDTO<string, string>[]>;
// Products that should be shown on top right after adding to remission list
updatePriorityProducts(productId: number, supplierId: number) {
const applicablePriorityProducts$ = this.priorityProducts.get(supplierId);
if (!applicablePriorityProducts$) {
return;
}
applicablePriorityProducts$.next([
productId,
...applicablePriorityProducts$.value,
]);
}
// Delete priority products
deletePriorityProducts() {
this.priorityProducts = new Map<number, BehaviorSubject<number[]>>([
[1, new BehaviorSubject<number[]>([])],
[2, new BehaviorSubject<number[]>([])],
]);
}
// Products that need to be removed from priority list
removePriorityProducts(productId: number, supplierId: number) {
const applicablePriorityProducts$ = this.priorityProducts.get(supplierId);
if (!applicablePriorityProducts$) {
return;
}
applicablePriorityProducts$.next(
applicablePriorityProducts$.value.filter((id) => productId !== id)
);
// TODO Only temporary until applicable supplierId is known
const tempSupplierId = supplierId === 1 ? 2 : 1;
const applicablePriorityProducts2$ = this.priorityProducts.get(
tempSupplierId
);
applicablePriorityProducts2$.next(
applicablePriorityProducts$.value.filter((id) => productId !== id)
);
}
getProductGroupNames(
stockId: number
): Observable<KeyValueDTO<string, string>[]> {
if (!this.productGroupNames$) {
this.productGroupNames$ = this.remiService
.productgroups({ stockId })
.pipe(map((response) => response.result))
.pipe(shareReplay());
}
return this.productGroupNames$;
}
getRemissionproducts({
filter,
stockId,
}: {
filter: RemissionFilter;
stockId: number;
}) {
let allProducts$: Observable<{
skip?: number;
take?: number;
hits?: number;
items: RemissionProduct[];
completed: boolean;
}>;
const filter$ = this.restFilterService.createQueryRemiTokenFilter({
remissionSourceType: filter.source,
remissionTargetName: filter.target.name,
stockId,
filter,
});
if (filter.source === 'ueberlauf') {
const mapper = this.mapping.get<
Mapper<ReturnSuggestionDTO, RemissionProduct>
>('ReturnSuggestionDTO', 'RemissionProduct');
const regularProducts$ = filter$.pipe(
switchMap((qtFilter) =>
this.remiService.ueberlauf({
queryToken: {
stockId,
supplierId: filter.target.id,
filter: qtFilter,
skip: filter.skip,
take: filter.take,
},
})
)
);
allProducts$ = regularProducts$.pipe(
take(1),
map((regular) => ({
skip: regular.skip,
take: regular.take,
hits: regular.hits,
completed:
regular.completed || regular.skip + regular.take > regular.hits,
items: [...regular.result].map((item) => mapper.map(item)),
}))
);
} else if (filter.source === 'zentral') {
const mapper = this.mapping.get<Mapper<ReturnItemDTO, RemissionProduct>>(
'ReturnItemDTO',
'RemissionProduct'
);
const applicablePriorityProducts$ = this.priorityProducts.get(
filter.target.id
);
const showPriorityProducts = (priorityProductIds) => {
if (!priorityProductIds.length) {
return false;
}
if (!filter.filter || !filter.filter.zentral) {
return true;
}
const filterToCheck = filter.filter.zentral;
const filterGroups = Object.keys(filterToCheck[filter.target.name]);
let isFilterSet = false;
for (const group of filterGroups) {
if (!!filterToCheck[filter.target.name][group].length) {
isFilterSet = true;
}
}
return !isFilterSet;
};
const priorityItems$ = applicablePriorityProducts$.pipe(
switchMap((ids) => (!!showPriorityProducts(ids) ? of(ids) : of([]))),
mergeMap((ids) =>
forkJoin(
ids.map((id) => this.returnApi.getReturnItemById({ itemId: id }))
)
),
map((products) => products.map((product) => product.result)),
startWith([]),
map((products) => products.slice(filter.skip))
);
const regularProducts$ = filter$.pipe(
switchMap((qtFilter) =>
this.remiService.pflichtremissionsartikel({
queryToken: {
stockId,
supplierId: filter.target.id,
filter: qtFilter,
skip: filter.skip,
take: filter.take,
},
})
)
);
allProducts$ = combineLatest([regularProducts$, priorityItems$]).pipe(
map(([regular, priority]) => ({
skip: regular.skip,
take: regular.take,
hits: regular.hits,
completed:
regular.completed || regular.skip + regular.take > regular.hits,
items: [...priority, ...regular.result].map((item) =>
mapper.map(item)
),
}))
);
}
// Setzen der productGroup im RemissionProduct
const result1$ = allProducts$.pipe(
flatMap((products) => {
const itemsWithGroupnames$ = this.addGroupnameToProducts(
products.items,
stockId
);
return itemsWithGroupnames$.pipe(
map((items) => ({
...products,
items,
}))
);
})
);
// Setzen des Lagerbestands im Remissionproduct
const result2$ = result1$.pipe(
flatMap((result) =>
!result.items.length
? of({ items: [], completed: true })
: this.remiService
.inStock({
stockId,
articleIds:
result.items &&
result.items
.filter((item) => !!item.catalogProductNumber)
.map((product) => Number(product.catalogProductNumber)),
})
.pipe(
rxjsFilter((stocks) => !stocks.error),
map((stocks) => {
return {
...result,
items: result.items.map((item) => {
const stock = stocks.result.find(
(info) => info.itemId === +item.catalogProductNumber
);
if (!stock) {
const defaultStockData = {
inStock: 0,
remainingQuantity: 0,
remissionQuantity: item.remissionQuantity || 0,
};
return { ...item, ...defaultStockData };
}
// Available stock after stock in active remission
const availableStock =
stock.inStock - stock.removedFromStock;
const remainingStock =
availableStock < 0 ? 0 : availableStock;
return {
...item,
inStock: remainingStock,
remainingQuantity:
typeof item.remainingQuantity === 'number'
? item.remainingQuantity
: remainingStock - (item.remissionQuantity || 0) >=
0
? remainingStock - (item.remissionQuantity || 0)
: 0,
remissionQuantity:
typeof item.remissionQuantity === 'number'
? item.remissionQuantity
: remainingStock - (item.remainingQuantity || 0),
};
}),
};
})
)
),
map((products) => {
products.items = products.items.filter(
(item) => !!item && item.inStock !== (undefined || null)
);
return products;
})
);
return result2$;
}
addGroupnameToProducts(
products: RemissionProduct[],
stockId: number
): Observable<RemissionProduct[]> {
if (!products.length) {
return of(products);
}
const productGroupNames$ = this.getProductGroupNames(stockId);
return productGroupNames$.pipe(
map((groupNames) =>
products.map((product) => {
const proudctGroupNameMatch = groupNames.find(
(name) => name.key === product.productGroup
);
return {
...product,
productGroupName: proudctGroupNameMatch
? proudctGroupNameMatch.value
: '',
} as RemissionProduct;
})
)
);
}
}

View File

@@ -0,0 +1,5 @@
// start:ng42.barrel
export * from './process-store.service';
export * from './remission.service';
export * from './rest-remission.service';
// end:ng42.barrel

View File

@@ -0,0 +1,39 @@
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import { RemissionProcess } from '../models/remission-process';
import { compare } from '../utils/compare';
@Injectable({ providedIn: 'root' })
export class ProcessStoreService {
private readonly store: Map<number, BehaviorSubject<RemissionProcess>> = new Map();
constructor() {}
set(process: RemissionProcess) {
let processSub: BehaviorSubject<RemissionProcess> = this.get(process.id);
if (processSub instanceof BehaviorSubject) {
if (!compare(processSub.value, process)) {
processSub.next(process);
}
} else {
processSub = new BehaviorSubject(process);
this.store.set(process.id, processSub);
}
return processSub;
}
get(processId: number) {
return this.store.get(processId);
}
remove(processId: number) {
const processSub = this.get(processId);
if (processSub instanceof BehaviorSubject) {
processSub.complete();
this.store.delete(processId);
}
}
}

View File

@@ -0,0 +1,323 @@
import { Observable } from 'rxjs';
import { RemissionProcess } from '../models/remission-process';
import { RemissionProduct } from '../models/remission-product';
import { RemissionFilter } from '../models/remission-filter';
import { Printer } from '../models/printer';
import { Product } from '../models/product';
import { RemissionSourceType } from '../types/remission-source.type';
import { Filter } from '../models/filter';
import { RemissionPlacementType } from '../types/remission-placement-types';
import { RemissionSupplier } from '../models/remission-supplier';
import { ShippingDocument } from '../models/shipping-document';
import { ActionResult, CapacityType } from '../models';
export abstract class RemissionService {
/**
* Notwendige Informationen für View (Start-Screen) und Starten einer Remission
* @returns Remission Prozess Default Settings
*/
abstract createProcess(
source?: RemissionProcess
): Observable<RemissionProcess>;
/**
* Wiederaufnahme eines vorhandenen Prozesses
*/
abstract continueProcess(
source: RemissionProcess
): Observable<RemissionProcess>;
/**
* Wiederaufnahme eines vorhandenen Prozesses anhand der PachstückId
*/
abstract continueProcessFromScan(
containerId: string
): Observable<RemissionProcess>;
/**
* Starten einer Remission
* @param params.remissionProcessId Remissionsnummer
* @returns Remissionsprozess
*/
abstract startRemission(params: {
remissionProcessId: number;
createShippingDocument?: boolean;
}): Observable<RemissionProcess>;
/**
* Remission abschließen
* @param params.remissionProcessId Remissionsnummer
* @returns Ergebnis des Remissionsabschlusses
*/
protected abstract completeRemission(params: {
remissionProcessId: number;
}): Observable<boolean>;
/**
* Alle Remissionen abschließen
* @param params.remissionProcessId Remissionsnummer
* @returns Ergebnis des Remissionsabschlusses
*/
abstract completeRemissions(params: {
remissionProcessId: number;
}): Observable<boolean>;
/**
* Abruf einer Remission
* @param params.remissionProcessId Remissionsnummer
* @returns Remissionsprozess
*/
abstract getRemission(params: {
remissionProcessId: number;
}): Observable<RemissionProcess>;
/**
* Gibt anhand der remissionprocessId und der darin
* definierten Einstellungen die Produktliste zurück
* @param params param.remissionProcessId
* @param params param.skip
* @param params param.take
* @returns Produktliste und Metainformationen (skip, take, completed)
*/
abstract getRemissionProducts(params: {
remissionProcessId: number;
}): Observable<{
skip?: number;
take?: number;
hits?: number;
items: RemissionProduct[];
completed: boolean;
}>;
/**
* Aktualisieren der Remissions-Filter
* @param changes.remissionProcessId Remissionsnummer
* @param changes.changes Remissionsfilter
* @returns Remissionsfilter
*/
abstract updateRemissionFilter(changes: {
remissionProcessId: number;
changes: Partial<RemissionFilter>;
}): Observable<RemissionFilter>;
/**
* Abfrage ob für Remission Druckauftrag erforderlich
* @param remissionProcessId Remissionsnummer
* @returns Ob physischer Druck nötig
*/
abstract isPrintingRequired(params: {
remissionProcessId: number;
}): Observable<boolean>;
/**
* Abfrage der verfügbaren Drucker
* @returns Liste der verfügbaren Drucker
*/
abstract getPrinters(): Observable<Printer[]>;
/**
* Druckauftrag für Remissionsliste
* @param remissionProcessId Remissionsnummer
* @param params.printerKey Name des Druckers
* @returns Ob Druckauftrag ausgeführt wurde
*/
abstract printRemissionList(params: {
remissionProcessId: number;
printerKey: string;
}): Observable<boolean>;
/**
* Druckauftrag für Warenbegleitschein
* @param params.remissionProcessId Remissionsnummer
* @param params.shippingDocumentId ID des Warenbegleitscheins (default: alle Warenbegleitscheine)
* @param params.printerKey Name des Druckers
* @returns Ob Druckauftrag ausgeführt wurde
*/
abstract printShippingDocument(params: {
remissionProcessId: number;
shippingDocumentId?: number;
printerKey: string;
}): Observable<boolean>;
/**
* Produktsuche über EAN
* @param ean Artikelidentifikationsnummer
* @returns Produktinformation zur Artikelidentifikationsnummer
*/
abstract searchProduct(params: { ean: string }): Observable<Product>;
/**
* Anwendbare Filter für die Suche
* @param remissionSourceType Artikel-Ursprung (z.B. 'zentral')
* @returns Mögliche Filteroptionen (inkl. Sub-gruppen)
*/
abstract getFilters(params: {
remissionProcessId: number;
}): Observable<Filter[]>;
/**
* Arten der Produktplatzierung (z.B. Stapelplatz)
* @returns Mögliche Platzierungen eines Produkts
*/
abstract getPlacementTypes(): Observable<RemissionPlacementType[]>;
/**
* Gründe für Remission (z.B. beschädigtes Exemplar)
* @returns Mögliche Gründe für Remission
*/
abstract getRemissionReasons(): Observable<string[]>;
/**
* Remissions-Ziele / Lieferanten (z.B. Libri, Blank)
* @returns Mägliche Remissions-Ziele
*/
abstract getRemissionTargets(): Observable<RemissionSupplier[]>;
/**
* Artikel-Ursprung (z.B. zentrales Sortiment oder Überlauf)
* @returns Mögliche Artikel-Ursprünge
*/
abstract getRemissionSources(): Observable<RemissionSourceType[]>;
/**
* Abfrage der Kapazitätsauslastung
* @returns Kapazitätsauslastung
*/
abstract getCapacities(params: {
selectedFilters?: { [filterId: string]: string[] };
supplierId: number;
}): Observable<CapacityType[]>;
/**
* Abruf eines Warenbegleitscheins (Shipping Documents)
* @param params.remissionProcessId Remissionsnummer
* @param params.shippingDocumentId ID des Warenbegleitscheins
* @returns Warenbegleitscheins
*/
abstract getShippingDocuments(params: {
remissionProcessId: number;
shippingDocumentId: number;
}): Observable<ShippingDocument>;
/**
* Entfernen eiens Produkts von der Remissionsliste
* @param input.remissionProcessId Remissionsnummer
* @param input.product Remissionsprodukt
* @returns Ob Produkt entfernt werden konnte
*/
abstract deleteProductFromRemissionList(input: {
remissionProcessId: number;
remissionProductId: number;
}): Observable<ActionResult<boolean>>;
/**
* Produkt der Remissionsliste hinzufügen
* @param input.remissionProductId ID des hinzuzufügenden Produkts
* @param input.remissionReason Remissionsgrund
* @param input.remissionQuantity Anzahl der zur Remission hinzuzufügenden Exemplare
* @returns Produktinformation über Remissionsprodukt
*/
abstract addProductToRemit(input: {
product: Product;
remissionReason: string;
remissionQuantity: number;
}): Observable<RemissionProduct>;
/**
* Artikel zu Warenbegleitschein hinzufügen
* @param params.remissionProcessId Remissionsnummer
* @param params.remissionProductId ID des hinzuzufügenden Produkts
* @param params.shippingDocumentId ID des Warenbegleitscheins
* @param params.placementType Platzierungsart (z.B. Stapelplatz)
* @param params.quantity Anzahl der zu hinzuzufügenden Exemplare
* @returns Ob Artikel dem Warenbegleitschein hinzugefügt werden konnte
*/
abstract addProductToShippingDocument(params: {
remissionProcessId: number;
remissionProductId: number;
shippingDocumentId: number;
placementType?: string;
quantity?: number;
inStock?: number;
predefinedRemissionQuantity?: number;
}): Observable<ActionResult<boolean>>;
/**
* Artikel von Warenbegleitschein entfernen
* @param params.remissionProcessId Remissionsnummer
* @param params.shippingDocumentId ID des Warenbegleitscheins
* @param params.remissionProductId ID des entfernenden Produkts
* @param params.placementType Platzierungsart (default: alle)
* @returns Ob Artikel vom Warenbegleitschein entfernt werden konnte
*/
abstract removeProductFromShippingDocument(params: {
remissionProcessId: number;
remissionProductId: number;
shippingDocumentId: number;
placementType?: string;
}): Observable<boolean>;
/**
* Neuladen/Refresh der Remissions-Produkte (getRemission-Products Stream)
* Beispiel: CtA 'Filtern" in Filter
* @param params.remissionProcessId Remissionsnummer
*/
abstract reloadProducts(params: { remissionProcessId: number }): void;
/**
* Warenbegleitschein abschließen
* @param params.remissionProcessId Remissionsnummer
* @param params.shippingDocumentId ID des Warenbegleitscheins
* @param params.containerId Wannennummer
* @returns Ob Warenbegleitschein abgeschlossen werden konnte
*/
abstract completeShippingDocument(params: {
remissionProcessId: number;
shippingDocumentId: number;
containerId: string;
}): Observable<ActionResult<boolean>>;
/**
* Warenbegleitschein anlegen
* @param params.remissionProcessId Remissionsprozess
* @param params.shippingDocumentId PachstückId
* @returns Neu erstellten Warenbegleitschein
*/
abstract createShippingDocument(params: {
remissionProcessId: number;
}): Observable<ShippingDocument>;
/**
* Liste aller Remissionen
*/
abstract getAllRemissions(params: {
showOpen?: boolean;
showOpenLastWeekOnly?: boolean;
showCompleted?: boolean;
showCompletedLastWeekOnly?: boolean;
receiptNumber?: string;
returnGroup?: number;
take?: number;
}): Observable<RemissionProcess[]>;
/**
* Liste nicht abgeschlossener Remissionen
*/
abstract getUncompletedRemissions(): Observable<RemissionProcess[]>;
/**
* Remission abbrechen
*/
abstract deleteRemission(params: {
remissionProcessId: number;
externalId?: number;
}): Observable<boolean>;
abstract deleteShippingDocument(params: {
remissionProcessId: number;
shippingDocumentId: number;
externalId?: number;
}): Observable<
ActionResult<{ deleted: boolean; completedRemissionsExist: boolean }>
>;
}

View File

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,4 @@
// start:ng42.barrel
export * from './remission-placement-types';
export * from './remission-source.type';
// end:ng42.barrel

View File

@@ -0,0 +1 @@
export type RemissionPlacementType = 'Leistung' | 'Stapel';

View File

@@ -0,0 +1 @@
export type RemissionSourceType = 'zentral' | 'ueberlauf';

View File

@@ -0,0 +1,6 @@
export function addDays(startDate: Date, daysToAdd: number): Date {
const baseDate = new Date(startDate);
const newDate = baseDate.setDate(startDate.getDate() + daysToAdd);
return new Date(newDate);
}

View File

@@ -0,0 +1,46 @@
export function compare<T>(val1: T, val2: T): boolean {
if (!val1 && !val2) {
return true;
}
if (!!val1 && !val2) {
return false;
}
if (typeof val1 !== typeof val2) {
return false;
}
if (Array.isArray(val1) && Array.isArray(val2)) {
if (val1.length !== val2.length) {
return false;
}
for (let index = 0; index < val1.length; index++) {
if (!compare(val1[index], val2[index])) {
return false;
}
}
return true;
}
if (typeof val1 === 'object') {
if (Object.keys(val1).length !== Object.keys(val2).length) {
return false;
}
for (const key in { ...val1, ...val2 }) {
if (val1.hasOwnProperty(key) && val2.hasOwnProperty(key)) {
if (!compare(val1[key], val2[key])) {
return false;
}
} else {
return false;
}
}
return true;
}
return val1 === val2;
}

View File

@@ -0,0 +1,11 @@
/*
* Public API Surface of remission
*/
export * from './lib/generators';
export * from './lib/mock';
export * from './lib/models';
export * from './lib/remission-module.options';
export * from './lib/remission.module';
export * from './lib/rest';
export * from './lib/services';
export * from './lib/types';

View File

@@ -0,0 +1,16 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'core-js/es7/reflect';
import 'zone.js/dist/zone';
import 'zone.js/dist/zone-testing';
import { getTestBed } from '@angular/core/testing';
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
declare const require: any;
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

View File

@@ -0,0 +1,26 @@
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/lib",
"target": "es2015",
"declaration": true,
"inlineSources": true,
"types": [],
"lib": [
"dom",
"es2018"
]
},
"angularCompilerOptions": {
"annotateForClosureCompiler": true,
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"fullTemplateTypeCheck": true,
"strictInjectionParameters": true,
"enableResourceInlining": true
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
]
}

View File

@@ -0,0 +1,17 @@
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/spec",
"types": [
"jasmine",
"node"
]
},
"files": [
"src/test.ts"
],
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}

View File

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

View File

@@ -5,7 +5,8 @@ This library was generated with [Angular CLI](https://github.com/angular/angular
## Code scaffolding
Run `ng generate component component-name --project native-container` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project native-container`.
> Note: Don't forget to add `--project native-container` or else it will be added to the default project in your `angular.json` file.
> Note: Don't forget to add `--project native-container` or else it will be added to the default project in your `angular.json` file.
## Build

View File

@@ -10,15 +10,15 @@ module.exports = function (config) {
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma')
require('@angular-devkit/build-angular/plugins/karma'),
],
client: {
clearContext: false // leave Jasmine Spec Runner output visible in browser
clearContext: false, // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../../coverage/native-container'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true
fixWebpackSourcePaths: true,
},
reporters: ['progress', 'kjhtml'],
port: 9876,
@@ -27,6 +27,6 @@ module.exports = function (config) {
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true
restartOnFileChange: true,
});
};

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