@hitsoft/uretim-yonetimi 1.0.44 → 1.0.46

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.
@@ -13,7 +13,7 @@ import * as i7 from '@abp/ng.components/page';
13
13
  import { PageModule } from '@abp/ng.components/page';
14
14
  import { __awaiter } from 'tslib';
15
15
  import { DateAdapter } from '@abp/ng.theme.shared/extensions';
16
- import { firstValueFrom } from 'rxjs';
16
+ import { firstValueFrom, Subject } from 'rxjs';
17
17
  import * as i4 from '@angular/forms';
18
18
  import * as i6 from '@angular/common';
19
19
  import * as i8 from 'devextreme-angular';
@@ -22,6 +22,7 @@ import * as i6$1 from 'devextreme-angular/ui/nested';
22
22
  import * as AspNetData from 'devextreme-aspnet-data-nojquery';
23
23
  import * as i5 from '@angular/platform-browser';
24
24
  import * as i9 from 'devextreme-angular/core';
25
+ import { takeUntil, finalize } from 'rxjs/operators';
25
26
  import * as i7$1 from 'devextreme-angular/ui/radio-group';
26
27
  import notify from 'devextreme/ui/notify';
27
28
  import CustomStore from 'devextreme/data/custom_store';
@@ -107,13 +108,37 @@ class HitHelper {
107
108
  return suffix ? '#,##0.0000 ' + suffix : '#,##0.0000';
108
109
  }
109
110
  static getMeasurementFormattedWithLocalization(value, unit) {
110
- const locale = navigator.language || 'tr-TR';
111
- const formatted = new Intl.NumberFormat(locale, {
111
+ const numericValue = HitHelper.toNumericValue(value);
112
+ const formatted = new Intl.NumberFormat('tr-TR', {
112
113
  minimumFractionDigits: 4,
113
114
  maximumFractionDigits: 4,
114
- }).format(value);
115
+ useGrouping: true,
116
+ }).format(numericValue);
115
117
  return unit ? `${formatted} ${unit}` : formatted;
116
118
  }
119
+ static toNumericValue(value) {
120
+ if (typeof value === 'number') {
121
+ return Number.isFinite(value) ? value : 0;
122
+ }
123
+ if (value == null || value === '') {
124
+ return 0;
125
+ }
126
+ const text = String(value).trim().replace(/\s/g, '');
127
+ const lastComma = text.lastIndexOf(',');
128
+ const lastDot = text.lastIndexOf('.');
129
+ let normalized = text;
130
+ if (lastComma >= 0 && lastDot >= 0) {
131
+ // Türkçe biçim: 10.000,2500 -> 10000.2500
132
+ normalized = lastComma > lastDot
133
+ ? text.replace(/\./g, '').replace(',', '.')
134
+ : text.replace(/,/g, '');
135
+ }
136
+ else if (lastComma >= 0) {
137
+ normalized = text.replace(',', '.');
138
+ }
139
+ const parsed = Number(normalized);
140
+ return Number.isFinite(parsed) ? parsed : 0;
141
+ }
117
142
  static getFormattedErrors(errors) {
118
143
  if (!(errors === null || errors === void 0 ? void 0 : errors.length)) {
119
144
  return '';
@@ -126,7 +151,7 @@ class HitHelper {
126
151
  .join('\n');
127
152
  }
128
153
  static parseQR(barkod) {
129
- // Yeni barkod yapısı: (240)itemcode(10)partiNo(17)sonKullanmaTarihi(3103)miktar(21)elTerminalKodu
154
+ // Barkod yapısı: (240)itemcode(10)partiNo(17)sonKullanmaTarihi(3103)miktar(21)seriNo
130
155
  const marker240 = '(240)';
131
156
  const marker10 = '(10)';
132
157
  const marker17 = '(17)';
@@ -170,13 +195,15 @@ class HitHelper {
170
195
  }
171
196
  }
172
197
  class Hammadde {
173
- constructor(chemicalCode, lotNumber, expirationDate, weight, terminalCode) {
198
+ constructor(chemicalCode, lotNumber, expirationDate, weightGr, terminalCode, workOrderNo = '', weighingSequenceNo = '') {
174
199
  this.chemicalCode = chemicalCode;
175
200
  this.lotNumber = lotNumber;
176
201
  this.expirationDate = expirationDate;
177
- this.weightGr = weight; // Gram cinsinden
178
- this.weightKg = weight ? weight / 1000 : 0; // Kilogram cinsine dönüştürülmüş hali
202
+ this.weightGr = weightGr;
203
+ this.weightKg = weightGr ? weightGr / 1000 : 0;
179
204
  this.terminalCode = terminalCode;
205
+ this.workOrderNo = workOrderNo;
206
+ this.weighingSequenceNo = weighingSequenceNo;
180
207
  }
181
208
  }
182
209
 
@@ -887,6 +914,8 @@ class HitIssuesForProductionsComponent {
887
914
  this.isEmriBarkoduGecerliMi = false;
888
915
  this.searcheBasildiMi = false;
889
916
  this.hammaddeQR = '';
917
+ this.scannedBarcodeKeys = new Set();
918
+ this.initialBatchNumbers = new Map();
890
919
  this.warehouses = [];
891
920
  this.HitHelper = HitHelper;
892
921
  }
@@ -912,17 +941,8 @@ class HitIssuesForProductionsComponent {
912
941
  this.productionOrder = response.items;
913
942
  this.isEmriBarkoduGecerliMi = true;
914
943
  this.unitOfMeasure = response.items.unitOfMeasurement;
915
- const issueLines = this.productionOrder.getProductionOrderLine.map((issueLine) => {
916
- issueLine.quantity = 0;
917
- const newIssueLine = new IssueLine();
918
- newIssueLine.ItemCode = issueLine.itemCode;
919
- newIssueLine.BaseLine = issueLine.lineNum;
920
- newIssueLine.WarehouseCode = issueLine.warehouse;
921
- newIssueLine.BaseEntry = issueLine.absoluteEntry;
922
- newIssueLine.BatchNumbers = [new BatchNumber(issueLine.batchNumber, issueLine.plannedQty)];
923
- return newIssueLine;
924
- });
925
- this.issuesForProductionPost = new IssuesForProductionPostDto(issueLines);
944
+ this.initialBatchNumbers = new Map(this.productionOrder.getProductionOrderLine.map(line => [line.lineNum, line.batchNumber || '']));
945
+ this.resetIssueGrid();
926
946
  this.ngZone.run(() => {
927
947
  setTimeout(() => {
928
948
  this.nmbBoxHammaddeQR.instance.focus();
@@ -966,6 +986,21 @@ class HitIssuesForProductionsComponent {
966
986
  });
967
987
  return;
968
988
  }
989
+ // Mükerrer barkod kontrolü: aynı iş emri + tartım sıra no kombinasyonu tekrar okutulamaz
990
+ if (parsed.workOrderNo && parsed.weighingSequenceNo) {
991
+ const barcodeKey = `${parsed.workOrderNo}_${parsed.weighingSequenceNo}`;
992
+ if (this.scannedBarcodeKeys.has(barcodeKey)) {
993
+ this.confirmation.error('', 'Aynı barkod tekrar okutulamaz!', this.options).subscribe({
994
+ next: () => {
995
+ this.hammaddeQR = '';
996
+ this.focusQRInput();
997
+ }
998
+ });
999
+ this.isLoading = false;
1000
+ return;
1001
+ }
1002
+ this.scannedBarcodeKeys.add(barcodeKey);
1003
+ }
969
1004
  this.service.get(parsed.chemicalCode, this.productionOrder.absoluteEntry.toString()).subscribe({
970
1005
  next: (response) => {
971
1006
  if (response.isSuccessful) {
@@ -1029,6 +1064,7 @@ class HitIssuesForProductionsComponent {
1029
1064
  });
1030
1065
  }
1031
1066
  else {
1067
+ this.resetIssueGrid();
1032
1068
  this.confirmation.status$.subscribe({
1033
1069
  next: () => {
1034
1070
  this.focusQRInput();
@@ -1037,9 +1073,9 @@ class HitIssuesForProductionsComponent {
1037
1073
  }
1038
1074
  },
1039
1075
  error: (e) => {
1076
+ this.resetIssueGrid();
1040
1077
  this.confirmation.status$.subscribe({
1041
1078
  next: () => {
1042
- this.clearAll();
1043
1079
  this.focusQRInput();
1044
1080
  }
1045
1081
  });
@@ -1057,6 +1093,32 @@ class HitIssuesForProductionsComponent {
1057
1093
  this.productionOrder = null;
1058
1094
  this.focusBarkodInput();
1059
1095
  this.unitOfMeasure = null;
1096
+ this.scannedBarcodeKeys.clear();
1097
+ this.initialBatchNumbers.clear();
1098
+ }
1099
+ resetIssueGrid() {
1100
+ var _a;
1101
+ if (!((_a = this.productionOrder) === null || _a === void 0 ? void 0 : _a.getProductionOrderLine))
1102
+ return;
1103
+ this.productionOrder.getProductionOrderLine.forEach(line => {
1104
+ line.quantity = 0;
1105
+ line.batchNumber = this.initialBatchNumbers.get(line.lineNum) || '';
1106
+ });
1107
+ const issueLines = this.productionOrder.getProductionOrderLine.map(line => {
1108
+ const issueLine = new IssueLine();
1109
+ issueLine.ItemCode = line.itemCode;
1110
+ issueLine.BaseLine = line.lineNum;
1111
+ issueLine.WarehouseCode = line.warehouse;
1112
+ issueLine.BaseEntry = line.absoluteEntry;
1113
+ issueLine.BatchNumbers = [new BatchNumber(this.initialBatchNumbers.get(line.lineNum) || '', line.plannedQty)];
1114
+ return issueLine;
1115
+ });
1116
+ this.issuesForProductionPost = new IssuesForProductionPostDto(issueLines);
1117
+ this.scannedBarcodeKeys.clear();
1118
+ this.hammaddeQR = '';
1119
+ this.isEmriBarkoduGecerliMi = true;
1120
+ this.searcheBasildiMi = true;
1121
+ this.isLoading = false;
1060
1122
  }
1061
1123
  getWarehouses() {
1062
1124
  this.isLoading = true;
@@ -1521,6 +1583,7 @@ class HitFillingControlComponent {
1521
1583
  this.qrCode = '';
1522
1584
  this.lines = [];
1523
1585
  this.isDataLoadedFromDb = false; // DB'den veri mi geldi yoksa yeni mi
1586
+ this.scannedBarcodeKeys = new Set();
1524
1587
  }
1525
1588
  ngOnInit() {
1526
1589
  // Initialization logic
@@ -1595,6 +1658,21 @@ class HitFillingControlComponent {
1595
1658
  this.focusQRInput();
1596
1659
  return;
1597
1660
  }
1661
+ // Mükerrer barkod kontrolü: aynı iş emri + tartım sıra no kombinasyonu tekrar okutulamaz
1662
+ if (parsed.workOrderNo && parsed.weighingSequenceNo) {
1663
+ const barcodeKey = `${parsed.workOrderNo}_${parsed.weighingSequenceNo}`;
1664
+ if (this.scannedBarcodeKeys.has(barcodeKey)) {
1665
+ this.confirmation.error('', 'Aynı barkod tekrar okutulamaz!', {
1666
+ hideYesBtn: true,
1667
+ cancelText: 'Kapat',
1668
+ dismissible: false,
1669
+ });
1670
+ this.qrCode = '';
1671
+ this.focusQRInput();
1672
+ return;
1673
+ }
1674
+ this.scannedBarcodeKeys.add(barcodeKey);
1675
+ }
1598
1676
  // Grid'de bu item'ı bul
1599
1677
  const line = this.lines.find(x => x.itemCode === parsed.chemicalCode);
1600
1678
  if (!line) {
@@ -1767,6 +1845,7 @@ class HitFillingControlComponent {
1767
1845
  this.lines = [];
1768
1846
  this.isDataLoadedFromDb = false;
1769
1847
  this.isSaving = false;
1848
+ this.scannedBarcodeKeys.clear();
1770
1849
  this.focusOnIsEmriNo();
1771
1850
  }
1772
1851
  get showKazanDegisimiButton() {
@@ -1811,6 +1890,7 @@ class HitFillingControlComponent {
1811
1890
  // Grid'i refresh et
1812
1891
  this.dataGrid.instance.refresh();
1813
1892
  this.isDataLoadedFromDb = false; // Artık yeni veri girilecek
1893
+ this.scannedBarcodeKeys.clear(); // Yeni kazan için okutulmuş barkodları sıfırla
1814
1894
  // QR input'a focus et
1815
1895
  this.focusOnQrCode();
1816
1896
  }
@@ -1951,6 +2031,10 @@ class HitFillingReceiptFromProductionService {
1951
2031
  url: `${this.resourceEndpoint}/create-receipt`,
1952
2032
  body: input,
1953
2033
  }, { apiName: this.apiName });
2034
+ this.getOperationStatus = (operationId) => this.restService.request({
2035
+ method: 'GET',
2036
+ url: `${this.resourceEndpoint}/operations/${operationId}`,
2037
+ }, { apiName: this.apiName });
1954
2038
  this.resourceEndpoint = '/api/uretim-yonetimi/filling-receipt-from-production';
1955
2039
  }
1956
2040
  }
@@ -1977,19 +2061,41 @@ class HitFillingReceiptFromProductionComponent {
1977
2061
  this.paletTipleri = ['TAM', 'KISMI'];
1978
2062
  this.koliAdet = null;
1979
2063
  this.toplamMiktar = 0;
2064
+ this.pendingOperationId = null;
2065
+ this.operationStatusMessage = '';
2066
+ this.isCheckingOperationStatus = false;
2067
+ this.destroy$ = new Subject();
2068
+ this.statusCheckFailures = 0;
2069
+ this.pendingStorageKey = 'turs1013ReceiptOperation';
2070
+ this.errorDialogOptions = {
2071
+ hideYesBtn: true,
2072
+ cancelText: 'Kapat',
2073
+ dismissible: false,
2074
+ };
1980
2075
  this.calcRowIndex = (row) => { var _a, _b, _c; return ((_c = (_b = (_a = this.workOrderInfo) === null || _a === void 0 ? void 0 : _a.receiptHistory) === null || _b === void 0 ? void 0 : _b.indexOf(row)) !== null && _c !== void 0 ? _c : -1) + 1; };
1981
2076
  this.calcDocStatus = (row) => row.docStatus === 'C' ? 'Tamamlandı' : 'Beklemede';
1982
2077
  this.formatNumber = (value) => { var _a; return (_a = value === null || value === void 0 ? void 0 : value.toLocaleString('tr-TR')) !== null && _a !== void 0 ? _a : ''; };
1983
2078
  }
1984
2079
  ngOnInit() {
1985
- // Initialize
2080
+ this.pendingOperationId = sessionStorage.getItem(this.pendingStorageKey);
2081
+ if (this.pendingOperationId) {
2082
+ this.isSaving = true;
2083
+ this.operationStatusMessage = 'Önceki üretimden giriş işleminin sonucu kontrol ediliyor.';
2084
+ this.checkOperationStatus();
2085
+ }
2086
+ }
2087
+ ngOnDestroy() {
2088
+ if (this.statusTimer)
2089
+ clearTimeout(this.statusTimer);
2090
+ this.destroy$.next();
2091
+ this.destroy$.complete();
1986
2092
  }
1987
2093
  ngAfterViewInit() {
1988
2094
  this.focusOnIsEmriNo();
1989
2095
  }
1990
2096
  getProductionOrder() {
1991
2097
  return __awaiter(this, void 0, void 0, function* () {
1992
- if (!this.isEmriNo) {
2098
+ if (!this.isEmriNo || this.isSaving) {
1993
2099
  return;
1994
2100
  }
1995
2101
  this.isLoading = true;
@@ -2034,19 +2140,18 @@ class HitFillingReceiptFromProductionComponent {
2034
2140
  return;
2035
2141
  }
2036
2142
  const salPackUn = this.workOrderInfo.salPackUn || 0;
2037
- debugger;
2038
2143
  if (this.paletTipi === 'TAM') {
2039
2144
  // Tam Palet: Pallet height × Pieces per box
2040
2145
  const paletYukseklik = this.workOrderInfo.u_DKpaletyuseklik || 0;
2041
- this.toplamMiktar = paletYukseklik * salPackUn;
2146
+ this.toplamMiktar = Math.round(paletYukseklik * salPackUn);
2042
2147
  }
2043
2148
  else {
2044
2149
  // Kısmi Palet: Koli count × Pieces per box
2045
2150
  const koliAdet = this.koliAdet || 0;
2046
- const kismiMiktar = koliAdet * salPackUn;
2151
+ const kismiMiktar = Math.round(koliAdet * salPackUn);
2047
2152
  // Calculate TAM pallet quantity for comparison
2048
2153
  const paletYukseklik = this.workOrderInfo.u_DKpaletyuseklik || 0;
2049
- const tamPaletMiktar = paletYukseklik * salPackUn;
2154
+ const tamPaletMiktar = Math.round(paletYukseklik * salPackUn);
2050
2155
  // KISMI quantity should not exceed TAM pallet quantity
2051
2156
  if (kismiMiktar > tamPaletMiktar) {
2052
2157
  this.toplamMiktar = tamPaletMiktar;
@@ -2066,8 +2171,8 @@ class HitFillingReceiptFromProductionComponent {
2066
2171
  }
2067
2172
  }
2068
2173
  save() {
2174
+ var _a;
2069
2175
  return __awaiter(this, void 0, void 0, function* () {
2070
- debugger;
2071
2176
  if (!this.isEmriNo || !this.workOrderInfo || this.toplamMiktar <= 0 || this.isSaving) {
2072
2177
  if (!this.isSaving) {
2073
2178
  this.confirmation.warn('', 'Lütfen tüm alanları doldurun!', {
@@ -2078,73 +2183,129 @@ class HitFillingReceiptFromProductionComponent {
2078
2183
  }
2079
2184
  return;
2080
2185
  }
2081
- // Check if completed quantity will exceed planned quantity
2082
- const remainingQty = this.workOrderInfo.plannedQty - this.workOrderInfo.cmpltQty;
2083
- if (this.toplamMiktar > remainingQty) {
2084
- this.confirmation.warn('', `Girilen miktar (${this.toplamMiktar}) kalan miktarı (${remainingQty}) aşıyor!`, {
2186
+ // Tolerans kontrolü (%15) - kalan izin backend'de hesaplanır, oran burada tekrarlanmaz.
2187
+ // Nihai karar Kaydet anında backend'de, DB'den yeniden okunan CmpltQty ile verilir.
2188
+ const kalanIzin = (_a = this.workOrderInfo.remainingAllowedQty) !== null && _a !== void 0 ? _a : 0;
2189
+ if (this.toplamMiktar > kalanIzin) {
2190
+ this.confirmation.warn('', `Tolerans sınırı aşıldı. Planlanan miktar: ${this.workOrderInfo.plannedQty}, ` +
2191
+ `toplam girilen: ${this.workOrderInfo.cmpltQty}, ` +
2192
+ `girilebilecek kalan miktar: ${kalanIzin}. İşlem kaydedilmedi.`, {
2085
2193
  hideYesBtn: true,
2086
2194
  cancelText: 'Kapat',
2087
2195
  dismissible: false,
2088
2196
  });
2089
2197
  return;
2090
2198
  }
2199
+ const operationId = this.newOperationId();
2091
2200
  const saveData = {
2201
+ operationId,
2092
2202
  docEntry: this.isEmriNo,
2093
2203
  palletType: this.paletTipi,
2094
2204
  koliCount: this.paletTipi === 'KISMI' ? this.koliAdet : null,
2095
- totalQuantity: this.toplamMiktar,
2096
- warehouseCode: this.workOrderInfo.warehouse,
2097
- batchNumber: '',
2098
- componentsToConsume: this.prepareComponentsToConsume()
2205
+ totalQuantity: this.toplamMiktar
2099
2206
  };
2207
+ this.pendingOperationId = operationId;
2208
+ sessionStorage.setItem(this.pendingStorageKey, operationId);
2100
2209
  this.isSaving = true;
2101
2210
  this.isLoading = true;
2102
- this.service.createReceipt(saveData).subscribe({
2211
+ this.operationStatusMessage = 'Üretimden giriş kaydediliyor, SAP belge sonucu bekleniyor.';
2212
+ this.service.createReceipt(saveData).pipe(takeUntil(this.destroy$)).subscribe({
2103
2213
  next: response => {
2104
- if (response === null || response === void 0 ? void 0 : response.isSuccessful) {
2105
- this.confirmation.success('', 'Üretimden giriş başarıyla gerçekleştirildi!', {
2106
- hideYesBtn: true,
2107
- cancelText: 'Kapat',
2108
- dismissible: false,
2109
- });
2110
- this.clearAll();
2111
- }
2112
- this.isSaving = false;
2214
+ if ((response === null || response === void 0 ? void 0 : response.isSuccessful) && response.items)
2215
+ this.handleOperationStatus(response.items);
2216
+ else
2217
+ this.checkOperationStatus();
2113
2218
  this.isLoading = false;
2114
2219
  },
2115
2220
  error: e => {
2116
- this.isSaving = false;
2117
2221
  this.isLoading = false;
2222
+ this.checkOperationStatus();
2118
2223
  },
2119
2224
  });
2120
2225
  });
2121
2226
  }
2122
- prepareComponentsToConsume() {
2123
- if (!this.workOrderInfo || !this.workOrderInfo.lines) {
2124
- return [];
2125
- }
2126
- const components = [];
2127
- const itemCode = this.workOrderInfo.itemCode;
2128
- // Determine if this is YM or 151* product
2129
- const isYM = itemCode.startsWith('YM');
2130
- const is151 = itemCode.startsWith('151');
2131
- // Get controlled lines (YM/151* items marked with U_Kontrol='E')
2132
- const controlledLines = this.workOrderInfo.lines.filter(line => line.isControlled && line.batchNumber);
2133
- // For YM/151* products, consume by lot from control screen
2134
- for (const line of controlledLines) {
2135
- components.push({
2136
- itemCode: line.itemCode,
2137
- quantity: line.issuedQty,
2138
- warehouseCode: line.warehouse,
2139
- batchNumber: line.batchNumber,
2140
- baseLine: line.lineNum
2227
+ checkOperationStatus() {
2228
+ if (!this.pendingOperationId || this.isCheckingOperationStatus)
2229
+ return;
2230
+ this.isCheckingOperationStatus = true;
2231
+ this.service.getOperationStatus(this.pendingOperationId).pipe(takeUntil(this.destroy$), finalize(() => this.isCheckingOperationStatus = false)).subscribe({
2232
+ next: response => {
2233
+ this.statusCheckFailures = 0;
2234
+ if ((response === null || response === void 0 ? void 0 : response.isSuccessful) && response.items)
2235
+ this.handleOperationStatus(response.items);
2236
+ else
2237
+ this.scheduleStatusCheck();
2238
+ },
2239
+ error: error => {
2240
+ // A missing row can be transient while the original POST is still validating.
2241
+ // Never unlock a response-lost operation solely because this GET failed.
2242
+ this.statusCheckFailures++;
2243
+ this.operationStatusMessage = 'İşlem sonucu alınamadı. SAP belgeleri doğrulanana kadar yeni giriş başlatılamaz.';
2244
+ if (this.statusCheckFailures === 5) {
2245
+ this.confirmation.warn('', `İşlem sonucu doğrulanamadı. Yeni kayıt başlatmayın; işlem anahtarını destek ekibiyle paylaşın: ${this.pendingOperationId}`, {
2246
+ hideYesBtn: true, cancelText: 'Kapat'
2247
+ });
2248
+ }
2249
+ this.scheduleStatusCheck();
2250
+ }
2251
+ });
2252
+ }
2253
+ scheduleStatusCheck() {
2254
+ if (this.statusTimer)
2255
+ clearTimeout(this.statusTimer);
2256
+ this.statusTimer = setTimeout(() => this.checkOperationStatus(), 3000);
2257
+ }
2258
+ refreshOperationStatus() {
2259
+ if (this.statusTimer)
2260
+ clearTimeout(this.statusTimer);
2261
+ this.checkOperationStatus();
2262
+ }
2263
+ handleOperationStatus(status) {
2264
+ if (status.state === 'Completed') {
2265
+ this.finishPendingOperation();
2266
+ const documents = [
2267
+ status.issueDocEntry ? `Üretim için çıkış belge iç no: ${status.issueDocEntry}.` : '',
2268
+ status.receiptDocEntry ? `Üretimden giriş belge iç no: ${status.receiptDocEntry}.` : '',
2269
+ ].filter(Boolean).join(' ');
2270
+ this.confirmation.success('', `Üretimden giriş başarıyla gerçekleştirildi! Parti: ${status.batchNumber}. ${documents}`, {
2271
+ hideYesBtn: true, cancelText: 'Kapat', dismissible: false
2141
2272
  });
2273
+ this.clearAll();
2274
+ }
2275
+ else if (status.state === 'Failed') {
2276
+ this.finishPendingOperation();
2277
+ this.confirmation.error('', status.error || 'Üretimden giriş kaydedilemedi.', this.errorDialogOptions);
2278
+ }
2279
+ else if (status.state === 'Inconsistent') {
2280
+ if (this.statusTimer)
2281
+ clearTimeout(this.statusTimer);
2282
+ this.operationStatusMessage = status.error || 'SAP giriş ve çıkış belgeleri birlikte doğrulanamadı. Belgeleri kontrol edin.';
2283
+ }
2284
+ else {
2285
+ this.operationStatusMessage = status.error || 'SAP belge sonucu doğrulanıyor. Sonuç kesinleşene kadar yeni giriş başlatılamaz.';
2286
+ this.scheduleStatusCheck();
2142
2287
  }
2143
- // For other components, use "Teyit sonrası otomatik çekme" logic
2144
- // (This would be handled by the backend with FIFO for batch/serial items)
2145
- return components;
2288
+ }
2289
+ finishPendingOperation() {
2290
+ if (this.statusTimer)
2291
+ clearTimeout(this.statusTimer);
2292
+ this.isSaving = false;
2293
+ this.pendingOperationId = null;
2294
+ this.operationStatusMessage = '';
2295
+ this.statusCheckFailures = 0;
2296
+ sessionStorage.removeItem(this.pendingStorageKey);
2297
+ }
2298
+ newOperationId() {
2299
+ const bytes = new Uint8Array(16);
2300
+ crypto.getRandomValues(bytes);
2301
+ bytes[6] = (bytes[6] & 0x0f) | 0x40;
2302
+ bytes[8] = (bytes[8] & 0x3f) | 0x80;
2303
+ const value = Array.from(bytes, b => b.toString(16).padStart(2, '0')).join('');
2304
+ return `${value.slice(0, 8)}-${value.slice(8, 12)}-${value.slice(12, 16)}-${value.slice(16, 20)}-${value.slice(20)}`;
2146
2305
  }
2147
2306
  clearAll() {
2307
+ if (this.isSaving)
2308
+ return;
2148
2309
  this.isWorkOrderLoaded = false;
2149
2310
  this.isEmriNo = null;
2150
2311
  this.workOrderInfo = null;
@@ -2171,10 +2332,10 @@ class HitFillingReceiptFromProductionComponent {
2171
2332
  }
2172
2333
  }
2173
2334
  HitFillingReceiptFromProductionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitFillingReceiptFromProductionComponent, deps: [{ token: HitFillingReceiptFromProductionService }, { token: i3.ConfirmationService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
2174
- HitFillingReceiptFromProductionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitFillingReceiptFromProductionComponent, selector: "lib-hit-filling-receipt-from-production", viewQueries: [{ propertyName: "nmbBoxIsEmriNo", first: true, predicate: ["isEmriNoRef"], descendants: true }, { propertyName: "radioPaletTipi", first: true, predicate: ["paletTipiRef"], descendants: true }, { propertyName: "nmbBoxKoliAdet", first: true, predicate: ["koliAdetRef"], descendants: true }], ngImport: i0, template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row\">\r\n <h3 class=\"page-title\">\r\n \u00DCretimden Giri\u015F\r\n </h3>\r\n </div>\r\n <div class=\"row text-lg-end pt-2\">\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-success btn-sm\" type=\"button\" (click)=\"save()\" [disabled]=\"isSaveButtonDisabled\">\r\n <i class=\"fa fa-check me-1\"></i>\r\n \u00DCretimden Giri\u015F Yap\r\n </button>\r\n </div>\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-warning btn-sm\" type=\"button\" (click)=\"clearAll()\">\r\n <i class=\"fa fa-broom me-1\"></i>\r\n Temizle\r\n </button>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <div class=\"card mt-2\">\r\n <div class=\"card-body\" style=\"height: calc(100vh - 241px); overflow: auto;\">\r\n <!-- Work Order Input -->\r\n <div style=\"display: flex; align-items: center;\">\r\n <dx-number-box #isEmriNoRef class=\"me-1\" style=\"width:100%;\" label=\"\u0130\u015F Emri No\" [(value)]=\"isEmriNo\"\r\n (onChange)=\"getProductionOrder()\" (onEnterKey)=\"getProductionOrder()\" [disabled]=\"isWorkOrderLoaded\">\r\n </dx-number-box>\r\n <dx-button style=\"margin-top: 7.5px;\" icon=\"search\" type=\"default\" (onClick)=\"getProductionOrder()\"\r\n [disabled]=\"isWorkOrderLoaded\">\r\n </dx-button>\r\n </div>\r\n\r\n <!-- Work Order Information -->\r\n <div class=\"mt-3\" *ngIf=\"isWorkOrderLoaded && workOrderInfo\">\r\n <!-- Product Info -->\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <dx-text-box label=\"\u00DCr\u00FCn Kodu\" [(value)]=\"workOrderInfo.itemCode\" [disabled]=\"true\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <dx-text-box label=\"\u00DCr\u00FCn Ad\u0131\" [(value)]=\"workOrderInfo.itemName\" [disabled]=\"true\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mt-2\">\r\n <div class=\"col-md-3\">\r\n <dx-number-box \r\n label=\"Planlanan Miktar\" \r\n [(value)]=\"workOrderInfo.plannedQty\" \r\n [disabled]=\"true\">\r\n </dx-number-box>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <dx-number-box \r\n label=\"Tamamlanan Miktar\" \r\n [(value)]=\"workOrderInfo.cmpltQty\" \r\n [disabled]=\"true\">\r\n </dx-number-box>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <dx-text-box \r\n label=\"Depo\" \r\n [(value)]=\"workOrderInfo.warehouse\" \r\n [disabled]=\"true\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <dx-text-box \r\n label=\"Ambalaj Lot\" \r\n [(value)]=\"workOrderInfo.u_TRKAMBALAJLOT\" \r\n [disabled]=\"true\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n\r\n <!-- Pallet Type Selection -->\r\n <div class=\"row mt-3\">\r\n <div class=\"col-md-12\">\r\n <dx-radio-group #paletTipiRef [items]=\"paletTipleri\" layout=\"horizontal\" [(value)]=\"paletTipi\"\r\n (onValueChanged)=\"onPaletTipiChange()\">\r\n </dx-radio-group>\r\n </div>\r\n </div>\r\n\r\n <!-- Koli Count for KISMI Pallet -->\r\n <div class=\"row mt-2\" *ngIf=\"paletTipi === 'KISMI'\">\r\n <div class=\"col-md-6\">\r\n <dx-number-box #koliAdetRef label=\"Koli Adedi\" [(value)]=\"koliAdet\" (onValueChanged)=\"onKoliAdetChange()\"\r\n [min]=\"1\">\r\n </dx-number-box>\r\n </div>\r\n </div>\r\n\r\n <!-- Calculated Total Quantity -->\r\n <div class=\"row mt-2\">\r\n <div class=\"col-md-6\">\r\n <dx-number-box label=\"Toplam Miktar (Adet)\" [(value)]=\"toplamMiktar\" [disabled]=\"true\"\r\n [stylingMode]=\"'filled'\">\r\n </dx-number-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <dx-number-box label=\"Koli \u0130\u00E7i Adet\" [(value)]=\"workOrderInfo.salPackUn\" [disabled]=\"true\">\r\n </dx-number-box>\r\n </div>\r\n </div>\r\n\r\n <!-- Quality Status Info -->\r\n <div class=\"row mt-2\" *ngIf=\"workOrderInfo.u_KaliteDurumu\">\r\n <div class=\"col-md-12\">\r\n <div class=\"alert alert-info\" role=\"alert\">\r\n <strong>Kalite Durumu:</strong> {{ workOrderInfo.u_KaliteDurumu }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Receipt History -->\r\n <div class=\"row mt-3\">\r\n <div class=\"col-12\">\r\n <div class=\"fw-semibold mb-1\" style=\"font-size: 13px;\">\r\n \u00DCretimden Giri\u015F Hareketleri\r\n </div>\r\n <dx-data-grid [dataSource]=\"workOrderInfo.receiptHistory\" [showBorders]=\"true\" [columnAutoWidth]=\"true\"\r\n [wordWrapEnabled]=\"false\" [rowAlternationEnabled]=\"true\" [hoverStateEnabled]=\"true\"\r\n [noDataText]=\"'Hen\u00FCz giri\u015F hareketi bulunmamaktad\u0131r.'\" [height]=\"'auto'\">\r\n <dxo-scrolling mode=\"standard\"></dxo-scrolling>\r\n <dxo-paging [enabled]=\"false\"></dxo-paging>\r\n <dxi-column caption=\"#\" name=\"rowNum\" [width]=\"40\" alignment=\"center\" [calculateCellValue]=\"calcRowIndex\"></dxi-column>\r\n <dxi-column dataField=\"docNum\" caption=\"Belge No\" [minWidth]=\"110\" alignment=\"center\"></dxi-column>\r\n <dxi-column dataField=\"batchNum\" caption=\"Parti No\" [minWidth]=\"130\" alignment=\"center\"></dxi-column>\r\n <dxi-column dataField=\"quantity\" caption=\"Miktar\" dataType=\"number\" [minWidth]=\"75\" alignment=\"center\"></dxi-column>\r\n <dxi-column dataField=\"whsName\" caption=\"Depo\" [minWidth]=\"100\" alignment=\"center\"></dxi-column>\r\n <dxi-column dataField=\"docStatus\" caption=\"Durum\" [minWidth]=\"105\" alignment=\"center\"\r\n [calculateCellValue]=\"calcDocStatus\">\r\n </dxi-column>\r\n <dxi-column dataField=\"userCode\" caption=\"Kullan\u0131c\u0131\" [minWidth]=\"80\" alignment=\"center\"></dxi-column>\r\n <dxo-summary>\r\n <dxi-total-item column=\"docNum\" summaryType=\"count\" displayFormat=\"Toplam\"></dxi-total-item>\r\n <dxi-total-item column=\"quantity\" summaryType=\"sum\" displayFormat=\"{0}\" [valueFormat]=\"formatNumber\"></dxi-total-item>\r\n </dxo-summary>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>", styles: [".page-title{margin:0;padding:0}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: i7.PageToolbarContainerComponent, selector: "abp-page-toolbar-container" }, { kind: "component", type: i8.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: i8.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: i6$1.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: i6$1.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i6$1.DxoScrollingComponent, selector: "dxo-scrolling", inputs: ["columnRenderingMode", "mode", "preloadEnabled", "renderAsync", "rowRenderingMode", "scrollByContent", "scrollByThumb", "showScrollbar", "useNative"] }, { kind: "component", type: i6$1.DxoSummaryComponent, selector: "dxo-summary", inputs: ["calculateCustomSummary", "groupItems", "recalculateWhileEditing", "skipEmptyValues", "texts", "totalItems"] }, { kind: "component", type: i6$1.DxiTotalItemComponent, selector: "dxi-total-item", inputs: ["alignment", "column", "cssClass", "customizeText", "displayFormat", "name", "showInColumn", "skipEmptyValues", "summaryType", "valueFormat"] }, { kind: "component", type: i8.DxNumberBoxComponent, selector: "dx-number-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "format", "height", "hint", "hoverStateEnabled", "inputAttr", "invalidValueMessage", "isValid", "label", "labelMode", "max", "min", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showSpinButtons", "step", "stylingMode", "tabIndex", "text", "useLargeSpinButtons", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "formatChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "invalidValueMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "minChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showSpinButtonsChange", "stepChange", "stylingModeChange", "tabIndexChange", "textChange", "useLargeSpinButtonsChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i8.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i7$1.DxRadioGroupComponent, selector: "dx-radio-group", inputs: ["accessKey", "activeStateEnabled", "dataSource", "disabled", "displayExpr", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "isValid", "items", "itemTemplate", "layout", "name", "readOnly", "rtlEnabled", "tabIndex", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueExpr", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "dataSourceChange", "disabledChange", "displayExprChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "isValidChange", "itemsChange", "itemTemplateChange", "layoutChange", "nameChange", "readOnlyChange", "rtlEnabledChange", "tabIndexChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueExprChange", "visibleChange", "widthChange", "onBlur"] }] });
2335
+ HitFillingReceiptFromProductionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitFillingReceiptFromProductionComponent, selector: "lib-hit-filling-receipt-from-production", viewQueries: [{ propertyName: "nmbBoxIsEmriNo", first: true, predicate: ["isEmriNoRef"], descendants: true }, { propertyName: "radioPaletTipi", first: true, predicate: ["paletTipiRef"], descendants: true }, { propertyName: "nmbBoxKoliAdet", first: true, predicate: ["koliAdetRef"], descendants: true }], ngImport: i0, template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row\">\r\n <h3 class=\"page-title\">\r\n \u00DCretimden Giri\u015F\r\n </h3>\r\n </div>\r\n <div class=\"row text-lg-end pt-2\">\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-success btn-sm\" type=\"button\" (click)=\"save()\" [disabled]=\"isSaveButtonDisabled\">\r\n <i class=\"fa fa-check me-1\"></i>\r\n \u00DCretimden Giri\u015F Yap\r\n </button>\r\n </div>\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-warning btn-sm\" type=\"button\" (click)=\"clearAll()\" [disabled]=\"isSaving\">\n <i class=\"fa fa-broom me-1\"></i>\r\n Temizle\r\n </button>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <div class=\"card mt-2\">\r\n <div class=\"card-body\" style=\"height: calc(100vh - 241px); overflow: auto;\">\r\n <div *ngIf=\"isSaving\" class=\"alert alert-warning\" role=\"status\" aria-live=\"polite\">\r\n <div>{{ operationStatusMessage }}</div>\r\n <div class=\"mt-1\">\u0130\u015Flem anahtar\u0131: {{ pendingOperationId }}</div>\r\n <button class=\"btn btn-outline-secondary btn-sm mt-2\" type=\"button\" (click)=\"refreshOperationStatus()\"\r\n [disabled]=\"isLoading || isCheckingOperationStatus\">\r\n Sonucu Tekrar Kontrol Et\r\n </button>\r\n </div>\r\n <!-- Work Order Input -->\r\n <div style=\"display: flex; align-items: center;\">\r\n <dx-number-box #isEmriNoRef class=\"me-1\" style=\"width:100%;\" label=\"\u0130\u015F Emri No\" [(value)]=\"isEmriNo\"\r\n (onChange)=\"getProductionOrder()\" (onEnterKey)=\"getProductionOrder()\" [disabled]=\"isWorkOrderLoaded || isSaving\">\n </dx-number-box>\r\n <dx-button style=\"margin-top: 7.5px;\" icon=\"search\" type=\"default\" (onClick)=\"getProductionOrder()\"\r\n [disabled]=\"isWorkOrderLoaded || isSaving\">\n </dx-button>\r\n </div>\r\n\r\n <!-- Work Order Information -->\r\n <div class=\"mt-3\" *ngIf=\"isWorkOrderLoaded && workOrderInfo\">\r\n <!-- Product Info -->\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <dx-text-box label=\"\u00DCr\u00FCn Kodu\" [(value)]=\"workOrderInfo.itemCode\" [disabled]=\"true\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <dx-text-box label=\"\u00DCr\u00FCn Ad\u0131\" [(value)]=\"workOrderInfo.itemName\" [disabled]=\"true\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mt-2\">\r\n <div class=\"col-md-3\">\r\n <dx-number-box \r\n label=\"Planlanan Miktar\" \r\n [(value)]=\"workOrderInfo.plannedQty\" \r\n [disabled]=\"true\">\r\n </dx-number-box>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <dx-number-box \r\n label=\"Tamamlanan Miktar\" \r\n [(value)]=\"workOrderInfo.cmpltQty\" \r\n [disabled]=\"true\">\r\n </dx-number-box>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <dx-text-box \r\n label=\"Depo\" \r\n [(value)]=\"workOrderInfo.warehouse\" \r\n [disabled]=\"true\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <dx-text-box \r\n label=\"Ambalaj Lot\" \r\n [(value)]=\"workOrderInfo.u_TRKAMBALAJLOT\" \r\n [disabled]=\"true\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n\r\n <!-- Pallet Type Selection -->\r\n <div class=\"row mt-3\">\r\n <div class=\"col-md-12\">\r\n <dx-radio-group #paletTipiRef [items]=\"paletTipleri\" layout=\"horizontal\" [(value)]=\"paletTipi\"\r\n (onValueChanged)=\"onPaletTipiChange()\" [disabled]=\"isSaving\">\r\n </dx-radio-group>\r\n </div>\r\n </div>\r\n\r\n <!-- Koli Count for KISMI Pallet -->\r\n <div class=\"row mt-2\" *ngIf=\"paletTipi === 'KISMI'\">\r\n <div class=\"col-md-6\">\r\n <dx-number-box #koliAdetRef label=\"Koli Adedi\" [(value)]=\"koliAdet\" (onValueChanged)=\"onKoliAdetChange()\"\r\n [min]=\"1\" [disabled]=\"isSaving\">\r\n </dx-number-box>\r\n </div>\r\n </div>\r\n\r\n <!-- Calculated Total Quantity -->\r\n <div class=\"row mt-2\">\r\n <div class=\"col-md-4\">\r\n <dx-number-box label=\"Toplam Miktar (Adet)\" [(value)]=\"toplamMiktar\" [disabled]=\"true\"\r\n [stylingMode]=\"'filled'\">\r\n </dx-number-box>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <dx-number-box label=\"Koli \u0130\u00E7i Adet\" [(value)]=\"workOrderInfo.salPackUn\" [disabled]=\"true\">\r\n </dx-number-box>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <dx-number-box label=\"Girilebilecek Kalan Miktar\" [(value)]=\"workOrderInfo.remainingAllowedQty\"\r\n [disabled]=\"true\">\r\n </dx-number-box>\r\n </div>\r\n </div>\r\n\r\n <!-- Quality Status Info -->\r\n <div class=\"row mt-2\" *ngIf=\"workOrderInfo.u_KaliteDurumu\">\r\n <div class=\"col-md-12\">\r\n <div class=\"alert alert-info\" role=\"alert\">\r\n <strong>Kalite Durumu:</strong> {{ workOrderInfo.u_KaliteDurumu }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Receipt History -->\r\n <div class=\"row mt-3\">\r\n <div class=\"col-12\">\r\n <div class=\"fw-semibold mb-1\" style=\"font-size: 13px;\">\r\n \u00DCretimden Giri\u015F Hareketleri\r\n </div>\r\n <dx-data-grid [dataSource]=\"workOrderInfo.receiptHistory\" [showBorders]=\"true\" [columnAutoWidth]=\"true\"\r\n [wordWrapEnabled]=\"false\" [rowAlternationEnabled]=\"true\" [hoverStateEnabled]=\"true\"\r\n [noDataText]=\"'Hen\u00FCz giri\u015F hareketi bulunmamaktad\u0131r.'\" [height]=\"'auto'\">\r\n <dxo-scrolling mode=\"standard\"></dxo-scrolling>\r\n <dxo-paging [enabled]=\"false\"></dxo-paging>\r\n <dxi-column caption=\"#\" name=\"rowNum\" [width]=\"40\" alignment=\"center\" [calculateCellValue]=\"calcRowIndex\"></dxi-column>\r\n <dxi-column dataField=\"docNum\" caption=\"Belge No\" [minWidth]=\"110\" alignment=\"center\"></dxi-column>\r\n <dxi-column dataField=\"batchNum\" caption=\"Parti No\" [minWidth]=\"130\" alignment=\"center\"></dxi-column>\r\n <dxi-column dataField=\"quantity\" caption=\"Miktar\" dataType=\"number\" [minWidth]=\"75\" alignment=\"center\"></dxi-column>\r\n <dxi-column dataField=\"whsName\" caption=\"Depo\" [minWidth]=\"100\" alignment=\"center\"></dxi-column>\r\n <dxi-column dataField=\"docStatus\" caption=\"Durum\" [minWidth]=\"105\" alignment=\"center\"\r\n [calculateCellValue]=\"calcDocStatus\">\r\n </dxi-column>\r\n <dxi-column dataField=\"userCode\" caption=\"Kullan\u0131c\u0131\" [minWidth]=\"80\" alignment=\"center\"></dxi-column>\r\n <dxo-summary>\r\n <dxi-total-item column=\"docNum\" summaryType=\"count\" displayFormat=\"Toplam\"></dxi-total-item>\r\n <dxi-total-item column=\"quantity\" summaryType=\"sum\" displayFormat=\"{0}\" [valueFormat]=\"formatNumber\"></dxi-total-item>\r\n </dxo-summary>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\n", styles: [".page-title{margin:0;padding:0}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: i7.PageToolbarContainerComponent, selector: "abp-page-toolbar-container" }, { kind: "component", type: i8.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: i8.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: i6$1.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: i6$1.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i6$1.DxoScrollingComponent, selector: "dxo-scrolling", inputs: ["columnRenderingMode", "mode", "preloadEnabled", "renderAsync", "rowRenderingMode", "scrollByContent", "scrollByThumb", "showScrollbar", "useNative"] }, { kind: "component", type: i6$1.DxoSummaryComponent, selector: "dxo-summary", inputs: ["calculateCustomSummary", "groupItems", "recalculateWhileEditing", "skipEmptyValues", "texts", "totalItems"] }, { kind: "component", type: i6$1.DxiTotalItemComponent, selector: "dxi-total-item", inputs: ["alignment", "column", "cssClass", "customizeText", "displayFormat", "name", "showInColumn", "skipEmptyValues", "summaryType", "valueFormat"] }, { kind: "component", type: i8.DxNumberBoxComponent, selector: "dx-number-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "format", "height", "hint", "hoverStateEnabled", "inputAttr", "invalidValueMessage", "isValid", "label", "labelMode", "max", "min", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showSpinButtons", "step", "stylingMode", "tabIndex", "text", "useLargeSpinButtons", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "formatChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "invalidValueMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "minChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showSpinButtonsChange", "stepChange", "stylingModeChange", "tabIndexChange", "textChange", "useLargeSpinButtonsChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i8.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i7$1.DxRadioGroupComponent, selector: "dx-radio-group", inputs: ["accessKey", "activeStateEnabled", "dataSource", "disabled", "displayExpr", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "isValid", "items", "itemTemplate", "layout", "name", "readOnly", "rtlEnabled", "tabIndex", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueExpr", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "dataSourceChange", "disabledChange", "displayExprChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "isValidChange", "itemsChange", "itemTemplateChange", "layoutChange", "nameChange", "readOnlyChange", "rtlEnabledChange", "tabIndexChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueExprChange", "visibleChange", "widthChange", "onBlur"] }] });
2175
2336
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitFillingReceiptFromProductionComponent, decorators: [{
2176
2337
  type: Component,
2177
- args: [{ selector: 'lib-hit-filling-receipt-from-production', template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row\">\r\n <h3 class=\"page-title\">\r\n \u00DCretimden Giri\u015F\r\n </h3>\r\n </div>\r\n <div class=\"row text-lg-end pt-2\">\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-success btn-sm\" type=\"button\" (click)=\"save()\" [disabled]=\"isSaveButtonDisabled\">\r\n <i class=\"fa fa-check me-1\"></i>\r\n \u00DCretimden Giri\u015F Yap\r\n </button>\r\n </div>\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-warning btn-sm\" type=\"button\" (click)=\"clearAll()\">\r\n <i class=\"fa fa-broom me-1\"></i>\r\n Temizle\r\n </button>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <div class=\"card mt-2\">\r\n <div class=\"card-body\" style=\"height: calc(100vh - 241px); overflow: auto;\">\r\n <!-- Work Order Input -->\r\n <div style=\"display: flex; align-items: center;\">\r\n <dx-number-box #isEmriNoRef class=\"me-1\" style=\"width:100%;\" label=\"\u0130\u015F Emri No\" [(value)]=\"isEmriNo\"\r\n (onChange)=\"getProductionOrder()\" (onEnterKey)=\"getProductionOrder()\" [disabled]=\"isWorkOrderLoaded\">\r\n </dx-number-box>\r\n <dx-button style=\"margin-top: 7.5px;\" icon=\"search\" type=\"default\" (onClick)=\"getProductionOrder()\"\r\n [disabled]=\"isWorkOrderLoaded\">\r\n </dx-button>\r\n </div>\r\n\r\n <!-- Work Order Information -->\r\n <div class=\"mt-3\" *ngIf=\"isWorkOrderLoaded && workOrderInfo\">\r\n <!-- Product Info -->\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <dx-text-box label=\"\u00DCr\u00FCn Kodu\" [(value)]=\"workOrderInfo.itemCode\" [disabled]=\"true\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <dx-text-box label=\"\u00DCr\u00FCn Ad\u0131\" [(value)]=\"workOrderInfo.itemName\" [disabled]=\"true\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mt-2\">\r\n <div class=\"col-md-3\">\r\n <dx-number-box \r\n label=\"Planlanan Miktar\" \r\n [(value)]=\"workOrderInfo.plannedQty\" \r\n [disabled]=\"true\">\r\n </dx-number-box>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <dx-number-box \r\n label=\"Tamamlanan Miktar\" \r\n [(value)]=\"workOrderInfo.cmpltQty\" \r\n [disabled]=\"true\">\r\n </dx-number-box>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <dx-text-box \r\n label=\"Depo\" \r\n [(value)]=\"workOrderInfo.warehouse\" \r\n [disabled]=\"true\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <dx-text-box \r\n label=\"Ambalaj Lot\" \r\n [(value)]=\"workOrderInfo.u_TRKAMBALAJLOT\" \r\n [disabled]=\"true\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n\r\n <!-- Pallet Type Selection -->\r\n <div class=\"row mt-3\">\r\n <div class=\"col-md-12\">\r\n <dx-radio-group #paletTipiRef [items]=\"paletTipleri\" layout=\"horizontal\" [(value)]=\"paletTipi\"\r\n (onValueChanged)=\"onPaletTipiChange()\">\r\n </dx-radio-group>\r\n </div>\r\n </div>\r\n\r\n <!-- Koli Count for KISMI Pallet -->\r\n <div class=\"row mt-2\" *ngIf=\"paletTipi === 'KISMI'\">\r\n <div class=\"col-md-6\">\r\n <dx-number-box #koliAdetRef label=\"Koli Adedi\" [(value)]=\"koliAdet\" (onValueChanged)=\"onKoliAdetChange()\"\r\n [min]=\"1\">\r\n </dx-number-box>\r\n </div>\r\n </div>\r\n\r\n <!-- Calculated Total Quantity -->\r\n <div class=\"row mt-2\">\r\n <div class=\"col-md-6\">\r\n <dx-number-box label=\"Toplam Miktar (Adet)\" [(value)]=\"toplamMiktar\" [disabled]=\"true\"\r\n [stylingMode]=\"'filled'\">\r\n </dx-number-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <dx-number-box label=\"Koli \u0130\u00E7i Adet\" [(value)]=\"workOrderInfo.salPackUn\" [disabled]=\"true\">\r\n </dx-number-box>\r\n </div>\r\n </div>\r\n\r\n <!-- Quality Status Info -->\r\n <div class=\"row mt-2\" *ngIf=\"workOrderInfo.u_KaliteDurumu\">\r\n <div class=\"col-md-12\">\r\n <div class=\"alert alert-info\" role=\"alert\">\r\n <strong>Kalite Durumu:</strong> {{ workOrderInfo.u_KaliteDurumu }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Receipt History -->\r\n <div class=\"row mt-3\">\r\n <div class=\"col-12\">\r\n <div class=\"fw-semibold mb-1\" style=\"font-size: 13px;\">\r\n \u00DCretimden Giri\u015F Hareketleri\r\n </div>\r\n <dx-data-grid [dataSource]=\"workOrderInfo.receiptHistory\" [showBorders]=\"true\" [columnAutoWidth]=\"true\"\r\n [wordWrapEnabled]=\"false\" [rowAlternationEnabled]=\"true\" [hoverStateEnabled]=\"true\"\r\n [noDataText]=\"'Hen\u00FCz giri\u015F hareketi bulunmamaktad\u0131r.'\" [height]=\"'auto'\">\r\n <dxo-scrolling mode=\"standard\"></dxo-scrolling>\r\n <dxo-paging [enabled]=\"false\"></dxo-paging>\r\n <dxi-column caption=\"#\" name=\"rowNum\" [width]=\"40\" alignment=\"center\" [calculateCellValue]=\"calcRowIndex\"></dxi-column>\r\n <dxi-column dataField=\"docNum\" caption=\"Belge No\" [minWidth]=\"110\" alignment=\"center\"></dxi-column>\r\n <dxi-column dataField=\"batchNum\" caption=\"Parti No\" [minWidth]=\"130\" alignment=\"center\"></dxi-column>\r\n <dxi-column dataField=\"quantity\" caption=\"Miktar\" dataType=\"number\" [minWidth]=\"75\" alignment=\"center\"></dxi-column>\r\n <dxi-column dataField=\"whsName\" caption=\"Depo\" [minWidth]=\"100\" alignment=\"center\"></dxi-column>\r\n <dxi-column dataField=\"docStatus\" caption=\"Durum\" [minWidth]=\"105\" alignment=\"center\"\r\n [calculateCellValue]=\"calcDocStatus\">\r\n </dxi-column>\r\n <dxi-column dataField=\"userCode\" caption=\"Kullan\u0131c\u0131\" [minWidth]=\"80\" alignment=\"center\"></dxi-column>\r\n <dxo-summary>\r\n <dxi-total-item column=\"docNum\" summaryType=\"count\" displayFormat=\"Toplam\"></dxi-total-item>\r\n <dxi-total-item column=\"quantity\" summaryType=\"sum\" displayFormat=\"{0}\" [valueFormat]=\"formatNumber\"></dxi-total-item>\r\n </dxo-summary>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>", styles: [".page-title{margin:0;padding:0}\n"] }]
2338
+ args: [{ selector: 'lib-hit-filling-receipt-from-production', template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row\">\r\n <h3 class=\"page-title\">\r\n \u00DCretimden Giri\u015F\r\n </h3>\r\n </div>\r\n <div class=\"row text-lg-end pt-2\">\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-success btn-sm\" type=\"button\" (click)=\"save()\" [disabled]=\"isSaveButtonDisabled\">\r\n <i class=\"fa fa-check me-1\"></i>\r\n \u00DCretimden Giri\u015F Yap\r\n </button>\r\n </div>\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-warning btn-sm\" type=\"button\" (click)=\"clearAll()\" [disabled]=\"isSaving\">\n <i class=\"fa fa-broom me-1\"></i>\r\n Temizle\r\n </button>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <div class=\"card mt-2\">\r\n <div class=\"card-body\" style=\"height: calc(100vh - 241px); overflow: auto;\">\r\n <div *ngIf=\"isSaving\" class=\"alert alert-warning\" role=\"status\" aria-live=\"polite\">\r\n <div>{{ operationStatusMessage }}</div>\r\n <div class=\"mt-1\">\u0130\u015Flem anahtar\u0131: {{ pendingOperationId }}</div>\r\n <button class=\"btn btn-outline-secondary btn-sm mt-2\" type=\"button\" (click)=\"refreshOperationStatus()\"\r\n [disabled]=\"isLoading || isCheckingOperationStatus\">\r\n Sonucu Tekrar Kontrol Et\r\n </button>\r\n </div>\r\n <!-- Work Order Input -->\r\n <div style=\"display: flex; align-items: center;\">\r\n <dx-number-box #isEmriNoRef class=\"me-1\" style=\"width:100%;\" label=\"\u0130\u015F Emri No\" [(value)]=\"isEmriNo\"\r\n (onChange)=\"getProductionOrder()\" (onEnterKey)=\"getProductionOrder()\" [disabled]=\"isWorkOrderLoaded || isSaving\">\n </dx-number-box>\r\n <dx-button style=\"margin-top: 7.5px;\" icon=\"search\" type=\"default\" (onClick)=\"getProductionOrder()\"\r\n [disabled]=\"isWorkOrderLoaded || isSaving\">\n </dx-button>\r\n </div>\r\n\r\n <!-- Work Order Information -->\r\n <div class=\"mt-3\" *ngIf=\"isWorkOrderLoaded && workOrderInfo\">\r\n <!-- Product Info -->\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <dx-text-box label=\"\u00DCr\u00FCn Kodu\" [(value)]=\"workOrderInfo.itemCode\" [disabled]=\"true\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <dx-text-box label=\"\u00DCr\u00FCn Ad\u0131\" [(value)]=\"workOrderInfo.itemName\" [disabled]=\"true\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mt-2\">\r\n <div class=\"col-md-3\">\r\n <dx-number-box \r\n label=\"Planlanan Miktar\" \r\n [(value)]=\"workOrderInfo.plannedQty\" \r\n [disabled]=\"true\">\r\n </dx-number-box>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <dx-number-box \r\n label=\"Tamamlanan Miktar\" \r\n [(value)]=\"workOrderInfo.cmpltQty\" \r\n [disabled]=\"true\">\r\n </dx-number-box>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <dx-text-box \r\n label=\"Depo\" \r\n [(value)]=\"workOrderInfo.warehouse\" \r\n [disabled]=\"true\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <dx-text-box \r\n label=\"Ambalaj Lot\" \r\n [(value)]=\"workOrderInfo.u_TRKAMBALAJLOT\" \r\n [disabled]=\"true\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n\r\n <!-- Pallet Type Selection -->\r\n <div class=\"row mt-3\">\r\n <div class=\"col-md-12\">\r\n <dx-radio-group #paletTipiRef [items]=\"paletTipleri\" layout=\"horizontal\" [(value)]=\"paletTipi\"\r\n (onValueChanged)=\"onPaletTipiChange()\" [disabled]=\"isSaving\">\r\n </dx-radio-group>\r\n </div>\r\n </div>\r\n\r\n <!-- Koli Count for KISMI Pallet -->\r\n <div class=\"row mt-2\" *ngIf=\"paletTipi === 'KISMI'\">\r\n <div class=\"col-md-6\">\r\n <dx-number-box #koliAdetRef label=\"Koli Adedi\" [(value)]=\"koliAdet\" (onValueChanged)=\"onKoliAdetChange()\"\r\n [min]=\"1\" [disabled]=\"isSaving\">\r\n </dx-number-box>\r\n </div>\r\n </div>\r\n\r\n <!-- Calculated Total Quantity -->\r\n <div class=\"row mt-2\">\r\n <div class=\"col-md-4\">\r\n <dx-number-box label=\"Toplam Miktar (Adet)\" [(value)]=\"toplamMiktar\" [disabled]=\"true\"\r\n [stylingMode]=\"'filled'\">\r\n </dx-number-box>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <dx-number-box label=\"Koli \u0130\u00E7i Adet\" [(value)]=\"workOrderInfo.salPackUn\" [disabled]=\"true\">\r\n </dx-number-box>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <dx-number-box label=\"Girilebilecek Kalan Miktar\" [(value)]=\"workOrderInfo.remainingAllowedQty\"\r\n [disabled]=\"true\">\r\n </dx-number-box>\r\n </div>\r\n </div>\r\n\r\n <!-- Quality Status Info -->\r\n <div class=\"row mt-2\" *ngIf=\"workOrderInfo.u_KaliteDurumu\">\r\n <div class=\"col-md-12\">\r\n <div class=\"alert alert-info\" role=\"alert\">\r\n <strong>Kalite Durumu:</strong> {{ workOrderInfo.u_KaliteDurumu }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Receipt History -->\r\n <div class=\"row mt-3\">\r\n <div class=\"col-12\">\r\n <div class=\"fw-semibold mb-1\" style=\"font-size: 13px;\">\r\n \u00DCretimden Giri\u015F Hareketleri\r\n </div>\r\n <dx-data-grid [dataSource]=\"workOrderInfo.receiptHistory\" [showBorders]=\"true\" [columnAutoWidth]=\"true\"\r\n [wordWrapEnabled]=\"false\" [rowAlternationEnabled]=\"true\" [hoverStateEnabled]=\"true\"\r\n [noDataText]=\"'Hen\u00FCz giri\u015F hareketi bulunmamaktad\u0131r.'\" [height]=\"'auto'\">\r\n <dxo-scrolling mode=\"standard\"></dxo-scrolling>\r\n <dxo-paging [enabled]=\"false\"></dxo-paging>\r\n <dxi-column caption=\"#\" name=\"rowNum\" [width]=\"40\" alignment=\"center\" [calculateCellValue]=\"calcRowIndex\"></dxi-column>\r\n <dxi-column dataField=\"docNum\" caption=\"Belge No\" [minWidth]=\"110\" alignment=\"center\"></dxi-column>\r\n <dxi-column dataField=\"batchNum\" caption=\"Parti No\" [minWidth]=\"130\" alignment=\"center\"></dxi-column>\r\n <dxi-column dataField=\"quantity\" caption=\"Miktar\" dataType=\"number\" [minWidth]=\"75\" alignment=\"center\"></dxi-column>\r\n <dxi-column dataField=\"whsName\" caption=\"Depo\" [minWidth]=\"100\" alignment=\"center\"></dxi-column>\r\n <dxi-column dataField=\"docStatus\" caption=\"Durum\" [minWidth]=\"105\" alignment=\"center\"\r\n [calculateCellValue]=\"calcDocStatus\">\r\n </dxi-column>\r\n <dxi-column dataField=\"userCode\" caption=\"Kullan\u0131c\u0131\" [minWidth]=\"80\" alignment=\"center\"></dxi-column>\r\n <dxo-summary>\r\n <dxi-total-item column=\"docNum\" summaryType=\"count\" displayFormat=\"Toplam\"></dxi-total-item>\r\n <dxi-total-item column=\"quantity\" summaryType=\"sum\" displayFormat=\"{0}\" [valueFormat]=\"formatNumber\"></dxi-total-item>\r\n </dxo-summary>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\n", styles: [".page-title{margin:0;padding:0}\n"] }]
2178
2339
  }], ctorParameters: function () { return [{ type: HitFillingReceiptFromProductionService }, { type: i3.ConfirmationService }, { type: i0.NgZone }]; }, propDecorators: { nmbBoxIsEmriNo: [{
2179
2340
  type: ViewChild,
2180
2341
  args: ['isEmriNoRef', { static: false }]