@hitsoft/smart-warehouse 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/config/enums/index.d.ts +1 -0
- package/config/enums/route-names.d.ts +12 -0
- package/config/index.d.ts +5 -0
- package/config/providers/connector-params-route.provider.d.ts +8 -0
- package/config/providers/index.d.ts +7 -0
- package/config/providers/order-station-route.provider.d.ts +8 -0
- package/config/providers/orders-route.provider.d.ts +8 -0
- package/config/providers/quantity-correction-route.provider.d.ts +8 -0
- package/config/providers/route.provider.d.ts +8 -0
- package/config/providers/shelf-placement-route.provider.d.ts +8 -0
- package/config/providers/shelf-transfer-route.provider.d.ts +8 -0
- package/config/providers/shortages-route.provider.d.ts +8 -0
- package/config/providers/station.provider.d.ts +8 -0
- package/config/providers/stock-report.d.ts +8 -0
- package/config/public-api.d.ts +3 -0
- package/config/smart-warehouse-config.module.d.ts +8 -0
- package/esm2020/config/enums/index.mjs +2 -0
- package/esm2020/config/enums/route-names.mjs +2 -0
- package/esm2020/config/hitsoft-smart-warehouse-config.mjs +5 -0
- package/esm2020/config/providers/connector-params-route.provider.mjs +25 -0
- package/esm2020/config/providers/index.mjs +8 -0
- package/esm2020/config/providers/order-station-route.provider.mjs +25 -0
- package/esm2020/config/providers/orders-route.provider.mjs +25 -0
- package/esm2020/config/providers/quantity-correction-route.provider.mjs +25 -0
- package/esm2020/config/providers/route.provider.mjs +24 -0
- package/esm2020/config/providers/shelf-placement-route.provider.mjs +25 -0
- package/esm2020/config/providers/shelf-transfer-route.provider.mjs +25 -0
- package/esm2020/config/providers/shortages-route.provider.mjs +25 -0
- package/esm2020/config/providers/station.provider.mjs +25 -0
- package/esm2020/config/providers/stock-report.mjs +25 -0
- package/esm2020/config/public-api.mjs +4 -0
- package/esm2020/config/smart-warehouse-config.module.mjs +37 -0
- package/esm2020/hitsoft-smart-warehouse.mjs +5 -0
- package/esm2020/lib/components/connector-params/connector-params.component.mjs +182 -0
- package/esm2020/lib/components/connector-params/connector-params.module.mjs +41 -0
- package/esm2020/lib/components/order-station/order-station.component.mjs +160 -0
- package/esm2020/lib/components/order-station/order-station.module.mjs +57 -0
- package/esm2020/lib/components/orders/orders.component.mjs +445 -0
- package/esm2020/lib/components/orders/orders.module.mjs +75 -0
- package/esm2020/lib/components/quantity-correction/quantity-correction.component.mjs +231 -0
- package/esm2020/lib/components/quantity-correction/quantity-correction.module.mjs +41 -0
- package/esm2020/lib/components/shelf-placement/shelf-placement.component.mjs +297 -0
- package/esm2020/lib/components/shelf-placement/shelf-placement.module.mjs +66 -0
- package/esm2020/lib/components/shelf-transfer/shelf-transfer.component.mjs +146 -0
- package/esm2020/lib/components/shelf-transfer/shelf-transfer.module.mjs +41 -0
- package/esm2020/lib/components/shortages/shortages.component.mjs +75 -0
- package/esm2020/lib/components/shortages/shortages.module.mjs +42 -0
- package/esm2020/lib/components/smart-warehouse.component.mjs +18 -0
- package/esm2020/lib/components/stock-report/stock-report.component.mjs +29 -0
- package/esm2020/lib/components/stock-report/stock-report.module.mjs +42 -0
- package/esm2020/lib/guards/connector-params.guard.mjs +58 -0
- package/esm2020/lib/hit-proxy/connector-params/connector-params.service.mjs +27 -0
- package/esm2020/lib/hit-proxy/devexpress-query-builder/devexpress-load-options.model.mjs +2 -0
- package/esm2020/lib/hit-proxy/devexpress-query-builder/devexpress-query-builder.mjs +62 -0
- package/esm2020/lib/hit-proxy/inventory/inventory.service.mjs +21 -0
- package/esm2020/lib/hit-proxy/order-station/order-station.service.mjs +18 -0
- package/esm2020/lib/hit-proxy/orders/model.mjs +2 -0
- package/esm2020/lib/hit-proxy/orders/order.service.mjs +81 -0
- package/esm2020/lib/hit-proxy/quantity-correction/quantity-correction.service.mjs +47 -0
- package/esm2020/lib/hit-proxy/shortages/model.mjs +2 -0
- package/esm2020/lib/hit-proxy/shortages/shortages.service.mjs +26 -0
- package/esm2020/lib/hit-proxy/stations/station.service.mjs +86 -0
- package/esm2020/lib/hit-proxy/stock-report/stock-report.service.mjs +22 -0
- package/esm2020/lib/hit-proxy/stock-transfer/stock-transfer.service.mjs +21 -0
- package/esm2020/lib/hit-proxy/warehouse/warehouse.service.mjs +65 -0
- package/esm2020/lib/services/smart-warehouse.service.mjs +21 -0
- package/esm2020/lib/smart-warehouse-routing.module.mjs +79 -0
- package/esm2020/lib/smart-warehouse.module.mjs +34 -0
- package/esm2020/lib/stations/station.component.mjs +43 -0
- package/esm2020/lib/stations/station.module.mjs +42 -0
- package/esm2020/public-api.mjs +20 -0
- package/fesm2015/hitsoft-smart-warehouse-config.mjs +264 -0
- package/fesm2015/hitsoft-smart-warehouse-config.mjs.map +1 -0
- package/fesm2015/hitsoft-smart-warehouse.mjs +2577 -0
- package/fesm2015/hitsoft-smart-warehouse.mjs.map +1 -0
- package/fesm2020/hitsoft-smart-warehouse-config.mjs +264 -0
- package/fesm2020/hitsoft-smart-warehouse-config.mjs.map +1 -0
- package/fesm2020/hitsoft-smart-warehouse.mjs +2515 -0
- package/fesm2020/hitsoft-smart-warehouse.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/connector-params/connector-params.component.d.ts +44 -0
- package/lib/components/connector-params/connector-params.module.d.ts +13 -0
- package/lib/components/order-station/order-station.component.d.ts +31 -0
- package/lib/components/order-station/order-station.module.d.ts +16 -0
- package/lib/components/orders/orders.component.d.ts +63 -0
- package/lib/components/orders/orders.module.d.ts +17 -0
- package/lib/components/quantity-correction/quantity-correction.component.d.ts +52 -0
- package/lib/components/quantity-correction/quantity-correction.module.d.ts +16 -0
- package/lib/components/shelf-placement/shelf-placement.component.d.ts +93 -0
- package/lib/components/shelf-placement/shelf-placement.module.d.ts +17 -0
- package/lib/components/shelf-transfer/shelf-transfer.component.d.ts +26 -0
- package/lib/components/shelf-transfer/shelf-transfer.module.d.ts +16 -0
- package/lib/components/shortages/shortages.component.d.ts +25 -0
- package/lib/components/shortages/shortages.module.d.ts +17 -0
- package/lib/components/smart-warehouse.component.d.ts +10 -0
- package/lib/components/stock-report/stock-report.component.d.ts +16 -0
- package/lib/components/stock-report/stock-report.module.d.ts +17 -0
- package/lib/guards/connector-params.guard.d.ts +21 -0
- package/lib/hit-proxy/connector-params/connector-params.service.d.ts +46 -0
- package/lib/hit-proxy/devexpress-query-builder/devexpress-load-options.model.d.ts +8 -0
- package/lib/hit-proxy/devexpress-query-builder/devexpress-query-builder.d.ts +17 -0
- package/lib/hit-proxy/inventory/inventory.service.d.ts +22 -0
- package/lib/hit-proxy/order-station/order-station.service.d.ts +24 -0
- package/lib/hit-proxy/orders/model.d.ts +74 -0
- package/lib/hit-proxy/orders/order.service.d.ts +26 -0
- package/lib/hit-proxy/quantity-correction/quantity-correction.service.d.ts +88 -0
- package/lib/hit-proxy/shortages/model.d.ts +17 -0
- package/lib/hit-proxy/shortages/shortages.service.d.ts +13 -0
- package/lib/hit-proxy/stations/station.service.d.ts +25 -0
- package/lib/hit-proxy/stock-report/stock-report.service.d.ts +12 -0
- package/lib/hit-proxy/stock-transfer/stock-transfer.service.d.ts +19 -0
- package/lib/hit-proxy/warehouse/warehouse.service.d.ts +59 -0
- package/lib/services/smart-warehouse.service.d.ts +10 -0
- package/lib/smart-warehouse-routing.module.d.ts +7 -0
- package/lib/smart-warehouse.module.d.ts +13 -0
- package/lib/stations/station.component.d.ts +14 -0
- package/lib/stations/station.module.d.ts +17 -0
- package/package.json +45 -0
- package/public-api.d.ts +16 -0
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
import { Component, ViewChild } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../../hit-proxy/inventory/inventory.service";
|
|
4
|
+
import * as i2 from "../../hit-proxy/warehouse/warehouse.service";
|
|
5
|
+
import * as i3 from "@abp/ng.theme.shared";
|
|
6
|
+
import * as i4 from "@angular/common";
|
|
7
|
+
import * as i5 from "@angular/forms";
|
|
8
|
+
import * as i6 from "devextreme-angular";
|
|
9
|
+
import * as i7 from "devextreme-angular/ui/nested";
|
|
10
|
+
import * as i8 from "@abp/ng.components/page";
|
|
11
|
+
export class ShelfPlacementComponent {
|
|
12
|
+
constructor(inventoryService, warehouseService, toasterService) {
|
|
13
|
+
this.inventoryService = inventoryService;
|
|
14
|
+
this.warehouseService = warehouseService;
|
|
15
|
+
this.toasterService = toasterService;
|
|
16
|
+
this.barcode = '';
|
|
17
|
+
this.itemCode = '';
|
|
18
|
+
this.itemName = '';
|
|
19
|
+
this.batch = '';
|
|
20
|
+
this.selectedWarehouse = '';
|
|
21
|
+
this.shelf = '';
|
|
22
|
+
this.quantity = null;
|
|
23
|
+
this.operationType = 'entry';
|
|
24
|
+
this.isShelfFixed = false;
|
|
25
|
+
this.warehouses = [];
|
|
26
|
+
this.gridDataSource = [];
|
|
27
|
+
this.nextId = 1;
|
|
28
|
+
// Loading states
|
|
29
|
+
this.isLoadingWarehouses = false;
|
|
30
|
+
this.isLoadingShelf = false;
|
|
31
|
+
this.shelfAbsEntry = null;
|
|
32
|
+
// Grid button handler (arrow function to preserve context)
|
|
33
|
+
this.deleteRowHandler = (e) => {
|
|
34
|
+
if (e.event) {
|
|
35
|
+
e.event.preventDefault();
|
|
36
|
+
e.event.stopPropagation();
|
|
37
|
+
}
|
|
38
|
+
this.gridDataSource = this.gridDataSource.filter(item => item.id !== e.row.data.id);
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
ngOnInit() {
|
|
42
|
+
this.loadWarehouses();
|
|
43
|
+
}
|
|
44
|
+
ngAfterViewInit() {
|
|
45
|
+
// İlk açılışta raf alanına focus ver
|
|
46
|
+
setTimeout(() => {
|
|
47
|
+
this.shelfInputRef?.nativeElement?.focus();
|
|
48
|
+
}, 200);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Raf okutulduğunda çağrılır.
|
|
52
|
+
* BinCode üzerinden SAP'den AbsEntry bilgisini çeker.
|
|
53
|
+
* Focus'u barkod alanına geçirir.
|
|
54
|
+
*/
|
|
55
|
+
onShelfScanned() {
|
|
56
|
+
if (!this.shelf?.trim()) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
this.isLoadingShelf = true;
|
|
60
|
+
this.shelfAbsEntry = null;
|
|
61
|
+
this.warehouseService.getBinLocationByBinCode(this.shelf.trim()).subscribe({
|
|
62
|
+
next: (binLocation) => {
|
|
63
|
+
if (binLocation) {
|
|
64
|
+
this.shelfAbsEntry = binLocation.AbsEntry;
|
|
65
|
+
setTimeout(() => {
|
|
66
|
+
this.barcodeInputRef?.nativeElement?.focus();
|
|
67
|
+
}, 100);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
this.toasterService.warn(`"${this.shelf}" bin kodu ile eşleşen depo yeri bulunamadı.`);
|
|
71
|
+
}
|
|
72
|
+
this.isLoadingShelf = false;
|
|
73
|
+
},
|
|
74
|
+
error: (err) => {
|
|
75
|
+
console.error('Bin location arama hatası:', err);
|
|
76
|
+
this.toasterService.error('Depo yeri bilgisi SAP\'den alınamadı.');
|
|
77
|
+
this.isLoadingShelf = false;
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Barkod okutulduğunda çağrılır.
|
|
83
|
+
* Kalem kodu ve parti bilgisini barkoddan parse eder.
|
|
84
|
+
* Focus'u miktar alanına geçirir.
|
|
85
|
+
*/
|
|
86
|
+
onBarcodeScanned() {
|
|
87
|
+
if (!this.barcode?.trim()) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
this.parseBarcodeAndFill(this.barcode.trim());
|
|
91
|
+
setTimeout(() => {
|
|
92
|
+
this.quantityInputRef?.nativeElement?.focus();
|
|
93
|
+
}, 100);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Barkodu parse eder ve kalem kodu ile parti alanlarını doldurur.
|
|
97
|
+
* İlk 13 karakter = ürün barkodu, 14. karakterden itibaren = parti numarası
|
|
98
|
+
*/
|
|
99
|
+
parseBarcodeAndFill(barcodeValue) {
|
|
100
|
+
const productBarcode = barcodeValue.substring(0, 13);
|
|
101
|
+
const batchNumber = barcodeValue.length > 13 ? barcodeValue.substring(13) : '';
|
|
102
|
+
this.itemCode = '';
|
|
103
|
+
this.itemName = '';
|
|
104
|
+
// SAP'den barkod ile kalem bilgisi getir
|
|
105
|
+
this.warehouseService.getItemByBarcode(productBarcode).subscribe({
|
|
106
|
+
next: (itemInfo) => {
|
|
107
|
+
if (itemInfo) {
|
|
108
|
+
this.itemCode = itemInfo.ItemCode || '';
|
|
109
|
+
this.itemName = itemInfo.ItemName || '';
|
|
110
|
+
this.batch = batchNumber;
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
this.itemCode = '';
|
|
114
|
+
this.itemName = '';
|
|
115
|
+
this.toasterService.warn(`Barkod "${productBarcode}" ile eşleşen kalem bulunamadı.`);
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
error: (err) => {
|
|
119
|
+
console.error('Barkod ile kalem arama hatası:', err);
|
|
120
|
+
this.itemCode = '';
|
|
121
|
+
this.itemName = '';
|
|
122
|
+
this.toasterService.error('Barkod ile kalem bilgisi SAP\'den alınamadı.');
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Kalem koduna göre SAP'den kalem adını çeker.
|
|
128
|
+
*/
|
|
129
|
+
fetchItemNameFromSAP(itemCode) {
|
|
130
|
+
if (!itemCode?.trim()) {
|
|
131
|
+
this.itemName = '';
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
this.warehouseService.getItemNameByCode(itemCode.trim()).subscribe({
|
|
135
|
+
next: (itemName) => {
|
|
136
|
+
this.itemName = itemName || '';
|
|
137
|
+
},
|
|
138
|
+
error: (err) => {
|
|
139
|
+
console.error('Kalem adı alınamadı:', err);
|
|
140
|
+
this.itemName = '';
|
|
141
|
+
this.toasterService.error('Kalem adı SAP\'den alınamadı.');
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Depo seçimi değiştiğinde çağrılır.
|
|
147
|
+
* Seçilen depoya ait depo yerlerini (bin locations) yükler.
|
|
148
|
+
*/
|
|
149
|
+
onWarehouseChanged() {
|
|
150
|
+
this.shelf = '';
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Ekle butonuna basıldığında çağrılır.
|
|
154
|
+
* Form verilerini grid'e ekler.
|
|
155
|
+
*/
|
|
156
|
+
onAdd() {
|
|
157
|
+
if (!this.itemCode?.trim() || !this.selectedWarehouse?.trim() || !this.shelf?.trim() || !this.quantity) {
|
|
158
|
+
this.toasterService.warn('Kalem kodu, depo, raf ve miktar alanları zorunludur.');
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (!this.shelfAbsEntry) {
|
|
162
|
+
this.toasterService.warn('Raf için geçerli bir AbsEntry bulunamadı. Lütfen rafı tekrar okutun.');
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const newItem = {
|
|
166
|
+
id: this.nextId++,
|
|
167
|
+
barcode: this.barcode.trim(),
|
|
168
|
+
itemCode: this.itemCode.trim(),
|
|
169
|
+
itemName: this.itemName.trim(),
|
|
170
|
+
batch: this.batch.trim(),
|
|
171
|
+
warehouse: this.selectedWarehouse.trim(),
|
|
172
|
+
shelf: this.shelf.trim(),
|
|
173
|
+
shelfAbsEntry: this.shelfAbsEntry,
|
|
174
|
+
quantity: this.quantity,
|
|
175
|
+
};
|
|
176
|
+
this.gridDataSource = [...this.gridDataSource, newItem];
|
|
177
|
+
// Alanları temizle (raf sabit değilse)
|
|
178
|
+
if (!this.isShelfFixed) {
|
|
179
|
+
this.onClear();
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
// Raf sabit ise sadece barkod, kalem kodu, kalem adı, parti ve miktarı temizle (depo ve raf kalır)
|
|
183
|
+
this.barcode = '';
|
|
184
|
+
this.itemCode = '';
|
|
185
|
+
this.itemName = '';
|
|
186
|
+
this.batch = '';
|
|
187
|
+
this.quantity = null;
|
|
188
|
+
// Raf sabit ise focus barkod alanına dönsün
|
|
189
|
+
setTimeout(() => {
|
|
190
|
+
this.barcodeInputRef?.nativeElement?.focus();
|
|
191
|
+
}, 100);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Kaydet butonuna basıldığında çağrılır.
|
|
196
|
+
* Grid'deki tüm verileri toplu olarak kaydeder.
|
|
197
|
+
*/
|
|
198
|
+
onSave() {
|
|
199
|
+
if (this.gridDataSource.length === 0) {
|
|
200
|
+
this.toasterService.warn('Kaydedilecek veri yok.');
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
const dto = {
|
|
204
|
+
operationType: this.operationType,
|
|
205
|
+
items: this.gridDataSource.map(item => ({
|
|
206
|
+
barcode: item.itemCode,
|
|
207
|
+
batch: item.batch,
|
|
208
|
+
warehouse: item.warehouse,
|
|
209
|
+
shelf: item.shelfAbsEntry?.toString(),
|
|
210
|
+
quantity: item.quantity
|
|
211
|
+
}))
|
|
212
|
+
};
|
|
213
|
+
this.inventoryService.processBulkOperation(dto).subscribe({
|
|
214
|
+
next: (result) => {
|
|
215
|
+
this.toasterService.success(result);
|
|
216
|
+
// Başarılı kayıt sonrası grid'i temizle
|
|
217
|
+
this.gridDataSource = [];
|
|
218
|
+
this.nextId = 1;
|
|
219
|
+
this.onClear();
|
|
220
|
+
},
|
|
221
|
+
error: (error) => {
|
|
222
|
+
const errorMessage = error?.error?.error?.message || 'İşlem sırasında bir hata oluştu.';
|
|
223
|
+
this.toasterService.error(errorMessage);
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Temizle butonuna basıldığında çağrılır.
|
|
229
|
+
*/
|
|
230
|
+
onClear() {
|
|
231
|
+
this.barcode = '';
|
|
232
|
+
this.itemCode = '';
|
|
233
|
+
this.itemName = '';
|
|
234
|
+
this.batch = '';
|
|
235
|
+
this.quantity = null;
|
|
236
|
+
if (!this.isShelfFixed) {
|
|
237
|
+
this.shelf = '';
|
|
238
|
+
this.shelfAbsEntry = null;
|
|
239
|
+
// Raf sabit değilse focus raf alanına dönsün
|
|
240
|
+
setTimeout(() => {
|
|
241
|
+
this.shelfInputRef?.nativeElement?.focus();
|
|
242
|
+
}, 100);
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
// Raf sabit ise focus barkod alanına dönsün
|
|
246
|
+
setTimeout(() => {
|
|
247
|
+
this.barcodeInputRef?.nativeElement?.focus();
|
|
248
|
+
}, 100);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* U_SWSmartWhs = "Y" olan depoları yükler.
|
|
253
|
+
* İlk depoyu otomatik olarak seçer.
|
|
254
|
+
*/
|
|
255
|
+
loadWarehouses() {
|
|
256
|
+
this.isLoadingWarehouses = true;
|
|
257
|
+
this.warehouseService.getSmartWarehouses().subscribe({
|
|
258
|
+
next: (data) => {
|
|
259
|
+
this.warehouses = data || [];
|
|
260
|
+
console.log('Depolar yüklendi:', this.warehouses);
|
|
261
|
+
// İlk depoyu otomatik seç ve bin location'ları yükle
|
|
262
|
+
if (this.warehouses.length > 0) {
|
|
263
|
+
this.selectedWarehouse = this.warehouses[0].WhsCode || '';
|
|
264
|
+
this.onWarehouseChanged();
|
|
265
|
+
}
|
|
266
|
+
this.isLoadingWarehouses = false;
|
|
267
|
+
},
|
|
268
|
+
error: (err) => {
|
|
269
|
+
console.error('Depolar yüklenemedi:', err);
|
|
270
|
+
this.toasterService.error('Depolar yüklenemedi.');
|
|
271
|
+
this.isLoadingWarehouses = false;
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
ShelfPlacementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ShelfPlacementComponent, deps: [{ token: i1.InventoryService }, { token: i2.WarehouseService }, { token: i3.ToasterService }], target: i0.ɵɵFactoryTarget.Component });
|
|
277
|
+
ShelfPlacementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ShelfPlacementComponent, selector: "lib-shelf-placement", viewQueries: [{ propertyName: "shelfInputRef", first: true, predicate: ["shelfInput"], descendants: true }, { propertyName: "barcodeInputRef", first: true, predicate: ["barcodeInput"], descendants: true }, { propertyName: "itemCodeInputRef", first: true, predicate: ["itemCodeInput"], descendants: true }, { propertyName: "quantityInputRef", first: true, predicate: ["quantityInput"], descendants: true }, { propertyName: "gridInstance", first: true, predicate: ["gridInstance"], descendants: true }], ngImport: i0, template: "<abp-page [title]=\"'Raf Yerle\u015Ftirme'\">\r\n\r\n <!-- Loading Overlay -->\r\n <div *ngIf=\"isLoadingWarehouses\" class=\"loading-overlay\">\r\n <div class=\"loading-spinner\">\r\n <i class=\"fa fa-spinner fa-spin fa-3x\"></i>\r\n <p class=\"mt-3\">Depolar y\u00FCkleniyor...</p>\r\n </div>\r\n </div>\r\n\r\n <div class=\"shelf-placement-container\">\r\n <div class=\"shelf-placement-layout\">\r\n <!-- Form Card -->\r\n <div class=\"shelf-form-card\">\r\n <!-- Radio Buttons: Giri\u015F / \u00C7\u0131k\u0131\u015F -->\r\n <!-- <div class=\"form-section\">\r\n <label class=\"section-label\">\u0130\u015Flem Tipi</label>\r\n <div class=\"radio-group\">\r\n <div class=\"form-check\">\r\n <input class=\"form-check-input\" type=\"radio\" name=\"operationType\" id=\"opEntry\"\r\n value=\"entry\" [(ngModel)]=\"operationType\" />\r\n <label class=\"form-check-label\" for=\"opEntry\">Giri\u015F</label>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- <hr class=\"form-divider\" /> -->\r\n \r\n <!-- Depo -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"warehouseSelect\">Depo</label>\r\n <select class=\"form-select form-input\"\r\n id=\"warehouseSelect\"\r\n [(ngModel)]=\"selectedWarehouse\"\r\n (ngModelChange)=\"onWarehouseChanged()\">\r\n <option value=\"\">Depo se\u00E7in...</option>\r\n <option *ngFor=\"let wh of warehouses\" [value]=\"wh.WhsCode\">\r\n {{ wh.WhsCode }} - {{ wh.WhsName }}\r\n </option>\r\n </select>\r\n </div>\r\n\r\n <!-- Raf -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"shelfInput\">Raf</label>\r\n <input #shelfInput\r\n type=\"text\"\r\n class=\"form-control form-input\"\r\n id=\"shelfInput\"\r\n [(ngModel)]=\"shelf\"\r\n (keydown.enter)=\"onShelfScanned()\"\r\n (blur)=\"onShelfScanned()\"\r\n placeholder=\"Raf kodu girin...\"\r\n autocomplete=\"off\" />\r\n </div>\r\n\r\n <!-- Barkod -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"barcodeInput\">Barkod</label>\r\n <input #barcodeInput\r\n type=\"text\"\r\n class=\"form-control form-input\"\r\n id=\"barcodeInput\"\r\n [(ngModel)]=\"barcode\"\r\n (keydown.enter)=\"onBarcodeScanned()\"\r\n placeholder=\"Barkod okutun...\"\r\n autocomplete=\"off\" />\r\n </div>\r\n\r\n <!-- Kalem Kodu -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"itemCodeInput\">Kalem Kodu</label>\r\n <input #itemCodeInput\r\n type=\"text\"\r\n class=\"form-control form-input\"\r\n id=\"itemCodeInput\"\r\n [(ngModel)]=\"itemCode\"\r\n [readOnly]=\"true\"\r\n placeholder=\"\"\r\n autocomplete=\"off\" />\r\n </div>\r\n\r\n <!-- Kalem Ad\u0131 -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"itemNameInput\">Kalem Ad\u0131</label>\r\n <input type=\"text\"\r\n class=\"form-control form-input\"\r\n id=\"itemNameInput\"\r\n [(ngModel)]=\"itemName\"\r\n [readOnly]=\"true\"\r\n placeholder=\"\" />\r\n </div>\r\n\r\n <!-- Parti -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"batchInput\">Parti</label>\r\n <input type=\"text\"\r\n class=\"form-control form-input\"\r\n id=\"batchInput\"\r\n [(ngModel)]=\"batch\"\r\n placeholder=\"Parti numaras\u0131...\" />\r\n </div>\r\n\r\n <!-- Miktar -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"quantityInput\">Miktar</label>\r\n <input #quantityInput\r\n type=\"number\"\r\n class=\"form-control form-input\"\r\n id=\"quantityInput\"\r\n [(ngModel)]=\"quantity\"\r\n (keydown.enter)=\"onAdd()\"\r\n placeholder=\"Miktar girin...\"\r\n min=\"0\" />\r\n </div>\r\n\r\n <hr class=\"form-divider\" />\r\n\r\n <!-- Checkbox: Raf Sabit -->\r\n <div class=\"form-section\">\r\n <div class=\"form-check checkbox-group\">\r\n <input class=\"form-check-input\" type=\"checkbox\" id=\"fixedShelf\"\r\n [(ngModel)]=\"isShelfFixed\" />\r\n <label class=\"form-check-label\" for=\"fixedShelf\">Raf Sabit</label>\r\n </div>\r\n </div>\r\n\r\n <hr class=\"form-divider\" />\r\n\r\n <!-- Buttons -->\r\n <div class=\"form-section button-group\">\r\n <button class=\"btn btn-action-primary btn-sm\" (click)=\"onAdd()\">\r\n <i class=\"fa fa-plus\"></i> Ekle\r\n </button>\r\n <button class=\"btn btn-action-success btn-sm\" (click)=\"onSave()\" [disabled]=\"gridDataSource.length === 0\">\r\n <i class=\"fa fa-save\"></i> Toplu Kaydet ({{ gridDataSource.length }})\r\n </button>\r\n <button class=\"btn btn-action-outline btn-sm\" (click)=\"onClear()\">\r\n <i class=\"fa fa-eraser\"></i> Temizle\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Data Grid -->\r\n <div class=\"grid-card\">\r\n <div class=\"grid-header\">\r\n <h6 class=\"grid-title\">\r\n <i class=\"fa fa-list me-1\"></i>\r\n Raf Yerle\u015Ftirme Listesi ({{ gridDataSource.length }})\r\n </h6>\r\n </div>\r\n <dx-data-grid\r\n #gridInstance\r\n [dataSource]=\"gridDataSource\"\r\n [showRowLines]=\"true\"\r\n [showBorders]=\"true\"\r\n [hoverStateEnabled]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [rowAlternationEnabled]=\"true\"\r\n [allowColumnResizing]=\"true\"\r\n style=\"height: 65vh; min-height: 500px;\"\r\n >\r\n <dxo-paging [enabled]=\"false\"></dxo-paging>\r\n <dxo-scrolling mode=\"standard\"></dxo-scrolling>\r\n \r\n <dxi-column\r\n dataField=\"barcode\"\r\n caption=\"Barkod\"\r\n [width]=\"150\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"itemCode\"\r\n caption=\"Kalem Kodu\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"itemName\"\r\n caption=\"Kalem Ad\u0131\"\r\n [width]=\"200\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"batch\"\r\n caption=\"Parti\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"warehouse\"\r\n caption=\"Depo\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"shelf\"\r\n caption=\"Raf\"\r\n [width]=\"150\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"quantity\"\r\n caption=\"Miktar\"\r\n dataType=\"number\"\r\n [width]=\"100\"\r\n ></dxi-column>\r\n <dxi-column\r\n type=\"buttons\"\r\n [width]=\"80\"\r\n >\r\n <dxi-button\r\n icon=\"trash\"\r\n hint=\"Sil\"\r\n [onClick]=\"deleteRowHandler\"\r\n ></dxi-button>\r\n </dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</abp-page>\r\n", styles: [".shelf-placement-container{width:100%}.shelf-placement-layout{display:flex;gap:20px;align-items:flex-start}.shelf-form-card{background:#fff;border:1px solid #e0e0e0;border-radius:8px;padding:20px 24px;box-shadow:0 1px 3px #0000000f;flex:0 0 450px;min-width:320px}.form-divider{border:none;border-top:1px solid #eee;margin:14px 0}.form-section{margin-bottom:12px}.section-label{display:block;font-size:11px;font-weight:600;color:#6c757d;text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px}.form-input{height:40px;border:1px solid #ced4da;border-radius:6px;padding:0 12px;font-size:14px;background:#fff;transition:border-color .15s;width:100%}.form-input:focus{border-color:#556ee6;outline:none;box-shadow:0 0 0 2px #556ee626}.form-input[readonly]{background:#f5f5f5;color:#888}.radio-group{display:flex;gap:20px;align-items:center}.radio-group .form-check{margin:0;padding-left:22px}.radio-group .form-check-label{font-size:14px;cursor:pointer;white-space:nowrap;font-weight:500}.checkbox-group{display:flex;align-items:center;gap:8px}.checkbox-group .form-check-label{font-size:14px;cursor:pointer;font-weight:500}.button-group{display:flex;gap:10px;margin-top:4px;flex-wrap:wrap}.button-group .btn{display:inline-flex;align-items:center;gap:6px;font-size:13px;padding:8px 20px;border-radius:6px;font-weight:500;white-space:nowrap;transition:all .15s;flex:1 1 0;justify-content:center;min-width:120px}.btn-action-success{background:#34c38f;color:#fff;border:none}.btn-action-success:hover{background:#2ca67a;color:#fff}.btn-action-success:disabled{background:#9dd3bd;color:#fff;cursor:not-allowed}.btn-action-primary{background:#556ee6;color:#fff;border:none}.btn-action-primary:hover{background:#4458cb;color:#fff}.btn-action-outline{background:transparent;color:#556ee6;border:1px solid #556ee6}.btn-action-outline:hover{background:#556ee6;color:#fff}.grid-card{background:#fff;border:1px solid #e0e0e0;border-radius:8px;box-shadow:0 1px 3px #0000000f;overflow:hidden;flex:1;min-width:0;display:flex;flex-direction:column;min-height:500px}.grid-header{display:flex;justify-content:flex-start;align-items:center;padding:12px 16px;background:#f8f9fa;border-bottom:1px solid #e0e0e0}.grid-title{margin:0;font-size:14px;font-weight:600;color:#495057}.grid-card dx-data-grid{padding:0;flex:1}@media (max-width: 1200px){.shelf-placement-layout{flex-direction:column}.shelf-form-card{flex:1;width:100%}.grid-card{width:100%;min-height:400px}}@media (max-width: 768px){.shelf-placement-container{padding:0 8px}.shelf-form-card{padding:16px;min-width:100%}.button-group{flex-direction:column}.button-group .btn{font-size:12px;padding:7px 14px;width:100%;flex:1 1 auto}}.loading-overlay{position:fixed;inset:0;background:rgba(0,0,0,.5);display:flex;justify-content:center;align-items:center;z-index:9999}.loading-spinner{background:#fff;padding:40px 60px;border-radius:8px;box-shadow:0 10px 40px #0000004d;text-align:center}.loading-spinner i{color:#556ee6}.loading-spinner p{margin:0;font-size:16px;font-weight:500;color:#495057}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExporting", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i7.DxiColumnComponent, selector: "dxi-column", inputs: ["alignment", "allowEditing", "allowExporting", "allowFiltering", "allowFixing", "allowGrouping", "allowHeaderFiltering", "allowHiding", "allowReordering", "allowResizing", "allowSearch", "allowSorting", "autoExpandGroup", "buttons", "calculateCellValue", "calculateDisplayValue", "calculateFilterExpression", "calculateGroupValue", "calculateSortValue", "caption", "cellTemplate", "columns", "cssClass", "customizeText", "dataField", "dataType", "editCellTemplate", "editorOptions", "encodeHtml", "falseText", "filterOperations", "filterType", "filterValue", "filterValues", "fixed", "fixedPosition", "format", "formItem", "groupCellTemplate", "groupIndex", "headerCellTemplate", "headerFilter", "hidingPriority", "isBand", "lookup", "minWidth", "name", "ownerBand", "renderAsync", "selectedFilterOperation", "setCellValue", "showEditorAlways", "showInColumnChooser", "showWhenGrouped", "sortIndex", "sortingMethod", "sortOrder", "trueText", "type", "validationRules", "visible", "visibleIndex", "width"], outputs: ["filterValueChange", "filterValuesChange", "groupIndexChange", "selectedFilterOperationChange", "sortIndexChange", "sortOrderChange", "visibleChange", "visibleIndexChange"] }, { kind: "component", type: i7.DxiButtonComponent, selector: "dxi-button", inputs: ["location", "name", "options", "cssClass", "disabled", "hint", "icon", "onClick", "template", "text", "visible"] }, { kind: "component", type: i7.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i7.DxoScrollingComponent, selector: "dxo-scrolling", inputs: ["columnRenderingMode", "mode", "preloadEnabled", "renderAsync", "rowRenderingMode", "scrollByContent", "scrollByThumb", "showScrollbar", "useNative"] }, { kind: "component", type: i8.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }] });
|
|
278
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ShelfPlacementComponent, decorators: [{
|
|
279
|
+
type: Component,
|
|
280
|
+
args: [{ selector: 'lib-shelf-placement', template: "<abp-page [title]=\"'Raf Yerle\u015Ftirme'\">\r\n\r\n <!-- Loading Overlay -->\r\n <div *ngIf=\"isLoadingWarehouses\" class=\"loading-overlay\">\r\n <div class=\"loading-spinner\">\r\n <i class=\"fa fa-spinner fa-spin fa-3x\"></i>\r\n <p class=\"mt-3\">Depolar y\u00FCkleniyor...</p>\r\n </div>\r\n </div>\r\n\r\n <div class=\"shelf-placement-container\">\r\n <div class=\"shelf-placement-layout\">\r\n <!-- Form Card -->\r\n <div class=\"shelf-form-card\">\r\n <!-- Radio Buttons: Giri\u015F / \u00C7\u0131k\u0131\u015F -->\r\n <!-- <div class=\"form-section\">\r\n <label class=\"section-label\">\u0130\u015Flem Tipi</label>\r\n <div class=\"radio-group\">\r\n <div class=\"form-check\">\r\n <input class=\"form-check-input\" type=\"radio\" name=\"operationType\" id=\"opEntry\"\r\n value=\"entry\" [(ngModel)]=\"operationType\" />\r\n <label class=\"form-check-label\" for=\"opEntry\">Giri\u015F</label>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- <hr class=\"form-divider\" /> -->\r\n \r\n <!-- Depo -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"warehouseSelect\">Depo</label>\r\n <select class=\"form-select form-input\"\r\n id=\"warehouseSelect\"\r\n [(ngModel)]=\"selectedWarehouse\"\r\n (ngModelChange)=\"onWarehouseChanged()\">\r\n <option value=\"\">Depo se\u00E7in...</option>\r\n <option *ngFor=\"let wh of warehouses\" [value]=\"wh.WhsCode\">\r\n {{ wh.WhsCode }} - {{ wh.WhsName }}\r\n </option>\r\n </select>\r\n </div>\r\n\r\n <!-- Raf -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"shelfInput\">Raf</label>\r\n <input #shelfInput\r\n type=\"text\"\r\n class=\"form-control form-input\"\r\n id=\"shelfInput\"\r\n [(ngModel)]=\"shelf\"\r\n (keydown.enter)=\"onShelfScanned()\"\r\n (blur)=\"onShelfScanned()\"\r\n placeholder=\"Raf kodu girin...\"\r\n autocomplete=\"off\" />\r\n </div>\r\n\r\n <!-- Barkod -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"barcodeInput\">Barkod</label>\r\n <input #barcodeInput\r\n type=\"text\"\r\n class=\"form-control form-input\"\r\n id=\"barcodeInput\"\r\n [(ngModel)]=\"barcode\"\r\n (keydown.enter)=\"onBarcodeScanned()\"\r\n placeholder=\"Barkod okutun...\"\r\n autocomplete=\"off\" />\r\n </div>\r\n\r\n <!-- Kalem Kodu -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"itemCodeInput\">Kalem Kodu</label>\r\n <input #itemCodeInput\r\n type=\"text\"\r\n class=\"form-control form-input\"\r\n id=\"itemCodeInput\"\r\n [(ngModel)]=\"itemCode\"\r\n [readOnly]=\"true\"\r\n placeholder=\"\"\r\n autocomplete=\"off\" />\r\n </div>\r\n\r\n <!-- Kalem Ad\u0131 -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"itemNameInput\">Kalem Ad\u0131</label>\r\n <input type=\"text\"\r\n class=\"form-control form-input\"\r\n id=\"itemNameInput\"\r\n [(ngModel)]=\"itemName\"\r\n [readOnly]=\"true\"\r\n placeholder=\"\" />\r\n </div>\r\n\r\n <!-- Parti -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"batchInput\">Parti</label>\r\n <input type=\"text\"\r\n class=\"form-control form-input\"\r\n id=\"batchInput\"\r\n [(ngModel)]=\"batch\"\r\n placeholder=\"Parti numaras\u0131...\" />\r\n </div>\r\n\r\n <!-- Miktar -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"quantityInput\">Miktar</label>\r\n <input #quantityInput\r\n type=\"number\"\r\n class=\"form-control form-input\"\r\n id=\"quantityInput\"\r\n [(ngModel)]=\"quantity\"\r\n (keydown.enter)=\"onAdd()\"\r\n placeholder=\"Miktar girin...\"\r\n min=\"0\" />\r\n </div>\r\n\r\n <hr class=\"form-divider\" />\r\n\r\n <!-- Checkbox: Raf Sabit -->\r\n <div class=\"form-section\">\r\n <div class=\"form-check checkbox-group\">\r\n <input class=\"form-check-input\" type=\"checkbox\" id=\"fixedShelf\"\r\n [(ngModel)]=\"isShelfFixed\" />\r\n <label class=\"form-check-label\" for=\"fixedShelf\">Raf Sabit</label>\r\n </div>\r\n </div>\r\n\r\n <hr class=\"form-divider\" />\r\n\r\n <!-- Buttons -->\r\n <div class=\"form-section button-group\">\r\n <button class=\"btn btn-action-primary btn-sm\" (click)=\"onAdd()\">\r\n <i class=\"fa fa-plus\"></i> Ekle\r\n </button>\r\n <button class=\"btn btn-action-success btn-sm\" (click)=\"onSave()\" [disabled]=\"gridDataSource.length === 0\">\r\n <i class=\"fa fa-save\"></i> Toplu Kaydet ({{ gridDataSource.length }})\r\n </button>\r\n <button class=\"btn btn-action-outline btn-sm\" (click)=\"onClear()\">\r\n <i class=\"fa fa-eraser\"></i> Temizle\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Data Grid -->\r\n <div class=\"grid-card\">\r\n <div class=\"grid-header\">\r\n <h6 class=\"grid-title\">\r\n <i class=\"fa fa-list me-1\"></i>\r\n Raf Yerle\u015Ftirme Listesi ({{ gridDataSource.length }})\r\n </h6>\r\n </div>\r\n <dx-data-grid\r\n #gridInstance\r\n [dataSource]=\"gridDataSource\"\r\n [showRowLines]=\"true\"\r\n [showBorders]=\"true\"\r\n [hoverStateEnabled]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [rowAlternationEnabled]=\"true\"\r\n [allowColumnResizing]=\"true\"\r\n style=\"height: 65vh; min-height: 500px;\"\r\n >\r\n <dxo-paging [enabled]=\"false\"></dxo-paging>\r\n <dxo-scrolling mode=\"standard\"></dxo-scrolling>\r\n \r\n <dxi-column\r\n dataField=\"barcode\"\r\n caption=\"Barkod\"\r\n [width]=\"150\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"itemCode\"\r\n caption=\"Kalem Kodu\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"itemName\"\r\n caption=\"Kalem Ad\u0131\"\r\n [width]=\"200\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"batch\"\r\n caption=\"Parti\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"warehouse\"\r\n caption=\"Depo\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"shelf\"\r\n caption=\"Raf\"\r\n [width]=\"150\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"quantity\"\r\n caption=\"Miktar\"\r\n dataType=\"number\"\r\n [width]=\"100\"\r\n ></dxi-column>\r\n <dxi-column\r\n type=\"buttons\"\r\n [width]=\"80\"\r\n >\r\n <dxi-button\r\n icon=\"trash\"\r\n hint=\"Sil\"\r\n [onClick]=\"deleteRowHandler\"\r\n ></dxi-button>\r\n </dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</abp-page>\r\n", styles: [".shelf-placement-container{width:100%}.shelf-placement-layout{display:flex;gap:20px;align-items:flex-start}.shelf-form-card{background:#fff;border:1px solid #e0e0e0;border-radius:8px;padding:20px 24px;box-shadow:0 1px 3px #0000000f;flex:0 0 450px;min-width:320px}.form-divider{border:none;border-top:1px solid #eee;margin:14px 0}.form-section{margin-bottom:12px}.section-label{display:block;font-size:11px;font-weight:600;color:#6c757d;text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px}.form-input{height:40px;border:1px solid #ced4da;border-radius:6px;padding:0 12px;font-size:14px;background:#fff;transition:border-color .15s;width:100%}.form-input:focus{border-color:#556ee6;outline:none;box-shadow:0 0 0 2px #556ee626}.form-input[readonly]{background:#f5f5f5;color:#888}.radio-group{display:flex;gap:20px;align-items:center}.radio-group .form-check{margin:0;padding-left:22px}.radio-group .form-check-label{font-size:14px;cursor:pointer;white-space:nowrap;font-weight:500}.checkbox-group{display:flex;align-items:center;gap:8px}.checkbox-group .form-check-label{font-size:14px;cursor:pointer;font-weight:500}.button-group{display:flex;gap:10px;margin-top:4px;flex-wrap:wrap}.button-group .btn{display:inline-flex;align-items:center;gap:6px;font-size:13px;padding:8px 20px;border-radius:6px;font-weight:500;white-space:nowrap;transition:all .15s;flex:1 1 0;justify-content:center;min-width:120px}.btn-action-success{background:#34c38f;color:#fff;border:none}.btn-action-success:hover{background:#2ca67a;color:#fff}.btn-action-success:disabled{background:#9dd3bd;color:#fff;cursor:not-allowed}.btn-action-primary{background:#556ee6;color:#fff;border:none}.btn-action-primary:hover{background:#4458cb;color:#fff}.btn-action-outline{background:transparent;color:#556ee6;border:1px solid #556ee6}.btn-action-outline:hover{background:#556ee6;color:#fff}.grid-card{background:#fff;border:1px solid #e0e0e0;border-radius:8px;box-shadow:0 1px 3px #0000000f;overflow:hidden;flex:1;min-width:0;display:flex;flex-direction:column;min-height:500px}.grid-header{display:flex;justify-content:flex-start;align-items:center;padding:12px 16px;background:#f8f9fa;border-bottom:1px solid #e0e0e0}.grid-title{margin:0;font-size:14px;font-weight:600;color:#495057}.grid-card dx-data-grid{padding:0;flex:1}@media (max-width: 1200px){.shelf-placement-layout{flex-direction:column}.shelf-form-card{flex:1;width:100%}.grid-card{width:100%;min-height:400px}}@media (max-width: 768px){.shelf-placement-container{padding:0 8px}.shelf-form-card{padding:16px;min-width:100%}.button-group{flex-direction:column}.button-group .btn{font-size:12px;padding:7px 14px;width:100%;flex:1 1 auto}}.loading-overlay{position:fixed;inset:0;background:rgba(0,0,0,.5);display:flex;justify-content:center;align-items:center;z-index:9999}.loading-spinner{background:#fff;padding:40px 60px;border-radius:8px;box-shadow:0 10px 40px #0000004d;text-align:center}.loading-spinner i{color:#556ee6}.loading-spinner p{margin:0;font-size:16px;font-weight:500;color:#495057}\n"] }]
|
|
281
|
+
}], ctorParameters: function () { return [{ type: i1.InventoryService }, { type: i2.WarehouseService }, { type: i3.ToasterService }]; }, propDecorators: { shelfInputRef: [{
|
|
282
|
+
type: ViewChild,
|
|
283
|
+
args: ['shelfInput', { static: false }]
|
|
284
|
+
}], barcodeInputRef: [{
|
|
285
|
+
type: ViewChild,
|
|
286
|
+
args: ['barcodeInput', { static: false }]
|
|
287
|
+
}], itemCodeInputRef: [{
|
|
288
|
+
type: ViewChild,
|
|
289
|
+
args: ['itemCodeInput', { static: false }]
|
|
290
|
+
}], quantityInputRef: [{
|
|
291
|
+
type: ViewChild,
|
|
292
|
+
args: ['quantityInput', { static: false }]
|
|
293
|
+
}], gridInstance: [{
|
|
294
|
+
type: ViewChild,
|
|
295
|
+
args: ['gridInstance', { static: false }]
|
|
296
|
+
}] } });
|
|
297
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGYtcGxhY2VtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXdhcmVob3VzZS9zcmMvbGliL2NvbXBvbmVudHMvc2hlbGYtcGxhY2VtZW50L3NoZWxmLXBsYWNlbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC13YXJlaG91c2Uvc3JjL2xpYi9jb21wb25lbnRzL3NoZWxmLXBsYWNlbWVudC9zaGVsZi1wbGFjZW1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBc0IsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7O0FBdUJ6RSxNQUFNLE9BQU8sdUJBQXVCO0lBcUNoQyxZQUNZLGdCQUFrQyxFQUNsQyxnQkFBa0MsRUFDbEMsY0FBOEI7UUFGOUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQWpDMUMsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUNyQixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBQ3RCLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFDdEIsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUNuQixzQkFBaUIsR0FBVyxFQUFFLENBQUM7UUFDL0IsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUNuQixhQUFRLEdBQWtCLElBQUksQ0FBQztRQUUvQixrQkFBYSxHQUFXLE9BQU8sQ0FBQztRQUNoQyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUU5QixlQUFVLEdBQW1CLEVBQUUsQ0FBQztRQUVoQyxtQkFBYyxHQUF5QixFQUFFLENBQUM7UUFDbEMsV0FBTSxHQUFXLENBQUMsQ0FBQztRQUUzQixpQkFBaUI7UUFDakIsd0JBQW1CLEdBQVksS0FBSyxD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ZiwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRHhEYXRhR3JpZENvbXBvbmVudCB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhcic7XHJcbmltcG9ydCB7IEludmVudG9yeVNlcnZpY2UsIEJ1bGtJbnZlbnRvcnlPcGVyYXRpb25EdG8gfSBmcm9tICcuLi8uLi9oaXQtcHJveHkvaW52ZW50b3J5L2ludmVudG9yeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV2FyZWhvdXNlU2VydmljZSwgV2FyZWhvdXNlRHRvIH0gZnJvbSAnLi4vLi4vaGl0LXByb3h5L3dhcmVob3VzZS93YXJlaG91c2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFRvYXN0ZXJTZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTaGVsZlBsYWNlbWVudEl0ZW0ge1xyXG4gICAgaWQ6IG51bWJlcjtcclxuICAgIGJhcmNvZGU6IHN0cmluZztcclxuICAgIGl0ZW1Db2RlOiBzdHJpbmc7XHJcbiAgICBpdGVtTmFtZTogc3RyaW5nO1xyXG4gICAgYmF0Y2g6IHN0cmluZztcclxuICAgIHdhcmVob3VzZTogc3RyaW5nO1xyXG4gICAgc2hlbGY6IHN0cmluZzsgICAgICAgLy8gQmluQ29kZSAoZ8O2csO8bsO8cilcclxuICAgIHNoZWxmQWJzRW50cnk6IG51bWJlcjsgLy8gQWJzRW50cnkgKGJhY2tlbmQnZSBnw7ZuZGVyaWxlY2VrKVxyXG4gICAgcXVhbnRpdHk6IG51bWJlcjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi1zaGVsZi1wbGFjZW1lbnQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NoZWxmLXBsYWNlbWVudC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9zaGVsZi1wbGFjZW1lbnQuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNoZWxmUGxhY2VtZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIEBWaWV3Q2hpbGQoJ3NoZWxmSW5wdXQnLCB7IHN0YXRpYzogZmFsc2UgfSkgc2hlbGZJbnB1dFJlZjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcclxuICAgIEBWaWV3Q2hpbGQoJ2JhcmNvZGVJbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KSBiYXJjb2RlSW5wdXRSZWY6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XHJcbiAgICBAVmlld0NoaWxkKCdpdGVtQ29kZUlucHV0JywgeyBzdGF0aWM6IGZhbHNlIH0pIGl0ZW1Db2RlSW5wdXRSZWY6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XHJcbiAgICBAVmlld0NoaWxkKCdxdWFudGl0eUlucHV0JywgeyBzdGF0aWM6IGZhbHNlIH0pIHF1YW50aXR5SW5wdXRSZWY6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XHJcbiAgICBAVmlld0NoaWxkKCdncmlkSW5zdGFuY2UnLCB7IHN0YXRpYzogZmFsc2UgfSkgZ3JpZEluc3RhbmNlOiBEeERhdGFHcmlkQ29tcG9uZW50O1xyXG5cclxuICAgIGJhcmNvZGU6IHN0cmluZyA9ICcnO1xyXG4gICAgaXRlbUNvZGU6IHN0cmluZyA9ICcnO1xyXG4gICAgaXRlbU5hbWU6IHN0cmluZyA9ICcnO1xyXG4gICAgYmF0Y2g6IHN0cmluZyA9ICcnO1xyXG4gICAgc2VsZWN0ZWRXYXJlaG91c2U6IHN0cmluZyA9ICcnO1xyXG4gICAgc2hlbGY6IHN0cmluZyA9ICcnO1xyXG4gICAgcXVhbnRpdHk6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIG9wZXJhdGlvblR5cGU6IHN0cmluZyA9ICdlbnRyeSc7XHJcbiAgICBpc1NoZWxmRml4ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICB3YXJlaG91c2VzOiBXYXJlaG91c2VEdG9bXSA9IFtdO1xyXG5cclxuICAgIGdyaWREYXRhU291cmNlOiBTaGVsZlBsYWNlbWVudEl0ZW1bXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBuZXh0SWQ6IG51bWJlciA9IDE7XHJcblxyXG4gICAgLy8gTG9hZGluZyBzdGF0ZXNcclxuICAgIGlzTG9hZGluZ1dhcmVob3VzZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGlzTG9hZGluZ1NoZWxmOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBzaGVsZkFic0VudHJ5OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAvLyBHcmlkIGJ1dHRvbiBoYW5kbGVyIChhcnJvdyBmdW5jdGlvbiB0byBwcmVzZXJ2ZSBjb250ZXh0KVxyXG4gICAgZGVsZXRlUm93SGFuZGxlciA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZS5ldmVudCkge1xyXG4gICAgICAgICAgICBlLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ3JpZERhdGFTb3VyY2UgPSB0aGlzLmdyaWREYXRhU291cmNlLmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgIT09IGUucm93LmRhdGEuaWQpO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGludmVudG9yeVNlcnZpY2U6IEludmVudG9yeVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB3YXJlaG91c2VTZXJ2aWNlOiBXYXJlaG91c2VTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdG9hc3RlclNlcnZpY2U6IFRvYXN0ZXJTZXJ2aWNlXHJcbiAgICApIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5sb2FkV2FyZWhvdXNlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICAvLyDEsGxrIGHDp8SxbMSxxZ90YSByYWYgYWxhbsSxbmEgZm9jdXMgdmVyXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hlbGZJbnB1dFJlZj8ubmF0aXZlRWxlbWVudD8uZm9jdXMoKTtcclxuICAgICAgICB9LCAyMDApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmFmIG9rdXR1bGR1xJ91bmRhIMOnYcSfcsSxbMSxci5cclxuICAgICAqIEJpbkNvZGUgw7x6ZXJpbmRlbiBTQVAnZGVuIEFic0VudHJ5IGJpbGdpc2luaSDDp2VrZXIuXHJcbiAgICAgKiBGb2N1cyd1IGJhcmtvZCBhbGFuxLFuYSBnZcOnaXJpci5cclxuICAgICAqL1xyXG4gICAgb25TaGVsZlNjYW5uZWQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNoZWxmPy50cmltKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdTaGVsZiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaGVsZkFic0VudHJ5ID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy53YXJlaG91c2VTZXJ2aWNlLmdldEJpbkxvY2F0aW9uQnlCaW5Db2RlKHRoaXMuc2hlbGYudHJpbSgpKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAoYmluTG9jYXRpb24pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChiaW5Mb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hlbGZBYnNFbnRyeSA9IGJpbkxvY2F0aW9uLkFic0VudHJ5O1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJhcmNvZGVJbnB1dFJlZj8ubmF0aXZlRWxlbWVudD8uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLndhcm4oYFwiJHt0aGlzLnNoZWxmfVwiIGJpbiBrb2R1IGlsZSBlxZ9sZcWfZW4gZGVwbyB5ZXJpIGJ1bHVuYW1hZMSxLmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdTaGVsZiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQmluIGxvY2F0aW9uIGFyYW1hIGhhdGFzxLE6JywgZXJyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoJ0RlcG8geWVyaSBiaWxnaXNpIFNBUFxcJ2RlbiBhbMSxbmFtYWTEsS4nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nU2hlbGYgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQmFya29kIG9rdXR1bGR1xJ91bmRhIMOnYcSfcsSxbMSxci5cclxuICAgICAqIEthbGVtIGtvZHUgdmUgcGFydGkgYmlsZ2lzaW5pIGJhcmtvZGRhbiBwYXJzZSBlZGVyLlxyXG4gICAgICogRm9jdXMndSBtaWt0YXIgYWxhbsSxbmEgZ2XDp2lyaXIuXHJcbiAgICAgKi9cclxuICAgIG9uQmFyY29kZVNjYW5uZWQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmJhcmNvZGU/LnRyaW0oKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBhcnNlQmFyY29kZUFuZEZpbGwodGhpcy5iYXJjb2RlLnRyaW0oKSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucXVhbnRpdHlJbnB1dFJlZj8ubmF0aXZlRWxlbWVudD8uZm9jdXMoKTtcclxuICAgICAgICB9LCAxMDApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQmFya29kdSBwYXJzZSBlZGVyIHZlIGthbGVtIGtvZHUgaWxlIHBhcnRpIGFsYW5sYXLEsW7EsSBkb2xkdXJ1ci5cclxuICAgICAqIMSwbGsgMTMga2FyYWt0ZXIgPSDDvHLDvG4gYmFya29kdSwgMTQuIGthcmFrdGVyZGVuIGl0aWJhcmVuID0gcGFydGkgbnVtYXJhc8SxXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcGFyc2VCYXJjb2RlQW5kRmlsbChiYXJjb2RlVmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHByb2R1Y3RCYXJjb2RlID0gYmFyY29kZVZhbHVlLnN1YnN0cmluZygwLCAxMyk7XHJcbiAgICAgICAgY29uc3QgYmF0Y2hOdW1iZXIgPSBiYXJjb2RlVmFsdWUubGVuZ3RoID4gMTMgPyBiYXJjb2RlVmFsdWUuc3Vic3RyaW5nKDEzKSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLml0ZW1Db2RlID0gJyc7XHJcbiAgICAgICAgdGhpcy5pdGVtTmFtZSA9ICcnO1xyXG5cclxuICAgICAgICAvLyBTQVAnZGVuIGJhcmtvZCBpbGUga2FsZW0gYmlsZ2lzaSBnZXRpclxyXG4gICAgICAgIHRoaXMud2FyZWhvdXNlU2VydmljZS5nZXRJdGVtQnlCYXJjb2RlKHByb2R1Y3RCYXJjb2RlKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAoaXRlbUluZm8pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtSW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbUNvZGUgPSBpdGVtSW5mby5JdGVtQ29kZSB8fCAnJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1OYW1lID0gaXRlbUluZm8uSXRlbU5hbWUgfHwgJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXRjaCA9IGJhdGNoTnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1Db2RlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uud2FybihgQmFya29kIFwiJHtwcm9kdWN0QmFyY29kZX1cIiBpbGUgZcWfbGXFn2VuIGthbGVtIGJ1bHVuYW1hZMSxLmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQmFya29kIGlsZSBrYWxlbSBhcmFtYSBoYXRhc8SxOicsIGVycik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1Db2RlID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1OYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKCdCYXJrb2QgaWxlIGthbGVtIGJpbGdpc2kgU0FQXFwnZGVuIGFsxLFuYW1hZMSxLicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBLYWxlbSBrb2R1bmEgZ8O2cmUgU0FQJ2RlbiBrYWxlbSBhZMSxbsSxIMOnZWtlci5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBmZXRjaEl0ZW1OYW1lRnJvbVNBUChpdGVtQ29kZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFpdGVtQ29kZT8udHJpbSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbU5hbWUgPSAnJztcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy53YXJlaG91c2VTZXJ2aWNlLmdldEl0ZW1OYW1lQnlDb2RlKGl0ZW1Db2RlLnRyaW0oKSkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKGl0ZW1OYW1lKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1OYW1lID0gaXRlbU5hbWUgfHwgJyc7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdLYWxlbSBhZMSxIGFsxLFuYW1hZMSxOicsIGVycik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1OYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKCdLYWxlbSBhZMSxIFNBUFxcJ2RlbiBhbMSxbmFtYWTEsS4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVwbyBzZcOnaW1pIGRlxJ9pxZ90acSfaW5kZSDDp2HEn3LEsWzEsXIuXHJcbiAgICAgKiBTZcOnaWxlbiBkZXBveWEgYWl0IGRlcG8geWVybGVyaW5pIChiaW4gbG9jYXRpb25zKSB5w7xrbGVyLlxyXG4gICAgICovXHJcbiAgICBvbldhcmVob3VzZUNoYW5nZWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zaGVsZiA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRWtsZSBidXRvbnVuYSBiYXPEsWxkxLHEn8SxbmRhIMOnYcSfcsSxbMSxci5cclxuICAgICAqIEZvcm0gdmVyaWxlcmluaSBncmlkJ2UgZWtsZXIuXHJcbiAgICAgKi9cclxuICAgIG9uQWRkKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5pdGVtQ29kZT8udHJpbSgpIHx8ICF0aGlzLnNlbGVjdGVkV2FyZWhvdXNlPy50cmltKCkgfHwgIXRoaXMuc2hlbGY/LnRyaW0oKSB8fCAhdGhpcy5xdWFudGl0eSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLndhcm4oJ0thbGVtIGtvZHUsIGRlcG8sIHJhZiB2ZSBtaWt0YXIgYWxhbmxhcsSxIHpvcnVubHVkdXIuJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5zaGVsZkFic0VudHJ5KSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uud2FybignUmFmIGnDp2luIGdlw6dlcmxpIGJpciBBYnNFbnRyeSBidWx1bmFtYWTEsS4gTMO8dGZlbiByYWbEsSB0ZWtyYXIgb2t1dHVuLicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBuZXdJdGVtOiBTaGVsZlBsYWNlbWVudEl0ZW0gPSB7XHJcbiAgICAgICAgICAgIGlkOiB0aGlzLm5leHRJZCsrLFxyXG4gICAgICAgICAgICBiYXJjb2RlOiB0aGlzLmJhcmNvZGUudHJpbSgpLFxyXG4gICAgICAgICAgICBpdGVtQ29kZTogdGhpcy5pdGVtQ29kZS50cmltKCksXHJcbiAgICAgICAgICAgIGl0ZW1OYW1lOiB0aGlzLml0ZW1OYW1lLnRyaW0oKSxcclxuICAgICAgICAgICAgYmF0Y2g6IHRoaXMuYmF0Y2gudHJpbSgpLFxyXG4gICAgICAgICAgICB3YXJlaG91c2U6IHRoaXMuc2VsZWN0ZWRXYXJlaG91c2UudHJpbSgpLFxyXG4gICAgICAgICAgICBzaGVsZjogdGhpcy5zaGVsZi50cmltKCksXHJcbiAgICAgICAgICAgIHNoZWxmQWJzRW50cnk6IHRoaXMuc2hlbGZBYnNFbnRyeSxcclxuICAgICAgICAgICAgcXVhbnRpdHk6IHRoaXMucXVhbnRpdHksXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5ncmlkRGF0YVNvdXJjZSA9IFsuLi50aGlzLmdyaWREYXRhU291cmNlLCBuZXdJdGVtXTtcclxuXHJcbiAgICAgICAgLy8gQWxhbmxhcsSxIHRlbWl6bGUgKHJhZiBzYWJpdCBkZcSfaWxzZSlcclxuICAgICAgICBpZiAoIXRoaXMuaXNTaGVsZkZpeGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25DbGVhcigpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIFJhZiBzYWJpdCBpc2Ugc2FkZWNlIGJhcmtvZCwga2FsZW0ga29kdSwga2FsZW0gYWTEsSwgcGFydGkgdmUgbWlrdGFyxLEgdGVtaXpsZSAoZGVwbyB2ZSByYWYga2FsxLFyKVxyXG4gICAgICAgICAgICB0aGlzLmJhcmNvZGUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5pdGVtQ29kZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuYmF0Y2ggPSAnJztcclxuICAgICAgICAgICAgdGhpcy5xdWFudGl0eSA9IG51bGw7XHJcbiAgICAgICAgICAgIC8vIFJhZiBzYWJpdCBpc2UgZm9jdXMgYmFya29kIGFsYW7EsW5hIGTDtm5zw7xuXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYXJjb2RlSW5wdXRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogS2F5ZGV0IGJ1dG9udW5hIGJhc8SxbGTEscSfxLFuZGEgw6dhxJ9yxLFsxLFyLlxyXG4gICAgICogR3JpZCdkZWtpIHTDvG0gdmVyaWxlcmkgdG9wbHUgb2xhcmFrIGtheWRlZGVyLlxyXG4gICAgICovXHJcbiAgICBvblNhdmUoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JpZERhdGFTb3VyY2UubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uud2FybignS2F5ZGVkaWxlY2VrIHZlcmkgeW9rLicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkdG86IEJ1bGtJbnZlbnRvcnlPcGVyYXRpb25EdG8gPSB7XHJcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6IHRoaXMub3BlcmF0aW9uVHlwZSxcclxuICAgICAgICAgICAgaXRlbXM6IHRoaXMuZ3JpZERhdGFTb3VyY2UubWFwKGl0ZW0gPT4gKHtcclxuICAgICAgICAgICAgICAgIGJhcmNvZGU6IGl0ZW0uaXRlbUNvZGUsIC8vIEthbGVtIGtvZHVudSBnw7ZuZGVyXHJcbiAgICAgICAgICAgICAgICBiYXRjaDogaXRlbS5iYXRjaCxcclxuICAgICAgICAgICAgICAgIHdhcmVob3VzZTogaXRlbS53YXJlaG91c2UsXHJcbiAgICAgICAgICAgICAgICBzaGVsZjogaXRlbS5zaGVsZkFic0VudHJ5Py50b1N0cmluZygpLCAvLyBBYnNFbnRyeSBvbGFyYWsgZ8O2bmRlclxyXG4gICAgICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHlcclxuICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLnByb2Nlc3NCdWxrT3BlcmF0aW9uKGR0bykuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5zdWNjZXNzKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAvLyBCYcWfYXLEsWzEsSBrYXnEsXQgc29ucmFzxLEgZ3JpZCdpIHRlbWl6bGVcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZERhdGFTb3VyY2UgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV4dElkID0gMTtcclxuICAgICAgICAgICAgICAgIHRoaXMub25DbGVhcigpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvcj8uZXJyb3I/LmVycm9yPy5tZXNzYWdlIHx8ICfEsMWfbGVtIHPEsXJhc8SxbmRhIGJpciBoYXRhIG9sdcWfdHUuJztcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVtaXpsZSBidXRvbnVuYSBiYXPEsWxkxLHEn8SxbmRhIMOnYcSfcsSxbMSxci5cclxuICAgICAqL1xyXG4gICAgb25DbGVhcigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmJhcmNvZGUgPSAnJztcclxuICAgICAgICB0aGlzLml0ZW1Db2RlID0gJyc7XHJcbiAgICAgICAgdGhpcy5pdGVtTmFtZSA9ICcnO1xyXG4gICAgICAgIHRoaXMuYmF0Y2ggPSAnJztcclxuICAgICAgICB0aGlzLnF1YW50aXR5ID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzU2hlbGZGaXhlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNoZWxmID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2hlbGZBYnNFbnRyeSA9IG51bGw7XHJcbiAgICAgICAgICAgIC8vIFJhZiBzYWJpdCBkZcSfaWxzZSBmb2N1cyByYWYgYWxhbsSxbmEgZMO2bnPDvG5cclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoZWxmSW5wdXRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gUmFmIHNhYml0IGlzZSBmb2N1cyBiYXJrb2QgYWxhbsSxbmEgZMO2bnPDvG5cclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhcmNvZGVJbnB1dFJlZj8ubmF0aXZlRWxlbWVudD8uZm9jdXMoKTtcclxuICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVX1NXU21hcnRXaHMgPSBcIllcIiBvbGFuIGRlcG9sYXLEsSB5w7xrbGVyLlxyXG4gICAgICogxLBsayBkZXBveXUgb3RvbWF0aWsgb2xhcmFrIHNlw6dlci5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBsb2FkV2FyZWhvdXNlcygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZ1dhcmVob3VzZXMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMud2FyZWhvdXNlU2VydmljZS5nZXRTbWFydFdhcmVob3VzZXMoKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy53YXJlaG91c2VzID0gZGF0YSB8fCBbXTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdEZXBvbGFyIHnDvGtsZW5kaTonLCB0aGlzLndhcmVob3VzZXMpO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvLyDEsGxrIGRlcG95dSBvdG9tYXRpayBzZcOnIHZlIGJpbiBsb2NhdGlvbidsYXLEsSB5w7xrbGVcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLndhcmVob3VzZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXYXJlaG91c2UgPSB0aGlzLndhcmVob3VzZXNbMF0uV2hzQ29kZSB8fCAnJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uV2FyZWhvdXNlQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZ1dhcmVob3VzZXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0RlcG9sYXIgecO8a2xlbmVtZWRpOicsIGVycik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKCdEZXBvbGFyIHnDvGtsZW5lbWVkaS4nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nV2FyZWhvdXNlcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGFicC1wYWdlIFt0aXRsZV09XCInUmFmIFllcmxlxZ90aXJtZSdcIj5cclxuXHJcbiAgPCEtLSBMb2FkaW5nIE92ZXJsYXkgLS0+XHJcbiAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ1dhcmVob3VzZXNcIiBjbGFzcz1cImxvYWRpbmctb3ZlcmxheVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImxvYWRpbmctc3Bpbm5lclwiPlxyXG4gICAgICA8aSBjbGFzcz1cImZhIGZhLXNwaW5uZXIgZmEtc3BpbiBmYS0zeFwiPjwvaT5cclxuICAgICAgPHAgY2xhc3M9XCJtdC0zXCI+RGVwb2xhciB5w7xrbGVuaXlvci4uLjwvcD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwic2hlbGYtcGxhY2VtZW50LWNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNoZWxmLXBsYWNlbWVudC1sYXlvdXRcIj5cclxuICAgICAgPCEtLSBGb3JtIENhcmQgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzaGVsZi1mb3JtLWNhcmRcIj5cclxuICAgICAgPCEtLSBSYWRpbyBCdXR0b25zOiBHaXJpxZ8gLyDDh8Sxa8SxxZ8gLS0+XHJcbiAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImZvcm0tc2VjdGlvblwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInNlY3Rpb24tbGFiZWxcIj7EsMWfbGVtIFRpcGk8L2xhYmVsPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyYWRpby1ncm91cFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJvcGVyYXRpb25UeXBlXCIgaWQ9XCJvcEVudHJ5XCJcclxuICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiZW50cnlcIiBbKG5nTW9kZWwpXT1cIm9wZXJhdGlvblR5cGVcIiAvPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwib3BFbnRyeVwiPkdpcmnFnzwvbGFiZWw+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgPCEtLSA8aHIgY2xhc3M9XCJmb3JtLWRpdmlkZXJcIiAvPiAtLT5cclxuICAgICAgXHJcbiAgICAgIDwhLS0gRGVwbyAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tc2VjdGlvblwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInNlY3Rpb24tbGFiZWxcIiBmb3I9XCJ3YXJlaG91c2VTZWxlY3RcIj5EZXBvPC9sYWJlbD5cclxuICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICBpZD1cIndhcmVob3VzZVNlbGVjdFwiXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkV2FyZWhvdXNlXCJcclxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uV2FyZWhvdXNlQ2hhbmdlZCgpXCI+XHJcbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+RGVwbyBzZcOnaW4uLi48L29wdGlvbj5cclxuICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHdoIG9mIHdhcmVob3VzZXNcIiBbdmFsdWVdPVwid2guV2hzQ29kZVwiPlxyXG4gICAgICAgICAgICB7eyB3aC5XaHNDb2RlIH19IC0ge3sgd2guV2hzTmFtZSB9fVxyXG4gICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBSYWYgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXNlY3Rpb25cIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJzZWN0aW9uLWxhYmVsXCIgZm9yPVwic2hlbGZJbnB1dFwiPlJhZjwvbGFiZWw+XHJcbiAgICAgICAgPGlucHV0ICNzaGVsZklucHV0XHJcbiAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgIGlkPVwic2hlbGZJbnB1dFwiXHJcbiAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2hlbGZcIlxyXG4gICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvblNoZWxmU2Nhbm5lZCgpXCJcclxuICAgICAgICAgICAgICAgKGJsdXIpPVwib25TaGVsZlNjYW5uZWQoKVwiXHJcbiAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUmFmIGtvZHUgZ2lyaW4uLi5cIlxyXG4gICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gQmFya29kIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1zZWN0aW9uXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwic2VjdGlvbi1sYWJlbFwiIGZvcj1cImJhcmNvZGVJbnB1dFwiPkJhcmtvZDwvbGFiZWw+XHJcbiAgICAgICAgPGlucHV0ICNiYXJjb2RlSW5wdXRcclxuICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWlucHV0XCJcclxuICAgICAgICAgICAgICAgaWQ9XCJiYXJjb2RlSW5wdXRcIlxyXG4gICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImJhcmNvZGVcIlxyXG4gICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvbkJhcmNvZGVTY2FubmVkKClcIlxyXG4gICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkJhcmtvZCBva3V0dW4uLi5cIlxyXG4gICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gS2FsZW0gS29kdSAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tc2VjdGlvblwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInNlY3Rpb24tbGFiZWxcIiBmb3I9XCJpdGVtQ29kZUlucHV0XCI+S2FsZW0gS29kdTwvbGFiZWw+XHJcbiAgICAgICAgPGlucHV0ICNpdGVtQ29kZUlucHV0XHJcbiAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgIGlkPVwiaXRlbUNvZGVJbnB1dFwiXHJcbiAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbUNvZGVcIlxyXG4gICAgICAgICAgICAgICBbcmVhZE9ubHldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiXCJcclxuICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIEthbGVtIEFkxLEgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXNlY3Rpb25cIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJzZWN0aW9uLWxhYmVsXCIgZm9yPVwiaXRlbU5hbWVJbnB1dFwiPkthbGVtIEFkxLE8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0taW5wdXRcIlxyXG4gICAgICAgICAgICAgICBpZD1cIml0ZW1OYW1lSW5wdXRcIlxyXG4gICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW1OYW1lXCJcclxuICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlwiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBQYXJ0aSAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tc2VjdGlvblwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInNlY3Rpb24tbGFiZWxcIiBmb3I9XCJiYXRjaElucHV0XCI+UGFydGk8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0taW5wdXRcIlxyXG4gICAgICAgICAgICAgICBpZD1cImJhdGNoSW5wdXRcIlxyXG4gICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImJhdGNoXCJcclxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQYXJ0aSBudW1hcmFzxLEuLi5cIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gTWlrdGFyIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1zZWN0aW9uXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwic2VjdGlvbi1sYWJlbFwiIGZvcj1cInF1YW50aXR5SW5wdXRcIj5NaWt0YXI8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dCAjcXVhbnRpdHlJbnB1dFxyXG4gICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgIGlkPVwicXVhbnRpdHlJbnB1dFwiXHJcbiAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicXVhbnRpdHlcIlxyXG4gICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvbkFkZCgpXCJcclxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJNaWt0YXIgZ2lyaW4uLi5cIlxyXG4gICAgICAgICAgICAgICBtaW49XCIwXCIgLz5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8aHIgY2xhc3M9XCJmb3JtLWRpdmlkZXJcIiAvPlxyXG5cclxuICAgICAgPCEtLSBDaGVja2JveDogUmFmIFNhYml0IC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1zZWN0aW9uXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgY2hlY2tib3gtZ3JvdXBcIj5cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiBpZD1cImZpeGVkU2hlbGZcIlxyXG4gICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXNTaGVsZkZpeGVkXCIgLz5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJmaXhlZFNoZWxmXCI+UmFmIFNhYml0PC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8aHIgY2xhc3M9XCJmb3JtLWRpdmlkZXJcIiAvPlxyXG5cclxuICAgICAgPCEtLSBCdXR0b25zIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1zZWN0aW9uIGJ1dHRvbi1ncm91cFwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWFjdGlvbi1wcmltYXJ5IGJ0bi1zbVwiIChjbGljayk9XCJvbkFkZCgpXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXNcIj48L2k+IEVrbGVcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1hY3Rpb24tc3VjY2VzcyBidG4tc21cIiAoY2xpY2spPVwib25TYXZlKClcIiBbZGlzYWJsZWRdPVwiZ3JpZERhdGFTb3VyY2UubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNhdmVcIj48L2k+IFRvcGx1IEtheWRldCAoe3sgZ3JpZERhdGFTb3VyY2UubGVuZ3RoIH19KVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWFjdGlvbi1vdXRsaW5lIGJ0bi1zbVwiIChjbGljayk9XCJvbkNsZWFyKClcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZXJhc2VyXCI+PC9pPiBUZW1pemxlXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBEYXRhIEdyaWQgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1jYXJkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJncmlkLWhlYWRlclwiPlxyXG4gICAgICAgIDxoNiBjbGFzcz1cImdyaWQtdGl0bGVcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbGlzdCBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAgUmFmIFllcmxlxZ90aXJtZSBMaXN0ZXNpICh7eyBncmlkRGF0YVNvdXJjZS5sZW5ndGggfX0pXHJcbiAgICAgICAgPC9oNj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkeC1kYXRhLWdyaWRcclxuICAgICAgICAjZ3JpZEluc3RhbmNlXHJcbiAgICAgICAgW2RhdGFTb3VyY2VdPVwiZ3JpZERhdGFTb3VyY2VcIlxyXG4gICAgICAgIFtzaG93Um93TGluZXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgW3Nob3dCb3JkZXJzXT1cInRydWVcIlxyXG4gICAgICAgIFtob3ZlclN0YXRlRW5hYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICBbY29sdW1uQXV0b1dpZHRoXT1cInRydWVcIlxyXG4gICAgICAgIFtyb3dBbHRlcm5hdGlvbkVuYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgW2FsbG93Q29sdW1uUmVzaXppbmddPVwidHJ1ZVwiXHJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDY1dmg7IG1pbi1oZWlnaHQ6IDUwMHB4O1wiXHJcbiAgICAgID5cclxuICAgICAgICA8ZHhvLXBhZ2luZyBbZW5hYmxlZF09XCJmYWxzZVwiPjwvZHhvLXBhZ2luZz5cclxuICAgICAgICA8ZHhvLXNjcm9sbGluZyBtb2RlPVwic3RhbmRhcmRcIj48L2R4by1zY3JvbGxpbmc+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPGR4aS1jb2x1bW5cclxuICAgICAgICAgIGRhdGFGaWVsZD1cImJhcmNvZGVcIlxyXG4gICAgICAgICAgY2FwdGlvbj1cIkJhcmtvZFwiXHJcbiAgICAgICAgICBbd2lkdGhdPVwiMTUwXCJcclxuICAgICAgICA+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uXHJcbiAgICAgICAgICBkYXRhRmllbGQ9XCJpdGVtQ29kZVwiXHJcbiAgICAgICAgICBjYXB0aW9uPVwiS2FsZW0gS29kdVwiXHJcbiAgICAgICAgICBbd2lkdGhdPVwiMTIwXCJcclxuICAgICAgICA+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uXHJcbiAgICAgICAgICBkYXRhRmllbGQ9XCJpdGVtTmFtZVwiXHJcbiAgICAgICAgICBjYXB0aW9uPVwiS2FsZW0gQWTEsVwiXHJcbiAgICAgICAgICBbd2lkdGhdPVwiMjAwXCJcclxuICAgICAgICA+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uXHJcbiAgICAgICAgICBkYXRhRmllbGQ9XCJiYXRjaFwiXHJcbiAgICAgICAgICBjYXB0aW9uPVwiUGFydGlcIlxyXG4gICAgICAgICAgW3dpZHRoXT1cIjEyMFwiXHJcbiAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgZGF0YUZpZWxkPVwid2FyZWhvdXNlXCJcclxuICAgICAgICAgIGNhcHRpb249XCJEZXBvXCJcclxuICAgICAgICAgIFt3aWR0aF09XCIxMjBcIlxyXG4gICAgICAgID48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW5cclxuICAgICAgICAgIGRhdGFGaWVsZD1cInNoZWxmXCJcclxuICAgICAgICAgIGNhcHRpb249XCJSYWZcIlxyXG4gICAgICAgICAgW3dpZHRoXT1cIjE1MFwiXHJcbiAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgZGF0YUZpZWxkPVwicXVhbnRpdHlcIlxyXG4gICAgICAgICAgY2FwdGlvbj1cIk1pa3RhclwiXHJcbiAgICAgICAgICBkYXRhVHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICBbd2lkdGhdPVwiMTAwXCJcclxuICAgICAgICA+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uc1wiXHJcbiAgICAgICAgICBbd2lkdGhdPVwiODBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkeGktYnV0dG9uXHJcbiAgICAgICAgICAgIGljb249XCJ0cmFzaFwiXHJcbiAgICAgICAgICAgIGhpbnQ9XCJTaWxcIlxyXG4gICAgICAgICAgICBbb25DbGlja109XCJkZWxldGVSb3dIYW5kbGVyXCJcclxuICAgICAgICAgID48L2R4aS1idXR0b24+XHJcbiAgICAgICAgPC9keGktY29sdW1uPlxyXG4gICAgICA8L2R4LWRhdGEtZ3JpZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG48L2FicC1wYWdlPlxyXG4iXX0=
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { CoreModule } from '@abp/ng.core';
|
|
2
|
+
import { ThemeSharedModule } from '@abp/ng.theme.shared';
|
|
3
|
+
import { NgModule } from '@angular/core';
|
|
4
|
+
import { FormsModule } from '@angular/forms';
|
|
5
|
+
import { RouterModule } from '@angular/router';
|
|
6
|
+
import { NgbCollapseModule, NgbDatepickerModule, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';
|
|
7
|
+
import { NgxValidateCoreModule } from '@ngx-validate/core';
|
|
8
|
+
import { CommercialUiModule } from '@volo/abp.commercial.ng.ui';
|
|
9
|
+
import { PageModule } from '@abp/ng.components/page';
|
|
10
|
+
import { DxDataGridModule } from 'devextreme-angular';
|
|
11
|
+
import { ShelfPlacementComponent } from './shelf-placement.component';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
import * as i1 from "@angular/router";
|
|
14
|
+
const routes = [
|
|
15
|
+
{
|
|
16
|
+
path: '',
|
|
17
|
+
component: ShelfPlacementComponent,
|
|
18
|
+
},
|
|
19
|
+
];
|
|
20
|
+
export class ShelfPlacementModule {
|
|
21
|
+
}
|
|
22
|
+
ShelfPlacementModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ShelfPlacementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
23
|
+
ShelfPlacementModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: ShelfPlacementModule, declarations: [ShelfPlacementComponent], imports: [CoreModule,
|
|
24
|
+
ThemeSharedModule,
|
|
25
|
+
FormsModule,
|
|
26
|
+
CommercialUiModule,
|
|
27
|
+
NgxValidateCoreModule,
|
|
28
|
+
NgbCollapseModule,
|
|
29
|
+
NgbDatepickerModule,
|
|
30
|
+
NgbDropdownModule,
|
|
31
|
+
DxDataGridModule,
|
|
32
|
+
PageModule, i1.RouterModule] });
|
|
33
|
+
ShelfPlacementModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ShelfPlacementModule, imports: [CoreModule,
|
|
34
|
+
ThemeSharedModule,
|
|
35
|
+
FormsModule,
|
|
36
|
+
CommercialUiModule,
|
|
37
|
+
NgxValidateCoreModule,
|
|
38
|
+
NgbCollapseModule,
|
|
39
|
+
NgbDatepickerModule,
|
|
40
|
+
NgbDropdownModule,
|
|
41
|
+
DxDataGridModule,
|
|
42
|
+
PageModule,
|
|
43
|
+
RouterModule.forChild(routes)] });
|
|
44
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ShelfPlacementModule, decorators: [{
|
|
45
|
+
type: NgModule,
|
|
46
|
+
args: [{
|
|
47
|
+
declarations: [ShelfPlacementComponent],
|
|
48
|
+
imports: [
|
|
49
|
+
CoreModule,
|
|
50
|
+
ThemeSharedModule,
|
|
51
|
+
FormsModule,
|
|
52
|
+
CommercialUiModule,
|
|
53
|
+
NgxValidateCoreModule,
|
|
54
|
+
NgbCollapseModule,
|
|
55
|
+
NgbDatepickerModule,
|
|
56
|
+
NgbDropdownModule,
|
|
57
|
+
DxDataGridModule,
|
|
58
|
+
PageModule,
|
|
59
|
+
RouterModule.forChild(routes),
|
|
60
|
+
],
|
|
61
|
+
}]
|
|
62
|
+
}] });
|
|
63
|
+
export function loadShelfPlacementModuleAsChild() {
|
|
64
|
+
return Promise.resolve(ShelfPlacementModule);
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGYtcGxhY2VtZW50Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXdhcmVob3VzZS9zcmMvbGliL2NvbXBvbmVudHMvc2hlbGYtcGxhY2VtZW50L3NoZWxmLXBsYWNlbWVudC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7QUFFdEUsTUFBTSxNQUFNLEdBQVc7SUFDbkI7UUFDSSxJQUFJLEVBQUUsRUFBRTtRQUNSLFNBQVMsRUFBRSx1QkFBdUI7S0FDckM7Q0FDSixDQUFDO0FBa0JGLE1BQU0sT0FBTyxvQkFBb0I7O2lIQUFwQixvQkFBb0I7a0hBQXBCLG9CQUFvQixpQkFmZCx1QkFBdUIsYUFFbEMsVUFBVTtRQUNWLGlCQUFpQjtRQUNqQixXQUFXO1FBQ1gsa0JBQWtCO1FBQ2xCLHFCQUFxQjtRQUNyQixpQkFBaUI7UUFDakIsbUJBQW1CO1FBQ25CLGlCQUFpQjtRQUNqQixnQkFBZ0I7UUFDaEIsVUFBVTtrSEFJTCxvQkFBb0IsWUFiekIsVUFBVTtRQUNWLGlCQUFpQjtRQUNqQixXQUFXO1FBQ1gsa0JBQWtCO1FBQ2xCLHFCQUFxQjtRQUNyQixpQkFBaUI7UUFDakIsbUJBQW1CO1FBQ25CLGlCQUFpQjtRQUNqQixnQkFBZ0I7UUFDaEIsVUFBVTtRQUNWLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDOzJGQUd4QixvQkFBb0I7a0JBaEJoQyxRQUFRO21CQUFDO29CQUNOLFlBQVksRUFBRSxDQUFDLHVCQUF1QixDQUFDO29CQUN2QyxPQUFPLEVBQUU7d0JBQ0wsVUFBVTt3QkFDVixpQkFBaUI7d0JBQ2pCLFdBQVc7d0JBQ1gsa0JBQWtCO3dCQUNsQixxQkFBcUI7d0JBQ3JCLGlCQUFpQjt3QkFDakIsbUJBQW1CO3dCQUNuQixpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsVUFBVTt3QkFDVixZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztxQkFDaEM7aUJBQ0o7O0FBR0QsTUFBTSxVQUFVLCtCQUErQjtJQUMzQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29yZU1vZHVsZSB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XHJcbmltcG9ydCB7IFRoZW1lU2hhcmVkTW9kdWxlIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xyXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUm91dGVyTW9kdWxlLCBSb3V0ZXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBOZ2JDb2xsYXBzZU1vZHVsZSwgTmdiRGF0ZXBpY2tlck1vZHVsZSwgTmdiRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IE5neFZhbGlkYXRlQ29yZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdmFsaWRhdGUvY29yZSc7XHJcbmltcG9ydCB7IENvbW1lcmNpYWxVaU1vZHVsZSB9IGZyb20gJ0B2b2xvL2FicC5jb21tZXJjaWFsLm5nLnVpJztcclxuaW1wb3J0IHsgUGFnZU1vZHVsZSB9IGZyb20gJ0BhYnAvbmcuY29tcG9uZW50cy9wYWdlJztcclxuaW1wb3J0IHsgRHhEYXRhR3JpZE1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhcic7XHJcbmltcG9ydCB7IFNoZWxmUGxhY2VtZW50Q29tcG9uZW50IH0gZnJvbSAnLi9zaGVsZi1wbGFjZW1lbnQuY29tcG9uZW50JztcclxuXHJcbmNvbnN0IHJvdXRlczogUm91dGVzID0gW1xyXG4gICAge1xyXG4gICAgICAgIHBhdGg6ICcnLFxyXG4gICAgICAgIGNvbXBvbmVudDogU2hlbGZQbGFjZW1lbnRDb21wb25lbnQsXHJcbiAgICB9LFxyXG5dO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGRlY2xhcmF0aW9uczogW1NoZWxmUGxhY2VtZW50Q29tcG9uZW50XSxcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgICBDb3JlTW9kdWxlLFxyXG4gICAgICAgIFRoZW1lU2hhcmVkTW9kdWxlLFxyXG4gICAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICAgIENvbW1lcmNpYWxVaU1vZHVsZSxcclxuICAgICAgICBOZ3hWYWxpZGF0ZUNvcmVNb2R1bGUsXHJcbiAgICAgICAgTmdiQ29sbGFwc2VNb2R1bGUsXHJcbiAgICAgICAgTmdiRGF0ZXBpY2tlck1vZHVsZSxcclxuICAgICAgICBOZ2JEcm9wZG93bk1vZHVsZSxcclxuICAgICAgICBEeERhdGFHcmlkTW9kdWxlLFxyXG4gICAgICAgIFBhZ2VNb2R1bGUsXHJcbiAgICAgICAgUm91dGVyTW9kdWxlLmZvckNoaWxkKHJvdXRlcyksXHJcbiAgICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2hlbGZQbGFjZW1lbnRNb2R1bGUge31cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkU2hlbGZQbGFjZW1lbnRNb2R1bGVBc0NoaWxkKCkge1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShTaGVsZlBsYWNlbWVudE1vZHVsZSk7XHJcbn1cclxuIl19
|