@hitsoft/kadooglu.kalite 1.0.1 → 1.0.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"hitsoft-kadooglu.kalite.mjs","sources":["../../../projects/kalite/src/lib/services/kalite.service.ts","../../../projects/kalite/src/lib/components/kalite.component.ts","../../../projects/kalite/src/lib/services/quality-measurements.ts","../../../projects/kalite/src/lib/services/quality-api.service.ts","../../../projects/kalite/src/lib/components/process-analysis.component.ts","../../../projects/kalite/src/lib/components/process-analysis.component.html","../../../projects/kalite/src/lib/components/quality-parameters.component.ts","../../../projects/kalite/src/lib/components/quality-parameters.component.html","../../../projects/kalite/src/lib/components/intake-list.component.ts","../../../projects/kalite/src/lib/components/intake-grid.component.html","../../../projects/kalite/src/lib/services/print-form.ts","../../../projects/kalite/src/lib/components/intake-form.component.ts","../../../projects/kalite/src/lib/components/intake-form.component.html","../../../projects/kalite/src/lib/components/quality-definitions.component.ts","../../../projects/kalite/src/lib/components/quality-definitions.component.html","../../../projects/kalite/src/lib/components/quality-reports.component.ts","../../../projects/kalite/src/lib/components/quality-reports.component.html","../../../projects/kalite/src/lib/components/quality-notifications.component.ts","../../../projects/kalite/src/lib/kalite-routing.module.ts","../../../projects/kalite/src/lib/kalite-notification.module.ts","../../../projects/kalite/src/lib/kalite.module.ts","../../../projects/kalite/src/public-api.ts","../../../projects/kalite/src/hitsoft-kadooglu.kalite.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { RestService } from '@abp/ng.core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class KaliteService {\n apiName = 'Kalite';\n\n constructor(private restService: RestService) {}\n\n sample() {\n return this.restService.request<void, any>(\n { method: 'GET', url: '/api/Kalite/sample' },\n { apiName: this.apiName }\n );\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { KaliteService } from '../services/kalite.service';\n\n@Component({\n selector: 'lib-kalite',\n template: ` <p>kalite works!</p> `,\n styles: [],\n})\nexport class KaliteComponent implements OnInit {\n constructor(private service: KaliteService) {}\n\n ngOnInit(): void {\n this.service.sample().subscribe(console.log);\n }\n}\n","import { QualityLimit, QualityMeasurement, QualityParameter } from '../models/quality.models';\n\nexport function applicableLimit(limits: QualityLimit[], code: string, date: string, oilType = '', origin = ''): QualityLimit | undefined {\n return limits.filter(l => l.active && l.parameterCode === code && (!l.oilType || l.oilType === oilType) &&\n (!l.origin || l.origin === origin) && (!l.validFrom || l.validFrom.slice(0, 10) <= date) &&\n (!l.validUntil || l.validUntil.slice(0, 10) >= date))\n .sort((a, b) => Number(!!b.oilType) + Number(!!b.origin) - Number(!!a.oilType) - Number(!!a.origin) ||\n (b.validFrom || '').localeCompare(a.validFrom || ''))[0];\n}\n\n// A small arithmetic parser; formulas are never executed as JavaScript.\nexport function evaluateFormula(formula: string, resolve: (code: string) => number | null): number | null {\n let pos = 0;\n const space = () => { while (/\\s/.test(formula[pos] || '') && pos < formula.length) pos++; };\n const take = (ch: string) => { space(); if (formula[pos] !== ch) return false; pos++; return true; };\n const binary = (a: number | null, b: number | null, op: string): number | null => {\n if (a == null || b == null) return null;\n if (op === '/' && b === 0) throw new Error('Formülde sıfıra bölme var.');\n return op === '+' ? a + b : op === '-' ? a - b : op === '*' ? a * b : a / b;\n };\n const factor = (): number | null => {\n space();\n if (take('-')) { const value = factor(); return value == null ? null : -value; }\n if (take('(')) { const value = expression(); if (!take(')')) throw new Error('Formül parantezi kapanmamış.'); return value; }\n if (take('[')) { const end = formula.indexOf(']', pos); if (end < 0) throw new Error('Parametre kodu kapanmamış.'); const key = formula.slice(pos, end); pos = end + 1; return resolve(key); }\n const token = formula.slice(pos).match(/^[\\p{L}\\p{N}_.]+/u)?.[0];\n if (!token) throw new Error('Geçersiz hesaplama formülü.');\n pos += token.length;\n return /^\\d+(\\.\\d+)?$/.test(token) ? Number(token) : resolve(token);\n };\n const term = (): number | null => {\n let value = factor();\n while (true) { if (take('*')) value = binary(value, factor(), '*'); else if (take('/')) value = binary(value, factor(), '/'); else return value; }\n };\n const expression = (): number | null => {\n let value = term();\n while (true) { if (take('+')) value = binary(value, term(), '+'); else if (take('-')) value = binary(value, term(), '-'); else return value; }\n };\n const value = expression(); space();\n if (pos !== formula.length || (value != null && !Number.isFinite(value))) throw new Error('Geçersiz hesaplama sonucu.');\n return value;\n}\n\nexport function recalculate(parameters: QualityParameter[], values: QualityMeasurement[], limits: QualityLimit[], date: string, oilType = '', origin = ''): void {\n const visiting = new Set<string>(); const resolved = new Map<string, number | null>();\n const valueFor = (p: QualityParameter): QualityMeasurement => {\n let value = values.find(x => x.parameterCode === p.code);\n if (!value) { value = { parameterCode: p.code, number: null, text: '' }; values.push(value); }\n return value;\n };\n const resolve = (code: string): number | null => {\n if (resolved.has(code)) return resolved.get(code)!;\n const p = parameters.find(x => x.code === code);\n if (!p) throw new Error(`Formülde tanımsız parametre: ${code}`);\n if (visiting.has(code)) throw new Error('Hesaplama formülünde döngü var.');\n visiting.add(code);\n const number = p.calculated ? evaluateFormula(p.formula, resolve) : valueFor(p).number;\n const result = p.calculated && number != null ? Number(number.toFixed(p.decimalPlaces)) : number;\n if (p.calculated) valueFor(p).number = result;\n visiting.delete(code); resolved.set(code, result); return result;\n };\n for (const p of parameters) {\n resolve(p.code);\n const v = valueFor(p); const l = applicableLimit(limits, p.code, date, oilType, origin);\n v.appliedMinimum = l?.minimum; v.appliedMaximum = l?.maximum; v.appliedNominal = l?.nominal; v.appliedExpectedText = l?.expectedText;\n v.outOfLimit = !!l && ((v.number != null && ((l.minimum != null && v.number < l.minimum) ||\n (l.maximum != null && v.number > l.maximum))) || (!!v.text && !!l.expectedText && v.text.trim().toLocaleLowerCase('tr-TR') !== l.expectedText.trim().toLocaleLowerCase('tr-TR')));\n }\n}\n\nexport function download(blob: Blob, name: string): void {\n const url = URL.createObjectURL(blob); const link = document.createElement('a'); link.href = url; link.download = name; link.click();\n setTimeout(() => URL.revokeObjectURL(url), 1000);\n}\nexport function localDate(date = new Date()): string { return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`; }\nexport function errorMessage(error: any): string { return error?.error?.error?.message || error?.error?.message || 'İşlem tamamlanamadı. Bağlantıyı ve alanları kontrol edin.'; }\nexport function statusLabel(status: string): string { return ({ Waiting: 'Kalite Kontrol Bekliyor', Draft: 'Taslak', Accepted: 'Kalite Kontrol Kabul', Rejected: 'Kalite Kontrol Ret', Approved: 'Onaylı', LaborantSigned: 'Laborant İmzalı', Checked: 'Kontrol Edildi' } as Record<string, string>)[status] || status || '—'; }\n","import { Injectable } from '@angular/core';\nimport { RestService } from '@abp/ng.core';\nimport { Observable } from 'rxjs';\nimport { MovementType, MovementDetail, QualityTank, QualityShift, IntakeForm, IntakeInspection,\n CompositeSample, IntakeVehicle, Paged, ReportFilter, QualityReport, QualityNotification, NotificationSettings, QualityLaborant } from '../models/intake.models';\nimport {\n QualityAnalysis, QualityFacility, QualityForm, QualityLimit,\n QualityParameter, QualityStep, QualityTemplate,\n} from '../models/quality.models';\n\n@Injectable({ providedIn: 'root' })\nexport class QualityApiService {\n private readonly apiName = 'Kalite';\n\n constructor(private rest: RestService) {}\n\n movementTypes(): Observable<MovementType[]> { return this.get('/api/kalite/definitions/movement-types'); }\n qualityMovementTypes(): Observable<MovementType[]> { return this.get('/api/kalite/definitions/quality-movement-types'); }\n reportForms(): Observable<QualityForm[]> { return this.get('/api/kalite/definitions/forms'); }\n definitionFacilities(): Observable<QualityFacility[]> { return this.get('/api/kalite/definitions/facilities'); }\n movementDetails(): Observable<MovementDetail[]> { return this.get('/api/kalite/definitions/movement-details'); }\n tanks(): Observable<QualityTank[]> { return this.get('/api/kalite/definitions/tanks'); }\n shifts(): Observable<QualityShift[]> { return this.get('/api/kalite/definitions/shifts'); }\n laborants(): Observable<QualityLaborant[]> { return this.get('/api/kalite/definitions/laborants'); }\n saveDetail(input: MovementDetail, createOnly = false): Observable<void> { return this.put('/api/kalite/definitions/movement-detail?createOnly=' + createOnly, input); }\n deleteDetail(code: string): Observable<void> { return this.delete(`/api/kalite/definitions/movement-detail/${encodeURIComponent(code)}`); }\n saveTank(input: QualityTank, createOnly = false): Observable<void> { return this.put('/api/kalite/definitions/tank?createOnly=' + createOnly, input); }\n deleteTank(code: string): Observable<void> { return this.delete(`/api/kalite/definitions/tank/${encodeURIComponent(code)}`); }\n saveShift(input: QualityShift): Observable<void> { return this.put('/api/kalite/definitions/shift', input); }\n deleteShift(code: string): Observable<void> { return this.delete(`/api/kalite/definitions/shift/${encodeURIComponent(code)}`); }\n intakeList(query: Record<string, unknown>): Observable<Paged<IntakeVehicle>> { return this.get('/api/kalite/intake?' + this.query(query)); }\n intake(id: number, detailCode?: string, batchNumber?: string): Observable<IntakeForm> {\n return this.get(`/api/kalite/intake/${id}?` + this.query({ detailCode, batchNumber }));\n }\n intakeTemplate(code: string): Observable<QualityTemplate> { return this.get(`/api/kalite/intake/template/${encodeURIComponent(code)}`); }\n saveIntake(input: unknown): Observable<IntakeInspection> { return this.put('/api/kalite/intake', input); }\n saveComposite(input: unknown): Observable<CompositeSample> { return this.put('/api/kalite/intake/composite', input); }\n cancelIntake(id: number, revision: number, reason: string): Observable<void> { return this.post(`/api/kalite/intake/${id}/cancel`, { revision, reason }); }\n intakePdf(id: number): Observable<Blob> { return this.blob(`/api/kalite/intake/${id}/pdf`); }\n report(filter: ReportFilter, exportData = false): Observable<QualityReport> {\n return this.get('/api/kalite/reports' + (exportData ? '/export' : '') + '?' + this.query(filter));\n }\n reportPdf(filter: ReportFilter): Observable<Blob> { return this.blob('/api/kalite/reports/pdf?' + this.query(filter)); }\n notifications(): Observable<QualityNotification[]> { return this.get('/api/kalite/notifications'); }\n unreadNotifications(): Observable<number> { return this.get('/api/kalite/notifications/unread-count'); }\n readNotification(code: string): Observable<void> { return this.post(`/api/kalite/notifications/${encodeURIComponent(code)}/read`, {}); }\n notificationSettings(): Observable<NotificationSettings> { return this.get('/api/kalite/notifications/settings'); }\n notificationFailures(): Observable<QualityNotification[]> { return this.get('/api/kalite/notifications/failures'); }\n saveNotificationSettings(input: NotificationSettings): Observable<void> { return this.put('/api/kalite/notifications/settings', input); }\n\n private query(values: object): string {\n return Object.entries(values).filter(([, value]) => value != null && value !== '')\n .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`).join('&');\n }\n private blob(url: string): Observable<Blob> {\n return this.rest.request<void, Blob>({ method: 'GET', url, responseType: 'blob' }, { apiName: this.apiName });\n }\n\n forms(): Observable<QualityForm[]> {\n return this.get('/api/kalite/parameters/forms');\n }\n\n template(code: string): Observable<QualityTemplate> {\n return this.get(`/api/kalite/parameters/template/${encodeURIComponent(code)}`);\n }\n\n parameterFacilities(): Observable<QualityFacility[]> {\n return this.get('/api/kalite/parameters/facilities');\n }\n\n steps(facilityCode: string): Observable<QualityStep[]> {\n return this.get(`/api/kalite/parameters/steps/${encodeURIComponent(facilityCode)}`);\n }\n\n saveStep(step: QualityStep): Observable<void> {\n return this.put('/api/kalite/parameters/step', step);\n }\n\n saveForm(form: QualityForm): Observable<void> {\n return this.put('/api/kalite/parameters/form', form);\n }\n\n createParameter(parameter: QualityParameter): Observable<void> {\n return this.post('/api/kalite/parameters/parameter', parameter);\n }\n\n updateParameter(parameter: QualityParameter): Observable<void> {\n return this.put('/api/kalite/parameters/parameter', parameter);\n }\n\n deleteParameter(code: string): Observable<void> {\n return this.delete(`/api/kalite/parameters/parameter/${encodeURIComponent(code)}`);\n }\n\n createLimit(limit: QualityLimit): Observable<void> {\n return this.post('/api/kalite/parameters/limit', limit);\n }\n\n updateLimit(limit: QualityLimit): Observable<void> {\n return this.put('/api/kalite/parameters/limit', limit);\n }\n\n deleteLimit(code: string): Observable<void> {\n return this.delete(`/api/kalite/parameters/limit/${encodeURIComponent(code)}`);\n }\n\n facilities(): Observable<QualityFacility[]> {\n return this.get('/api/kalite/process/facilities');\n }\n\n process(facilityCode: string, businessDate: string): Observable<QualityAnalysis> {\n return this.get(`/api/kalite/process?facilityCode=${encodeURIComponent(facilityCode)}&businessDate=${encodeURIComponent(businessDate)}`);\n }\n\n saveProcess(input: {\n facilityCode: string; businessDate: string; oilType: string;\n notes: string; revision: number; hours: QualityAnalysis['hours'];\n }): Observable<QualityAnalysis> {\n return this.put('/api/kalite/process', input);\n }\n\n decision(code: string, action: 'sign' | 'check' | 'approve' | 'revoke',\n revision: number, reason: string): Observable<QualityAnalysis> {\n return this.post(`/api/kalite/process/${encodeURIComponent(code)}/${action}`, { revision, reason });\n }\n\n pdf(code: string): Observable<Blob> {\n return this.rest.request<void, Blob>(\n { method: 'GET', url: `/api/kalite/process/${encodeURIComponent(code)}/pdf`, responseType: 'blob' },\n { apiName: this.apiName }\n );\n }\n\n private get<T>(url: string): Observable<T> {\n return this.rest.request<void, T>({ method: 'GET', url }, { apiName: this.apiName });\n }\n\n private post<T>(url: string, body: unknown): Observable<T> {\n return this.rest.request<unknown, T>({ method: 'POST', url, body }, { apiName: this.apiName });\n }\n\n private put<T>(url: string, body: unknown): Observable<T> {\n return this.rest.request<unknown, T>({ method: 'PUT', url, body }, { apiName: this.apiName });\n }\n\n private delete<T>(url: string): Observable<T> {\n return this.rest.request<void, T>({ method: 'DELETE', url }, { apiName: this.apiName });\n }\n}\n","import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';\r\nimport { PermissionService } from '@abp/ng.core';\r\nimport {\r\n QualityAnalysis, QualityFacility, QualityHour, QualityLimit,\r\n QualityMeasurement, QualityParameter, QualityStep,\r\n} from '../models/quality.models';\r\nimport { QualityApiService } from '../services/quality-api.service';\r\nimport { QualityTank } from '../models/intake.models';\r\nimport { applicableLimit, recalculate } from '../services/quality-measurements';\r\n\r\n@Component({\r\n selector: 'lib-process-analysis',\r\n templateUrl: './process-analysis.component.html',\r\n styleUrls: ['./process-analysis.component.scss'],\r\n})\r\nexport class ProcessAnalysisComponent implements OnInit {\r\n tanks: QualityTank[] = [];\r\n facilities: QualityFacility[] = [];\r\n facilityCode = '';\r\n businessDate = this.today();\r\n analysis: QualityAnalysis | null = null;\r\n groups: { step: QualityStep; parameters: QualityParameter[] }[] = [];\r\n parameters: QualityParameter[] = [];\r\n reason = '';\r\n busy = true;\r\n busyText = 'Tesisler yükleniyor…';\r\n error = '';\r\n reasonError = '';\r\n @ViewChild('reasonInput') reasonInput?: ElementRef<HTMLTextAreaElement>;\r\n\r\n constructor(private api: QualityApiService, private permissions: PermissionService) {}\r\n\r\n ngOnInit(): void {\r\n this.api.tanks().subscribe({ next: x => this.tanks = x.filter(t => t.active), error: () => {} });\r\n this.api.facilities().subscribe({\r\n next: facilities => {\r\n this.facilities = facilities;\r\n this.facilityCode = facilities[0]?.code || '';\r\n if (this.facilityCode) this.load();\r\n else this.busy = false;\r\n },\r\n error: () => { this.error = 'Tesisler yüklenemedi.'; this.busy = false; },\r\n });\r\n }\r\n\r\n get editable(): boolean {\r\n return !this.busy && this.analysis?.status === 'Draft' &&\r\n this.permissions.getGrantedPolicy('Kalite.ProcessAnalysis.Create');\r\n }\r\n\r\n get hasOutOfLimit(): boolean {\r\n return this.analysis?.hours.some(h => h.measurements.some(v => v.outOfLimit)) || false;\r\n }\r\n\r\n get statusText(): string {\r\n return ({ Draft: 'Taslak', LaborantSigned: 'Laborant imzaladı',\r\n Checked: 'Mühendis kontrol etti', Approved: 'Onaylı' } as Record<string, string>)[this.analysis?.status || ''] || '';\r\n }\r\n\r\n allowed(permission: string): boolean {\r\n return this.permissions.getGrantedPolicy(`Kalite.ProcessAnalysis.${permission}`);\r\n }\r\n\r\n load(): void {\r\n if (!this.facilityCode || !this.businessDate) return;\r\n this.busy = true;\r\n this.busyText = 'Analiz verileri yükleniyor…';\r\n this.error = '';\r\n this.api.process(this.facilityCode, this.businessDate).subscribe({\r\n next: analysis => {\r\n this.applyAnalysis(analysis);\r\n this.busy = false;\r\n },\r\n error: () => { this.error = 'Analiz formu yüklenemedi.'; this.busy = false; },\r\n });\r\n }\r\n\r\n private applyAnalysis(analysis: QualityAnalysis): void {\r\n this.analysis = analysis;\r\n const template = analysis.templateSnapshot;\r\n this.groups = [...template.steps].sort((a, b) => a.order - b.order).map(step => ({\r\n step,\r\n parameters: template.parameters.filter(p => p.active && p.stepCode === step.processCode)\r\n .sort((a, b) => a.order - b.order),\r\n }));\r\n this.parameters = ([] as QualityParameter[]).concat(...this.groups.map(group => group.parameters));\r\n for (const hour of analysis.hours) {\r\n hour.measurements ||= [];\r\n for (const parameter of this.parameters) {\r\n if (!hour.measurements.some(v => v.parameterCode === parameter.code)) {\r\n hour.measurements.push({ parameterCode: parameter.code, number: null, text: '', outOfLimit: false });\r\n }\r\n }\r\n }\r\n }\r\n\r\n measurement(row: QualityHour, parameter: QualityParameter): QualityMeasurement {\r\n return row.measurements.find(v => v.parameterCode === parameter.code)!;\r\n }\r\n\r\n limit(parameter: QualityParameter): QualityLimit | undefined {\r\n return applicableLimit(this.analysis?.templateSnapshot.limits || [], parameter.code, this.businessDate, this.analysis?.oilType || '');\r\n }\r\n\r\n limitLabel(parameter: QualityParameter): string {\r\n const limit = this.limit(parameter);\r\n if (!limit) return '—';\r\n if (limit.expectedText) return limit.expectedText;\r\n if (limit.minimum != null && limit.maximum != null) return `${limit.minimum}–${limit.maximum}`;\r\n if (limit.minimum != null) return `≥ ${limit.minimum}`;\r\n if (limit.maximum != null) return `≤ ${limit.maximum}`;\r\n return '—';\r\n }\r\n\r\n changed(row: QualityHour, parameter: QualityParameter): void {\r\n try { recalculate(this.parameters, row.measurements, this.analysis?.templateSnapshot.limits || [], this.businessDate, this.analysis?.oilType || ''); }\r\n catch (e) { this.error = e instanceof Error ? e.message : 'Hesaplama yapılamadı.'; }\r\n const value = this.measurement(row, parameter);\r\n const limit = this.limit(parameter);\r\n value.outOfLimit = !!limit && (\r\n (value.number != null &&\r\n ((limit.minimum != null && value.number < limit.minimum) ||\r\n (limit.maximum != null && value.number > limit.maximum))) ||\r\n (!!value.text && !!limit.expectedText &&\r\n value.text.trim().toLocaleLowerCase('tr-TR') !== limit.expectedText.trim().toLocaleLowerCase('tr-TR'))\r\n );\r\n }\r\n\r\n oilTypeChanged(): void {\r\n for (const row of this.analysis?.hours || [])\r\n for (const parameter of this.parameters)\r\n this.changed(row, parameter);\r\n }\r\n\r\n average(parameter: QualityParameter): string {\r\n const values = this.analysis?.hours.map(h => this.measurement(h, parameter).number)\r\n .filter((v): v is number => v != null) || [];\r\n if (!values.length) return '—';\r\n return (values.reduce((a, b) => a + b, 0) / values.length).toFixed(parameter.decimalPlaces);\r\n }\r\n\r\n save(): void {\r\n if (!this.analysis || !this.editable) return;\r\n this.busy = true;\r\n this.busyText = 'Form kaydediliyor…';\r\n this.error = '';\r\n const input = {\r\n facilityCode: this.analysis.facilityCode,\r\n businessDate: this.businessDate,\r\n oilType: this.analysis.oilType,\r\n notes: this.analysis.notes,\r\n revision: this.analysis.revision,\r\n hours: this.analysis.hours,\r\n };\r\n this.api.saveProcess(input).subscribe({\r\n next: analysis => { this.applyAnalysis(analysis); this.busy = false; },\r\n error: () => { this.error = 'Form kaydedilemedi. Alanları ve bağlantıyı kontrol edin.'; this.busy = false; },\r\n });\r\n }\r\n\r\n decision(action: 'sign' | 'check' | 'approve' | 'revoke'): void {\r\n if (!this.analysis || !this.analysis.revision) return;\r\n if ((action === 'revoke' || (action === 'approve' && this.hasOutOfLimit)) && !this.reason.trim()) {\r\n this.reasonError = 'Bu işlem için gerekçe girin.';\r\n setTimeout(() => this.reasonInput?.nativeElement.focus());\r\n return;\r\n }\r\n this.busy = true;\r\n this.busyText = 'İşlem tamamlanıyor…';\r\n this.error = '';\r\n this.reasonError = '';\r\n this.api.decision(this.analysis.code, action, this.analysis.revision, this.reason).subscribe({\r\n next: analysis => { this.reason = ''; this.applyAnalysis(analysis); this.busy = false; },\r\n error: () => { this.error = 'İşlem tamamlanamadı. Formun son durumunu kontrol edin.'; this.busy = false; },\r\n });\r\n }\r\n\r\n downloadPdf(): void {\r\n if (!this.analysis?.revision) return;\r\n this.api.pdf(this.analysis.code).subscribe({\r\n next: blob => {\r\n const url = URL.createObjectURL(blob);\r\n const anchor = document.createElement('a');\r\n anchor.href = url;\r\n anchor.download = `${this.analysis?.formSnapshot.documentCode}-${this.analysis?.code}.pdf`;\r\n anchor.click();\r\n setTimeout(() => URL.revokeObjectURL(url), 1000);\r\n },\r\n error: () => this.error = 'PDF oluşturulamadı.',\r\n });\r\n }\r\n\r\n private today(): string {\r\n const date = new Date();\r\n return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;\r\n }\r\n}\r\n","<div class=\"container-fluid\">\r\n <div class=\"mb-2\">\r\n <h3 class=\"page-title\">Rafineri Proses Analiz Kontrol</h3>\r\n </div>\r\n\r\n <div class=\"card mt-2\"><div class=\"card-body\">\r\n <div class=\"row align-items-end mb-3\">\r\n <div class=\"col-md-3\">\r\n <label for=\"facility\">Tesis</label>\r\n <select id=\"facility\" class=\"form-control\" [disabled]=\"busy\" [(ngModel)]=\"facilityCode\" (change)=\"load()\">\r\n <option *ngFor=\"let facility of facilities\" [value]=\"facility.code\">{{ facility.name }}</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <label for=\"businessDate\">İş günü</label>\r\n <input id=\"businessDate\" type=\"date\" class=\"form-control\" [disabled]=\"busy\" [(ngModel)]=\"businessDate\" (change)=\"load()\" />\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"analysis?.facilityCode === 'DEO3'\">\r\n <label for=\"oilType\">Üretilen yağ cinsi</label>\r\n <select id=\"oilType\" class=\"form-control\" [(ngModel)]=\"analysis!.oilType\" (change)=\"oilTypeChanged()\" [disabled]=\"!editable\">\r\n <option value=\"\">Seçiniz</option><option value=\"Palm Oil\">Palm Oil</option>\r\n <option value=\"Palm Olein\">Palm Olein</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-3 text-md-right mt-2 mt-md-0\">\r\n <span *ngIf=\"analysis\" class=\"badge badge-info mr-2\" style=\"margin-right: 6px;\">{{ statusText }}</span>\r\n <button class=\"btn btn-outline-primary\" (click)=\"downloadPdf()\" [disabled]=\"!analysis?.revision || busy\"\r\n *ngIf=\"allowed('Print')\">Formu Yazdır (PDF)</button>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"error\" class=\"alert alert-danger\" role=\"alert\">{{ error }}</div>\r\n <div class=\"quality-grid-loading\" *ngIf=\"busy\" role=\"status\" aria-live=\"polite\" aria-busy=\"true\">\r\n <span class=\"spinner-border text-primary\" aria-hidden=\"true\"></span>\r\n <span>{{ busyText }}</span>\r\n </div>\r\n <ng-container *ngIf=\"analysis\">\r\n <div class=\"small text-muted mb-2\">{{ analysis.formSnapshot.name }} · {{ analysis.formSnapshot.documentCode }} · Revizyon {{ analysis.formSnapshot.revisionNumber }}</div>\r\n <div class=\"quality-grid-scroll\" [hidden]=\"busy\">\r\n <table class=\"table table-bordered table-sm quality-grid\">\r\n <thead>\r\n <tr class=\"text-center bg-light\">\r\n <th rowspan=\"3\" class=\"sticky-hour\">Saat</th><th rowspan=\"3\">Vardiya / Laborant</th>\r\n <th rowspan=\"3\">Alınan Tank No</th>\r\n <th *ngFor=\"let group of groups\" [attr.colspan]=\"group.parameters.length\">{{ group.step.name }}</th>\r\n <th rowspan=\"3\">Aktarılan Tank No</th>\r\n </tr>\r\n <tr class=\"text-center bg-light\">\r\n <ng-container *ngFor=\"let group of groups\">\r\n <th *ngFor=\"let parameter of group.parameters\">{{ parameter.name }}<small *ngIf=\"parameter.unit\"> ({{ parameter.unit }})</small></th>\r\n </ng-container>\r\n </tr>\r\n <tr class=\"text-center limit-row\">\r\n <ng-container *ngFor=\"let group of groups\">\r\n <th *ngFor=\"let parameter of group.parameters\">{{ limitLabel(parameter) }}</th>\r\n </ng-container>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of analysis.hours\">\r\n <th class=\"sticky-hour\">{{ row.hour | number:'2.0-0' }}:00</th><td><small>{{row.shiftCode}}</small><input class=\"form-control form-control-sm\" [(ngModel)]=\"row.analyst\" [disabled]=\"!editable\" aria-label=\"Vardiya laborantı\" /></td>\r\n <td><input class=\"form-control form-control-sm tank-input\" list=\"qualityTanks\" [(ngModel)]=\"row.intakeTank\" [disabled]=\"!editable\" aria-label=\"Alınan tank\" /></td>\r\n <ng-container *ngFor=\"let group of groups\">\r\n <td *ngFor=\"let parameter of group.parameters\" [class.out-of-limit]=\"measurement(row, parameter).outOfLimit\">\r\n <input *ngIf=\"parameter.valueType === 'Number' || parameter.calculated\" type=\"number\"\r\n class=\"form-control form-control-sm value-input\" [attr.step]=\"'any'\"\r\n [(ngModel)]=\"measurement(row, parameter).number\" (ngModelChange)=\"changed(row, parameter)\"\r\n [disabled]=\"!editable || parameter.calculated\" [attr.aria-label]=\"parameter.name\" />\r\n <select *ngIf=\"parameter.valueType === 'Choice' && !parameter.calculated\" class=\"form-control form-control-sm value-input\"\r\n [(ngModel)]=\"measurement(row, parameter).text\" (change)=\"changed(row, parameter)\" [disabled]=\"!editable\">\r\n <option value=\"\"></option><option *ngFor=\"let option of parameter.options\" [value]=\"option\">{{ option }}</option>\r\n </select>\r\n <input *ngIf=\"parameter.valueType === 'Text' && !parameter.calculated\" class=\"form-control form-control-sm value-input\"\r\n [(ngModel)]=\"measurement(row, parameter).text\" (ngModelChange)=\"changed(row, parameter)\" [disabled]=\"!editable\"\r\n [attr.aria-label]=\"parameter.name\" />\r\n </td>\r\n </ng-container>\r\n <td><input class=\"form-control form-control-sm tank-input\" list=\"qualityTanks\" [(ngModel)]=\"row.outputTank\" [disabled]=\"!editable\" aria-label=\"Aktarılan tank\" /></td>\r\n </tr>\r\n <tr class=\"average-row\">\r\n <th colspan=\"3\">ORTALAMA</th>\r\n <ng-container *ngFor=\"let group of groups\">\r\n <td *ngFor=\"let parameter of group.parameters\">{{ parameter.valueType === 'Number' ? average(parameter) : '—' }}</td>\r\n </ng-container>\r\n <td></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div class=\"row mt-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"notes\">{{ analysis.formSnapshot.code === 'FR52' ? 'Açıklama / Bilgi' : 'Notlar' }}</label>\r\n <textarea id=\"notes\" class=\"form-control\" rows=\"3\" [(ngModel)]=\"analysis.notes\" [disabled]=\"!editable\"></textarea>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"reason\">Onay / geri alma gerekçesi</label>\r\n <textarea #reasonInput id=\"reason\" class=\"form-control\" rows=\"3\" [(ngModel)]=\"reason\" (ngModelChange)=\"reasonError = ''\"\r\n [class.is-invalid]=\"reasonError\" [attr.aria-invalid]=\"!!reasonError\"\r\n [disabled]=\"busy || analysis.status === 'LaborantSigned'\"></textarea>\r\n <div *ngIf=\"reasonError\" class=\"invalid-feedback d-block\" role=\"alert\">{{ reasonError }}</div>\r\n </div>\r\n </div>\r\n <div class=\"mt-3 d-flex flex-wrap align-items-center gap-2\">\r\n <button class=\"btn btn-primary mr-2 mb-2\" (click)=\"save()\" [disabled]=\"!editable || busy\">Kaydet</button>\r\n <button class=\"btn btn-outline-primary mr-2 mb-2\" *ngIf=\"analysis.status === 'Draft' && allowed('Sign')\"\r\n (click)=\"decision('sign')\" [disabled]=\"!analysis.revision || busy\">Laborant Olarak İmzala</button>\r\n <button class=\"btn btn-outline-primary mr-2 mb-2\" *ngIf=\"analysis.status === 'LaborantSigned' && allowed('Check')\"\r\n (click)=\"decision('check')\" [disabled]=\"busy\">Mühendis Kontrolü</button>\r\n <button class=\"btn btn-success mr-2 mb-2\" *ngIf=\"analysis.status === 'Checked' && allowed('Approve')\"\r\n (click)=\"decision('approve')\" [disabled]=\"busy\">Son Onay</button>\r\n <button class=\"btn btn-outline-danger mr-2 mb-2\" *ngIf=\"analysis.status === 'Approved' && allowed('Revoke')\"\r\n (click)=\"decision('revoke')\" [disabled]=\"busy\">Onayı Geri Al</button>\r\n <span *ngIf=\"hasOutOfLimit\" class=\"text-danger mb-2\">Limit dışı ölçüm var. Son onay için gerekçe gerekli.</span>\r\n </div>\r\n <div class=\"mt-3 small text-muted\">\r\n <span>Laborant: {{ analysis.laborant?.userName || '—' }}</span> ·\r\n <span>Mühendis: {{ analysis.engineer?.userName || '—' }}</span> ·\r\n <span>Onaylayan: {{ analysis.approver?.userName || '—' }}</span>\r\n </div>\r\n <details class=\"mt-3\" *ngIf=\"analysis.history?.length\">\r\n <summary>İşlem geçmişi</summary>\r\n <ul class=\"mt-2\"><li *ngFor=\"let event of analysis.history\">{{ event.action }} · {{ event.userName }} · {{ event.occurredAt | date:'dd.MM.yyyy HH:mm' }}<span *ngIf=\"event.reason\"> · {{ event.reason }}</span></li></ul>\r\n </details>\r\n </ng-container>\r\n </div></div>\r\n</div>\r\n\r\n<datalist id=\"qualityTanks\"><option *ngFor=\"let tank of tanks\" [value]=\"tank.code\">{{tank.name}}</option></datalist>\r\n","import { ChangeDetectorRef, Component, ElementRef, OnInit, ViewChild } from '@angular/core';\r\nimport { Observable, defer } from 'rxjs';\r\nimport { finalize } from 'rxjs/operators';\r\nimport { PermissionService } from '@abp/ng.core';\r\nimport { QualityFacility, QualityForm, QualityLimit, QualityParameter, QualityStep, QualityTemplate } from '../models/quality.models';\r\nimport { QualityApiService } from '../services/quality-api.service';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { MovementDetail, MovementType } from '../models/intake.models';\r\nimport { errorMessage, localDate } from '../services/quality-measurements';\r\n\r\n@Component({\r\n selector: 'lib-quality-parameters',\r\n templateUrl: './quality-parameters.component.html',\r\n styleUrls: ['./quality-parameters.component.scss'],\r\n})\r\nexport class QualityParametersComponent implements OnInit {\r\n controlType: 'Input' | 'Process' = 'Process';\r\n movementTypes: MovementType[] = [];\r\n movementDetails: MovementDetail[] = [];\r\n movementTypeCode = '';\r\n movementDetailCode = '';\r\n newInputForm = false;\r\n @ViewChild('stepEditor') private stepEditor?: ElementRef<HTMLElement>;\r\n\r\n forms: QualityForm[] = [];\r\n facilities: QualityFacility[] = [];\r\n facilityCode = '';\r\n facilitySteps: QualityStep[] = [];\r\n editingStep: QualityStep | null = null;\r\n newStep = false;\r\n formCode = '';\r\n template: QualityTemplate | null = null;\r\n editingParameter: QualityParameter | null = null;\r\n editingLimit: QualityLimit | null = null;\r\n newParameter = false;\r\n newLimit = false;\r\n parameterModalVisible = false;\r\n limitModalVisible = false;\r\n modalError = '';\r\n readonly editorModalOptions = { size: 'xl' as const, centered: true };\r\n optionsText = '';\r\n private pendingRequests = 0;\r\n busyText = 'Kalite tanımları yükleniyor…';\r\n\r\n get busy(): boolean { return this.pendingRequests > 0; }\r\n error = '';\r\n success = '';\r\n\r\n constructor(\r\n private api: QualityApiService,\r\n private permissions: PermissionService,\r\n private changeDetector: ChangeDetectorRef,\r\n private route: ActivatedRoute,\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n if (this.route.snapshot.queryParamMap.get('type') === 'Input') this.controlType = 'Input';\r\n this.movementDetailCode = this.route.snapshot.queryParamMap.get('detail') || '';\r\n this.api.qualityMovementTypes().subscribe({ next: x => this.movementTypes = x, error: e => this.error = errorMessage(e) });\r\n this.api.movementDetails().subscribe({ next: x => {\r\n this.movementDetails = x.filter(d => d.active);\r\n this.movementTypeCode = x.find(d => d.code === this.movementDetailCode)?.movementTypeCode || '';\r\n if (this.controlType === 'Input') this.selectInput();\r\n }, error: e => this.error = errorMessage(e) });\r\n this.track(this.api.parameterFacilities(), 'Kalite tanımları yükleniyor…').subscribe({\r\n next: facilities => { this.facilities = facilities; this.selectFacility(); if (this.facilityCode) this.loadSteps(); },\r\n error: () => this.error = 'Tesis listesi yüklenemedi.',\r\n });\r\n this.track(this.api.forms(), 'Kalite tanımları yükleniyor…').subscribe({\r\n next: forms => { this.forms = forms; this.switchType(this.controlType); },\r\n error: () => this.error = 'Form listesi yüklenemedi.',\r\n });\r\n }\r\n\r\n get canEdit(): boolean { return this.permissions.getGrantedPolicy('Kalite.Parameters.Edit'); }\r\n get canCreate(): boolean { return this.permissions.getGrantedPolicy('Kalite.Parameters.Create'); }\r\n get canDelete(): boolean { return this.permissions.getGrantedPolicy('Kalite.Parameters.Delete'); }\r\n\r\n get visibleForms(): QualityForm[] { return this.forms.filter(f => (f.controlType || 'Process') === this.controlType); }\r\n get visibleDetails(): MovementDetail[] { return this.movementDetails.filter(d => !this.movementTypeCode || d.movementTypeCode === this.movementTypeCode); }\r\n switchType(type: 'Input' | 'Process'): void {\r\n this.controlType = type; this.editingStep = null; this.facilitySteps = []; this.template = null;\r\n if (type === 'Input') this.selectInput();\r\n else { this.formCode = this.visibleForms[0]?.code || ''; this.newInputForm = false; this.load(); }\r\n }\r\n selectInput(): void {\r\n if (!this.visibleDetails.some(d => d.code === this.movementDetailCode)) this.movementDetailCode = this.visibleDetails[0]?.code || '';\r\n const form = this.visibleForms.find(f => f.movementDetailCode === this.movementDetailCode);\r\n if (form) { this.formCode = form.code; this.newInputForm = false; this.load(); return; }\r\n const detail = this.movementDetails.find(d => d.code === this.movementDetailCode);\r\n this.newInputForm = !!detail; this.formCode = detail ? 'IN_' + detail.code : '';\r\n this.template = detail ? { form: { code: this.formCode, controlType: 'Input', movementDetailCode: detail.code,\r\n averageMode: 'Arithmetic', name: detail.name || this.movementTypes.find(t => t.code === detail.movementTypeCode)?.name || '',\r\n documentCode: '', publicationDate: localDate(), revisionDate: localDate(), revisionNumber: '1', active: true },\r\n parameters: [], limits: [], steps: [] } : null;\r\n }\r\n\r\n load(): void {\r\n if (!this.formCode) return;\r\n if (this.controlType === 'Process') { this.selectFacility(); if (this.facilityCode) this.loadSteps(); }\r\n this.error = '';\r\n this.track(this.api.template(this.formCode), 'Kalite tanımları yükleniyor…').subscribe({\r\n next: template => {\r\n template.form.publicationDate = template.form.publicationDate?.slice(0, 10);\r\n template.form.revisionDate = template.form.revisionDate?.slice(0, 10);\r\n this.template = template;\r\n this.editingParameter = null;\r\n this.editingLimit = null;\r\n },\r\n error: () => { this.error = 'Form tanımı yüklenemedi.'; },\r\n });\r\n }\r\n\r\n private revealStepEditor(): void {\r\n this.changeDetector.detectChanges();\r\n this.stepEditor?.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n this.stepEditor?.nativeElement.focus({ preventScroll: true });\r\n }\r\n\r\n parameterModalChanged(visible: boolean): void {\r\n this.parameterModalVisible = visible;\r\n if (!visible) { this.editingParameter = null; this.modalError = ''; }\r\n }\r\n\r\n limitModalChanged(visible: boolean): void {\r\n this.limitModalVisible = visible;\r\n if (!visible) { this.editingLimit = null; this.modalError = ''; }\r\n }\r\n\r\n closeParameterModal(): void {\r\n if (!this.busy) this.parameterModalChanged(false);\r\n }\r\n\r\n closeLimitModal(): void {\r\n if (!this.busy) this.limitModalChanged(false);\r\n }\r\n\r\n private track<T>(request: Observable<T>, message: string): Observable<T> {\r\n return defer(() => {\r\n this.pendingRequests++;\r\n this.busyText = message;\r\n return request.pipe(finalize(() => this.pendingRequests--));\r\n });\r\n }\r\n\r\n processName(code: string): string {\r\n return this.template?.steps.find(step => step.processCode === code)?.name || code;\r\n }\r\n\r\n steps(): QualityStep[] {\r\n return this.facilitySteps.filter(x => x.active);\r\n }\r\n\r\n matchingFacilities(): QualityFacility[] {\r\n return this.facilities.filter(x => x.formCode === this.formCode);\r\n }\r\n\r\n selectFacility(): void {\r\n if (!this.matchingFacilities().some(x => x.code === this.facilityCode))\r\n this.facilityCode = this.matchingFacilities()[0]?.code || '';\r\n }\r\n\r\n loadSteps(): void {\r\n if (!this.facilityCode) return;\r\n this.track(this.api.steps(this.facilityCode), 'Kalite tanımları yükleniyor…').subscribe({\r\n next: steps => this.facilitySteps = steps,\r\n error: () => this.error = 'Proses adımları yüklenemedi.',\r\n });\r\n }\r\n\r\n addStep(): void {\r\n this.newStep = true;\r\n this.editingStep = { code: '', facilityCode: this.facilityCode, processCode: '',\r\n name: '', order: this.facilitySteps.length + 1, active: true };\r\n this.revealStepEditor();\r\n }\r\n\r\n editStep(step: QualityStep): void {\r\n this.newStep = false;\r\n this.editingStep = { ...step };\r\n this.revealStepEditor();\r\n }\r\n\r\n saveStep(): void {\r\n if (!this.editingStep) return;\r\n const step = { ...this.editingStep,\r\n code: this.editingStep.code.trim().toUpperCase(),\r\n processCode: this.editingStep.processCode.trim().toUpperCase(),\r\n name: this.editingStep.name.trim() };\r\n this.track(this.api.saveStep(step), 'Değişiklikler kaydediliyor…').subscribe({\r\n next: () => { this.editingStep = null; this.success = 'Proses adımı kaydedildi.'; this.loadSteps(); },\r\n error: () => { this.error = 'Proses adımı kaydedilemedi.'; },\r\n });\r\n }\r\n\r\n orderedParameters(): QualityParameter[] {\r\n const order = this.steps().map(step => step.processCode);\r\n return [...(this.template?.parameters || [])].sort((a, b) =>\r\n order.indexOf(a.stepCode) - order.indexOf(b.stepCode) || a.order - b.order);\r\n }\r\n\r\n limitsFor(code: string): QualityLimit[] {\r\n return this.template?.limits.filter(limit => limit.parameterCode === code) || [];\r\n }\r\n\r\n editForm(): void {\r\n if (!this.template || !this.canEdit) return;\r\n this.track(this.api.saveForm(this.template.form), 'Değişiklikler kaydediliyor…').subscribe({\r\n next: () => { this.success = 'Form başlığı kaydedildi.'; this.newInputForm = false;\r\n this.api.forms().subscribe({ next: forms => { this.forms = forms; this.load(); } }); },\r\n error: () => { this.error = 'Form başlığı kaydedilemedi.'; },\r\n });\r\n }\r\n\r\n addParameter(): void {\r\n if (!this.template || this.newInputForm) return;\r\n this.newParameter = true;\r\n this.optionsText = '';\r\n this.editingParameter = {\r\n code: '', formCode: this.formCode, stepCode: this.template.steps[0]?.processCode || '',\r\n order: this.template.parameters.length + 1, name: '', unit: '', valueType: 'Number',\r\n decimalPlaces: 2, required: false, calculated: false, formula: '', options: [], active: true,\r\n };\r\n this.editingLimit = null;\r\n this.modalError = '';\r\n this.parameterModalVisible = true;\r\n }\r\n\r\n editParameter(parameter: QualityParameter): void {\r\n this.newParameter = false;\r\n this.editingParameter = { ...parameter, options: [...(parameter.options || [])] };\r\n this.optionsText = this.editingParameter.options.join(', ');\r\n this.editingLimit = null;\r\n this.modalError = '';\r\n this.parameterModalVisible = true;\r\n }\r\n\r\n saveParameter(): void {\r\n if (!this.editingParameter || this.busy) return;\r\n const parameter = { ...this.editingParameter,\r\n code: this.editingParameter.code.trim().toUpperCase(),\r\n name: this.editingParameter.name.trim(),\r\n options: this.optionsText.split(',').map(x => x.trim()).filter(Boolean),\r\n };\r\n if (!parameter.code || !parameter.name || (this.controlType === 'Process' && !parameter.stepCode)) {\r\n this.modalError = 'Parametre kodu, adı ve proses kontrolünde proses adımı zorunludur.'; return;\r\n }\r\n this.modalError = '';\r\n const request = this.newParameter ? this.api.createParameter(parameter) : this.api.updateParameter(parameter);\r\n this.track(request, 'Değişiklikler kaydediliyor…').subscribe({\r\n next: () => { this.parameterModalChanged(false); this.success = 'Parametre kaydedildi.'; this.load(); },\r\n error: () => { this.modalError = 'Parametre kaydedilemedi.'; },\r\n });\r\n }\r\n\r\n deleteParameter(parameter: QualityParameter): void {\r\n if (!confirm(`${parameter.name} parametresi ve bağlı limitleri kalıcı olarak silinsin mi?`)) return;\r\n this.track(this.api.deleteParameter(parameter.code), 'Değişiklikler kaydediliyor…').subscribe({\r\n next: () => this.load(), error: e => this.error = errorMessage(e),\r\n });\r\n }\r\n\r\n addLimit(parameter: QualityParameter): void {\r\n this.newLimit = true;\r\n this.editingParameter = null;\r\n this.editingLimit = {\r\n code: '', parameterCode: parameter.code, oilType: '', origin: '', minimum: null, maximum: null,\r\n nominal: null, expectedText: '', validFrom: null, validUntil: null, active: true,\r\n };\r\n this.modalError = '';\r\n this.limitModalVisible = true;\r\n }\r\n\r\n editLimit(limit: QualityLimit): void {\r\n this.newLimit = false;\r\n this.editingParameter = null;\r\n this.editingLimit = { ...limit,\r\n validFrom: limit.validFrom?.slice(0, 10) || null,\r\n validUntil: limit.validUntil?.slice(0, 10) || null,\r\n };\r\n this.modalError = '';\r\n this.limitModalVisible = true;\r\n }\r\n\r\n saveLimit(): void {\r\n if (!this.editingLimit || this.busy) return;\r\n const limit = { ...this.editingLimit,\r\n code: this.newLimit ? this.editingLimit.code.trim().toUpperCase() : this.editingLimit.code,\r\n oilType: this.editingLimit.oilType?.trim() || '',\r\n };\r\n if (!limit.code) { this.modalError = 'Limit kodu zorunludur.'; return; }\r\n this.modalError = '';\r\n const request = this.newLimit ? this.api.createLimit(limit) : this.api.updateLimit(limit);\r\n this.track(request, 'Değişiklikler kaydediliyor…').subscribe({\r\n next: () => { this.limitModalChanged(false); this.success = 'Limit kaydedildi.'; this.load(); },\r\n error: e => { this.modalError = errorMessage(e); },\r\n });\r\n }\r\n\r\n deleteLimit(limit: QualityLimit): void {\r\n if (this.busy) return;\r\n if (!confirm(`${limit.code} limiti kalıcı olarak silinsin mi?`)) return;\r\n this.track(this.api.deleteLimit(limit.code), 'Değişiklikler kaydediliyor…').subscribe({\r\n next: () => { this.limitModalChanged(false); this.load(); },\r\n error: e => {\r\n if (this.limitModalVisible) this.modalError = errorMessage(e);\r\n else this.error = errorMessage(e);\r\n },\r\n });\r\n }\r\n}\r\n","<div class=\"container-fluid\">\r\n <div class=\"mb-2\">\r\n <h3 class=\"page-title\">Kalite Parametreleri (Kalite Soruları)</h3>\r\n </div>\r\n\r\n <div class=\"card mt-2\"><div class=\"card-body\">\r\n <div class=\"btn-group mb-3\" role=\"tablist\"><button class=\"btn\" [class.btn-primary]=\"controlType === 'Input'\" [class.btn-outline-secondary]=\"controlType !== 'Input'\" (click)=\"switchType('Input')\">Girdi Kontrol</button><button class=\"btn\" [class.btn-primary]=\"controlType === 'Process'\" [class.btn-outline-secondary]=\"controlType !== 'Process'\" (click)=\"switchType('Process')\">Proses Kontrol</button></div>\r\n <div class=\"row mb-3\" *ngIf=\"controlType === 'Input'\">\r\n <div class=\"col-md-6\"><label>Araç Hareket Türü</label><select class=\"form-control\" [(ngModel)]=\"movementTypeCode\" (change)=\"selectInput()\"><option value=\"\">Tümü</option><option *ngFor=\"let type of movementTypes\" [value]=\"type.code\">{{ type.name }}</option></select></div>\r\n <div class=\"col-md-6\"><label>Araç Hareket Türü / Detay</label><select class=\"form-control\" [(ngModel)]=\"movementDetailCode\" (change)=\"selectInput()\"><option value=\"\">Seçin</option><option *ngFor=\"let d of visibleDetails\" [value]=\"d.code\">{{ d.name || d.movementTypeCode }}{{ d.detailCode ? ' / ' + d.detailCode : ' (detaysız)' }}</option></select></div>\r\n <p class=\"col-md-12 mt-2 text-muted\" *ngIf=\"!visibleDetails.length\">Önce Kalite Tanımları ekranında kalite kontrole tabi hareket türünü tanımlayın.</p>\r\n </div>\r\n <div class=\"row align-items-end mb-3\">\r\n <div class=\"col-md-4\" *ngIf=\"controlType === 'Process'\">\r\n <label for=\"formSelect\">Form</label>\r\n <select id=\"formSelect\" class=\"form-control\" [disabled]=\"busy\" [(ngModel)]=\"formCode\" (change)=\"load()\">\r\n <option *ngFor=\"let form of visibleForms\" [value]=\"form.code\">{{ form.documentCode }} – {{ form.name }}</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-8 text-md-right mt-2 mt-md-0\">\r\n <button class=\"btn btn-primary\" *ngIf=\"canCreate\" (click)=\"addParameter()\" [disabled]=\"busy || !template || newInputForm\">+ Yeni Parametre</button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"error\" class=\"alert alert-danger\">{{ error }}</div>\r\n <div *ngIf=\"success\" class=\"alert alert-success\" (click)=\"success = ''\">{{ success }}</div>\r\n <div class=\"quality-grid-loading\" *ngIf=\"busy\" role=\"status\" aria-live=\"polite\" aria-busy=\"true\">\r\n <span class=\"spinner-border text-primary\" aria-hidden=\"true\"></span>\r\n <span>{{ busyText }}</span>\r\n </div>\r\n\r\n <ng-container *ngIf=\"template\">\r\n <div [hidden]=\"busy\">\r\n <div class=\"row align-items-end mb-3\" *ngIf=\"controlType === 'Process'\">\r\n <div class=\"col-md-4\"><label for=\"facilitySelect\">Proses sırası için tesis</label>\r\n <select id=\"facilitySelect\" class=\"form-control\" [(ngModel)]=\"facilityCode\" (change)=\"loadSteps()\">\r\n <option *ngFor=\"let facility of matchingFacilities()\" [value]=\"facility.code\">{{ facility.name }}</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-8 text-md-right\"><button class=\"btn btn-outline-primary\" *ngIf=\"canEdit\" (click)=\"addStep()\">+ Proses Adımı</button></div>\r\n </div>\r\n <div class=\"mb-3\" *ngIf=\"controlType === 'Process'\">\r\n <span class=\"step-pill\" *ngFor=\"let step of facilitySteps\">\r\n <button type=\"button\" class=\"btn btn-sm\" [class.btn-outline-primary]=\"step.active\" [class.btn-outline-secondary]=\"!step.active\"\r\n (click)=\"editStep(step)\" [disabled]=\"!canEdit\">{{ step.order }}. {{ step.name }}<span *ngIf=\"!step.active\"> (pasif)</span></button>\r\n </span>\r\n </div>\r\n <div #stepEditor tabindex=\"-1\" class=\"card mt-3 mb-3 editor-card\" *ngIf=\"editingStep as step\"><div class=\"card-body\">\r\n <h5>{{ newStep ? 'Yeni Proses Adımı' : 'Proses Adımını Düzenle' }}</h5>\r\n <div class=\"row\">\r\n <div class=\"col-md-2\"><label>Kod</label><input class=\"form-control\" [(ngModel)]=\"step.code\" [disabled]=\"!newStep\" /></div>\r\n <div class=\"col-md-2\"><label>Proses Kodu</label><input class=\"form-control\" [(ngModel)]=\"step.processCode\" [disabled]=\"!newStep\" /></div>\r\n <div class=\"col-md-4\"><label>Ad</label><input class=\"form-control\" [(ngModel)]=\"step.name\" /></div>\r\n <div class=\"col-md-2\"><label>Sıra</label><input type=\"number\" min=\"1\" class=\"form-control\" [(ngModel)]=\"step.order\" /></div>\r\n <div class=\"col-md-2 d-flex align-items-end\"><label><input type=\"checkbox\" [(ngModel)]=\"step.active\" /> Aktif</label></div>\r\n </div>\r\n <button class=\"btn btn-primary mt-3 mr-2\" (click)=\"saveStep()\" [disabled]=\"busy\">Kaydet</button>\r\n <button class=\"btn btn-secondary mt-3\" (click)=\"editingStep = null\">İptal</button>\r\n </div></div>\r\n <div class=\"form-header rounded p-3 mb-3\">\r\n <p *ngIf=\"newInputForm\" class=\"text-muted\">Önce form başlığını kaydedin, ardından kalite sorularını ekleyin.</p>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\"><label>Form Adı</label><input class=\"form-control\" [(ngModel)]=\"template.form.name\" [disabled]=\"!canEdit\" /></div>\r\n <div class=\"col-md-2\"><label>Doküman Kodu</label><input class=\"form-control\" [(ngModel)]=\"template.form.documentCode\" [disabled]=\"!canEdit\" /></div>\r\n <div class=\"col-md-2\"><label>Yayın Tarihi</label><input type=\"date\" class=\"form-control\" [(ngModel)]=\"template.form.publicationDate\" [disabled]=\"!canEdit\" /></div>\r\n <div class=\"col-md-2\"><label>Revizyon Tarihi</label><input type=\"date\" class=\"form-control\" [(ngModel)]=\"template.form.revisionDate\" [disabled]=\"!canEdit\" /></div>\r\n <div class=\"col-md-2\"><label>Revizyon No</label><input class=\"form-control\" [(ngModel)]=\"template.form.revisionNumber\" [disabled]=\"!canEdit\" /></div>\r\n </div>\r\n <div class=\"row mt-2\" *ngIf=\"controlType === 'Input'\"><div class=\"col-md-4\"><label>Ortalama Tipi</label><select class=\"form-control\" [(ngModel)]=\"template.form.averageMode\" [disabled]=\"!canEdit\"><option value=\"Arithmetic\">Aritmetik</option><option value=\"Weighted\">Miktar ağırlıklı</option></select></div><div class=\"col-md-4\"><label>Miktar Birimi</label><select class=\"form-control\" [(ngModel)]=\"template.form.quantityUnit\" [disabled]=\"!canEdit\"><option value=\"kg\">Kilogram</option><option value=\"t\">Ton</option></select></div></div>\r\n <button class=\"btn btn-outline-primary mt-3\" *ngIf=\"canEdit\" (click)=\"editForm()\" [disabled]=\"busy\">Başlığı Kaydet</button>\r\n </div>\r\n\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-bordered table-striped table-sm parameter-table\">\r\n <thead><tr><th>İşlemler</th><th *ngIf=\"controlType === 'Process'\">Proses Adımı</th><th>Sıra</th><th>Kod</th><th>Parametre / Soru</th><th>Birim</th><th>Veri Tipi</th><th>Limit / Nominal</th><th>Durum</th></tr></thead>\r\n <tbody>\r\n <tr *ngFor=\"let parameter of orderedParameters()\">\r\n <td class=\"actions\">\r\n <button class=\"btn btn-sm btn-outline-primary mr-1\" *ngIf=\"canEdit\" (click)=\"editParameter(parameter)\">Düzenle</button>\r\n <button class=\"btn btn-sm btn-outline-secondary mr-1\" *ngIf=\"canCreate\" (click)=\"addLimit(parameter)\">+ Limit</button>\r\n <button class=\"btn btn-sm btn-outline-danger\" *ngIf=\"canDelete && parameter.active\" (click)=\"deleteParameter(parameter)\">Sil</button>\r\n </td>\r\n <td *ngIf=\"controlType === 'Process'\">{{ processName(parameter.stepCode) }}</td><td>{{ parameter.order }}</td>\r\n <td><code>{{ parameter.code }}</code></td><td>{{ parameter.name }}</td><td>{{ parameter.unit || '—' }}</td>\r\n <td>{{ parameter.valueType }}<span *ngIf=\"parameter.calculated\"> / Hesaplanan</span></td>\r\n <td>\r\n <div *ngFor=\"let limit of limitsFor(parameter.code)\">\r\n <button type=\"button\" class=\"btn btn-link btn-sm p-0 limit-link\" (click)=\"editLimit(limit)\">{{ limit.code }}</button>:\r\n <span *ngIf=\"limit.oilType\">{{ limit.oilType }} · </span>\r\n <span *ngIf=\"limit.origin\">{{ limit.origin === 'Imported' ? 'İthal' : 'İç Piyasa' }} · </span>\r\n <span *ngIf=\"limit.minimum != null\">Min {{ limit.minimum }} </span>\r\n <span *ngIf=\"limit.maximum != null\">Max {{ limit.maximum }} </span>\r\n <span *ngIf=\"limit.nominal != null\">Nominal {{ limit.nominal }} </span>\r\n <span *ngIf=\"limit.expectedText\">{{ limit.expectedText }}</span>\r\n <span *ngIf=\"!limit.active\" class=\"text-muted\">(pasif)</span>\r\n </div>\r\n </td>\r\n <td>{{ parameter.active ? 'Aktif' : 'Pasif' }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n </div></div>\r\n</div>\r\n\r\n<abp-modal [visible]=\"parameterModalVisible\" (visibleChange)=\"parameterModalChanged($event)\"\r\n [busy]=\"busy\" [options]=\"editorModalOptions\" [suppressUnsavedChangesWarning]=\"true\">\r\n <ng-template #abpHeader>\r\n <h5 class=\"modal-title\">{{ newParameter ? 'Yeni Parametre' : 'Parametreyi Düzenle' }}</h5>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div *ngIf=\"modalError\" class=\"alert alert-danger\" role=\"alert\">{{ modalError }}</div>\r\n <div *ngIf=\"busy\" class=\"d-flex align-items-center mb-3\" role=\"status\" aria-live=\"polite\">\r\n <span class=\"spinner-border spinner-border-sm text-primary mr-2\" aria-hidden=\"true\"></span>\r\n <span>{{ busyText }}</span>\r\n </div>\r\n <fieldset *ngIf=\"editingParameter as parameter\" [disabled]=\"busy\" class=\"border-0 p-0 m-0\">\r\n <div class=\"row\">\r\n <div class=\"col-md-4\"><label>Kod</label><input class=\"form-control\" [(ngModel)]=\"parameter.code\" [disabled]=\"!newParameter\" /></div>\r\n <div class=\"col-md-4\"><label>Ad / Soru</label><input class=\"form-control\" [(ngModel)]=\"parameter.name\" /></div>\r\n <div class=\"col-md-4\" *ngIf=\"controlType === 'Process'\"><label>Proses Adımı</label><select class=\"form-control\" [(ngModel)]=\"parameter.stepCode\"><option *ngFor=\"let step of steps()\" [value]=\"step.processCode\">{{ step.name }}</option></select></div>\r\n <div class=\"col-md-4\"><label>Sıra</label><input type=\"number\" class=\"form-control\" [(ngModel)]=\"parameter.order\" /></div>\r\n <div class=\"col-md-4\"><label>Birim</label><input class=\"form-control\" [(ngModel)]=\"parameter.unit\" /></div>\r\n <div class=\"col-md-4\"><label>Veri Tipi</label><select class=\"form-control\" [(ngModel)]=\"parameter.valueType\"><option value=\"Number\">Sayısal</option><option value=\"Text\">Metin</option><option value=\"Choice\">Seçim</option></select></div>\r\n </div>\r\n <div class=\"row mt-2\">\r\n <div class=\"col-md-4\"><label>Ondalık Basamak</label><input type=\"number\" min=\"0\" max=\"8\" class=\"form-control\" [(ngModel)]=\"parameter.decimalPlaces\" /></div>\r\n <div class=\"col-md-4\"><label>Seçenekler (virgülle ayrılmış)</label><input class=\"form-control\" [(ngModel)]=\"optionsText\" [disabled]=\"parameter.valueType !== 'Choice'\" /></div>\r\n <div class=\"col-md-4\"><label>Hesaplama Formülü</label><input class=\"form-control\" [(ngModel)]=\"parameter.formula\" [disabled]=\"!parameter.calculated\" placeholder=\"PARAM_KODU * 2\" /></div>\r\n <div class=\"col-md-4 d-flex flex-column justify-content-end\"><label><input type=\"checkbox\" [(ngModel)]=\"parameter.required\" /> Zorunlu</label><label><input type=\"checkbox\" [(ngModel)]=\"parameter.calculated\" /> Hesaplanan</label><label><input type=\"checkbox\" [(ngModel)]=\"parameter.active\" /> Aktif</label></div>\r\n </div>\r\n </fieldset>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"closeParameterModal()\" [disabled]=\"busy\">İptal</button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"saveParameter()\" [disabled]=\"busy\">Kaydet</button>\r\n </ng-template>\r\n</abp-modal>\r\n\r\n<abp-modal [visible]=\"limitModalVisible\" (visibleChange)=\"limitModalChanged($event)\"\r\n [busy]=\"busy\" [options]=\"editorModalOptions\" [suppressUnsavedChangesWarning]=\"true\">\r\n <ng-template #abpHeader>\r\n <h5 class=\"modal-title\">{{ newLimit ? 'Yeni Limit' : 'Limiti Düzenle' }} – {{ editingLimit?.parameterCode }}</h5>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div *ngIf=\"modalError\" class=\"alert alert-danger\" role=\"alert\">{{ modalError }}</div>\r\n <div *ngIf=\"busy\" class=\"d-flex align-items-center mb-3\" role=\"status\" aria-live=\"polite\">\r\n <span class=\"spinner-border spinner-border-sm text-primary mr-2\" aria-hidden=\"true\"></span>\r\n <span>{{ busyText }}</span>\r\n </div>\r\n <fieldset *ngIf=\"editingLimit as limit\" [disabled]=\"busy\" class=\"border-0 p-0 m-0\">\r\n <div class=\"row\">\r\n <div class=\"col-md-4\"><label>Kod</label><input class=\"form-control\" [(ngModel)]=\"limit.code\" [disabled]=\"!newLimit\" /></div>\r\n <div class=\"col-md-4\"><label>Yağ Cinsi / Koşul</label><select class=\"form-control\" [(ngModel)]=\"limit.oilType\"><option value=\"\">Tümü</option><option value=\"Palm Oil\">Palm Oil</option><option value=\"Palm Olein\">Palm Olein</option></select></div>\r\n <div class=\"col-md-4\"><label>Menşei</label><select class=\"form-control\" [(ngModel)]=\"limit.origin\"><option value=\"\">Tümü</option><option value=\"Domestic\">İç Piyasa</option><option value=\"Imported\">İthal</option></select></div>\r\n <div class=\"col-md-4\"><label>Min</label><input type=\"number\" class=\"form-control\" [(ngModel)]=\"limit.minimum\" /></div>\r\n <div class=\"col-md-4\"><label>Max</label><input type=\"number\" class=\"form-control\" [(ngModel)]=\"limit.maximum\" /></div>\r\n <div class=\"col-md-4\"><label>Nominal</label><input type=\"number\" class=\"form-control\" [(ngModel)]=\"limit.nominal\" /></div>\r\n <div class=\"col-md-4\"><label>Beklenen Metin</label><input class=\"form-control\" [(ngModel)]=\"limit.expectedText\" /></div>\r\n </div>\r\n <div class=\"row mt-2\">\r\n <div class=\"col-md-4\"><label>Başlangıç</label><input type=\"date\" class=\"form-control\" [(ngModel)]=\"limit.validFrom\" /></div>\r\n <div class=\"col-md-4\"><label>Bitiş</label><input type=\"date\" class=\"form-control\" [(ngModel)]=\"limit.validUntil\" /></div>\r\n <div class=\"col-md-4 d-flex align-items-end\"><label><input type=\"checkbox\" [(ngModel)]=\"limit.active\" /> Aktif</label></div>\r\n </div>\r\n </fieldset>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-outline-danger\" *ngIf=\"!newLimit && canDelete\"\r\n (click)=\"deleteLimit(editingLimit!)\" [disabled]=\"busy\">Sil</button>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"closeLimitModal()\" [disabled]=\"busy\">İptal</button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"saveLimit()\" [disabled]=\"busy\">Kaydet</button>\r\n </ng-template>\r\n</abp-modal>\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { DxDataGridComponent } from 'devextreme-angular';\nimport CustomStore from 'devextreme/data/custom_store';\nimport { firstValueFrom } from 'rxjs';\nimport { PermissionService } from '@abp/ng.core';\nimport { IntakeVehicle, MovementType } from '../models/intake.models';\nimport { QualityApiService } from '../services/quality-api.service';\nimport { download, errorMessage, statusLabel } from '../services/quality-measurements';\n\n@Component({ selector: 'lib-intake-list', templateUrl: './intake-grid.component.html', styleUrls: ['./intake.component.scss'] })\nexport class IntakeListComponent implements OnInit {\n @ViewChild('grid') grid?: DxDataGridComponent;\n readonly statuses = [{ value: 'Waiting', text: 'Bekliyor' }, { value: 'Draft', text: 'Taslak' }, { value: 'Accepted', text: 'Kabul' }, { value: 'Rejected', text: 'Ret' }];\n readonly dataSource = new CustomStore({ key: 'docEntry', load: async options => {\n this.error = '';\n try {\n const result = await firstValueFrom(this.api.intakeList({ ...this.query, search: String(options.searchValue || ''),\n skipCount: options.skip || 0, maxResultCount: options.take || 20,\n filter: options.filter ? JSON.stringify(options.filter) : '', sort: options.sort ? JSON.stringify(options.sort) : '' }));\n this.rows = result.items; this.total = result.totalCount;\n return { data: result.items, totalCount: result.totalCount };\n } catch (e) { this.error = errorMessage(e); throw new Error(this.error); }\n }});\n rows: IntakeVehicle[] = []; types: MovementType[] = []; total = 0; busy = false; error = '';\n query = { pendingOnly: true, from: '', until: '', search: '', movementTypeCode: '', status: '', skipCount: 0, maxResultCount: 20 };\n cancelRow: IntakeVehicle | null = null; reason = ''; statusLabel = statusLabel;\n constructor(private api: QualityApiService, private permissions: PermissionService) {}\n ngOnInit(): void { this.api.qualityMovementTypes().subscribe({ next: types => this.types = types, error: e => this.error = errorMessage(e) }); this.load(); }\n allowed(policy: string): boolean { return this.permissions.getGrantedPolicy('Kalite.Intake.' + policy); }\n editable(row: IntakeVehicle): boolean { return row.vehicleStatus === '0' && !row.firstWeight && !row.hasExited; }\n load(reset = false): void {\n this.busy = false;\n if (reset) this.grid?.instance.pageIndex(0);\n this.grid?.instance.refresh();\n }\n tab(pending: boolean): void { this.query.pendingOnly = pending; this.load(true); }\n page(direction: number): void { this.query.skipCount += direction * this.query.maxResultCount; this.load(); }\n get pageNumber(): number { return Math.floor(this.query.skipCount / this.query.maxResultCount) + 1; }\n print(row: IntakeVehicle): void { this.api.intakePdf(row.docEntry).subscribe({ next: blob => download(blob, `Girdi-Kontrol-${row.docEntry}.pdf`), error: e => this.error = errorMessage(e) }); }\n cancel(): void {\n if (!this.cancelRow || !this.reason.trim()) { this.error = 'İptal gerekçesi girin.'; return; }\n this.busy = true;\n const id = this.cancelRow.docEntry;\n this.api.intake(id).subscribe({ next: form => this.api.cancelIntake(id, form.inspection.revision, this.reason).subscribe({\n next: () => { this.cancelRow = null; this.reason = ''; this.load(); }, error: e => { this.error = errorMessage(e); this.busy = false; }\n }), error: e => { this.error = errorMessage(e); this.busy = false; } });\n }\n}\n","<div class=\"container-fluid\"><h3>Ham Yağ Giriş Kalite Kontrol</h3><div class=\"card\"><div class=\"card-body\">\n <div class=\"btn-group mb-3\" role=\"tablist\"><button class=\"btn\" [class.btn-success]=\"query.pendingOnly\" [class.btn-outline-secondary]=\"!query.pendingOnly\" (click)=\"tab(true)\">Kalite Kontrol Bekleyenler</button><button class=\"btn\" [class.btn-success]=\"!query.pendingOnly\" [class.btn-outline-secondary]=\"query.pendingOnly\" (click)=\"tab(false)\">Tüm Kayıtlar</button></div>\n <div class=\"row mb-3\"><div class=\"col-md-3\"><label>Başlangıç</label><input type=\"date\" class=\"form-control\" [(ngModel)]=\"query.from\" /></div><div class=\"col-md-3\"><label>Bitiş</label><input type=\"date\" class=\"form-control\" [(ngModel)]=\"query.until\" /></div><div class=\"col-md-3\"><label>Araç Hareket Türü</label><select class=\"form-control\" [(ngModel)]=\"query.movementTypeCode\"><option value=\"\">Tümü</option><option *ngFor=\"let type of types\" [value]=\"type.code\">{{type.name}}</option></select></div><div class=\"col-md-3 d-flex align-items-end\"><button class=\"btn btn-primary\" (click)=\"load(true)\">Filtrele</button></div></div>\n <div *ngIf=\"error\" class=\"alert alert-danger\" role=\"alert\">{{error}}</div>\n <dx-data-grid #grid class=\"intake-grid\" [dataSource]=\"dataSource\" [remoteOperations]=\"{paging: true, filtering: true, sorting: true}\" [showBorders]=\"true\" [rowAlternationEnabled]=\"true\" [columnAutoWidth]=\"true\" [allowColumnResizing]=\"true\" columnResizingMode=\"widget\" style=\"height: calc(100vh - 350px)\">\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row><dxo-search-panel [visible]=\"true\" [width]=\"220\" placeholder=\"Ara…\"></dxo-search-panel>\n <dxo-paging [pageSize]=\"20\"></dxo-paging><dxo-pager [visible]=\"true\" [showInfo]=\"true\" [allowedPageSizes]=\"[10,20,50]\" [showPageSizeSelector]=\"true\" [showNavigationButtons]=\"true\"></dxo-pager>\n <dxi-column caption=\"İşlemler\" cellTemplate=\"actions\" [allowFiltering]=\"false\" [allowSorting]=\"false\" [fixed]=\"true\" [width]=\"145\"></dxi-column>\n <dxi-column dataField=\"qualityStatus\" caption=\"Kalite Durumu\" cellTemplate=\"status\"><dxo-lookup [dataSource]=\"statuses\" valueExpr=\"value\" displayExpr=\"text\"></dxo-lookup></dxi-column>\n <dxi-column dataField=\"sequenceNumber\" caption=\"Sıra No\"></dxi-column><dxi-column dataField=\"docNum\" caption=\"Belge No\" dataType=\"number\"></dxi-column><dxi-column dataField=\"gateCode\" caption=\"Kapı\"></dxi-column>\n <dxi-column dataField=\"entryDate\" caption=\"Giriş Tarihi / Saati\" dataType=\"datetime\" format=\"dd.MM.yyyy HH:mm\"></dxi-column><dxi-column dataField=\"movementTypeName\" caption=\"Araç Hareket Türü\"></dxi-column><dxi-column dataField=\"movementDetailName\" caption=\"Detay\"></dxi-column>\n <dxi-column dataField=\"plate\" caption=\"Kamyon Plakası\"></dxi-column><dxi-column dataField=\"trailerPlate\" caption=\"Dorse Plakası\"></dxi-column><dxi-column dataField=\"driver\" caption=\"Şoför\"></dxi-column>\n <dxi-column dataField=\"partnerName\" caption=\"Muhatap\"></dxi-column><dxi-column dataField=\"shipName\" caption=\"Gemi\"></dxi-column><dxi-column dataField=\"stockTransferNumber\" caption=\"Stok Nakli\"></dxi-column>\n <dxi-column dataField=\"origin\" caption=\"Menşei\"><dxo-lookup [dataSource]=\"[{code:'Domestic',name:'İç Piyasa'},{code:'Imported',name:'İthal'}]\" valueExpr=\"code\" displayExpr=\"name\"></dxo-lookup></dxi-column>\n <dxi-column dataField=\"sealNumber\" caption=\"Mühür No\"></dxi-column><dxi-column dataField=\"analyst\" caption=\"Analizi Yapan\"></dxi-column><dxi-column dataField=\"inspectedAt\" caption=\"Kontrol Tarihi\" dataType=\"datetime\" format=\"dd.MM.yyyy HH:mm\"></dxi-column><dxi-column dataField=\"notes\" caption=\"Açıklama\"></dxi-column>\n <div *dxTemplate=\"let cell of 'status'\"><span class=\"badge\" [class.badge-success]=\"cell.data.qualityStatus === 'Accepted'\" [class.badge-danger]=\"cell.data.qualityStatus === 'Rejected'\" [class.badge-warning]=\"cell.data.qualityStatus === 'Waiting' || cell.data.qualityStatus === 'Draft'\">{{statusLabel(cell.data.qualityStatus)}}</span></div>\n <div *dxTemplate=\"let cell of 'actions'\" class=\"intake-actions-cell\">\n <div ngbDropdown container=\"body\" class=\"d-inline-block\" placement=\"bottom-start top-start\">\n <button type=\"button\" ngbDropdownToggle class=\"btn btn-sm btn-primary intake-actions-toggle\"><i class=\"fa fa-cog\" aria-hidden=\"true\"></i><span>İşlemler</span></button>\n <div ngbDropdownMenu class=\"intake-action-menu\">\n <a ngbDropdownItem *ngIf=\"editable(cell.data) && allowed('Edit')\" [routerLink]=\"['/kalite/intake',cell.data.docEntry]\">{{cell.data.qualityStatus === 'Waiting' ? 'Kalite Kontrol Yap' : 'Düzenle'}}</a>\n <a ngbDropdownItem [routerLink]=\"['/kalite/intake',cell.data.docEntry]\" [queryParams]=\"{mode:'view'}\">Özeti Görüntüle</a>\n <button type=\"button\" ngbDropdownItem *ngIf=\"cell.data.qualityStatus !== 'Waiting' && allowed('Print')\" (click)=\"print(cell.data)\">Girdi Kontrol Formu Yazdır</button>\n <button type=\"button\" ngbDropdownItem *ngIf=\"editable(cell.data) && cell.data.qualityStatus !== 'Waiting' && allowed('Cancel')\" (click)=\"cancelRow = cell.data; reason = ''\">İptal Et</button>\n </div>\n </div>\n </div>\n </dx-data-grid>\n</div></div></div>\n<abp-modal [visible]=\"!!cancelRow\" (visibleChange)=\"!$event && (cancelRow = null)\" [busy]=\"busy\"><ng-template #abpHeader><h5>Kalite Kontrolünü İptal Et</h5></ng-template><ng-template #abpBody><label>İptal Gerekçesi</label><textarea class=\"form-control\" rows=\"3\" [(ngModel)]=\"reason\"></textarea><p class=\"text-muted mt-2\">Kayıt yeniden kalite kontrol bekleyenlere alınır.</p></ng-template><ng-template #abpFooter><button class=\"btn btn-secondary\" (click)=\"cancelRow = null\" [disabled]=\"busy\">Vazgeç</button><button class=\"btn btn-danger\" (click)=\"cancel()\" [disabled]=\"busy || !reason.trim()\">İptal Et</button></ng-template></abp-modal>\n","const PRINT_STYLES = `\n @page { size: A4 portrait; margin: 10mm; }\n html, body { margin: 0; background: #fff !important; color: #212529; }\n body { font-family: Arial, sans-serif; font-size: 10pt; }\n * { -webkit-print-color-adjust: exact; print-color-adjust: exact; }\n .print-surface { width: 100%; padding: 0; }\n .print-surface .card { box-shadow: none; border: 1px solid #ddd; margin-bottom: 4mm; }\n .print-surface .card-body { padding: 4mm; }\n .print-surface .vehicle-info { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 3mm; }\n .print-surface .vehicle-info p { min-height: 0; margin-bottom: 2mm; }\n .print-surface .row { display: flex; flex-wrap: wrap; }\n .print-surface .col-md-3 { flex: 0 0 25%; max-width: 25%; }\n .print-surface .col-md-4 { flex: 0 0 33.333%; max-width: 33.333%; }\n .print-surface .col-md-12 { flex: 0 0 100%; max-width: 100%; }\n .print-surface .table-responsive { overflow: visible; }\n .print-surface .measurement-table { min-width: 0; width: 100%; table-layout: fixed; }\n .print-surface .measurement-table th, .print-surface .measurement-table td { padding: 2mm; overflow-wrap: anywhere; }\n .print-surface .measurement-table th:nth-child(1) { width: 29%; }\n .print-surface .measurement-table th:nth-child(2) { width: 7%; }\n .print-surface .measurement-table th:nth-child(3) { width: 25%; }\n .print-surface .measurement-table th:nth-child(4) { width: 28%; }\n .print-surface .measurement-table th:nth-child(5) { width: 11%; }\n .print-surface thead { display: table-header-group; }\n .print-surface tr, .print-surface .vehicle-info > div, .print-surface .quality-status { break-inside: avoid; }\n .print-surface h5, .print-surface h6 { break-after: avoid; }\n .print-value { display: block; min-height: 1.4em; white-space: pre-wrap; overflow-wrap: anywhere; }\n .print-surface .print-only { display: block !important; }\n`;\n\n/** Print only the form, with current control values and the application's existing colors. */\nexport async function printForm(source: HTMLElement, title: string): Promise<void> {\n const owner = source.ownerDocument;\n const content = source.cloneNode(true) as HTMLElement;\n content.classList.add('print-surface');\n content.querySelectorAll('button, .print-exclude, .alert, .quality-loading').forEach(x => x.remove());\n const originals = source.querySelectorAll<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>('input, select, textarea');\n const copies = content.querySelectorAll<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>('input, select, textarea');\n // Ignore excluded editor controls before pairing, so control indexes remain identical.\n const printableOriginals = Array.from(originals).filter(x => !x.closest('.print-exclude'));\n copies.forEach((copy, index) => {\n const control = printableOriginals[index];\n const value = owner.createElement('span');\n value.className = 'print-value';\n let text = control.getAttribute('data-print-value');\n if (text == null) {\n if (control.tagName === 'SELECT') text = (control as HTMLSelectElement).selectedOptions[0]?.textContent || '';\n else if (control instanceof HTMLInputElement && control.type === 'datetime-local' && control.value)\n text = new Date(control.value).toLocaleString('tr-TR');\n else if (control instanceof HTMLInputElement && control.type === 'number') text = control.value.replace('.', ',');\n else text = control.value;\n }\n value.textContent = text || '—';\n copy.replaceWith(value);\n });\n\n const frame = owner.createElement('iframe');\n frame.title = 'Kalite formu yazdırma';\n frame.setAttribute('aria-hidden', 'true');\n frame.style.cssText = 'position:fixed;left:-10000px;top:0;width:718px;height:1047px;border:0;';\n owner.body.appendChild(frame);\n try {\n const doc = frame.contentDocument!;\n const win = frame.contentWindow!;\n doc.title = title;\n const base = doc.createElement('base'); base.href = owner.baseURI; doc.head.appendChild(base);\n const stylesReady: Promise<void>[] = [];\n owner.querySelectorAll<HTMLStyleElement | HTMLLinkElement>('style, link[rel=\"stylesheet\"]').forEach(style => {\n const copy = style.cloneNode(true) as HTMLStyleElement | HTMLLinkElement;\n if (style.tagName === 'LINK') {\n (copy as HTMLLinkElement).href = (style as HTMLLinkElement).href;\n stylesReady.push(new Promise(resolve => { copy.onload = () => resolve(); copy.onerror = () => resolve(); }));\n }\n doc.head.appendChild(copy);\n });\n const style = doc.createElement('style'); style.textContent = PRINT_STYLES; doc.head.appendChild(style);\n doc.body.appendChild(doc.importNode(content, true));\n await Promise.all(stylesReady);\n await doc.fonts.ready;\n await new Promise<void>(resolve => win.requestAnimationFrame(() => win.requestAnimationFrame(() => resolve())));\n win.addEventListener('afterprint', () => frame.remove(), { once: true });\n win.focus(); win.print();\n // Fallback for browsers that omit afterprint, without removing the frame during preview.\n owner.defaultView?.setTimeout(() => frame.remove(), 300000);\n } catch (error) { frame.remove(); throw error; }\n}\n","import { Component, ElementRef, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { PermissionService } from '@abp/ng.core';\nimport { Subject, forkJoin } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { IntakeForm, QualityTank } from '../models/intake.models';\nimport { QualityMeasurement, QualityParameter } from '../models/quality.models';\nimport { QualityApiService } from '../services/quality-api.service';\nimport { applicableLimit, errorMessage, localDate, recalculate, statusLabel } from '../services/quality-measurements';\nimport { printForm } from '../services/print-form';\n\n@Component({ selector: 'lib-intake-form', templateUrl: './intake-form.component.html', styleUrls: ['./intake.component.scss'] })\nexport class IntakeFormComponent implements OnInit, OnDestroy {\n @ViewChild('printArea') printArea?: ElementRef<HTMLElement>;\n form: IntakeForm | null = null; tanks: QualityTank[] = []; busy = false; error = ''; success = ''; validationError = ''; decision = ''; viewOnly = false;\n compositeEditor = false; compositeMeasurements: QualityMeasurement[] = []; statusLabel = statusLabel;\n private destroy = new Subject<void>();\n constructor(private api: QualityApiService, private route: ActivatedRoute, private router: Router, private permissions: PermissionService) {}\n ngOnInit(): void {\n this.route.paramMap.pipe(takeUntil(this.destroy)).subscribe(params => { this.viewOnly = this.route.snapshot.queryParamMap.get('mode') === 'view'; this.load(Number(params.get('id'))); });\n this.api.tanks().subscribe({ next: tanks => this.tanks = tanks.filter(x => x.active), error: e => this.error = errorMessage(e) });\n }\n ngOnDestroy(): void { this.destroy.next(); this.destroy.complete(); }\n allowed(action: string): boolean { return this.permissions.getGrantedPolicy('Kalite.Intake.' + action); }\n get editable(): boolean { return !!this.form?.canEdit && !this.viewOnly && this.allowed('Edit'); }\n get parameters(): QualityParameter[] { return this.form?.inspection.templateSnapshot?.parameters.filter(x => x.active).sort((a, b) => a.order - b.order) || []; }\n get palm(): boolean { return this.form?.details.find(x => x.code === this.form?.inspection.movementDetailCode)?.profile === 'PALM'; }\n private localTime(value: string): string { const d = new Date(value); return localDate(d) + 'T' + String(d.getHours()).padStart(2, '0') + ':' + String(d.getMinutes()).padStart(2, '0'); }\n load(id: number): void {\n if (!Number.isInteger(id) || id <= 0) { this.error = 'Geçerli bir araç kaydı seçin.'; return; }\n this.busy = true; this.error = '';\n this.api.intake(id).subscribe({ next: form => { this.form = form; form.inspection.inspectedAt = this.localTime(form.inspection.inspectedAt); this.decision = ''; this.busy = false; }, error: e => { this.error = errorMessage(e); this.busy = false; } });\n }\n detailChanged(): void {\n if (!this.form) return;\n this.busy = true;\n this.api.intakeTemplate(this.form.inspection.movementDetailCode).subscribe({ next: t => { if (this.form) { this.form.inspection.templateSnapshot = t; this.form.inspection.measurements = []; this.form.compositeSample = null; this.compositeEditor = false; } this.busy = false; this.changed(); }, error: e => { this.error = errorMessage(e); this.busy = false; } });\n }\n measurement(p: QualityParameter, composite = false): QualityMeasurement {\n const values = composite ? this.compositeMeasurements : this.form!.inspection.measurements;\n let value = values.find(x => x.parameterCode === p.code);\n if (!value) { value = { parameterCode: p.code, number: null, text: '' }; values.push(value); }\n return value;\n }\n limitLabel(p: QualityParameter): string {\n const i = this.form?.inspection; if (!i) return '—';\n const l = applicableLimit(i.templateSnapshot?.limits || [], p.code, i.inspectedAt.slice(0, 10), i.oilType, i.origin);\n if (!l) return '—';\n const range = l.expectedText || (l.minimum != null && l.maximum != null ? `${l.minimum} – ${l.maximum}` : l.minimum != null ? `≥ ${l.minimum}` : l.maximum != null ? `≤ ${l.maximum}` : '—');\n return range + (l.nominal != null ? ` · Nominal: ${l.nominal}` : '');\n }\n inputStep(p: QualityParameter): number { return Math.pow(10, -p.decimalPlaces); }\n changed(composite = false): void {\n const i = this.form?.inspection; if (!i?.templateSnapshot) return;\n try { recalculate(this.parameters, composite ? this.compositeMeasurements : i.measurements, i.templateSnapshot.limits, i.inspectedAt.slice(0, 10), i.oilType, i.origin); this.error = ''; }\n catch (e) { this.error = e instanceof Error ? e.message : 'Hesaplama yapılamadı.'; }\n }\n payload(): object {\n const i = this.form!.inspection;\n return { vehicleEntryId: i.vehicleEntryId, movementDetailCode: i.movementDetailCode, origin: i.origin || '', tankCode: i.tankCode || '', oilType: i.oilType || '',\n batchNumber: i.batchNumber || '', notes: i.notes || '', analyst: i.analyst, inspectedAt: new Date(i.inspectedAt).toISOString(), revision: i.revision,\n measurements: i.measurements, decision: this.decision || undefined };\n }\n save(approve: boolean): void {\n if (!this.form || !this.editable) return;\n if (!this.form.inspection.inspectedAt || Number.isNaN(Date.parse(this.form.inspection.inspectedAt))) { this.validationError = 'Kontrol tarihi ve saatini girin.'; this.error = this.validationError; return; }\n if (approve && !this.decision) { this.validationError = 'Kabul veya Ret seçin.'; this.error = this.validationError; return; }\n if (approve && this.decision === 'Rejected' && !this.form.inspection.notes?.trim()) { this.validationError = 'Ret gerekçesi girin.'; this.error = this.validationError; return; }\n if (!approve) this.decision = '';\n this.busy = true; this.error = ''; this.validationError = '';\n this.api.saveIntake(this.payload()).subscribe({ next: i => { this.success = approve ? 'Kalite kararı kaydedildi.' : 'Taslak kaydedildi.'; this.form!.inspection = i; i.inspectedAt = this.localTime(i.inspectedAt); this.busy = false; }, error: e => { this.error = errorMessage(e); this.busy = false; } });\n }\n beginComposite(): void { this.compositeEditor = true; this.compositeMeasurements = []; }\n saveComposite(): void {\n if (!this.form) return;\n if (!this.form.inspection.inspectedAt || Number.isNaN(Date.parse(this.form.inspection.inspectedAt))) { this.error = 'Numune tarihi ve saatini girin.'; return; }\n this.busy = true;\n this.api.saveComposite({ ...this.payload(), revision: 0, measurements: this.compositeMeasurements }).subscribe({ next: sample => { this.form!.compositeSample = sample; this.compositeEditor = false; this.busy = false; }, error: e => { this.error = errorMessage(e); this.busy = false; } });\n }\n refreshComposite(): void {\n if (!this.form) return;\n const i = this.form.inspection;\n this.api.intake(i.vehicleEntryId, i.movementDetailCode, i.batchNumber).subscribe({ next: result => this.form!.compositeSample = result.compositeSample, error: e => this.error = errorMessage(e) });\n }\n async print(): Promise<void> {\n if (!this.form || !this.printArea || this.busy || !this.allowed('Print')) return;\n try { await printForm(this.printArea.nativeElement, `Girdi-Kontrol-${this.form.vehicle.docEntry}`); }\n catch (e) { this.error = errorMessage(e); }\n }\n back(): void { this.router.navigate(['/kalite/intake']); }\n}\n","<div class=\"container-fluid\" #printArea>\n <div class=\"d-flex justify-content-between align-items-center mb-3\"><h3>Ham Yağ Giriş Kalite Kontrol</h3><button class=\"btn btn-outline-secondary\" (click)=\"back()\">Listeye Dön</button></div>\n <div *ngIf=\"error\" class=\"alert alert-danger\" role=\"alert\">{{ error }}</div><div *ngIf=\"success\" class=\"alert alert-success\">{{ success }}</div>\n <div *ngIf=\"busy\" class=\"quality-loading\" role=\"status\"><span class=\"spinner-border spinner-border-sm mr-2\"></span> İşlem sürüyor…</div>\n <ng-container *ngIf=\"form as f\">\n <div class=\"card mb-3\"><div class=\"card-body\"><h5>Araç / Sevkiyat Bilgileri</h5>\n <div class=\"vehicle-info\">\n <div><label>Sıra / Belge No</label><p>{{ f.vehicle.sequenceNumber }} / {{ f.vehicle.docNum }}</p></div><div><label>Giriş Tarihi / Saati</label><p>{{ f.vehicle.entryDate | date:'dd.MM.yyyy HH:mm' }}</p></div>\n <div><label>Kapı / Hareket Türü</label><p>{{ f.vehicle.gateCode }} / {{ f.vehicle.movementTypeName }}</p></div><div><label>Kamyon / Dorse</label><p>{{ f.vehicle.plate }} / {{ f.vehicle.trailerPlate || '—' }}</p></div>\n <div><label>Şoför / Telefon</label><p>{{ f.vehicle.driver }} / {{ f.vehicle.driverPhone || '—' }}</p></div><div><label>T.C. Kimlik / Mühür</label><p>{{ f.vehicle.identityNumber || '—' }} / {{ f.vehicle.sealNumber || '—' }}</p></div>\n <div><label>Muhatap / Gemi</label><p>{{ f.vehicle.partnerName || '—' }} / {{ f.vehicle.shipName || '—' }}</p></div><div><label>Stok Nakli / Mal Girişi / Sipariş</label><p>{{ f.vehicle.stockTransferNumber || '—' }} / {{ f.vehicle.receiptNumber || '—' }} / {{ f.vehicle.orderNumber || '—' }}</p></div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-4\"><label>Araç Hareket Türü Detayı</label><select class=\"form-control\" [(ngModel)]=\"f.inspection.movementDetailCode\" (change)=\"detailChanged()\" [disabled]=\"!editable || busy || (f.details.length === 1 && !f.details[0].detailCode)\"><option value=\"\">Seçin</option><option *ngFor=\"let d of f.details\" [value]=\"d.code\">{{ d.name || f.vehicle.movementTypeName }}{{ !d.detailCode ? ' (detaysız)' : '' }}</option></select></div>\n <div class=\"col-md-4\"><label>Menşei</label><select class=\"form-control\" [(ngModel)]=\"f.inspection.origin\" (change)=\"changed()\" [disabled]=\"!editable || busy\"><option value=\"\">Seçin</option><option value=\"Domestic\">İç Piyasa</option><option value=\"Imported\">İthal</option></select></div>\n <div class=\"col-md-4\"><label>Kalite Durumu</label><p class=\"mt-2\">\n <span class=\"quality-status\" role=\"status\"\n [class.quality-status-accepted]=\"f.inspection.revision && f.inspection.status === 'Accepted'\"\n [class.quality-status-rejected]=\"f.inspection.revision && f.inspection.status === 'Rejected'\"\n [class.quality-status-draft]=\"f.inspection.revision && f.inspection.status === 'Draft'\"\n [class.quality-status-waiting]=\"!f.inspection.revision || f.inspection.status === 'Waiting'\">\n <i class=\"fa\" aria-hidden=\"true\"\n [class.fa-check-circle]=\"f.inspection.revision && f.inspection.status === 'Accepted'\"\n [class.fa-times-circle]=\"f.inspection.revision && f.inspection.status === 'Rejected'\"\n [class.fa-edit]=\"f.inspection.revision && f.inspection.status === 'Draft'\"\n [class.fa-clock]=\"!f.inspection.revision || f.inspection.status === 'Waiting'\"></i>\n {{ statusLabel(f.inspection.revision ? f.inspection.status : 'Waiting') }}\n </span>\n </p></div>\n </div>\n </div></div>\n <div class=\"card mb-3\"><div class=\"card-body\">\n <h5>{{ f.inspection.templateSnapshot?.form?.name || 'Ölçüm / Parametreler' }} <small>{{ f.inspection.templateSnapshot?.form?.documentCode }}</small></h5>\n <p class=\"print-only text-muted\">Yayın: {{ f.inspection.templateSnapshot?.form?.publicationDate | date:'dd.MM.yyyy' }} · Revizyon: {{ f.inspection.templateSnapshot?.form?.revisionDate | date:'dd.MM.yyyy' }} / {{ f.inspection.templateSnapshot?.form?.revisionNumber }}</p>\n <p *ngIf=\"!parameters.length\" class=\"text-muted\">Detay seçin. Bu kaleme ait form ve sorular Kalite Parametreleri ekranından tanımlanmalıdır.</p>\n <div class=\"table-responsive\"><table class=\"table table-bordered table-sm measurement-table\" *ngIf=\"parameters.length\">\n <thead><tr><th>Soru / Parametre</th><th>Birim</th><th>Nominal / Limit</th><th>Ölçüm Değeri / Yanıt</th><th>Uygunluk</th></tr></thead>\n <tbody><tr *ngFor=\"let p of parameters\" [class.out-of-limit]=\"measurement(p).outOfLimit\">\n <td>{{ p.name }}<span *ngIf=\"p.required\" class=\"text-danger\"> *</span></td><td>{{ p.unit || '—' }}</td><td>{{ limitLabel(p) }}</td>\n <td><input *ngIf=\"p.valueType === 'Number'\" type=\"number\" class=\"form-control form-control-sm\" [(ngModel)]=\"measurement(p).number\" (ngModelChange)=\"changed()\" [attr.step]=\"inputStep(p)\" [disabled]=\"!editable || p.calculated || busy\" [attr.aria-label]=\"p.name\" />\n <select *ngIf=\"p.valueType === 'Choice'\" class=\"form-control form-control-sm\" [(ngModel)]=\"measurement(p).text\" (change)=\"changed()\" [disabled]=\"!editable || busy\"><option value=\"\">Seçin</option><option *ngFor=\"let option of p.options\" [value]=\"option\">{{ option }}</option></select>\n <input *ngIf=\"p.valueType === 'Text'\" class=\"form-control form-control-sm\" [(ngModel)]=\"measurement(p).text\" (ngModelChange)=\"changed()\" [disabled]=\"!editable || busy\" [attr.aria-label]=\"p.name\" />\n </td><td><span *ngIf=\"measurement(p).outOfLimit\" class=\"badge badge-danger\">Limit Dışı</span><span *ngIf=\"!measurement(p).outOfLimit && (measurement(p).number != null || measurement(p).text)\" class=\"badge badge-success\">{{ p.calculated ? 'Otomatik' : 'Uygun' }}</span></td>\n </tr></tbody>\n </table></div>\n <div *ngIf=\"palm\" class=\"border rounded p-3 mt-3\">\n <h6>Gemi / Parti Kompozit Numunesi</h6><label>Parti Kodu</label><div class=\"d-flex\"><input class=\"form-control\" [(ngModel)]=\"f.inspection.batchNumber\" [disabled]=\"!editable || busy\" /><button class=\"btn btn-outline-secondary ml-2\" (click)=\"refreshComposite()\">Numuneyi Getir</button></div>\n <p class=\"text-muted mt-2\">Kaynak mal girişi veya parti koduyla ilişkilendirilen numune diğer araçlarda salt okunur gösterilir.</p>\n <ng-container *ngIf=\"f.compositeSample as sample\"><p>{{ sample.analyst }} · {{ sample.sampledAt | date:'dd.MM.yyyy HH:mm' }}</p><div class=\"row\"><div class=\"col-md-3 mb-2\" *ngFor=\"let value of sample.measurements\"><strong>{{ value.parameterName }}</strong>: {{ value.number != null ? value.number : value.text }} {{ value.unit }}</div></div></ng-container>\n <button *ngIf=\"!f.compositeSample && editable && allowed('Composite') && !compositeEditor\" class=\"btn btn-outline-primary\" (click)=\"beginComposite()\">Kompozit Numune Gir</button>\n <div *ngIf=\"compositeEditor\" class=\"print-exclude\"><div class=\"row\"><div class=\"col-md-3 mb-2\" *ngFor=\"let p of parameters\"><label>{{ p.name }}</label><input *ngIf=\"p.valueType === 'Number'\" type=\"number\" class=\"form-control\" [(ngModel)]=\"measurement(p, true).number\" (ngModelChange)=\"changed(true)\" [disabled]=\"p.calculated || busy\" /><select *ngIf=\"p.valueType === 'Choice'\" class=\"form-control\" [(ngModel)]=\"measurement(p, true).text\" (change)=\"changed(true)\"><option value=\"\"></option><option *ngFor=\"let option of p.options\" [value]=\"option\">{{ option }}</option></select><input *ngIf=\"p.valueType === 'Text'\" class=\"form-control\" [(ngModel)]=\"measurement(p, true).text\" /></div></div><button class=\"btn btn-primary\" (click)=\"saveComposite()\" [disabled]=\"busy\">Numuneyi Kaydet</button><button class=\"btn btn-secondary ml-2\" (click)=\"compositeEditor = false\">Vazgeç</button></div>\n </div>\n </div></div>\n <div class=\"card\"><div class=\"card-body\"><h5>Değerlendirme</h5><div class=\"row\">\n <div class=\"col-md-3\"><label>Genel Değerlendirme</label><select class=\"form-control\" [(ngModel)]=\"decision\" [attr.data-print-value]=\"statusLabel(decision || (f.inspection.revision ? f.inspection.status : 'Waiting'))\" [disabled]=\"!editable || busy\"><option value=\"\">Seçin</option><option *ngIf=\"allowed('Accept')\" value=\"Accepted\">Kabul</option><option *ngIf=\"allowed('Reject')\" value=\"Rejected\">Ret</option></select></div>\n <div class=\"col-md-3\"><label>Analizi Yapan *</label><input class=\"form-control\" [(ngModel)]=\"f.inspection.analyst\" [disabled]=\"!editable || busy\" /></div>\n <div class=\"col-md-3\"><label>Kontrol Tarihi / Saati *</label><input type=\"datetime-local\" class=\"form-control\" [(ngModel)]=\"f.inspection.inspectedAt\" (change)=\"changed()\" [disabled]=\"!editable || busy\" /></div>\n <div class=\"col-md-3\"><label>Miktar (kg)</label><input class=\"form-control\" [value]=\"f.inspection.quantityKg == null ? 'Tartım sonrası gelir' : f.inspection.quantityKg\" disabled /></div>\n <div class=\"col-md-4 mt-3\"><label>Tank No</label><select class=\"form-control\" [(ngModel)]=\"f.inspection.tankCode\" [disabled]=\"!editable || busy\"><option value=\"\">Seçin</option><option *ngFor=\"let tank of tanks\" [value]=\"tank.code\">{{ tank.name }}</option></select></div>\n <div class=\"col-md-4 mt-3\"><label>Yağ Cinsi</label><select class=\"form-control\" [(ngModel)]=\"f.inspection.oilType\" (change)=\"changed()\" [disabled]=\"!editable || busy\"><option value=\"\">Seçin</option><option>Ayçiçek</option><option>Rafine Ayçiçek</option><option>Palm Oil</option><option>Palm Olein</option></select></div>\n <div class=\"col-md-12 mt-3\"><label>Açıklama / Diğer <span *ngIf=\"decision === 'Rejected'\">*</span></label><textarea rows=\"3\" class=\"form-control\" [(ngModel)]=\"f.inspection.notes\" [disabled]=\"!editable || busy\"></textarea></div>\n </div><div *ngIf=\"validationError\" class=\"alert alert-danger mt-3 mb-2\" role=\"alert\">{{ validationError }}</div><div class=\"mt-3\"><button *ngIf=\"editable\" class=\"btn btn-outline-primary mr-2\" (click)=\"save(false)\" [disabled]=\"busy || !parameters.length\">Kaydet</button><button *ngIf=\"editable && (allowed('Accept') || allowed('Reject'))\" class=\"btn btn-primary mr-2\" (click)=\"save(true)\" [disabled]=\"busy || !parameters.length\">Kaydet ve Onayla</button><button *ngIf=\"allowed('Print')\" class=\"btn btn-outline-secondary mr-2\" (click)=\"print()\" [disabled]=\"busy || !f.inspection.revision\">Formu Yazdır</button><button class=\"btn btn-secondary\" (click)=\"back()\">Vazgeç</button></div>\n <p *ngIf=\"!f.canEdit\" class=\"text-muted mt-3\">Araç tartıma girdiği, çıktığı veya iptal edildiği için kayıt salt okunur.</p>\n </div></div>\n </ng-container>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { PermissionService } from '@abp/ng.core';\nimport { MovementDetail, MovementType, QualityShift, QualityTank, QualityLaborant } from '../models/intake.models';\nimport { QualityApiService } from '../services/quality-api.service';\nimport { errorMessage } from '../services/quality-measurements';\n\n@Component({ selector: 'lib-quality-definitions', templateUrl: './quality-definitions.component.html', styleUrls: ['./intake.component.scss'] })\nexport class QualityDefinitionsComponent implements OnInit {\n tab: 'details' | 'tanks' | 'shifts' = 'details'; types: MovementType[] = []; details: MovementDetail[] = []; tanks: QualityTank[] = []; shifts: QualityShift[] = [];\n detail: MovementDetail | null = null; tank: QualityTank | null = null; shift: QualityShift | null = null; isNew = true; busy = false; error = ''; modalError = ''; success = '';\n laborants: QualityLaborant[] = []; laborantsBusy = false; laborantsError = '';\n profiles = [{ code: '', name: 'Soruları kendim tanımlayacağım' }, { code: 'RAW', name: 'Ham Ayçiçek Yağı' }, { code: 'REFINED', name: 'Rafine Yağ' }, { code: 'PALM', name: 'Palm Oil / Palm Olein' }, { code: 'COAL', name: 'Kömür' }, { code: 'NAOH', name: 'Kostik (NaOH)' }, { code: 'PHOSPHORIC', name: 'Fosforik Asit' }, { code: 'SULFURIC', name: 'Sülfürik Asit' }, { code: 'PERLITE', name: 'Perlit' }, { code: 'EARTH', name: 'Ağartma Toprağı' }];\n constructor(private api: QualityApiService, private permissions: PermissionService) {}\n get canEdit(): boolean { return this.permissions.getGrantedPolicy('Kalite.Definitions.Edit'); }\n get canDelete(): boolean { return this.permissions.getGrantedPolicy('Kalite.Definitions.Delete'); }\n ngOnInit(): void { this.load(); }\n load(): void {\n this.busy = true; this.error = '';\n if (this.tab === 'details') {\n this.api.movementTypes().subscribe({ next: x => this.types = x, error: e => this.error = errorMessage(e) });\n this.api.movementDetails().subscribe({ next: x => { this.details = x; this.busy = false; }, error: e => { this.error = errorMessage(e); this.busy = false; } });\n } else if (this.tab === 'tanks') this.api.tanks().subscribe({ next: x => { this.tanks = x; this.busy = false; }, error: e => { this.error = errorMessage(e); this.busy = false; } });\n else this.api.shifts().subscribe({ next: x => { this.shifts = x; this.busy = false; }, error: e => { this.error = errorMessage(e); this.busy = false; } });\n }\n selectTab(tab: 'details' | 'tanks' | 'shifts'): void { this.tab = tab; this.close(); this.load(); }\n name(code: string): string { return this.types.find(x => x.code === code)?.name || code; }\n openDetail(value?: MovementDetail): void { this.error = ''; this.modalError = ''; this.isNew = !value; this.detail = value ? { ...value } : { code: '', movementTypeCode: '', detailCode: '', name: '', profile: '', active: true }; }\n openTank(value?: QualityTank): void { this.error = ''; this.modalError = ''; this.isNew = !value; this.tank = value ? { ...value } : { code: '', name: '', type: 'Raw', capacity: null, active: true }; }\n openShift(value?: QualityShift): void {\n this.error = ''; this.modalError = '';\n this.isNew = !value;\n this.shift = value ? { ...value, analystUserId: value.analystUserId || null } : { code: '', name: '', startHour: 7, endHour: 15, analyst: '', analystUserId: null, active: true };\n this.laborants = []; this.laborantsBusy = true; this.laborantsError = '';\n this.api.laborants().subscribe({ next: x => { this.laborants = x; this.laborantsBusy = false; },\n error: e => { this.laborantsError = errorMessage(e); this.laborantsBusy = false; } });\n }\n laborantChanged(): void {\n if (this.shift) this.shift.analyst = this.laborants.find(x => x.id === this.shift!.analystUserId)?.userName || '';\n }\n get selectedLaborantMissing(): boolean { return !!this.shift?.analystUserId && !this.laborants.some(x => x.id === this.shift!.analystUserId); }\n close(): void { this.detail = null; this.tank = null; this.shift = null; this.modalError = ''; }\n save(): void {\n const value = this.detail || this.tank || this.shift; if (!value) return;\n value.code = this.isNew ? value.code.trim().toUpperCase() : value.code; this.busy = true; this.modalError = '';\n const request = this.detail ? this.api.saveDetail(this.detail, this.isNew) : this.tank ? this.api.saveTank(this.tank, this.isNew) : this.api.saveShift(this.shift!);\n request.subscribe({ next: () => { this.close(); this.success = 'Tanım kaydedildi.'; this.load(); }, error: e => { this.modalError = errorMessage(e); this.busy = false; } });\n }\n delete(): void {\n const value = this.detail || this.tank || this.shift;\n if (!value || this.isNew || this.busy) return;\n const type = this.detail ? 'araç hareket türü detayını' : this.tank ? 'tankı' : 'vardiyayı';\n if (!confirm(`${value.code} kodlu ${type} ve bağlı tanımları kalıcı olarak silinsin mi?`)) return;\n this.busy = true; this.modalError = '';\n const request = this.detail ? this.api.deleteDetail(value.code) : this.tank ? this.api.deleteTank(value.code) : this.api.deleteShift(value.code);\n request.subscribe({ next: () => { this.close(); this.success = 'Tanım silindi.'; this.load(); }, error: e => { this.modalError = errorMessage(e); this.busy = false; } });\n }\n}\n","<div class=\"container-fluid\"><h3>Kalite Tanımları</h3><div class=\"card\"><div class=\"card-body\">\n <div class=\"d-flex justify-content-between mb-3\"><div class=\"btn-group\">\n <button class=\"btn\" [class.btn-primary]=\"tab === 'details'\" [class.btn-outline-secondary]=\"tab !== 'details'\" (click)=\"selectTab('details')\">Araç Hareket Türleri Detay</button>\n <button class=\"btn\" [class.btn-primary]=\"tab === 'tanks'\" [class.btn-outline-secondary]=\"tab !== 'tanks'\" (click)=\"selectTab('tanks')\">Tanklar</button>\n <button class=\"btn\" [class.btn-primary]=\"tab === 'shifts'\" [class.btn-outline-secondary]=\"tab !== 'shifts'\" (click)=\"selectTab('shifts')\">Vardiyalar</button>\n </div><button class=\"btn btn-primary\" *ngIf=\"canEdit\" [disabled]=\"busy\" (click)=\"tab === 'details' ? openDetail() : tab === 'tanks' ? openTank() : openShift()\">+ Yeni Kayıt</button></div>\n <div *ngIf=\"error\" class=\"alert alert-danger\">{{ error }}</div><div *ngIf=\"success\" class=\"alert alert-success\">{{ success }}</div><div *ngIf=\"busy\" class=\"quality-loading\" role=\"status\">Tanımlar yükleniyor…</div>\n <div class=\"table-responsive\" [hidden]=\"busy\">\n <table *ngIf=\"tab === 'details'\" class=\"table table-striped table-bordered\"><thead><tr><th>İşlemler</th><th>Araç Hareket Türü</th><th>Detay Kodu</th><th>Detay Adı</th><th>Aktif</th></tr></thead><tbody><tr *ngFor=\"let d of details\"><td><button *ngIf=\"canEdit\" class=\"btn btn-sm btn-outline-primary\" (click)=\"openDetail(d)\">Düzenle</button><a class=\"quality-questions-link\" [routerLink]=\"['/kalite/parameters']\" [queryParams]=\"{type: 'Input', detail: d.code}\">Kalite Soruları</a></td><td>{{ name(d.movementTypeCode) }}</td><td>{{ d.detailCode || '—' }}</td><td>{{ d.name || '—' }}</td><td>{{ d.active ? 'Evet' : 'Hayır' }}</td></tr></tbody></table>\n <table *ngIf=\"tab === 'tanks'\" class=\"table table-striped table-bordered\"><thead><tr><th>İşlemler</th><th>Kod</th><th>Ad</th><th>Tip</th><th>Kapasite</th><th>Aktif</th></tr></thead><tbody><tr *ngFor=\"let t of tanks\"><td><button *ngIf=\"canEdit\" class=\"btn btn-sm btn-outline-primary\" (click)=\"openTank(t)\">Düzenle</button></td><td>{{ t.code }}</td><td>{{ t.name }}</td><td>{{ t.type === 'Raw' ? 'Ham Yağ' : t.type === 'Refined' ? 'Rafine' : t.type === 'Product' ? 'Ürün' : 'Ara' }}</td><td>{{ t.capacity }}</td><td>{{ t.active ? 'Evet' : 'Hayır' }}</td></tr></tbody></table>\n <table *ngIf=\"tab === 'shifts'\" class=\"table table-striped table-bordered\"><thead><tr><th>İşlemler</th><th>Kod</th><th>Ad</th><th>Başlangıç</th><th>Bitiş</th><th>Laborant</th><th>Aktif</th></tr></thead><tbody><tr *ngFor=\"let s of shifts\"><td><button *ngIf=\"canEdit\" class=\"btn btn-sm btn-outline-primary\" (click)=\"openShift(s)\">Düzenle</button></td><td>{{ s.code }}</td><td>{{ s.name }}</td><td>{{ s.startHour | number:'2.0-0' }}:00</td><td>{{ s.endHour | number:'2.0-0' }}:00</td><td>{{ s.analyst }}</td><td>{{ s.active ? 'Evet' : 'Hayır' }}</td></tr></tbody></table>\n </div><p *ngIf=\"tab === 'details'\" class=\"text-muted\">Etkin tanımlarda bulunan araç hareket türleri kalite kontrole tabidir. Detay kodu ve adı boş bırakılarak yalnız hareket türü başlığı tanımlanabilir.</p>\n</div></div></div>\n<abp-modal [visible]=\"!!(detail || tank || shift)\" (visibleChange)=\"!$event && close()\" [busy]=\"busy\" [options]=\"{size: 'lg'}\">\n <ng-template #abpHeader><h5>{{ isNew ? 'Yeni Tanım' : 'Tanımı Düzenle' }}</h5></ng-template>\n <ng-template #abpBody><div *ngIf=\"modalError\" class=\"alert alert-danger\">{{ modalError }}</div>\n <div *ngIf=\"detail as d\" class=\"row\">\n <div class=\"col-md-4\"><label>Kayıt Kodu *</label><input class=\"form-control\" [(ngModel)]=\"d.code\" [disabled]=\"!isNew\" maxlength=\"24\" /></div><div class=\"col-md-8\"><label>Araç Hareket Türü *</label><select class=\"form-control\" [(ngModel)]=\"d.movementTypeCode\" [disabled]=\"!isNew\"><option value=\"\">Seçin</option><option *ngFor=\"let type of types\" [value]=\"type.code\">{{ type.name }}</option></select></div>\n <div class=\"col-md-4 mt-3\"><label>Detay Kodu</label><input class=\"form-control\" [(ngModel)]=\"d.detailCode\" /></div><div class=\"col-md-8 mt-3\"><label>Detay Adı</label><input class=\"form-control\" [(ngModel)]=\"d.name\" /></div>\n <div class=\"col-md-12 mt-3\"><label>Başlangıç Soruları</label><select class=\"form-control\" [(ngModel)]=\"d.profile\" [disabled]=\"!isNew\"><option *ngFor=\"let p of profiles\" [value]=\"p.code\">{{ p.name }}</option></select><small class=\"text-muted\">Seçilen şablonun soruları ve limitleri Kalite Parametreleri ekranından düzenlenebilir.</small></div><div class=\"col-md-12 mt-3\"><label><input type=\"checkbox\" [(ngModel)]=\"d.active\" /> Aktif</label></div>\n </div>\n <div *ngIf=\"tank as t\" class=\"row\"><div class=\"col-md-4\"><label>Kod *</label><input class=\"form-control\" [(ngModel)]=\"t.code\" [disabled]=\"!isNew\" /></div><div class=\"col-md-8\"><label>Ad *</label><input class=\"form-control\" [(ngModel)]=\"t.name\" /></div><div class=\"col-md-6 mt-3\"><label>Tip</label><select class=\"form-control\" [(ngModel)]=\"t.type\"><option value=\"Raw\">Ham Yağ</option><option value=\"Refined\">Rafine</option><option value=\"Intermediate\">Ara</option><option value=\"Product\">Ürün</option></select></div><div class=\"col-md-6 mt-3\"><label>Kapasite</label><input type=\"number\" min=\"0\" class=\"form-control\" [(ngModel)]=\"t.capacity\" /></div><div class=\"col-md-12 mt-3\"><label><input type=\"checkbox\" [(ngModel)]=\"t.active\" /> Aktif</label></div></div>\n <div *ngIf=\"shift as s\" class=\"row\">\n <div class=\"col-md-3\"><label>Kod *</label><input class=\"form-control\" [(ngModel)]=\"s.code\" [disabled]=\"!isNew\" /></div>\n <div class=\"col-md-9\"><label>Ad *</label><input class=\"form-control\" [(ngModel)]=\"s.name\" /></div>\n <div class=\"col-md-4 mt-3\"><label>Başlangıç Saati</label><input type=\"number\" min=\"0\" max=\"23\" class=\"form-control\" [(ngModel)]=\"s.startHour\" /></div>\n <div class=\"col-md-4 mt-3\"><label>Bitiş Saati</label><input type=\"number\" min=\"0\" max=\"23\" class=\"form-control\" [(ngModel)]=\"s.endHour\" /></div>\n <div class=\"col-md-4 mt-3\"><label>Laborant</label>\n <select class=\"form-control\" [(ngModel)]=\"s.analystUserId\" (change)=\"laborantChanged()\" [disabled]=\"busy || laborantsBusy\">\n <option [ngValue]=\"null\">{{ !s.analystUserId && s.analyst ? 'Mevcut: ' + s.analyst + ' (eski kayıt)' : 'Seçin' }}</option>\n <option *ngIf=\"selectedLaborantMissing\" [ngValue]=\"s.analystUserId\" disabled>{{ s.analyst }} (seçilebilir değil)</option>\n <option *ngFor=\"let user of laborants\" [ngValue]=\"user.id\">{{ user.userName }}</option>\n </select>\n <small *ngIf=\"laborantsBusy\" class=\"text-muted\">Kullanıcılar yükleniyor…</small>\n <small *ngIf=\"!laborantsBusy && !laborantsError && !laborants.length\" class=\"text-muted\">Bu firmada aktif ve proses veri girişi yetkisi olan kullanıcı bulunamadı.</small>\n <div *ngIf=\"laborantsError\" class=\"text-danger\" role=\"alert\">{{ laborantsError }}</div>\n </div>\n <div class=\"col-md-12 mt-3\"><label><input type=\"checkbox\" [(ngModel)]=\"s.active\" /> Aktif</label></div>\n </div>\n </ng-template><ng-template #abpFooter><button class=\"btn btn-danger mr-auto\" *ngIf=\"canDelete && !isNew\" [disabled]=\"busy\" (click)=\"delete()\">Sil</button><button class=\"btn btn-secondary\" [disabled]=\"busy\" (click)=\"close()\">Vazgeç</button><button class=\"btn btn-primary\" [disabled]=\"busy\" (click)=\"save()\">Kaydet</button></ng-template>\n</abp-modal>\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { PermissionService } from '@abp/ng.core';\nimport { QualityApiService } from '../services/quality-api.service';\nimport { MovementType, ReportFilter, QualityReport, ReportRow, ReportSection } from '../models/intake.models';\nimport { QualityForm, QualityFacility, QualityParameter } from '../models/quality.models';\nimport { download, errorMessage, localDate, statusLabel } from '../services/quality-measurements';\n\n@Component({ selector: 'lib-quality-reports', templateUrl: './quality-reports.component.html', styleUrls: ['./intake.component.scss'] })\nexport class QualityReportsComponent implements OnInit {\n filter: ReportFilter = { type: 'Input', from: localDate(new Date(new Date().getFullYear(), new Date().getMonth(), 1)), until: localDate(), groupBy: 'None' };\n report: QualityReport | null = null; forms: QualityForm[] = []; facilities: QualityFacility[] = []; types: MovementType[] = []; busy = false; error = ''; statusLabel = statusLabel;\n constructor(private api: QualityApiService, private route: ActivatedRoute, private permissions: PermissionService) {}\n ngOnInit(): void {\n this.filter.type = this.route.snapshot.data['type'] || 'Input';\n this.api.reportForms().subscribe({ next: x => this.forms = x, error: e => this.error = errorMessage(e) });\n this.api.definitionFacilities().subscribe({ next: x => this.facilities = x, error: e => this.error = errorMessage(e) });\n this.api.qualityMovementTypes().subscribe({ next: x => this.types = x, error: e => this.error = errorMessage(e) });\n }\n get canExport(): boolean { return this.permissions.getGrantedPolicy('Kalite.Reports.Export'); }\n get visibleForms(): QualityForm[] { return this.forms.filter(x => (x.controlType || 'Process') === (this.filter.type === 'Process' ? 'Process' : 'Input')); }\n load(): void { this.busy = true; this.error = ''; this.api.report(this.filter).subscribe({ next: x => { this.report = x; this.busy = false; }, error: e => { this.error = errorMessage(e); this.busy = false; } }); }\n measurement(row: ReportRow, p: QualityParameter) { return row.measurements.find(x => x.parameterCode === p.code); }\n pdf(): void { this.api.reportPdf(this.filter).subscribe({ next: b => download(b, `Kalite-${this.filter.type}-${this.filter.from}.pdf`), error: e => this.error = errorMessage(e) }); }\n excel(): void {\n this.busy = true; this.error = '';\n this.api.report(this.filter, true).subscribe({ next: async report => {\n try {\n const { Workbook } = await import('exceljs');\n const workbook = new Workbook(); workbook.creator = 'Kalite';\n let index = 0;\n if (report.type === 'Rejected') {\n const summary = workbook.addWorksheet('Ret Özeti');\n summary.addRow(['Grup', 'Toplam Kayıt', 'Ret Adedi', 'Ret Oranı (%)']);\n report.rejectionSummary.forEach(g => summary.addRow([g.groupName, g.total, g.rejected, g.rate]));\n summary.columns.forEach(c => c.width = 25);\n }\n for (const section of report.sections) {\n const sheet = workbook.addWorksheet(`Form ${++index}`);\n sheet.addRow([section.form.name]);\n sheet.addRow(['Doküman', section.form.documentCode, 'Yayın', section.form.publicationDate.slice(0, 10), 'Revizyon', section.form.revisionDate.slice(0, 10), section.form.revisionNumber]);\n sheet.addRow([section.groupName]);\n const divisor = section.form.quantityUnit === 't' ? 1000 : 1;\n const fixed = ['Tarih / Saat', 'Plaka', 'Dorse', 'Muhatap', 'Gemi', 'Hareket Türü', 'Detay', 'Menşei', 'Stok Nakli', 'Tank', 'Aktarılan Tank', 'Yağ Cinsi', `Miktar (${section.form.quantityUnit || 'kg'})`, 'Kalite Durumu', 'Analizi Yapan', 'Açıklama'];\n const header = sheet.addRow([...fixed, ...section.columns.map(p => p.name + (p.unit ? ` (${p.unit})` : ''))]);\n header.font = { bold: true }; header.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FFE8E1EF' } };\n for (const row of section.rows) {\n const excelRow = sheet.addRow([new Date(row.date), row.composite ? 'Gemi Kompozit Numunesi' : row.plate, row.trailerPlate,\n row.partner, row.ship, row.movementType, row.detail, row.origin === 'Imported' ? 'İthal' : row.origin === 'Domestic' ? 'İç Piyasa' : '',\n row.stockTransfer, row.tank, row.outputTank, row.oilType, row.quantityKg == null ? null : row.quantityKg / divisor, statusLabel(row.status), row.analyst, row.notes,\n ...section.columns.map(p => { const m = this.measurement(row, p); return m?.number ?? m?.text ?? ''; })]);\n excelRow.getCell(1).numFmt = 'dd.mm.yyyy hh:mm'; excelRow.getCell(13).numFmt = '#,##0.00';\n if (row.status === 'Rejected') excelRow.eachCell(c => c.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FFFFE1E6' } });\n section.columns.forEach((p, i) => {\n const cell = excelRow.getCell(fixed.length + i + 1);\n cell.numFmt = p.decimalPlaces ? '0.' + '0'.repeat(p.decimalPlaces) : '0';\n if (this.measurement(row, p)?.outOfLimit) cell.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FFFFAAAA' } };\n });\n }\n const totals: (string | number | null)[] = Array(fixed.length).fill(null); totals[0] = 'ORTALAMA'; totals[1] = section.averageMode === 'Weighted' ? 'Miktar ağırlıklı' : 'Aritmetik'; totals[12] = section.totalKg / divisor;\n sheet.addRow([...totals, ...section.columns.map(p => section.averages[p.code] ?? null)]).font = { bold: true };\n sheet.addRow(['Analizi Yapan / Kontrol Eden', ...Array.from(new Set(section.rows.map(r => r.analyst).filter(Boolean)))]);\n if (section.form.documentCode === 'FR.85') sheet.addRow(['KABUL', '', 'RED', '', 'ŞARTLI KABUL', '']);\n sheet.columns.forEach(c => { c.width = 20; c.alignment = { vertical: 'middle', wrapText: true }; });\n sheet.views = [{ state: 'frozen', ySplit: 4, xSplit: 2 }];\n sheet.pageSetup = { orientation: 'landscape', paperSize: 8, fitToPage: true, fitToWidth: 1, fitToHeight: 0 };\n }\n if (!workbook.worksheets.length) workbook.addWorksheet('Kayıt Yok').addRow(['Seçilen filtrelerde kayıt bulunamadı.']);\n const data = await workbook.xlsx.writeBuffer();\n download(new Blob([data as BlobPart], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }), `Kalite-${report.type}-${this.filter.from}.xlsx`);\n } catch (e) { this.error = errorMessage(e); } finally { this.busy = false; }\n }, error: e => { this.error = errorMessage(e); this.busy = false; } });\n }\n}\n","<div class=\"container-fluid\"><h3>{{ filter.type === 'Process' ? 'Rafineri Proses Analiz Raporu' : filter.type === 'Rejected' ? 'Kalite Kontrol Ret Raporu' : 'Girdi Kontrol Raporları' }}</h3>\r\n <div class=\"card\"><div class=\"card-body\"><div class=\"row\">\r\n <div class=\"col-md-3\"><label>Başlangıç</label><input type=\"date\" class=\"form-control\" [(ngModel)]=\"filter.from\" /></div><div class=\"col-md-3\"><label>Bitiş</label><input type=\"date\" class=\"form-control\" [(ngModel)]=\"filter.until\" /></div>\r\n <div class=\"col-md-3\"><label>Form</label><select class=\"form-control\" [(ngModel)]=\"filter.formCode\"><option value=\"\">Tümü</option><option *ngFor=\"let form of visibleForms\" [value]=\"form.code\">{{ form.documentCode }} – {{ form.name }}</option></select></div>\r\n <div class=\"col-md-3\" *ngIf=\"filter.type === 'Process'\"><label>Tesis</label><select class=\"form-control\" [(ngModel)]=\"filter.facilityCode\"><option value=\"\">Tümü</option><option *ngFor=\"let facility of facilities\" [value]=\"facility.code\">{{ facility.name }}</option></select></div>\r\n <div class=\"col-md-3\" *ngIf=\"filter.type !== 'Process'\"><label>Hareket Türü</label><select class=\"form-control\" [(ngModel)]=\"filter.movementTypeCode\"><option value=\"\">Tümü</option><option *ngFor=\"let type of types\" [value]=\"type.code\">{{ type.name }}</option></select></div>\r\n <div class=\"col-md-3 mt-3\" *ngIf=\"filter.type !== 'Process'\"><label>Muhatap</label><input class=\"form-control\" [(ngModel)]=\"filter.partner\" /></div><div class=\"col-md-3 mt-3\" *ngIf=\"filter.type !== 'Process'\"><label>Gemi</label><input class=\"form-control\" [(ngModel)]=\"filter.ship\" /></div>\r\n <div class=\"col-md-3 mt-3\" *ngIf=\"filter.type !== 'Process'\"><label>Gruplama</label><select class=\"form-control\" [(ngModel)]=\"filter.groupBy\"><option value=\"None\">Yok</option><option value=\"Ship\">Gemi / Parti</option><option value=\"Partner\">Muhatap</option><option value=\"Movement\">Hareket Türü / Malzeme</option><option value=\"Month\">Ay</option></select></div>\r\n <div class=\"col-md-3 mt-3\"><label>Durum</label><select class=\"form-control\" [(ngModel)]=\"filter.status\"><option value=\"\">Tümü</option><ng-container *ngIf=\"filter.type === 'Process'\"><option value=\"Draft\">Taslak</option><option value=\"LaborantSigned\">Laborant İmzalı</option><option value=\"Checked\">Kontrol Edildi</option><option value=\"Approved\">Onaylı</option></ng-container><ng-container *ngIf=\"filter.type !== 'Process'\"><option value=\"Draft\">Taslak</option><option value=\"Accepted\">Kabul</option><option value=\"Rejected\">Ret</option></ng-container></select></div>\r\n </div><div class=\"mt-3\"><button class=\"btn btn-primary mr-2\" (click)=\"load()\" [disabled]=\"busy\">Raporu Getir</button><button *ngIf=\"canExport\" class=\"btn btn-outline-primary mr-2\" (click)=\"pdf()\" [disabled]=\"busy\">PDF</button><button *ngIf=\"canExport\" class=\"btn btn-outline-primary\" (click)=\"excel()\" [disabled]=\"busy\">Excel</button></div>\r\n <div *ngIf=\"error\" class=\"alert alert-danger mt-3\">{{ error }}</div><div *ngIf=\"busy\" class=\"quality-loading\" role=\"status\">Rapor hazırlanıyor…</div>\r\n </div></div>\r\n <ng-container *ngIf=\"report as r\"><div class=\"card mt-3\"><div class=\"card-body\">Toplam Kayıt: <strong>{{ r.totalRecords }}</strong> · Ret: <strong>{{ r.rejectedRecords }}</strong> · Ret Oranı: <strong>% {{ r.rejectionRate }}</strong>\r\n <table *ngIf=\"r.type === 'Rejected'\" class=\"table table-sm mt-3\"><thead><tr><th>Grup</th><th>Toplam</th><th>Ret</th><th>Ret Oranı (%)</th></tr></thead><tbody><tr *ngFor=\"let g of r.rejectionSummary\"><td>{{ g.groupName }}</td><td>{{ g.total }}</td><td>{{ g.rejected }}</td><td>{{ g.rate }}</td></tr></tbody></table>\r\n </div></div>\r\n <div class=\"card mt-3\" *ngFor=\"let section of r.sections\"><div class=\"card-body\"><h5>{{ section.form.name }} – {{ section.groupName }}</h5><p class=\"text-muted\">{{ section.form.documentCode }} · Yayın: {{ section.form.publicationDate | date:'dd.MM.yyyy' }} · Revizyon: {{ section.form.revisionDate | date:'dd.MM.yyyy' }} / {{ section.form.revisionNumber }}</p>\r\n <div class=\"table-responsive\"><table class=\"table table-bordered table-sm\"><thead><tr><th>Tarih / Saat</th><th>{{ r.type === 'Process' ? 'Tank / Aktarılan Tank' : 'Plaka / Firma / Gemi' }}</th><th>Durum</th><th>Miktar ({{ section.form.quantityUnit || 'kg' }})</th><th *ngFor=\"let p of section.columns\">{{ p.name }} <small>{{ p.unit }}</small></th><th>Analizi Yapan / Açıklama</th></tr></thead>\r\n <tbody><tr *ngFor=\"let row of section.rows\" [class.rejected-row]=\"row.status === 'Rejected'\"><td>{{ row.date | date:'dd.MM.yyyy HH:mm' }}</td><td>{{ row.composite ? 'Gemi Kompozit Numunesi' : r.type === 'Process' ? ((row.tank || row.outputTank) ? (row.tank || '') + ' / ' + (row.outputTank || '') : '') : row.plate }}<br />{{ row.partner }} {{ row.ship }}</td><td>{{ statusLabel(row.status) }}</td><td>{{ row.quantityKg == null ? '' : row.quantityKg / (section.form.quantityUnit === 't' ? 1000 : 1) }}</td><td *ngFor=\"let p of section.columns\" [class.out-of-limit]=\"measurement(row, p)?.outOfLimit\">{{ measurement(row, p)?.number != null ? (measurement(row, p)?.number | number:'1.0-8') : measurement(row, p)?.text }}</td><td>{{ row.analyst }}<br />{{ row.notes }}</td></tr>\r\n <tr class=\"bg-light\"><th>ORTALAMA</th><th>{{ section.averageMode === 'Weighted' ? 'Miktar ağırlıklı' : 'Aritmetik' }}</th><th>TOPLAM</th><th>{{ section.totalKg / (section.form.quantityUnit === 't' ? 1000 : 1) | number:'1.0-2' }}</th><td *ngFor=\"let p of section.columns\">{{ section.averages[p.code] | number:'1.0-8' }}</td><td></td></tr></tbody></table></div>\r\n </div></div><p *ngIf=\"!r.sections.length\" class=\"text-muted mt-3\">Seçilen filtrelerde kayıt bulunamadı.</p>\r\n </ng-container>\r\n</div>\r\n","import { Component, OnInit, OnDestroy } from '@angular/core';\r\nimport { QualityApiService } from '../services/quality-api.service';\r\nimport { QualityNotification, NotificationSettings } from '../models/intake.models';\r\nimport { errorMessage } from '../services/quality-measurements';\r\nimport { Router } from '@angular/router';\r\nimport { ConfigStateService, PermissionService } from '@abp/ng.core';\r\nimport { Subscription, timer, of } from 'rxjs';\r\nimport { switchMap, catchError } from 'rxjs/operators';\r\n\r\n@Component({ selector: 'lib-quality-notifications', template: `<div class=\"container-fluid\"><h3>Kalite Bildirimleri</h3><div *ngIf=\"error\" class=\"alert alert-danger\">{{error}}</div><div class=\"card mb-2\" *ngFor=\"let n of items\"><div class=\"card-body\"><strong>{{n.title}}</strong> <span *ngIf=\"!n.isRead\" class=\"badge badge-primary\">Yeni</span><small class=\"float-right\">{{n.createdAt | date:'dd.MM.yyyy HH:mm'}}</small><div class=\"mt-2\" [innerHTML]=\"n.body\"></div><button class=\"btn btn-outline-primary mt-2\" (click)=\"open(n)\">Kaydı Aç</button><button class=\"btn btn-outline-secondary mt-2 ml-2\" *ngIf=\"!n.isRead\" (click)=\"read(n)\">Okundu İşaretle</button></div></div><p *ngIf=\"!items.length\">Bildirim bulunmuyor.</p></div>` })\r\nexport class QualityNotificationsComponent implements OnInit {\r\n items: QualityNotification[] = []; error = '';\r\n constructor(private api: QualityApiService, private router: Router) {}\r\n ngOnInit(): void { this.api.notifications().subscribe({ next: x => this.items = x, error: e => this.error = errorMessage(e) }); }\r\n read(n: QualityNotification): void { this.api.readNotification(n.code).subscribe({ next: () => n.isRead = true, error: e => this.error = errorMessage(e) }); }\r\n open(n: QualityNotification): void { this.read(n); this.router.navigateByUrl(n.url); }\r\n}\r\n\r\n@Component({ selector: 'lib-quality-notification-bell', template: `<a class=\"nav-link position-relative\" routerLink=\"/kalite/notifications\" aria-label=\"Kalite bildirimleri\"><i class=\"fas fa-bell\" aria-hidden=\"true\"></i><span class=\"badge badge-danger\" *ngIf=\"count\">{{count}}</span></a>` })\r\nexport class QualityNotificationBellComponent implements OnInit, OnDestroy {\r\n count = 0; private subscription?: Subscription;\r\n constructor(private api: QualityApiService, private config: ConfigStateService) {}\r\n ngOnInit(): void { this.subscription = this.config.getOne$('currentUser').pipe(switchMap(user => user?.isAuthenticated ? timer(0, 60000).pipe(switchMap(() => this.api.unreadNotifications().pipe(catchError(() => of(0))))) : of(0))).subscribe(count => this.count = count); }\r\n ngOnDestroy(): void { this.subscription?.unsubscribe(); }\r\n}\r\n\r\n@Component({ selector: 'lib-quality-notification-settings', template: `<div class=\"container-fluid\"><h3>Kalite Bildirim Ayarları</h3><div *ngIf=\"error\" class=\"alert alert-danger\">{{error}}</div><div *ngIf=\"success\" class=\"alert alert-success\">{{success}}</div><div class=\"card\" *ngIf=\"settings as s\"><div class=\"card-body\"><label class=\"d-block\"><input type=\"checkbox\" [(ngModel)]=\"s.portalEnabled\" /> Portal içi bildirim</label><label class=\"d-block\"><input type=\"checkbox\" [(ngModel)]=\"s.emailEnabled\" /> E-posta bildirimi</label><label class=\"d-block\"><input type=\"checkbox\" [(ngModel)]=\"s.reminderEnabled\" /> Bekleyen kontrol hatırlatması</label><label class=\"mt-3\">Portal Adresi (e-posta bağlantıları için)</label><input class=\"form-control\" [(ngModel)]=\"s.portalBaseUrl\" placeholder=\"https://portal.example.com\" /><div class=\"row mt-3\"><div class=\"col-md-4\"><label>Hatırlatma Süresi (dakika)</label><input type=\"number\" min=\"1\" max=\"10080\" class=\"form-control\" [(ngModel)]=\"s.reminderMinutes\" /></div><div class=\"col-md-4\"><label>Kalite Alıcı Rolleri (her satır bir rol)</label><textarea class=\"form-control\" rows=\"4\" [(ngModel)]=\"qualityRoles\"></textarea></div><div class=\"col-md-4\"><label>Ret Bildirimi Alıcı Rolleri (her satır bir rol)</label><textarea class=\"form-control\" rows=\"4\" [(ngModel)]=\"securityRoles\"></textarea></div></div><button class=\"btn btn-primary mt-3\" (click)=\"save()\" [disabled]=\"busy\">Kaydet</button><h5 class=\"mt-4\" *ngIf=\"failures.length\">Gönderim Sorunları</h5><div class=\"alert alert-warning\" *ngFor=\"let failure of failures\">{{failure.title || failure.eventType}} · {{failure.error}}</div></div></div></div>` })\r\nexport class QualityNotificationSettingsComponent implements OnInit {\r\n settings: NotificationSettings | null = null; failures: any[] = []; qualityRoles = ''; securityRoles = ''; error = ''; success = ''; busy = false;\r\n constructor(private api: QualityApiService) {}\r\n ngOnInit(): void { this.api.notificationFailures().subscribe({next: x => this.failures = x}); this.api.notificationSettings().subscribe({ next: x => { this.settings = x; this.qualityRoles = x.qualityRoles.join('\\n'); this.securityRoles = x.securityRoles.join('\\n'); }, error: e => this.error = errorMessage(e) }); }\r\n save(): void { if (!this.settings) return; this.busy = true; this.settings.qualityRoles = this.qualityRoles.split('\\n').map(x => x.trim()).filter(Boolean); this.settings.securityRoles = this.securityRoles.split('\\n').map(x => x.trim()).filter(Boolean); this.api.saveNotificationSettings(this.settings).subscribe({ next: () => { this.busy = false; this.success = 'Bildirim ayarları kaydedildi.'; }, error: e => { this.error = errorMessage(e); this.busy = false; } }); }\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { ProcessAnalysisComponent } from './components/process-analysis.component';\nimport { QualityParametersComponent } from './components/quality-parameters.component';\nimport { IntakeListComponent } from './components/intake-list.component';\nimport { IntakeFormComponent } from './components/intake-form.component';\nimport { QualityDefinitionsComponent } from './components/quality-definitions.component';\nimport { QualityReportsComponent } from './components/quality-reports.component';\nimport { QualityNotificationsComponent, QualityNotificationSettingsComponent } from './components/quality-notifications.component';\n\nconst routes: Routes = [\n {\n path: '',\n pathMatch: 'full',\n redirectTo: 'process-analysis',\n },\n { path: 'process-analysis', component: ProcessAnalysisComponent },\n { path: 'parameters', component: QualityParametersComponent },\n { path: 'intake', component: IntakeListComponent },\n { path: 'intake/:id', component: IntakeFormComponent },\n { path: 'definitions', component: QualityDefinitionsComponent },\n { path: 'reports/input', component: QualityReportsComponent, data: { type: 'Input' } },\n { path: 'reports/process', component: QualityReportsComponent, data: { type: 'Process' } },\n { path: 'reports/rejected', component: QualityReportsComponent, data: { type: 'Rejected' } },\n { path: 'notifications', component: QualityNotificationsComponent },\n { path: 'notification-settings', component: QualityNotificationSettingsComponent },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class KaliteRoutingModule {}\n","import { APP_INITIALIZER, ModuleWithProviders, NgModule } from '@angular/core';\nimport { CoreModule } from '@abp/ng.core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { NavItemsService } from '@abp/ng.theme.shared';\nimport { QualityNotificationsComponent, QualityNotificationBellComponent, QualityNotificationSettingsComponent } from './components/quality-notifications.component';\n\n@NgModule({ declarations: [QualityNotificationsComponent, QualityNotificationBellComponent, QualityNotificationSettingsComponent], imports: [CoreModule, FormsModule, RouterModule], exports: [QualityNotificationBellComponent, QualityNotificationsComponent, QualityNotificationSettingsComponent] })\nexport class KaliteNotificationModule {\n static forRoot(): ModuleWithProviders<KaliteNotificationModule> {\n return { ngModule: KaliteNotificationModule, providers: [{ provide: APP_INITIALIZER, multi: true, deps: [NavItemsService], useFactory: configureNotifications }] };\n }\n}\nexport function configureNotifications(nav: NavItemsService) {\n return () => nav.addItems([{ id: 'Kalite.Notifications', component: QualityNotificationBellComponent, order: 90 }]);\n}\n","import { NgModule, NgModuleFactory, ModuleWithProviders } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CoreModule, LazyModuleFactory } from '@abp/ng.core';\nimport { ThemeSharedModule } from '@abp/ng.theme.shared';\nimport { KaliteComponent } from './components/kalite.component';\nimport { KaliteRoutingModule } from './kalite-routing.module';\nimport { ProcessAnalysisComponent } from './components/process-analysis.component';\nimport { QualityParametersComponent } from './components/quality-parameters.component';\nimport { IntakeListComponent } from './components/intake-list.component';\nimport { IntakeFormComponent } from './components/intake-form.component';\nimport { QualityDefinitionsComponent } from './components/quality-definitions.component';\nimport { QualityReportsComponent } from './components/quality-reports.component';\nimport { KaliteNotificationModule } from './kalite-notification.module';\nimport { DxDataGridModule } from 'devextreme-angular';\nimport { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';\n\n@NgModule({\n declarations: [KaliteComponent, ProcessAnalysisComponent, QualityParametersComponent, IntakeListComponent,\n IntakeFormComponent, QualityDefinitionsComponent, QualityReportsComponent],\n imports: [CoreModule, ThemeSharedModule, FormsModule, DxDataGridModule, NgbDropdownModule, KaliteNotificationModule, KaliteRoutingModule],\n exports: [ProcessAnalysisComponent, QualityParametersComponent],\n})\nexport class KaliteModule {\n static forChild(): ModuleWithProviders<KaliteModule> {\n return {\n ngModule: KaliteModule,\n providers: [],\n };\n }\n\n static forLazy(): NgModuleFactory<KaliteModule> {\n return new LazyModuleFactory(KaliteModule.forChild());\n }\n}\n","/*\n * Public API Surface of kalite\n */\n\nexport * from './lib/components/kalite.component';\nexport * from './lib/components/process-analysis.component';\nexport * from './lib/components/quality-parameters.component';\nexport * from './lib/models/quality.models';\nexport * from './lib/services/quality-api.service';\nexport * from './lib/services/kalite.service';\nexport * from './lib/kalite.module';\nexport * from './lib/kalite-notification.module';\nexport * from './lib/models/intake.models';\nexport * from './lib/components/intake-list.component';\nexport * from './lib/components/intake-form.component';\nexport * from './lib/components/quality-notifications.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.KaliteService","i1.QualityApiService","i4","i3","i5","i2"],"mappings":"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"}
1
+ {"version":3,"file":"hitsoft-kadooglu.kalite.mjs","sources":["../../../projects/kalite/src/lib/services/kalite.service.ts","../../../projects/kalite/src/lib/components/kalite.component.ts","../../../projects/kalite/src/lib/services/quality-measurements.ts","../../../projects/kalite/src/lib/services/quality-api.service.ts","../../../projects/kalite/src/lib/components/process-analysis.component.ts","../../../projects/kalite/src/lib/components/process-analysis.component.html","../../../projects/kalite/src/lib/components/quality-parameters.component.ts","../../../projects/kalite/src/lib/components/quality-parameters.component.html","../../../projects/kalite/src/lib/components/intake-list.component.ts","../../../projects/kalite/src/lib/components/intake-grid.component.html","../../../projects/kalite/src/lib/services/print-form.ts","../../../projects/kalite/src/lib/components/intake-form.component.ts","../../../projects/kalite/src/lib/components/intake-form.component.html","../../../projects/kalite/src/lib/components/quality-definitions.component.ts","../../../projects/kalite/src/lib/components/quality-definitions.component.html","../../../projects/kalite/src/lib/components/quality-reports.component.ts","../../../projects/kalite/src/lib/components/quality-reports.component.html","../../../projects/kalite/src/lib/components/quality-notifications.component.ts","../../../projects/kalite/src/lib/kalite-routing.module.ts","../../../projects/kalite/src/lib/kalite-notification.module.ts","../../../projects/kalite/src/lib/kalite.module.ts","../../../projects/kalite/src/public-api.ts","../../../projects/kalite/src/hitsoft-kadooglu.kalite.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { RestService } from '@abp/ng.core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class KaliteService {\n apiName = 'Kalite';\n\n constructor(private restService: RestService) {}\n\n sample() {\n return this.restService.request<void, any>(\n { method: 'GET', url: '/api/Kalite/sample' },\n { apiName: this.apiName }\n );\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { KaliteService } from '../services/kalite.service';\n\n@Component({\n selector: 'lib-kalite',\n template: ` <p>kalite works!</p> `,\n styles: [],\n})\nexport class KaliteComponent implements OnInit {\n constructor(private service: KaliteService) {}\n\n ngOnInit(): void {\n this.service.sample().subscribe(console.log);\n }\n}\n","import { QualityLimit, QualityMeasurement, QualityParameter } from '../models/quality.models';\n\nexport function applicableLimit(limits: QualityLimit[], code: string, date: string, oilType = '', origin = ''): QualityLimit | undefined {\n return limits.filter(l => l.active && l.parameterCode === code && (!l.oilType || l.oilType === oilType) &&\n (!l.origin || l.origin === origin) && (!l.validFrom || l.validFrom.slice(0, 10) <= date) &&\n (!l.validUntil || l.validUntil.slice(0, 10) >= date))\n .sort((a, b) => Number(!!b.oilType) + Number(!!b.origin) - Number(!!a.oilType) - Number(!!a.origin) ||\n (b.validFrom || '').localeCompare(a.validFrom || ''))[0];\n}\n\n// A small arithmetic parser; formulas are never executed as JavaScript.\nexport function evaluateFormula(formula: string, resolve: (code: string) => number | null): number | null {\n let pos = 0;\n const space = () => { while (/\\s/.test(formula[pos] || '') && pos < formula.length) pos++; };\n const take = (ch: string) => { space(); if (formula[pos] !== ch) return false; pos++; return true; };\n const binary = (a: number | null, b: number | null, op: string): number | null => {\n if (a == null || b == null) return null;\n if (op === '/' && b === 0) throw new Error('Formülde sıfıra bölme var.');\n return op === '+' ? a + b : op === '-' ? a - b : op === '*' ? a * b : a / b;\n };\n const factor = (): number | null => {\n space();\n if (take('-')) { const value = factor(); return value == null ? null : -value; }\n if (take('(')) { const value = expression(); if (!take(')')) throw new Error('Formül parantezi kapanmamış.'); return value; }\n if (take('[')) { const end = formula.indexOf(']', pos); if (end < 0) throw new Error('Parametre kodu kapanmamış.'); const key = formula.slice(pos, end); pos = end + 1; return resolve(key); }\n const token = formula.slice(pos).match(/^[\\p{L}\\p{N}_.]+/u)?.[0];\n if (!token) throw new Error('Geçersiz hesaplama formülü.');\n pos += token.length;\n return /^\\d+(\\.\\d+)?$/.test(token) ? Number(token) : resolve(token);\n };\n const term = (): number | null => {\n let value = factor();\n while (true) { if (take('*')) value = binary(value, factor(), '*'); else if (take('/')) value = binary(value, factor(), '/'); else return value; }\n };\n const expression = (): number | null => {\n let value = term();\n while (true) { if (take('+')) value = binary(value, term(), '+'); else if (take('-')) value = binary(value, term(), '-'); else return value; }\n };\n const value = expression(); space();\n if (pos !== formula.length || (value != null && !Number.isFinite(value))) throw new Error('Geçersiz hesaplama sonucu.');\n return value;\n}\n\nexport function recalculate(parameters: QualityParameter[], values: QualityMeasurement[], limits: QualityLimit[], date: string, oilType = '', origin = ''): void {\n const visiting = new Set<string>(); const resolved = new Map<string, number | null>();\n const valueFor = (p: QualityParameter): QualityMeasurement => {\n let value = values.find(x => x.parameterCode === p.code);\n if (!value) { value = { parameterCode: p.code, number: null, text: '' }; values.push(value); }\n return value;\n };\n const resolve = (code: string): number | null => {\n if (resolved.has(code)) return resolved.get(code)!;\n const p = parameters.find(x => x.code === code);\n if (!p) throw new Error(`Formülde tanımsız parametre: ${code}`);\n if (visiting.has(code)) throw new Error('Hesaplama formülünde döngü var.');\n visiting.add(code);\n const number = p.calculated ? evaluateFormula(p.formula, resolve) : valueFor(p).number;\n const result = p.calculated && number != null ? Number(number.toFixed(p.decimalPlaces)) : number;\n if (p.calculated) valueFor(p).number = result;\n visiting.delete(code); resolved.set(code, result); return result;\n };\n for (const p of parameters) {\n resolve(p.code);\n const v = valueFor(p); const l = applicableLimit(limits, p.code, date, oilType, origin);\n v.appliedMinimum = l?.minimum; v.appliedMaximum = l?.maximum; v.appliedNominal = l?.nominal; v.appliedExpectedText = l?.expectedText;\n v.outOfLimit = !!l && ((v.number != null && ((l.minimum != null && v.number < l.minimum) ||\n (l.maximum != null && v.number > l.maximum))) || (!!v.text && !!l.expectedText && v.text.trim().toLocaleLowerCase('tr-TR') !== l.expectedText.trim().toLocaleLowerCase('tr-TR')));\n }\n}\n\nexport function download(blob: Blob, name: string): void {\n const url = URL.createObjectURL(blob); const link = document.createElement('a'); link.href = url; link.download = name; link.click();\n setTimeout(() => URL.revokeObjectURL(url), 1000);\n}\nexport function localDate(date = new Date()): string { return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`; }\nexport function errorMessage(error: any): string { return error?.error?.error?.message || error?.error?.message || 'İşlem tamamlanamadı. Bağlantıyı ve alanları kontrol edin.'; }\nexport function statusLabel(status: string): string { return ({ Waiting: 'Kalite Kontrol Bekliyor', Draft: 'Taslak', Accepted: 'Kalite Kontrol Kabul', Rejected: 'Kalite Kontrol Ret', Approved: 'Onaylı', LaborantSigned: 'Laborant İmzalı', Checked: 'Kontrol Edildi' } as Record<string, string>)[status] || status || '—'; }\n","import { Injectable } from '@angular/core';\nimport { RestService } from '@abp/ng.core';\nimport { Observable } from 'rxjs';\nimport { MovementType, MovementDetail, QualityTank, QualityShift, IntakeForm, IntakeInspection,\n CompositeSample, IntakeVehicle, Paged, ReportFilter, QualityReport, QualityNotification, NotificationSettings, QualityLaborant } from '../models/intake.models';\nimport {\n QualityAnalysis, QualityFacility, QualityForm, QualityLimit,\n QualityParameter, QualityStep, QualityTemplate,\n} from '../models/quality.models';\n\n@Injectable({ providedIn: 'root' })\nexport class QualityApiService {\n private readonly apiName = 'Kalite';\n\n constructor(private rest: RestService) {}\n\n movementTypes(): Observable<MovementType[]> { return this.get('/api/kalite/definitions/movement-types'); }\n qualityMovementTypes(): Observable<MovementType[]> { return this.get('/api/kalite/definitions/quality-movement-types'); }\n reportForms(): Observable<QualityForm[]> { return this.get('/api/kalite/definitions/forms'); }\n definitionFacilities(): Observable<QualityFacility[]> { return this.get('/api/kalite/definitions/facilities'); }\n movementDetails(): Observable<MovementDetail[]> { return this.get('/api/kalite/definitions/movement-details'); }\n tanks(): Observable<QualityTank[]> { return this.get('/api/kalite/definitions/tanks'); }\n shifts(): Observable<QualityShift[]> { return this.get('/api/kalite/definitions/shifts'); }\n laborants(): Observable<QualityLaborant[]> { return this.get('/api/kalite/definitions/laborants'); }\n saveDetail(input: MovementDetail, createOnly = false): Observable<void> { return this.put('/api/kalite/definitions/movement-detail?createOnly=' + createOnly, input); }\n deleteDetail(code: string): Observable<void> { return this.delete(`/api/kalite/definitions/movement-detail/${encodeURIComponent(code)}`); }\n saveTank(input: QualityTank, createOnly = false): Observable<void> { return this.put('/api/kalite/definitions/tank?createOnly=' + createOnly, input); }\n deleteTank(code: string): Observable<void> { return this.delete(`/api/kalite/definitions/tank/${encodeURIComponent(code)}`); }\n saveShift(input: QualityShift): Observable<void> { return this.put('/api/kalite/definitions/shift', input); }\n deleteShift(code: string): Observable<void> { return this.delete(`/api/kalite/definitions/shift/${encodeURIComponent(code)}`); }\n intakeList(query: Record<string, unknown>): Observable<Paged<IntakeVehicle>> { return this.get('/api/kalite/intake?' + this.query(query)); }\n intake(id: number, detailCode?: string, batchNumber?: string): Observable<IntakeForm> {\n return this.get(`/api/kalite/intake/${id}?` + this.query({ detailCode, batchNumber }));\n }\n intakeTemplate(code: string): Observable<QualityTemplate> { return this.get(`/api/kalite/intake/template/${encodeURIComponent(code)}`); }\n saveIntake(input: unknown): Observable<IntakeInspection> { return this.put('/api/kalite/intake', input); }\n saveComposite(input: unknown): Observable<CompositeSample> { return this.put('/api/kalite/intake/composite', input); }\n cancelIntake(id: number, revision: number, reason: string): Observable<void> { return this.post(`/api/kalite/intake/${id}/cancel`, { revision, reason }); }\n intakePdf(id: number): Observable<Blob> { return this.blob(`/api/kalite/intake/${id}/pdf`); }\n report(filter: ReportFilter, exportData = false): Observable<QualityReport> {\n return this.get('/api/kalite/reports' + (exportData ? '/export' : '') + '?' + this.query(filter));\n }\n reportPdf(filter: ReportFilter): Observable<Blob> { return this.blob('/api/kalite/reports/pdf?' + this.query(filter)); }\n notifications(): Observable<QualityNotification[]> { return this.get('/api/kalite/notifications'); }\n unreadNotifications(): Observable<number> { return this.get('/api/kalite/notifications/unread-count'); }\n readNotification(code: string): Observable<void> { return this.post(`/api/kalite/notifications/${encodeURIComponent(code)}/read`, {}); }\n notificationSettings(): Observable<NotificationSettings> { return this.get('/api/kalite/notifications/settings'); }\n notificationFailures(): Observable<QualityNotification[]> { return this.get('/api/kalite/notifications/failures'); }\n saveNotificationSettings(input: NotificationSettings): Observable<void> { return this.put('/api/kalite/notifications/settings', input); }\n\n private query(values: object): string {\n return Object.entries(values).filter(([, value]) => value != null && value !== '')\n .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`).join('&');\n }\n private blob(url: string): Observable<Blob> {\n return this.rest.request<void, Blob>({ method: 'GET', url, responseType: 'blob' }, { apiName: this.apiName });\n }\n\n forms(): Observable<QualityForm[]> {\n return this.get('/api/kalite/parameters/forms');\n }\n\n template(code: string): Observable<QualityTemplate> {\n return this.get(`/api/kalite/parameters/template/${encodeURIComponent(code)}`);\n }\n\n parameterFacilities(): Observable<QualityFacility[]> {\n return this.get('/api/kalite/parameters/facilities');\n }\n\n steps(facilityCode: string): Observable<QualityStep[]> {\n return this.get(`/api/kalite/parameters/steps/${encodeURIComponent(facilityCode)}`);\n }\n\n saveStep(step: QualityStep): Observable<void> {\n return this.put('/api/kalite/parameters/step', step);\n }\n\n saveForm(form: QualityForm): Observable<void> {\n return this.put('/api/kalite/parameters/form', form);\n }\n\n createParameter(parameter: QualityParameter): Observable<void> {\n return this.post('/api/kalite/parameters/parameter', parameter);\n }\n\n updateParameter(parameter: QualityParameter): Observable<void> {\n return this.put('/api/kalite/parameters/parameter', parameter);\n }\n\n deleteParameter(code: string): Observable<void> {\n return this.delete(`/api/kalite/parameters/parameter/${encodeURIComponent(code)}`);\n }\n\n createLimit(limit: QualityLimit): Observable<void> {\n return this.post('/api/kalite/parameters/limit', limit);\n }\n\n updateLimit(limit: QualityLimit): Observable<void> {\n return this.put('/api/kalite/parameters/limit', limit);\n }\n\n deleteLimit(code: string): Observable<void> {\n return this.delete(`/api/kalite/parameters/limit/${encodeURIComponent(code)}`);\n }\n\n facilities(): Observable<QualityFacility[]> {\n return this.get('/api/kalite/process/facilities');\n }\n\n process(facilityCode: string, businessDate: string): Observable<QualityAnalysis> {\n return this.get(`/api/kalite/process?facilityCode=${encodeURIComponent(facilityCode)}&businessDate=${encodeURIComponent(businessDate)}`);\n }\n\n saveProcess(input: {\n facilityCode: string; businessDate: string; oilType: string;\n notes: string; revision: number; hours: QualityAnalysis['hours'];\n }): Observable<QualityAnalysis> {\n return this.put('/api/kalite/process', input);\n }\n\n decision(code: string, action: 'sign' | 'check' | 'approve' | 'revoke',\n revision: number, reason: string): Observable<QualityAnalysis> {\n return this.post(`/api/kalite/process/${encodeURIComponent(code)}/${action}`, { revision, reason });\n }\n\n pdf(code: string): Observable<Blob> {\n return this.rest.request<void, Blob>(\n { method: 'GET', url: `/api/kalite/process/${encodeURIComponent(code)}/pdf`, responseType: 'blob' },\n { apiName: this.apiName }\n );\n }\n\n private get<T>(url: string): Observable<T> {\n return this.rest.request<void, T>({ method: 'GET', url }, { apiName: this.apiName });\n }\n\n private post<T>(url: string, body: unknown): Observable<T> {\n return this.rest.request<unknown, T>({ method: 'POST', url, body }, { apiName: this.apiName });\n }\n\n private put<T>(url: string, body: unknown): Observable<T> {\n return this.rest.request<unknown, T>({ method: 'PUT', url, body }, { apiName: this.apiName });\n }\n\n private delete<T>(url: string): Observable<T> {\n return this.rest.request<void, T>({ method: 'DELETE', url }, { apiName: this.apiName });\n }\n}\n","import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';\r\nimport { PermissionService } from '@abp/ng.core';\r\nimport {\r\n QualityAnalysis, QualityFacility, QualityHour, QualityLimit,\r\n QualityMeasurement, QualityParameter, QualityStep,\r\n} from '../models/quality.models';\r\nimport { QualityApiService } from '../services/quality-api.service';\r\nimport { QualityTank } from '../models/intake.models';\r\nimport { applicableLimit, recalculate } from '../services/quality-measurements';\r\n\r\n@Component({\r\n selector: 'lib-process-analysis',\r\n templateUrl: './process-analysis.component.html',\r\n styleUrls: ['./process-analysis.component.scss'],\r\n})\r\nexport class ProcessAnalysisComponent implements OnInit {\r\n tanks: QualityTank[] = [];\r\n facilities: QualityFacility[] = [];\r\n facilityCode = '';\r\n businessDate = this.today();\r\n analysis: QualityAnalysis | null = null;\r\n groups: { step: QualityStep; parameters: QualityParameter[] }[] = [];\r\n parameters: QualityParameter[] = [];\r\n reason = '';\r\n busy = true;\r\n busyText = 'Tesisler yükleniyor…';\r\n error = '';\r\n reasonError = '';\r\n @ViewChild('reasonInput') reasonInput?: ElementRef<HTMLTextAreaElement>;\r\n\r\n constructor(private api: QualityApiService, private permissions: PermissionService) {}\r\n\r\n ngOnInit(): void {\r\n this.api.tanks().subscribe({ next: x => this.tanks = x.filter(t => t.active), error: () => {} });\r\n this.api.facilities().subscribe({\r\n next: facilities => {\r\n this.facilities = facilities;\r\n this.facilityCode = facilities[0]?.code || '';\r\n if (this.facilityCode) this.load();\r\n else this.busy = false;\r\n },\r\n error: () => { this.error = 'Tesisler yüklenemedi.'; this.busy = false; },\r\n });\r\n }\r\n\r\n get editable(): boolean {\r\n return !this.busy && this.analysis?.status === 'Draft' &&\r\n this.permissions.getGrantedPolicy('Hitsoft.Kadooglu.Kalite.ProcessAnalysis.Create');\r\n }\r\n\r\n get hasOutOfLimit(): boolean {\r\n return this.analysis?.hours.some(h => h.measurements.some(v => v.outOfLimit)) || false;\r\n }\r\n\r\n get statusText(): string {\r\n return ({ Draft: 'Taslak', LaborantSigned: 'Laborant imzaladı',\r\n Checked: 'Mühendis kontrol etti', Approved: 'Onaylı' } as Record<string, string>)[this.analysis?.status || ''] || '';\r\n }\r\n\r\n allowed(permission: string): boolean {\r\n return this.permissions.getGrantedPolicy(`Hitsoft.Kadooglu.Kalite.ProcessAnalysis.${permission}`);\r\n }\r\n\r\n load(): void {\r\n if (!this.facilityCode || !this.businessDate) return;\r\n this.busy = true;\r\n this.busyText = 'Analiz verileri yükleniyor…';\r\n this.error = '';\r\n this.api.process(this.facilityCode, this.businessDate).subscribe({\r\n next: analysis => {\r\n this.applyAnalysis(analysis);\r\n this.busy = false;\r\n },\r\n error: () => { this.error = 'Analiz formu yüklenemedi.'; this.busy = false; },\r\n });\r\n }\r\n\r\n private applyAnalysis(analysis: QualityAnalysis): void {\r\n this.analysis = analysis;\r\n const template = analysis.templateSnapshot;\r\n this.groups = [...template.steps].sort((a, b) => a.order - b.order).map(step => ({\r\n step,\r\n parameters: template.parameters.filter(p => p.active && p.stepCode === step.processCode)\r\n .sort((a, b) => a.order - b.order),\r\n }));\r\n this.parameters = ([] as QualityParameter[]).concat(...this.groups.map(group => group.parameters));\r\n for (const hour of analysis.hours) {\r\n hour.measurements ||= [];\r\n for (const parameter of this.parameters) {\r\n if (!hour.measurements.some(v => v.parameterCode === parameter.code)) {\r\n hour.measurements.push({ parameterCode: parameter.code, number: null, text: '', outOfLimit: false });\r\n }\r\n }\r\n }\r\n }\r\n\r\n measurement(row: QualityHour, parameter: QualityParameter): QualityMeasurement {\r\n return row.measurements.find(v => v.parameterCode === parameter.code)!;\r\n }\r\n\r\n limit(parameter: QualityParameter): QualityLimit | undefined {\r\n return applicableLimit(this.analysis?.templateSnapshot.limits || [], parameter.code, this.businessDate, this.analysis?.oilType || '');\r\n }\r\n\r\n limitLabel(parameter: QualityParameter): string {\r\n const limit = this.limit(parameter);\r\n if (!limit) return '—';\r\n if (limit.expectedText) return limit.expectedText;\r\n if (limit.minimum != null && limit.maximum != null) return `${limit.minimum}–${limit.maximum}`;\r\n if (limit.minimum != null) return `≥ ${limit.minimum}`;\r\n if (limit.maximum != null) return `≤ ${limit.maximum}`;\r\n return '—';\r\n }\r\n\r\n changed(row: QualityHour, parameter: QualityParameter): void {\r\n try { recalculate(this.parameters, row.measurements, this.analysis?.templateSnapshot.limits || [], this.businessDate, this.analysis?.oilType || ''); }\r\n catch (e) { this.error = e instanceof Error ? e.message : 'Hesaplama yapılamadı.'; }\r\n const value = this.measurement(row, parameter);\r\n const limit = this.limit(parameter);\r\n value.outOfLimit = !!limit && (\r\n (value.number != null &&\r\n ((limit.minimum != null && value.number < limit.minimum) ||\r\n (limit.maximum != null && value.number > limit.maximum))) ||\r\n (!!value.text && !!limit.expectedText &&\r\n value.text.trim().toLocaleLowerCase('tr-TR') !== limit.expectedText.trim().toLocaleLowerCase('tr-TR'))\r\n );\r\n }\r\n\r\n oilTypeChanged(): void {\r\n for (const row of this.analysis?.hours || [])\r\n for (const parameter of this.parameters)\r\n this.changed(row, parameter);\r\n }\r\n\r\n average(parameter: QualityParameter): string {\r\n const values = this.analysis?.hours.map(h => this.measurement(h, parameter).number)\r\n .filter((v): v is number => v != null) || [];\r\n if (!values.length) return '—';\r\n return (values.reduce((a, b) => a + b, 0) / values.length).toFixed(parameter.decimalPlaces);\r\n }\r\n\r\n save(): void {\r\n if (!this.analysis || !this.editable) return;\r\n this.busy = true;\r\n this.busyText = 'Form kaydediliyor…';\r\n this.error = '';\r\n const input = {\r\n facilityCode: this.analysis.facilityCode,\r\n businessDate: this.businessDate,\r\n oilType: this.analysis.oilType,\r\n notes: this.analysis.notes,\r\n revision: this.analysis.revision,\r\n hours: this.analysis.hours,\r\n };\r\n this.api.saveProcess(input).subscribe({\r\n next: analysis => { this.applyAnalysis(analysis); this.busy = false; },\r\n error: () => { this.error = 'Form kaydedilemedi. Alanları ve bağlantıyı kontrol edin.'; this.busy = false; },\r\n });\r\n }\r\n\r\n decision(action: 'sign' | 'check' | 'approve' | 'revoke'): void {\r\n if (!this.analysis || !this.analysis.revision) return;\r\n if ((action === 'revoke' || (action === 'approve' && this.hasOutOfLimit)) && !this.reason.trim()) {\r\n this.reasonError = 'Bu işlem için gerekçe girin.';\r\n setTimeout(() => this.reasonInput?.nativeElement.focus());\r\n return;\r\n }\r\n this.busy = true;\r\n this.busyText = 'İşlem tamamlanıyor…';\r\n this.error = '';\r\n this.reasonError = '';\r\n this.api.decision(this.analysis.code, action, this.analysis.revision, this.reason).subscribe({\r\n next: analysis => { this.reason = ''; this.applyAnalysis(analysis); this.busy = false; },\r\n error: () => { this.error = 'İşlem tamamlanamadı. Formun son durumunu kontrol edin.'; this.busy = false; },\r\n });\r\n }\r\n\r\n downloadPdf(): void {\r\n if (!this.analysis?.revision) return;\r\n this.api.pdf(this.analysis.code).subscribe({\r\n next: blob => {\r\n const url = URL.createObjectURL(blob);\r\n const anchor = document.createElement('a');\r\n anchor.href = url;\r\n anchor.download = `${this.analysis?.formSnapshot.documentCode}-${this.analysis?.code}.pdf`;\r\n anchor.click();\r\n setTimeout(() => URL.revokeObjectURL(url), 1000);\r\n },\r\n error: () => this.error = 'PDF oluşturulamadı.',\r\n });\r\n }\r\n\r\n private today(): string {\r\n const date = new Date();\r\n return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;\r\n }\r\n}\r\n","<div class=\"container-fluid\">\r\n <div class=\"mb-2\">\r\n <h3 class=\"page-title\">Rafineri Proses Analiz Kontrol</h3>\r\n </div>\r\n\r\n <div class=\"card mt-2\"><div class=\"card-body\">\r\n <div class=\"row align-items-end mb-3\">\r\n <div class=\"col-md-3\">\r\n <label for=\"facility\">Tesis</label>\r\n <select id=\"facility\" class=\"form-control\" [disabled]=\"busy\" [(ngModel)]=\"facilityCode\" (change)=\"load()\">\r\n <option *ngFor=\"let facility of facilities\" [value]=\"facility.code\">{{ facility.name }}</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <label for=\"businessDate\">İş günü</label>\r\n <input id=\"businessDate\" type=\"date\" class=\"form-control\" [disabled]=\"busy\" [(ngModel)]=\"businessDate\" (change)=\"load()\" />\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"analysis?.facilityCode === 'DEO3'\">\r\n <label for=\"oilType\">Üretilen yağ cinsi</label>\r\n <select id=\"oilType\" class=\"form-control\" [(ngModel)]=\"analysis!.oilType\" (change)=\"oilTypeChanged()\" [disabled]=\"!editable\">\r\n <option value=\"\">Seçiniz</option><option value=\"Palm Oil\">Palm Oil</option>\r\n <option value=\"Palm Olein\">Palm Olein</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-3 text-md-right mt-2 mt-md-0\">\r\n <span *ngIf=\"analysis\" class=\"badge badge-info mr-2\" style=\"margin-right: 6px;\">{{ statusText }}</span>\r\n <button class=\"btn btn-outline-primary\" (click)=\"downloadPdf()\" [disabled]=\"!analysis?.revision || busy\"\r\n *ngIf=\"allowed('Print')\">Formu Yazdır (PDF)</button>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"error\" class=\"alert alert-danger\" role=\"alert\">{{ error }}</div>\r\n <div class=\"quality-grid-loading\" *ngIf=\"busy\" role=\"status\" aria-live=\"polite\" aria-busy=\"true\">\r\n <span class=\"spinner-border text-primary\" aria-hidden=\"true\"></span>\r\n <span>{{ busyText }}</span>\r\n </div>\r\n <ng-container *ngIf=\"analysis\">\r\n <div class=\"small text-muted mb-2\">{{ analysis.formSnapshot.name }} · {{ analysis.formSnapshot.documentCode }} · Revizyon {{ analysis.formSnapshot.revisionNumber }}</div>\r\n <div class=\"quality-grid-scroll\" [hidden]=\"busy\">\r\n <table class=\"table table-bordered table-sm quality-grid\">\r\n <thead>\r\n <tr class=\"text-center bg-light\">\r\n <th rowspan=\"3\" class=\"sticky-hour\">Saat</th><th rowspan=\"3\">Vardiya / Laborant</th>\r\n <th rowspan=\"3\">Alınan Tank No</th>\r\n <th *ngFor=\"let group of groups\" [attr.colspan]=\"group.parameters.length\">{{ group.step.name }}</th>\r\n <th rowspan=\"3\">Aktarılan Tank No</th>\r\n </tr>\r\n <tr class=\"text-center bg-light\">\r\n <ng-container *ngFor=\"let group of groups\">\r\n <th *ngFor=\"let parameter of group.parameters\">{{ parameter.name }}<small *ngIf=\"parameter.unit\"> ({{ parameter.unit }})</small></th>\r\n </ng-container>\r\n </tr>\r\n <tr class=\"text-center limit-row\">\r\n <ng-container *ngFor=\"let group of groups\">\r\n <th *ngFor=\"let parameter of group.parameters\">{{ limitLabel(parameter) }}</th>\r\n </ng-container>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of analysis.hours\">\r\n <th class=\"sticky-hour\">{{ row.hour | number:'2.0-0' }}:00</th><td><small>{{row.shiftCode}}</small><input class=\"form-control form-control-sm\" [(ngModel)]=\"row.analyst\" [disabled]=\"!editable\" aria-label=\"Vardiya laborantı\" /></td>\r\n <td><input class=\"form-control form-control-sm tank-input\" list=\"qualityTanks\" [(ngModel)]=\"row.intakeTank\" [disabled]=\"!editable\" aria-label=\"Alınan tank\" /></td>\r\n <ng-container *ngFor=\"let group of groups\">\r\n <td *ngFor=\"let parameter of group.parameters\" [class.out-of-limit]=\"measurement(row, parameter).outOfLimit\">\r\n <input *ngIf=\"parameter.valueType === 'Number' || parameter.calculated\" type=\"number\"\r\n class=\"form-control form-control-sm value-input\" [attr.step]=\"'any'\"\r\n [(ngModel)]=\"measurement(row, parameter).number\" (ngModelChange)=\"changed(row, parameter)\"\r\n [disabled]=\"!editable || parameter.calculated\" [attr.aria-label]=\"parameter.name\" />\r\n <select *ngIf=\"parameter.valueType === 'Choice' && !parameter.calculated\" class=\"form-control form-control-sm value-input\"\r\n [(ngModel)]=\"measurement(row, parameter).text\" (change)=\"changed(row, parameter)\" [disabled]=\"!editable\">\r\n <option value=\"\"></option><option *ngFor=\"let option of parameter.options\" [value]=\"option\">{{ option }}</option>\r\n </select>\r\n <input *ngIf=\"parameter.valueType === 'Text' && !parameter.calculated\" class=\"form-control form-control-sm value-input\"\r\n [(ngModel)]=\"measurement(row, parameter).text\" (ngModelChange)=\"changed(row, parameter)\" [disabled]=\"!editable\"\r\n [attr.aria-label]=\"parameter.name\" />\r\n </td>\r\n </ng-container>\r\n <td><input class=\"form-control form-control-sm tank-input\" list=\"qualityTanks\" [(ngModel)]=\"row.outputTank\" [disabled]=\"!editable\" aria-label=\"Aktarılan tank\" /></td>\r\n </tr>\r\n <tr class=\"average-row\">\r\n <th colspan=\"3\">ORTALAMA</th>\r\n <ng-container *ngFor=\"let group of groups\">\r\n <td *ngFor=\"let parameter of group.parameters\">{{ parameter.valueType === 'Number' ? average(parameter) : '—' }}</td>\r\n </ng-container>\r\n <td></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div class=\"row mt-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"notes\">{{ analysis.formSnapshot.code === 'FR52' ? 'Açıklama / Bilgi' : 'Notlar' }}</label>\r\n <textarea id=\"notes\" class=\"form-control\" rows=\"3\" [(ngModel)]=\"analysis.notes\" [disabled]=\"!editable\"></textarea>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"reason\">Onay / geri alma gerekçesi</label>\r\n <textarea #reasonInput id=\"reason\" class=\"form-control\" rows=\"3\" [(ngModel)]=\"reason\" (ngModelChange)=\"reasonError = ''\"\r\n [class.is-invalid]=\"reasonError\" [attr.aria-invalid]=\"!!reasonError\"\r\n [disabled]=\"busy || analysis.status === 'LaborantSigned'\"></textarea>\r\n <div *ngIf=\"reasonError\" class=\"invalid-feedback d-block\" role=\"alert\">{{ reasonError }}</div>\r\n </div>\r\n </div>\r\n <div class=\"mt-3 d-flex flex-wrap align-items-center gap-2\">\r\n <button class=\"btn btn-primary mr-2 mb-2\" (click)=\"save()\" [disabled]=\"!editable || busy\">Kaydet</button>\r\n <button class=\"btn btn-outline-primary mr-2 mb-2\" *ngIf=\"analysis.status === 'Draft' && allowed('Sign')\"\r\n (click)=\"decision('sign')\" [disabled]=\"!analysis.revision || busy\">Laborant Olarak İmzala</button>\r\n <button class=\"btn btn-outline-primary mr-2 mb-2\" *ngIf=\"analysis.status === 'LaborantSigned' && allowed('Check')\"\r\n (click)=\"decision('check')\" [disabled]=\"busy\">Mühendis Kontrolü</button>\r\n <button class=\"btn btn-success mr-2 mb-2\" *ngIf=\"analysis.status === 'Checked' && allowed('Approve')\"\r\n (click)=\"decision('approve')\" [disabled]=\"busy\">Son Onay</button>\r\n <button class=\"btn btn-outline-danger mr-2 mb-2\" *ngIf=\"analysis.status === 'Approved' && allowed('Revoke')\"\r\n (click)=\"decision('revoke')\" [disabled]=\"busy\">Onayı Geri Al</button>\r\n <span *ngIf=\"hasOutOfLimit\" class=\"text-danger mb-2\">Limit dışı ölçüm var. Son onay için gerekçe gerekli.</span>\r\n </div>\r\n <div class=\"mt-3 small text-muted\">\r\n <span>Laborant: {{ analysis.laborant?.userName || '—' }}</span> ·\r\n <span>Mühendis: {{ analysis.engineer?.userName || '—' }}</span> ·\r\n <span>Onaylayan: {{ analysis.approver?.userName || '—' }}</span>\r\n </div>\r\n <details class=\"mt-3\" *ngIf=\"analysis.history?.length\">\r\n <summary>İşlem geçmişi</summary>\r\n <ul class=\"mt-2\"><li *ngFor=\"let event of analysis.history\">{{ event.action }} · {{ event.userName }} · {{ event.occurredAt | date:'dd.MM.yyyy HH:mm' }}<span *ngIf=\"event.reason\"> · {{ event.reason }}</span></li></ul>\r\n </details>\r\n </ng-container>\r\n </div></div>\r\n</div>\r\n\r\n<datalist id=\"qualityTanks\"><option *ngFor=\"let tank of tanks\" [value]=\"tank.code\">{{tank.name}}</option></datalist>\r\n","import { ChangeDetectorRef, Component, ElementRef, OnInit, ViewChild } from '@angular/core';\r\nimport { Observable, defer } from 'rxjs';\r\nimport { finalize } from 'rxjs/operators';\r\nimport { PermissionService } from '@abp/ng.core';\r\nimport { QualityFacility, QualityForm, QualityLimit, QualityParameter, QualityStep, QualityTemplate } from '../models/quality.models';\r\nimport { QualityApiService } from '../services/quality-api.service';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { MovementDetail, MovementType } from '../models/intake.models';\r\nimport { errorMessage, localDate } from '../services/quality-measurements';\r\n\r\n@Component({\r\n selector: 'lib-quality-parameters',\r\n templateUrl: './quality-parameters.component.html',\r\n styleUrls: ['./quality-parameters.component.scss'],\r\n})\r\nexport class QualityParametersComponent implements OnInit {\r\n controlType: 'Input' | 'Process' = 'Process';\r\n movementTypes: MovementType[] = [];\r\n movementDetails: MovementDetail[] = [];\r\n movementTypeCode = '';\r\n movementDetailCode = '';\r\n newInputForm = false;\r\n @ViewChild('stepEditor') private stepEditor?: ElementRef<HTMLElement>;\r\n\r\n forms: QualityForm[] = [];\r\n facilities: QualityFacility[] = [];\r\n facilityCode = '';\r\n facilitySteps: QualityStep[] = [];\r\n editingStep: QualityStep | null = null;\r\n newStep = false;\r\n formCode = '';\r\n template: QualityTemplate | null = null;\r\n editingParameter: QualityParameter | null = null;\r\n editingLimit: QualityLimit | null = null;\r\n newParameter = false;\r\n newLimit = false;\r\n parameterModalVisible = false;\r\n limitModalVisible = false;\r\n modalError = '';\r\n readonly editorModalOptions = { size: 'xl' as const, centered: true };\r\n optionsText = '';\r\n private pendingRequests = 0;\r\n busyText = 'Kalite tanımları yükleniyor…';\r\n\r\n get busy(): boolean { return this.pendingRequests > 0; }\r\n error = '';\r\n success = '';\r\n\r\n constructor(\r\n private api: QualityApiService,\r\n private permissions: PermissionService,\r\n private changeDetector: ChangeDetectorRef,\r\n private route: ActivatedRoute,\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n if (this.route.snapshot.queryParamMap.get('type') === 'Input') this.controlType = 'Input';\r\n this.movementDetailCode = this.route.snapshot.queryParamMap.get('detail') || '';\r\n this.api.qualityMovementTypes().subscribe({ next: x => this.movementTypes = x, error: e => this.error = errorMessage(e) });\r\n this.api.movementDetails().subscribe({ next: x => {\r\n this.movementDetails = x.filter(d => d.active);\r\n this.movementTypeCode = x.find(d => d.code === this.movementDetailCode)?.movementTypeCode || '';\r\n if (this.controlType === 'Input') this.selectInput();\r\n }, error: e => this.error = errorMessage(e) });\r\n this.track(this.api.parameterFacilities(), 'Kalite tanımları yükleniyor…').subscribe({\r\n next: facilities => { this.facilities = facilities; this.selectFacility(); if (this.facilityCode) this.loadSteps(); },\r\n error: () => this.error = 'Tesis listesi yüklenemedi.',\r\n });\r\n this.track(this.api.forms(), 'Kalite tanımları yükleniyor…').subscribe({\r\n next: forms => { this.forms = forms; this.switchType(this.controlType); },\r\n error: () => this.error = 'Form listesi yüklenemedi.',\r\n });\r\n }\r\n\r\n get canEdit(): boolean { return this.permissions.getGrantedPolicy('Hitsoft.Kadooglu.Kalite.Parameters.Edit'); }\r\n get canCreate(): boolean { return this.permissions.getGrantedPolicy('Hitsoft.Kadooglu.Kalite.Parameters.Create'); }\r\n get canDelete(): boolean { return this.permissions.getGrantedPolicy('Hitsoft.Kadooglu.Kalite.Parameters.Delete'); }\r\n\r\n get visibleForms(): QualityForm[] { return this.forms.filter(f => (f.controlType || 'Process') === this.controlType); }\r\n get visibleDetails(): MovementDetail[] { return this.movementDetails.filter(d => !this.movementTypeCode || d.movementTypeCode === this.movementTypeCode); }\r\n switchType(type: 'Input' | 'Process'): void {\r\n this.controlType = type; this.editingStep = null; this.facilitySteps = []; this.template = null;\r\n if (type === 'Input') this.selectInput();\r\n else { this.formCode = this.visibleForms[0]?.code || ''; this.newInputForm = false; this.load(); }\r\n }\r\n selectInput(): void {\r\n if (!this.visibleDetails.some(d => d.code === this.movementDetailCode)) this.movementDetailCode = this.visibleDetails[0]?.code || '';\r\n const form = this.visibleForms.find(f => f.movementDetailCode === this.movementDetailCode);\r\n if (form) { this.formCode = form.code; this.newInputForm = false; this.load(); return; }\r\n const detail = this.movementDetails.find(d => d.code === this.movementDetailCode);\r\n this.newInputForm = !!detail; this.formCode = detail ? 'IN_' + detail.code : '';\r\n this.template = detail ? { form: { code: this.formCode, controlType: 'Input', movementDetailCode: detail.code,\r\n averageMode: 'Arithmetic', name: detail.name || this.movementTypes.find(t => t.code === detail.movementTypeCode)?.name || '',\r\n documentCode: '', publicationDate: localDate(), revisionDate: localDate(), revisionNumber: '1', active: true },\r\n parameters: [], limits: [], steps: [] } : null;\r\n }\r\n\r\n load(): void {\r\n if (!this.formCode) return;\r\n if (this.controlType === 'Process') { this.selectFacility(); if (this.facilityCode) this.loadSteps(); }\r\n this.error = '';\r\n this.track(this.api.template(this.formCode), 'Kalite tanımları yükleniyor…').subscribe({\r\n next: template => {\r\n template.form.publicationDate = template.form.publicationDate?.slice(0, 10);\r\n template.form.revisionDate = template.form.revisionDate?.slice(0, 10);\r\n this.template = template;\r\n this.editingParameter = null;\r\n this.editingLimit = null;\r\n },\r\n error: () => { this.error = 'Form tanımı yüklenemedi.'; },\r\n });\r\n }\r\n\r\n private revealStepEditor(): void {\r\n this.changeDetector.detectChanges();\r\n this.stepEditor?.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n this.stepEditor?.nativeElement.focus({ preventScroll: true });\r\n }\r\n\r\n parameterModalChanged(visible: boolean): void {\r\n this.parameterModalVisible = visible;\r\n if (!visible) { this.editingParameter = null; this.modalError = ''; }\r\n }\r\n\r\n limitModalChanged(visible: boolean): void {\r\n this.limitModalVisible = visible;\r\n if (!visible) { this.editingLimit = null; this.modalError = ''; }\r\n }\r\n\r\n closeParameterModal(): void {\r\n if (!this.busy) this.parameterModalChanged(false);\r\n }\r\n\r\n closeLimitModal(): void {\r\n if (!this.busy) this.limitModalChanged(false);\r\n }\r\n\r\n private track<T>(request: Observable<T>, message: string): Observable<T> {\r\n return defer(() => {\r\n this.pendingRequests++;\r\n this.busyText = message;\r\n return request.pipe(finalize(() => this.pendingRequests--));\r\n });\r\n }\r\n\r\n processName(code: string): string {\r\n return this.template?.steps.find(step => step.processCode === code)?.name || code;\r\n }\r\n\r\n steps(): QualityStep[] {\r\n return this.facilitySteps.filter(x => x.active);\r\n }\r\n\r\n matchingFacilities(): QualityFacility[] {\r\n return this.facilities.filter(x => x.formCode === this.formCode);\r\n }\r\n\r\n selectFacility(): void {\r\n if (!this.matchingFacilities().some(x => x.code === this.facilityCode))\r\n this.facilityCode = this.matchingFacilities()[0]?.code || '';\r\n }\r\n\r\n loadSteps(): void {\r\n if (!this.facilityCode) return;\r\n this.track(this.api.steps(this.facilityCode), 'Kalite tanımları yükleniyor…').subscribe({\r\n next: steps => this.facilitySteps = steps,\r\n error: () => this.error = 'Proses adımları yüklenemedi.',\r\n });\r\n }\r\n\r\n addStep(): void {\r\n this.newStep = true;\r\n this.editingStep = { code: '', facilityCode: this.facilityCode, processCode: '',\r\n name: '', order: this.facilitySteps.length + 1, active: true };\r\n this.revealStepEditor();\r\n }\r\n\r\n editStep(step: QualityStep): void {\r\n this.newStep = false;\r\n this.editingStep = { ...step };\r\n this.revealStepEditor();\r\n }\r\n\r\n saveStep(): void {\r\n if (!this.editingStep) return;\r\n const step = { ...this.editingStep,\r\n code: this.editingStep.code.trim().toUpperCase(),\r\n processCode: this.editingStep.processCode.trim().toUpperCase(),\r\n name: this.editingStep.name.trim() };\r\n this.track(this.api.saveStep(step), 'Değişiklikler kaydediliyor…').subscribe({\r\n next: () => { this.editingStep = null; this.success = 'Proses adımı kaydedildi.'; this.loadSteps(); },\r\n error: () => { this.error = 'Proses adımı kaydedilemedi.'; },\r\n });\r\n }\r\n\r\n orderedParameters(): QualityParameter[] {\r\n const order = this.steps().map(step => step.processCode);\r\n return [...(this.template?.parameters || [])].sort((a, b) =>\r\n order.indexOf(a.stepCode) - order.indexOf(b.stepCode) || a.order - b.order);\r\n }\r\n\r\n limitsFor(code: string): QualityLimit[] {\r\n return this.template?.limits.filter(limit => limit.parameterCode === code) || [];\r\n }\r\n\r\n editForm(): void {\r\n if (!this.template || !this.canEdit) return;\r\n this.track(this.api.saveForm(this.template.form), 'Değişiklikler kaydediliyor…').subscribe({\r\n next: () => { this.success = 'Form başlığı kaydedildi.'; this.newInputForm = false;\r\n this.api.forms().subscribe({ next: forms => { this.forms = forms; this.load(); } }); },\r\n error: () => { this.error = 'Form başlığı kaydedilemedi.'; },\r\n });\r\n }\r\n\r\n addParameter(): void {\r\n if (!this.template || this.newInputForm) return;\r\n this.newParameter = true;\r\n this.optionsText = '';\r\n this.editingParameter = {\r\n code: '', formCode: this.formCode, stepCode: this.template.steps[0]?.processCode || '',\r\n order: this.template.parameters.length + 1, name: '', unit: '', valueType: 'Number',\r\n decimalPlaces: 2, required: false, calculated: false, formula: '', options: [], active: true,\r\n };\r\n this.editingLimit = null;\r\n this.modalError = '';\r\n this.parameterModalVisible = true;\r\n }\r\n\r\n editParameter(parameter: QualityParameter): void {\r\n this.newParameter = false;\r\n this.editingParameter = { ...parameter, options: [...(parameter.options || [])] };\r\n this.optionsText = this.editingParameter.options.join(', ');\r\n this.editingLimit = null;\r\n this.modalError = '';\r\n this.parameterModalVisible = true;\r\n }\r\n\r\n saveParameter(): void {\r\n if (!this.editingParameter || this.busy) return;\r\n const parameter = { ...this.editingParameter,\r\n code: this.editingParameter.code.trim().toUpperCase(),\r\n name: this.editingParameter.name.trim(),\r\n options: this.optionsText.split(',').map(x => x.trim()).filter(Boolean),\r\n };\r\n if (!parameter.code || !parameter.name || (this.controlType === 'Process' && !parameter.stepCode)) {\r\n this.modalError = 'Parametre kodu, adı ve proses kontrolünde proses adımı zorunludur.'; return;\r\n }\r\n this.modalError = '';\r\n const request = this.newParameter ? this.api.createParameter(parameter) : this.api.updateParameter(parameter);\r\n this.track(request, 'Değişiklikler kaydediliyor…').subscribe({\r\n next: () => { this.parameterModalChanged(false); this.success = 'Parametre kaydedildi.'; this.load(); },\r\n error: () => { this.modalError = 'Parametre kaydedilemedi.'; },\r\n });\r\n }\r\n\r\n deleteParameter(parameter: QualityParameter): void {\r\n if (!confirm(`${parameter.name} parametresi ve bağlı limitleri kalıcı olarak silinsin mi?`)) return;\r\n this.track(this.api.deleteParameter(parameter.code), 'Değişiklikler kaydediliyor…').subscribe({\r\n next: () => this.load(), error: e => this.error = errorMessage(e),\r\n });\r\n }\r\n\r\n addLimit(parameter: QualityParameter): void {\r\n this.newLimit = true;\r\n this.editingParameter = null;\r\n this.editingLimit = {\r\n code: '', parameterCode: parameter.code, oilType: '', origin: '', minimum: null, maximum: null,\r\n nominal: null, expectedText: '', validFrom: null, validUntil: null, active: true,\r\n };\r\n this.modalError = '';\r\n this.limitModalVisible = true;\r\n }\r\n\r\n editLimit(limit: QualityLimit): void {\r\n this.newLimit = false;\r\n this.editingParameter = null;\r\n this.editingLimit = { ...limit,\r\n validFrom: limit.validFrom?.slice(0, 10) || null,\r\n validUntil: limit.validUntil?.slice(0, 10) || null,\r\n };\r\n this.modalError = '';\r\n this.limitModalVisible = true;\r\n }\r\n\r\n saveLimit(): void {\r\n if (!this.editingLimit || this.busy) return;\r\n const limit = { ...this.editingLimit,\r\n code: this.newLimit ? this.editingLimit.code.trim().toUpperCase() : this.editingLimit.code,\r\n oilType: this.editingLimit.oilType?.trim() || '',\r\n };\r\n if (!limit.code) { this.modalError = 'Limit kodu zorunludur.'; return; }\r\n this.modalError = '';\r\n const request = this.newLimit ? this.api.createLimit(limit) : this.api.updateLimit(limit);\r\n this.track(request, 'Değişiklikler kaydediliyor…').subscribe({\r\n next: () => { this.limitModalChanged(false); this.success = 'Limit kaydedildi.'; this.load(); },\r\n error: e => { this.modalError = errorMessage(e); },\r\n });\r\n }\r\n\r\n deleteLimit(limit: QualityLimit): void {\r\n if (this.busy) return;\r\n if (!confirm(`${limit.code} limiti kalıcı olarak silinsin mi?`)) return;\r\n this.track(this.api.deleteLimit(limit.code), 'Değişiklikler kaydediliyor…').subscribe({\r\n next: () => { this.limitModalChanged(false); this.load(); },\r\n error: e => {\r\n if (this.limitModalVisible) this.modalError = errorMessage(e);\r\n else this.error = errorMessage(e);\r\n },\r\n });\r\n }\r\n}\r\n","<div class=\"container-fluid\">\r\n <div class=\"mb-2\">\r\n <h3 class=\"page-title\">Kalite Parametreleri (Kalite Soruları)</h3>\r\n </div>\r\n\r\n <div class=\"card mt-2\"><div class=\"card-body\">\r\n <div class=\"btn-group mb-3\" role=\"tablist\"><button class=\"btn\" [class.btn-primary]=\"controlType === 'Input'\" [class.btn-outline-secondary]=\"controlType !== 'Input'\" (click)=\"switchType('Input')\">Girdi Kontrol</button><button class=\"btn\" [class.btn-primary]=\"controlType === 'Process'\" [class.btn-outline-secondary]=\"controlType !== 'Process'\" (click)=\"switchType('Process')\">Proses Kontrol</button></div>\r\n <div class=\"row mb-3\" *ngIf=\"controlType === 'Input'\">\r\n <div class=\"col-md-6\"><label>Araç Hareket Türü</label><select class=\"form-control\" [(ngModel)]=\"movementTypeCode\" (change)=\"selectInput()\"><option value=\"\">Tümü</option><option *ngFor=\"let type of movementTypes\" [value]=\"type.code\">{{ type.name }}</option></select></div>\r\n <div class=\"col-md-6\"><label>Araç Hareket Türü / Detay</label><select class=\"form-control\" [(ngModel)]=\"movementDetailCode\" (change)=\"selectInput()\"><option value=\"\">Seçin</option><option *ngFor=\"let d of visibleDetails\" [value]=\"d.code\">{{ d.name || d.movementTypeCode }}{{ d.detailCode ? ' / ' + d.detailCode : ' (detaysız)' }}</option></select></div>\r\n <p class=\"col-md-12 mt-2 text-muted\" *ngIf=\"!visibleDetails.length\">Önce Kalite Tanımları ekranında kalite kontrole tabi hareket türünü tanımlayın.</p>\r\n </div>\r\n <div class=\"row align-items-end mb-3\">\r\n <div class=\"col-md-4\" *ngIf=\"controlType === 'Process'\">\r\n <label for=\"formSelect\">Form</label>\r\n <select id=\"formSelect\" class=\"form-control\" [disabled]=\"busy\" [(ngModel)]=\"formCode\" (change)=\"load()\">\r\n <option *ngFor=\"let form of visibleForms\" [value]=\"form.code\">{{ form.documentCode }} – {{ form.name }}</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-8 text-md-right mt-2 mt-md-0\">\r\n <button class=\"btn btn-primary\" *ngIf=\"canCreate\" (click)=\"addParameter()\" [disabled]=\"busy || !template || newInputForm\">+ Yeni Parametre</button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"error\" class=\"alert alert-danger\">{{ error }}</div>\r\n <div *ngIf=\"success\" class=\"alert alert-success\" (click)=\"success = ''\">{{ success }}</div>\r\n <div class=\"quality-grid-loading\" *ngIf=\"busy\" role=\"status\" aria-live=\"polite\" aria-busy=\"true\">\r\n <span class=\"spinner-border text-primary\" aria-hidden=\"true\"></span>\r\n <span>{{ busyText }}</span>\r\n </div>\r\n\r\n <ng-container *ngIf=\"template\">\r\n <div [hidden]=\"busy\">\r\n <div class=\"row align-items-end mb-3\" *ngIf=\"controlType === 'Process'\">\r\n <div class=\"col-md-4\"><label for=\"facilitySelect\">Proses sırası için tesis</label>\r\n <select id=\"facilitySelect\" class=\"form-control\" [(ngModel)]=\"facilityCode\" (change)=\"loadSteps()\">\r\n <option *ngFor=\"let facility of matchingFacilities()\" [value]=\"facility.code\">{{ facility.name }}</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-8 text-md-right\"><button class=\"btn btn-outline-primary\" *ngIf=\"canEdit\" (click)=\"addStep()\">+ Proses Adımı</button></div>\r\n </div>\r\n <div class=\"mb-3\" *ngIf=\"controlType === 'Process'\">\r\n <span class=\"step-pill\" *ngFor=\"let step of facilitySteps\">\r\n <button type=\"button\" class=\"btn btn-sm\" [class.btn-outline-primary]=\"step.active\" [class.btn-outline-secondary]=\"!step.active\"\r\n (click)=\"editStep(step)\" [disabled]=\"!canEdit\">{{ step.order }}. {{ step.name }}<span *ngIf=\"!step.active\"> (pasif)</span></button>\r\n </span>\r\n </div>\r\n <div #stepEditor tabindex=\"-1\" class=\"card mt-3 mb-3 editor-card\" *ngIf=\"editingStep as step\"><div class=\"card-body\">\r\n <h5>{{ newStep ? 'Yeni Proses Adımı' : 'Proses Adımını Düzenle' }}</h5>\r\n <div class=\"row\">\r\n <div class=\"col-md-2\"><label>Kod</label><input class=\"form-control\" [(ngModel)]=\"step.code\" [disabled]=\"!newStep\" /></div>\r\n <div class=\"col-md-2\"><label>Proses Kodu</label><input class=\"form-control\" [(ngModel)]=\"step.processCode\" [disabled]=\"!newStep\" /></div>\r\n <div class=\"col-md-4\"><label>Ad</label><input class=\"form-control\" [(ngModel)]=\"step.name\" /></div>\r\n <div class=\"col-md-2\"><label>Sıra</label><input type=\"number\" min=\"1\" class=\"form-control\" [(ngModel)]=\"step.order\" /></div>\r\n <div class=\"col-md-2 d-flex align-items-end\"><label><input type=\"checkbox\" [(ngModel)]=\"step.active\" /> Aktif</label></div>\r\n </div>\r\n <button class=\"btn btn-primary mt-3 mr-2\" (click)=\"saveStep()\" [disabled]=\"busy\">Kaydet</button>\r\n <button class=\"btn btn-secondary mt-3\" (click)=\"editingStep = null\">İptal</button>\r\n </div></div>\r\n <div class=\"form-header rounded p-3 mb-3\">\r\n <p *ngIf=\"newInputForm\" class=\"text-muted\">Önce form başlığını kaydedin, ardından kalite sorularını ekleyin.</p>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\"><label>Form Adı</label><input class=\"form-control\" [(ngModel)]=\"template.form.name\" [disabled]=\"!canEdit\" /></div>\r\n <div class=\"col-md-2\"><label>Doküman Kodu</label><input class=\"form-control\" [(ngModel)]=\"template.form.documentCode\" [disabled]=\"!canEdit\" /></div>\r\n <div class=\"col-md-2\"><label>Yayın Tarihi</label><input type=\"date\" class=\"form-control\" [(ngModel)]=\"template.form.publicationDate\" [disabled]=\"!canEdit\" /></div>\r\n <div class=\"col-md-2\"><label>Revizyon Tarihi</label><input type=\"date\" class=\"form-control\" [(ngModel)]=\"template.form.revisionDate\" [disabled]=\"!canEdit\" /></div>\r\n <div class=\"col-md-2\"><label>Revizyon No</label><input class=\"form-control\" [(ngModel)]=\"template.form.revisionNumber\" [disabled]=\"!canEdit\" /></div>\r\n </div>\r\n <div class=\"row mt-2\" *ngIf=\"controlType === 'Input'\"><div class=\"col-md-4\"><label>Ortalama Tipi</label><select class=\"form-control\" [(ngModel)]=\"template.form.averageMode\" [disabled]=\"!canEdit\"><option value=\"Arithmetic\">Aritmetik</option><option value=\"Weighted\">Miktar ağırlıklı</option></select></div><div class=\"col-md-4\"><label>Miktar Birimi</label><select class=\"form-control\" [(ngModel)]=\"template.form.quantityUnit\" [disabled]=\"!canEdit\"><option value=\"kg\">Kilogram</option><option value=\"t\">Ton</option></select></div></div>\r\n <button class=\"btn btn-outline-primary mt-3\" *ngIf=\"canEdit\" (click)=\"editForm()\" [disabled]=\"busy\">Başlığı Kaydet</button>\r\n </div>\r\n\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-bordered table-striped table-sm parameter-table\">\r\n <thead><tr><th>İşlemler</th><th *ngIf=\"controlType === 'Process'\">Proses Adımı</th><th>Sıra</th><th>Kod</th><th>Parametre / Soru</th><th>Birim</th><th>Veri Tipi</th><th>Limit / Nominal</th><th>Durum</th></tr></thead>\r\n <tbody>\r\n <tr *ngFor=\"let parameter of orderedParameters()\">\r\n <td class=\"actions\">\r\n <button class=\"btn btn-sm btn-outline-primary mr-1\" *ngIf=\"canEdit\" (click)=\"editParameter(parameter)\">Düzenle</button>\r\n <button class=\"btn btn-sm btn-outline-secondary mr-1\" *ngIf=\"canCreate\" (click)=\"addLimit(parameter)\">+ Limit</button>\r\n <button class=\"btn btn-sm btn-outline-danger\" *ngIf=\"canDelete && parameter.active\" (click)=\"deleteParameter(parameter)\">Sil</button>\r\n </td>\r\n <td *ngIf=\"controlType === 'Process'\">{{ processName(parameter.stepCode) }}</td><td>{{ parameter.order }}</td>\r\n <td><code>{{ parameter.code }}</code></td><td>{{ parameter.name }}</td><td>{{ parameter.unit || '—' }}</td>\r\n <td>{{ parameter.valueType }}<span *ngIf=\"parameter.calculated\"> / Hesaplanan</span></td>\r\n <td>\r\n <div *ngFor=\"let limit of limitsFor(parameter.code)\">\r\n <button type=\"button\" class=\"btn btn-link btn-sm p-0 limit-link\" (click)=\"editLimit(limit)\">{{ limit.code }}</button>:\r\n <span *ngIf=\"limit.oilType\">{{ limit.oilType }} · </span>\r\n <span *ngIf=\"limit.origin\">{{ limit.origin === 'Imported' ? 'İthal' : 'İç Piyasa' }} · </span>\r\n <span *ngIf=\"limit.minimum != null\">Min {{ limit.minimum }} </span>\r\n <span *ngIf=\"limit.maximum != null\">Max {{ limit.maximum }} </span>\r\n <span *ngIf=\"limit.nominal != null\">Nominal {{ limit.nominal }} </span>\r\n <span *ngIf=\"limit.expectedText\">{{ limit.expectedText }}</span>\r\n <span *ngIf=\"!limit.active\" class=\"text-muted\">(pasif)</span>\r\n </div>\r\n </td>\r\n <td>{{ parameter.active ? 'Aktif' : 'Pasif' }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n </div></div>\r\n</div>\r\n\r\n<abp-modal [visible]=\"parameterModalVisible\" (visibleChange)=\"parameterModalChanged($event)\"\r\n [busy]=\"busy\" [options]=\"editorModalOptions\" [suppressUnsavedChangesWarning]=\"true\">\r\n <ng-template #abpHeader>\r\n <h5 class=\"modal-title\">{{ newParameter ? 'Yeni Parametre' : 'Parametreyi Düzenle' }}</h5>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div *ngIf=\"modalError\" class=\"alert alert-danger\" role=\"alert\">{{ modalError }}</div>\r\n <div *ngIf=\"busy\" class=\"d-flex align-items-center mb-3\" role=\"status\" aria-live=\"polite\">\r\n <span class=\"spinner-border spinner-border-sm text-primary mr-2\" aria-hidden=\"true\"></span>\r\n <span>{{ busyText }}</span>\r\n </div>\r\n <fieldset *ngIf=\"editingParameter as parameter\" [disabled]=\"busy\" class=\"border-0 p-0 m-0\">\r\n <div class=\"row\">\r\n <div class=\"col-md-4\"><label>Kod</label><input class=\"form-control\" [(ngModel)]=\"parameter.code\" [disabled]=\"!newParameter\" /></div>\r\n <div class=\"col-md-4\"><label>Ad / Soru</label><input class=\"form-control\" [(ngModel)]=\"parameter.name\" /></div>\r\n <div class=\"col-md-4\" *ngIf=\"controlType === 'Process'\"><label>Proses Adımı</label><select class=\"form-control\" [(ngModel)]=\"parameter.stepCode\"><option *ngFor=\"let step of steps()\" [value]=\"step.processCode\">{{ step.name }}</option></select></div>\r\n <div class=\"col-md-4\"><label>Sıra</label><input type=\"number\" class=\"form-control\" [(ngModel)]=\"parameter.order\" /></div>\r\n <div class=\"col-md-4\"><label>Birim</label><input class=\"form-control\" [(ngModel)]=\"parameter.unit\" /></div>\r\n <div class=\"col-md-4\"><label>Veri Tipi</label><select class=\"form-control\" [(ngModel)]=\"parameter.valueType\"><option value=\"Number\">Sayısal</option><option value=\"Text\">Metin</option><option value=\"Choice\">Seçim</option></select></div>\r\n </div>\r\n <div class=\"row mt-2\">\r\n <div class=\"col-md-4\"><label>Ondalık Basamak</label><input type=\"number\" min=\"0\" max=\"8\" class=\"form-control\" [(ngModel)]=\"parameter.decimalPlaces\" /></div>\r\n <div class=\"col-md-4\"><label>Seçenekler (virgülle ayrılmış)</label><input class=\"form-control\" [(ngModel)]=\"optionsText\" [disabled]=\"parameter.valueType !== 'Choice'\" /></div>\r\n <div class=\"col-md-4\"><label>Hesaplama Formülü</label><input class=\"form-control\" [(ngModel)]=\"parameter.formula\" [disabled]=\"!parameter.calculated\" placeholder=\"PARAM_KODU * 2\" /></div>\r\n <div class=\"col-md-4 d-flex flex-column justify-content-end\"><label><input type=\"checkbox\" [(ngModel)]=\"parameter.required\" /> Zorunlu</label><label><input type=\"checkbox\" [(ngModel)]=\"parameter.calculated\" /> Hesaplanan</label><label><input type=\"checkbox\" [(ngModel)]=\"parameter.active\" /> Aktif</label></div>\r\n </div>\r\n </fieldset>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"closeParameterModal()\" [disabled]=\"busy\">İptal</button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"saveParameter()\" [disabled]=\"busy\">Kaydet</button>\r\n </ng-template>\r\n</abp-modal>\r\n\r\n<abp-modal [visible]=\"limitModalVisible\" (visibleChange)=\"limitModalChanged($event)\"\r\n [busy]=\"busy\" [options]=\"editorModalOptions\" [suppressUnsavedChangesWarning]=\"true\">\r\n <ng-template #abpHeader>\r\n <h5 class=\"modal-title\">{{ newLimit ? 'Yeni Limit' : 'Limiti Düzenle' }} – {{ editingLimit?.parameterCode }}</h5>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div *ngIf=\"modalError\" class=\"alert alert-danger\" role=\"alert\">{{ modalError }}</div>\r\n <div *ngIf=\"busy\" class=\"d-flex align-items-center mb-3\" role=\"status\" aria-live=\"polite\">\r\n <span class=\"spinner-border spinner-border-sm text-primary mr-2\" aria-hidden=\"true\"></span>\r\n <span>{{ busyText }}</span>\r\n </div>\r\n <fieldset *ngIf=\"editingLimit as limit\" [disabled]=\"busy\" class=\"border-0 p-0 m-0\">\r\n <div class=\"row\">\r\n <div class=\"col-md-4\"><label>Kod</label><input class=\"form-control\" [(ngModel)]=\"limit.code\" [disabled]=\"!newLimit\" /></div>\r\n <div class=\"col-md-4\"><label>Yağ Cinsi / Koşul</label><select class=\"form-control\" [(ngModel)]=\"limit.oilType\"><option value=\"\">Tümü</option><option value=\"Palm Oil\">Palm Oil</option><option value=\"Palm Olein\">Palm Olein</option></select></div>\r\n <div class=\"col-md-4\"><label>Menşei</label><select class=\"form-control\" [(ngModel)]=\"limit.origin\"><option value=\"\">Tümü</option><option value=\"Domestic\">İç Piyasa</option><option value=\"Imported\">İthal</option></select></div>\r\n <div class=\"col-md-4\"><label>Min</label><input type=\"number\" class=\"form-control\" [(ngModel)]=\"limit.minimum\" /></div>\r\n <div class=\"col-md-4\"><label>Max</label><input type=\"number\" class=\"form-control\" [(ngModel)]=\"limit.maximum\" /></div>\r\n <div class=\"col-md-4\"><label>Nominal</label><input type=\"number\" class=\"form-control\" [(ngModel)]=\"limit.nominal\" /></div>\r\n <div class=\"col-md-4\"><label>Beklenen Metin</label><input class=\"form-control\" [(ngModel)]=\"limit.expectedText\" /></div>\r\n </div>\r\n <div class=\"row mt-2\">\r\n <div class=\"col-md-4\"><label>Başlangıç</label><input type=\"date\" class=\"form-control\" [(ngModel)]=\"limit.validFrom\" /></div>\r\n <div class=\"col-md-4\"><label>Bitiş</label><input type=\"date\" class=\"form-control\" [(ngModel)]=\"limit.validUntil\" /></div>\r\n <div class=\"col-md-4 d-flex align-items-end\"><label><input type=\"checkbox\" [(ngModel)]=\"limit.active\" /> Aktif</label></div>\r\n </div>\r\n </fieldset>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-outline-danger\" *ngIf=\"!newLimit && canDelete\"\r\n (click)=\"deleteLimit(editingLimit!)\" [disabled]=\"busy\">Sil</button>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"closeLimitModal()\" [disabled]=\"busy\">İptal</button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"saveLimit()\" [disabled]=\"busy\">Kaydet</button>\r\n </ng-template>\r\n</abp-modal>\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { DxDataGridComponent } from 'devextreme-angular';\nimport CustomStore from 'devextreme/data/custom_store';\nimport { firstValueFrom } from 'rxjs';\nimport { PermissionService } from '@abp/ng.core';\nimport { IntakeVehicle, MovementType } from '../models/intake.models';\nimport { QualityApiService } from '../services/quality-api.service';\nimport { download, errorMessage, statusLabel } from '../services/quality-measurements';\n\n@Component({ selector: 'lib-intake-list', templateUrl: './intake-grid.component.html', styleUrls: ['./intake.component.scss'] })\nexport class IntakeListComponent implements OnInit {\n @ViewChild('grid') grid?: DxDataGridComponent;\n readonly statuses = [{ value: 'Waiting', text: 'Bekliyor' }, { value: 'Draft', text: 'Taslak' }, { value: 'Accepted', text: 'Kabul' }, { value: 'Rejected', text: 'Ret' }];\n readonly dataSource = new CustomStore({ key: 'docEntry', load: async options => {\n this.error = '';\n try {\n const result = await firstValueFrom(this.api.intakeList({ ...this.query, search: String(options.searchValue || ''),\n skipCount: options.skip || 0, maxResultCount: options.take || 20,\n filter: options.filter ? JSON.stringify(options.filter) : '', sort: options.sort ? JSON.stringify(options.sort) : '' }));\n this.rows = result.items; this.total = result.totalCount;\n return { data: result.items, totalCount: result.totalCount };\n } catch (e) { this.error = errorMessage(e); throw new Error(this.error); }\n }});\n rows: IntakeVehicle[] = []; types: MovementType[] = []; total = 0; busy = false; error = '';\n query = { pendingOnly: true, from: '', until: '', search: '', movementTypeCode: '', status: '', skipCount: 0, maxResultCount: 20 };\n cancelRow: IntakeVehicle | null = null; reason = ''; statusLabel = statusLabel;\n constructor(private api: QualityApiService, private permissions: PermissionService) {}\n ngOnInit(): void { this.api.qualityMovementTypes().subscribe({ next: types => this.types = types, error: e => this.error = errorMessage(e) }); this.load(); }\n allowed(policy: string): boolean { return this.permissions.getGrantedPolicy('Hitsoft.Kadooglu.Kalite.Intake.' + policy); }\n editable(row: IntakeVehicle): boolean { return row.vehicleStatus === '0' && !row.firstWeight && !row.hasExited; }\n load(reset = false): void {\n this.busy = false;\n if (reset) this.grid?.instance.pageIndex(0);\n this.grid?.instance.refresh();\n }\n tab(pending: boolean): void { this.query.pendingOnly = pending; this.load(true); }\n page(direction: number): void { this.query.skipCount += direction * this.query.maxResultCount; this.load(); }\n get pageNumber(): number { return Math.floor(this.query.skipCount / this.query.maxResultCount) + 1; }\n print(row: IntakeVehicle): void { this.api.intakePdf(row.docEntry).subscribe({ next: blob => download(blob, `Girdi-Kontrol-${row.docEntry}.pdf`), error: e => this.error = errorMessage(e) }); }\n cancel(): void {\n if (!this.cancelRow || !this.reason.trim()) { this.error = 'İptal gerekçesi girin.'; return; }\n this.busy = true;\n const id = this.cancelRow.docEntry;\n this.api.intake(id).subscribe({ next: form => this.api.cancelIntake(id, form.inspection.revision, this.reason).subscribe({\n next: () => { this.cancelRow = null; this.reason = ''; this.load(); }, error: e => { this.error = errorMessage(e); this.busy = false; }\n }), error: e => { this.error = errorMessage(e); this.busy = false; } });\n }\n}\n","<div class=\"container-fluid\"><h3>Ham Yağ Giriş Kalite Kontrol</h3><div class=\"card\"><div class=\"card-body\">\n <div class=\"btn-group mb-3\" role=\"tablist\"><button class=\"btn\" [class.btn-success]=\"query.pendingOnly\" [class.btn-outline-secondary]=\"!query.pendingOnly\" (click)=\"tab(true)\">Kalite Kontrol Bekleyenler</button><button class=\"btn\" [class.btn-success]=\"!query.pendingOnly\" [class.btn-outline-secondary]=\"query.pendingOnly\" (click)=\"tab(false)\">Tüm Kayıtlar</button></div>\n <div class=\"row mb-3\"><div class=\"col-md-3\"><label>Başlangıç</label><input type=\"date\" class=\"form-control\" [(ngModel)]=\"query.from\" /></div><div class=\"col-md-3\"><label>Bitiş</label><input type=\"date\" class=\"form-control\" [(ngModel)]=\"query.until\" /></div><div class=\"col-md-3\"><label>Araç Hareket Türü</label><select class=\"form-control\" [(ngModel)]=\"query.movementTypeCode\"><option value=\"\">Tümü</option><option *ngFor=\"let type of types\" [value]=\"type.code\">{{type.name}}</option></select></div><div class=\"col-md-3 d-flex align-items-end\"><button class=\"btn btn-primary\" (click)=\"load(true)\">Filtrele</button></div></div>\n <div *ngIf=\"error\" class=\"alert alert-danger\" role=\"alert\">{{error}}</div>\n <dx-data-grid #grid class=\"intake-grid\" [dataSource]=\"dataSource\" [remoteOperations]=\"{paging: true, filtering: true, sorting: true}\" [showBorders]=\"true\" [rowAlternationEnabled]=\"true\" [columnAutoWidth]=\"true\" [allowColumnResizing]=\"true\" columnResizingMode=\"widget\" style=\"height: calc(100vh - 350px)\">\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row><dxo-search-panel [visible]=\"true\" [width]=\"220\" placeholder=\"Ara…\"></dxo-search-panel>\n <dxo-paging [pageSize]=\"20\"></dxo-paging><dxo-pager [visible]=\"true\" [showInfo]=\"true\" [allowedPageSizes]=\"[10,20,50]\" [showPageSizeSelector]=\"true\" [showNavigationButtons]=\"true\"></dxo-pager>\n <dxi-column caption=\"İşlemler\" cellTemplate=\"actions\" [allowFiltering]=\"false\" [allowSorting]=\"false\" [fixed]=\"true\" [width]=\"145\"></dxi-column>\n <dxi-column dataField=\"qualityStatus\" caption=\"Kalite Durumu\" cellTemplate=\"status\"><dxo-lookup [dataSource]=\"statuses\" valueExpr=\"value\" displayExpr=\"text\"></dxo-lookup></dxi-column>\n <dxi-column dataField=\"sequenceNumber\" caption=\"Sıra No\"></dxi-column><dxi-column dataField=\"docNum\" caption=\"Belge No\" dataType=\"number\"></dxi-column><dxi-column dataField=\"gateCode\" caption=\"Kapı\"></dxi-column>\n <dxi-column dataField=\"entryDate\" caption=\"Giriş Tarihi / Saati\" dataType=\"datetime\" format=\"dd.MM.yyyy HH:mm\"></dxi-column><dxi-column dataField=\"movementTypeName\" caption=\"Araç Hareket Türü\"></dxi-column><dxi-column dataField=\"movementDetailName\" caption=\"Detay\"></dxi-column>\n <dxi-column dataField=\"plate\" caption=\"Kamyon Plakası\"></dxi-column><dxi-column dataField=\"trailerPlate\" caption=\"Dorse Plakası\"></dxi-column><dxi-column dataField=\"driver\" caption=\"Şoför\"></dxi-column>\n <dxi-column dataField=\"partnerName\" caption=\"Muhatap\"></dxi-column><dxi-column dataField=\"shipName\" caption=\"Gemi\"></dxi-column><dxi-column dataField=\"stockTransferNumber\" caption=\"Stok Nakli\"></dxi-column>\n <dxi-column dataField=\"origin\" caption=\"Menşei\"><dxo-lookup [dataSource]=\"[{code:'Domestic',name:'İç Piyasa'},{code:'Imported',name:'İthal'}]\" valueExpr=\"code\" displayExpr=\"name\"></dxo-lookup></dxi-column>\n <dxi-column dataField=\"sealNumber\" caption=\"Mühür No\"></dxi-column><dxi-column dataField=\"analyst\" caption=\"Analizi Yapan\"></dxi-column><dxi-column dataField=\"inspectedAt\" caption=\"Kontrol Tarihi\" dataType=\"datetime\" format=\"dd.MM.yyyy HH:mm\"></dxi-column><dxi-column dataField=\"notes\" caption=\"Açıklama\"></dxi-column>\n <div *dxTemplate=\"let cell of 'status'\"><span class=\"badge\" [class.badge-success]=\"cell.data.qualityStatus === 'Accepted'\" [class.badge-danger]=\"cell.data.qualityStatus === 'Rejected'\" [class.badge-warning]=\"cell.data.qualityStatus === 'Waiting' || cell.data.qualityStatus === 'Draft'\">{{statusLabel(cell.data.qualityStatus)}}</span></div>\n <div *dxTemplate=\"let cell of 'actions'\" class=\"intake-actions-cell\">\n <div ngbDropdown container=\"body\" class=\"d-inline-block\" placement=\"bottom-start top-start\">\n <button type=\"button\" ngbDropdownToggle class=\"btn btn-sm btn-primary intake-actions-toggle\"><i class=\"fa fa-cog\" aria-hidden=\"true\"></i><span>İşlemler</span></button>\n <div ngbDropdownMenu class=\"intake-action-menu\">\n <a ngbDropdownItem *ngIf=\"editable(cell.data) && allowed('Edit')\" [routerLink]=\"['/kalite/intake',cell.data.docEntry]\">{{cell.data.qualityStatus === 'Waiting' ? 'Kalite Kontrol Yap' : 'Düzenle'}}</a>\n <a ngbDropdownItem [routerLink]=\"['/kalite/intake',cell.data.docEntry]\" [queryParams]=\"{mode:'view'}\">Özeti Görüntüle</a>\n <button type=\"button\" ngbDropdownItem *ngIf=\"cell.data.qualityStatus !== 'Waiting' && allowed('Print')\" (click)=\"print(cell.data)\">Girdi Kontrol Formu Yazdır</button>\n <button type=\"button\" ngbDropdownItem *ngIf=\"editable(cell.data) && cell.data.qualityStatus !== 'Waiting' && allowed('Cancel')\" (click)=\"cancelRow = cell.data; reason = ''\">İptal Et</button>\n </div>\n </div>\n </div>\n </dx-data-grid>\n</div></div></div>\n<abp-modal [visible]=\"!!cancelRow\" (visibleChange)=\"!$event && (cancelRow = null)\" [busy]=\"busy\"><ng-template #abpHeader><h5>Kalite Kontrolünü İptal Et</h5></ng-template><ng-template #abpBody><label>İptal Gerekçesi</label><textarea class=\"form-control\" rows=\"3\" [(ngModel)]=\"reason\"></textarea><p class=\"text-muted mt-2\">Kayıt yeniden kalite kontrol bekleyenlere alınır.</p></ng-template><ng-template #abpFooter><button class=\"btn btn-secondary\" (click)=\"cancelRow = null\" [disabled]=\"busy\">Vazgeç</button><button class=\"btn btn-danger\" (click)=\"cancel()\" [disabled]=\"busy || !reason.trim()\">İptal Et</button></ng-template></abp-modal>\n","const PRINT_STYLES = `\n @page { size: A4 portrait; margin: 10mm; }\n html, body { margin: 0; background: #fff !important; color: #212529; }\n body { font-family: Arial, sans-serif; font-size: 10pt; }\n * { -webkit-print-color-adjust: exact; print-color-adjust: exact; }\n .print-surface { width: 100%; padding: 0; }\n .print-surface .card { box-shadow: none; border: 1px solid #ddd; margin-bottom: 4mm; }\n .print-surface .card-body { padding: 4mm; }\n .print-surface .vehicle-info { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 3mm; }\n .print-surface .vehicle-info p { min-height: 0; margin-bottom: 2mm; }\n .print-surface .row { display: flex; flex-wrap: wrap; }\n .print-surface .col-md-3 { flex: 0 0 25%; max-width: 25%; }\n .print-surface .col-md-4 { flex: 0 0 33.333%; max-width: 33.333%; }\n .print-surface .col-md-12 { flex: 0 0 100%; max-width: 100%; }\n .print-surface .table-responsive { overflow: visible; }\n .print-surface .measurement-table { min-width: 0; width: 100%; table-layout: fixed; }\n .print-surface .measurement-table th, .print-surface .measurement-table td { padding: 2mm; overflow-wrap: anywhere; }\n .print-surface .measurement-table th:nth-child(1) { width: 29%; }\n .print-surface .measurement-table th:nth-child(2) { width: 7%; }\n .print-surface .measurement-table th:nth-child(3) { width: 25%; }\n .print-surface .measurement-table th:nth-child(4) { width: 28%; }\n .print-surface .measurement-table th:nth-child(5) { width: 11%; }\n .print-surface thead { display: table-header-group; }\n .print-surface tr, .print-surface .vehicle-info > div, .print-surface .quality-status { break-inside: avoid; }\n .print-surface h5, .print-surface h6 { break-after: avoid; }\n .print-value { display: block; min-height: 1.4em; white-space: pre-wrap; overflow-wrap: anywhere; }\n .print-surface .print-only { display: block !important; }\n`;\n\n/** Print only the form, with current control values and the application's existing colors. */\nexport async function printForm(source: HTMLElement, title: string): Promise<void> {\n const owner = source.ownerDocument;\n const content = source.cloneNode(true) as HTMLElement;\n content.classList.add('print-surface');\n content.querySelectorAll('button, .print-exclude, .alert, .quality-loading').forEach(x => x.remove());\n const originals = source.querySelectorAll<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>('input, select, textarea');\n const copies = content.querySelectorAll<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>('input, select, textarea');\n // Ignore excluded editor controls before pairing, so control indexes remain identical.\n const printableOriginals = Array.from(originals).filter(x => !x.closest('.print-exclude'));\n copies.forEach((copy, index) => {\n const control = printableOriginals[index];\n const value = owner.createElement('span');\n value.className = 'print-value';\n let text = control.getAttribute('data-print-value');\n if (text == null) {\n if (control.tagName === 'SELECT') text = (control as HTMLSelectElement).selectedOptions[0]?.textContent || '';\n else if (control instanceof HTMLInputElement && control.type === 'datetime-local' && control.value)\n text = new Date(control.value).toLocaleString('tr-TR');\n else if (control instanceof HTMLInputElement && control.type === 'number') text = control.value.replace('.', ',');\n else text = control.value;\n }\n value.textContent = text || '—';\n copy.replaceWith(value);\n });\n\n const frame = owner.createElement('iframe');\n frame.title = 'Kalite formu yazdırma';\n frame.setAttribute('aria-hidden', 'true');\n frame.style.cssText = 'position:fixed;left:-10000px;top:0;width:718px;height:1047px;border:0;';\n owner.body.appendChild(frame);\n try {\n const doc = frame.contentDocument!;\n const win = frame.contentWindow!;\n doc.title = title;\n const base = doc.createElement('base'); base.href = owner.baseURI; doc.head.appendChild(base);\n const stylesReady: Promise<void>[] = [];\n owner.querySelectorAll<HTMLStyleElement | HTMLLinkElement>('style, link[rel=\"stylesheet\"]').forEach(style => {\n const copy = style.cloneNode(true) as HTMLStyleElement | HTMLLinkElement;\n if (style.tagName === 'LINK') {\n (copy as HTMLLinkElement).href = (style as HTMLLinkElement).href;\n stylesReady.push(new Promise(resolve => { copy.onload = () => resolve(); copy.onerror = () => resolve(); }));\n }\n doc.head.appendChild(copy);\n });\n const style = doc.createElement('style'); style.textContent = PRINT_STYLES; doc.head.appendChild(style);\n doc.body.appendChild(doc.importNode(content, true));\n await Promise.all(stylesReady);\n await doc.fonts.ready;\n await new Promise<void>(resolve => win.requestAnimationFrame(() => win.requestAnimationFrame(() => resolve())));\n win.addEventListener('afterprint', () => frame.remove(), { once: true });\n win.focus(); win.print();\n // Fallback for browsers that omit afterprint, without removing the frame during preview.\n owner.defaultView?.setTimeout(() => frame.remove(), 300000);\n } catch (error) { frame.remove(); throw error; }\n}\n","import { Component, ElementRef, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { PermissionService } from '@abp/ng.core';\nimport { Subject, forkJoin } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { IntakeForm, QualityTank } from '../models/intake.models';\nimport { QualityMeasurement, QualityParameter } from '../models/quality.models';\nimport { QualityApiService } from '../services/quality-api.service';\nimport { applicableLimit, errorMessage, localDate, recalculate, statusLabel } from '../services/quality-measurements';\nimport { printForm } from '../services/print-form';\n\n@Component({ selector: 'lib-intake-form', templateUrl: './intake-form.component.html', styleUrls: ['./intake.component.scss'] })\nexport class IntakeFormComponent implements OnInit, OnDestroy {\n @ViewChild('printArea') printArea?: ElementRef<HTMLElement>;\n form: IntakeForm | null = null; tanks: QualityTank[] = []; busy = false; error = ''; success = ''; validationError = ''; decision = ''; viewOnly = false;\n compositeEditor = false; compositeMeasurements: QualityMeasurement[] = []; statusLabel = statusLabel;\n private destroy = new Subject<void>();\n constructor(private api: QualityApiService, private route: ActivatedRoute, private router: Router, private permissions: PermissionService) {}\n ngOnInit(): void {\n this.route.paramMap.pipe(takeUntil(this.destroy)).subscribe(params => { this.viewOnly = this.route.snapshot.queryParamMap.get('mode') === 'view'; this.load(Number(params.get('id'))); });\n this.api.tanks().subscribe({ next: tanks => this.tanks = tanks.filter(x => x.active), error: e => this.error = errorMessage(e) });\n }\n ngOnDestroy(): void { this.destroy.next(); this.destroy.complete(); }\n allowed(action: string): boolean { return this.permissions.getGrantedPolicy('Hitsoft.Kadooglu.Kalite.Intake.' + action); }\n get editable(): boolean { return !!this.form?.canEdit && !this.viewOnly && this.allowed('Edit'); }\n get parameters(): QualityParameter[] { return this.form?.inspection.templateSnapshot?.parameters.filter(x => x.active).sort((a, b) => a.order - b.order) || []; }\n get palm(): boolean { return this.form?.details.find(x => x.code === this.form?.inspection.movementDetailCode)?.profile === 'PALM'; }\n private localTime(value: string): string { const d = new Date(value); return localDate(d) + 'T' + String(d.getHours()).padStart(2, '0') + ':' + String(d.getMinutes()).padStart(2, '0'); }\n load(id: number): void {\n if (!Number.isInteger(id) || id <= 0) { this.error = 'Geçerli bir araç kaydı seçin.'; return; }\n this.busy = true; this.error = '';\n this.api.intake(id).subscribe({ next: form => { this.form = form; form.inspection.inspectedAt = this.localTime(form.inspection.inspectedAt); this.decision = ''; this.busy = false; }, error: e => { this.error = errorMessage(e); this.busy = false; } });\n }\n detailChanged(): void {\n if (!this.form) return;\n this.busy = true;\n this.api.intakeTemplate(this.form.inspection.movementDetailCode).subscribe({ next: t => { if (this.form) { this.form.inspection.templateSnapshot = t; this.form.inspection.measurements = []; this.form.compositeSample = null; this.compositeEditor = false; } this.busy = false; this.changed(); }, error: e => { this.error = errorMessage(e); this.busy = false; } });\n }\n measurement(p: QualityParameter, composite = false): QualityMeasurement {\n const values = composite ? this.compositeMeasurements : this.form!.inspection.measurements;\n let value = values.find(x => x.parameterCode === p.code);\n if (!value) { value = { parameterCode: p.code, number: null, text: '' }; values.push(value); }\n return value;\n }\n limitLabel(p: QualityParameter): string {\n const i = this.form?.inspection; if (!i) return '—';\n const l = applicableLimit(i.templateSnapshot?.limits || [], p.code, i.inspectedAt.slice(0, 10), i.oilType, i.origin);\n if (!l) return '—';\n const range = l.expectedText || (l.minimum != null && l.maximum != null ? `${l.minimum} – ${l.maximum}` : l.minimum != null ? `≥ ${l.minimum}` : l.maximum != null ? `≤ ${l.maximum}` : '—');\n return range + (l.nominal != null ? ` · Nominal: ${l.nominal}` : '');\n }\n inputStep(p: QualityParameter): number { return Math.pow(10, -p.decimalPlaces); }\n changed(composite = false): void {\n const i = this.form?.inspection; if (!i?.templateSnapshot) return;\n try { recalculate(this.parameters, composite ? this.compositeMeasurements : i.measurements, i.templateSnapshot.limits, i.inspectedAt.slice(0, 10), i.oilType, i.origin); this.error = ''; }\n catch (e) { this.error = e instanceof Error ? e.message : 'Hesaplama yapılamadı.'; }\n }\n payload(): object {\n const i = this.form!.inspection;\n return { vehicleEntryId: i.vehicleEntryId, movementDetailCode: i.movementDetailCode, origin: i.origin || '', tankCode: i.tankCode || '', oilType: i.oilType || '',\n batchNumber: i.batchNumber || '', notes: i.notes || '', analyst: i.analyst, inspectedAt: new Date(i.inspectedAt).toISOString(), revision: i.revision,\n measurements: i.measurements, decision: this.decision || undefined };\n }\n save(approve: boolean): void {\n if (!this.form || !this.editable) return;\n if (!this.form.inspection.inspectedAt || Number.isNaN(Date.parse(this.form.inspection.inspectedAt))) { this.validationError = 'Kontrol tarihi ve saatini girin.'; this.error = this.validationError; return; }\n if (approve && !this.decision) { this.validationError = 'Kabul veya Ret seçin.'; this.error = this.validationError; return; }\n if (approve && this.decision === 'Rejected' && !this.form.inspection.notes?.trim()) { this.validationError = 'Ret gerekçesi girin.'; this.error = this.validationError; return; }\n if (!approve) this.decision = '';\n this.busy = true; this.error = ''; this.validationError = '';\n this.api.saveIntake(this.payload()).subscribe({ next: i => { this.success = approve ? 'Kalite kararı kaydedildi.' : 'Taslak kaydedildi.'; this.form!.inspection = i; i.inspectedAt = this.localTime(i.inspectedAt); this.busy = false; }, error: e => { this.error = errorMessage(e); this.busy = false; } });\n }\n beginComposite(): void { this.compositeEditor = true; this.compositeMeasurements = []; }\n saveComposite(): void {\n if (!this.form) return;\n if (!this.form.inspection.inspectedAt || Number.isNaN(Date.parse(this.form.inspection.inspectedAt))) { this.error = 'Numune tarihi ve saatini girin.'; return; }\n this.busy = true;\n this.api.saveComposite({ ...this.payload(), revision: 0, measurements: this.compositeMeasurements }).subscribe({ next: sample => { this.form!.compositeSample = sample; this.compositeEditor = false; this.busy = false; }, error: e => { this.error = errorMessage(e); this.busy = false; } });\n }\n refreshComposite(): void {\n if (!this.form) return;\n const i = this.form.inspection;\n this.api.intake(i.vehicleEntryId, i.movementDetailCode, i.batchNumber).subscribe({ next: result => this.form!.compositeSample = result.compositeSample, error: e => this.error = errorMessage(e) });\n }\n async print(): Promise<void> {\n if (!this.form || !this.printArea || this.busy || !this.allowed('Print')) return;\n try { await printForm(this.printArea.nativeElement, `Girdi-Kontrol-${this.form.vehicle.docEntry}`); }\n catch (e) { this.error = errorMessage(e); }\n }\n back(): void { this.router.navigate(['/kalite/intake']); }\n}\n","<div class=\"container-fluid\" #printArea>\n <div class=\"d-flex justify-content-between align-items-center mb-3\"><h3>Ham Yağ Giriş Kalite Kontrol</h3><button class=\"btn btn-outline-secondary\" (click)=\"back()\">Listeye Dön</button></div>\n <div *ngIf=\"error\" class=\"alert alert-danger\" role=\"alert\">{{ error }}</div><div *ngIf=\"success\" class=\"alert alert-success\">{{ success }}</div>\n <div *ngIf=\"busy\" class=\"quality-loading\" role=\"status\"><span class=\"spinner-border spinner-border-sm mr-2\"></span> İşlem sürüyor…</div>\n <ng-container *ngIf=\"form as f\">\n <div class=\"card mb-3\"><div class=\"card-body\"><h5>Araç / Sevkiyat Bilgileri</h5>\n <div class=\"vehicle-info\">\n <div><label>Sıra / Belge No</label><p>{{ f.vehicle.sequenceNumber }} / {{ f.vehicle.docNum }}</p></div><div><label>Giriş Tarihi / Saati</label><p>{{ f.vehicle.entryDate | date:'dd.MM.yyyy HH:mm' }}</p></div>\n <div><label>Kapı / Hareket Türü</label><p>{{ f.vehicle.gateCode }} / {{ f.vehicle.movementTypeName }}</p></div><div><label>Kamyon / Dorse</label><p>{{ f.vehicle.plate }} / {{ f.vehicle.trailerPlate || '—' }}</p></div>\n <div><label>Şoför / Telefon</label><p>{{ f.vehicle.driver }} / {{ f.vehicle.driverPhone || '—' }}</p></div><div><label>T.C. Kimlik / Mühür</label><p>{{ f.vehicle.identityNumber || '—' }} / {{ f.vehicle.sealNumber || '—' }}</p></div>\n <div><label>Muhatap / Gemi</label><p>{{ f.vehicle.partnerName || '—' }} / {{ f.vehicle.shipName || '—' }}</p></div><div><label>Stok Nakli / Mal Girişi / Sipariş</label><p>{{ f.vehicle.stockTransferNumber || '—' }} / {{ f.vehicle.receiptNumber || '—' }} / {{ f.vehicle.orderNumber || '—' }}</p></div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-4\"><label>Araç Hareket Türü Detayı</label><select class=\"form-control\" [(ngModel)]=\"f.inspection.movementDetailCode\" (change)=\"detailChanged()\" [disabled]=\"!editable || busy || (f.details.length === 1 && !f.details[0].detailCode)\"><option value=\"\">Seçin</option><option *ngFor=\"let d of f.details\" [value]=\"d.code\">{{ d.name || f.vehicle.movementTypeName }}{{ !d.detailCode ? ' (detaysız)' : '' }}</option></select></div>\n <div class=\"col-md-4\"><label>Menşei</label><select class=\"form-control\" [(ngModel)]=\"f.inspection.origin\" (change)=\"changed()\" [disabled]=\"!editable || busy\"><option value=\"\">Seçin</option><option value=\"Domestic\">İç Piyasa</option><option value=\"Imported\">İthal</option></select></div>\n <div class=\"col-md-4\"><label>Kalite Durumu</label><p class=\"mt-2\">\n <span class=\"quality-status\" role=\"status\"\n [class.quality-status-accepted]=\"f.inspection.revision && f.inspection.status === 'Accepted'\"\n [class.quality-status-rejected]=\"f.inspection.revision && f.inspection.status === 'Rejected'\"\n [class.quality-status-draft]=\"f.inspection.revision && f.inspection.status === 'Draft'\"\n [class.quality-status-waiting]=\"!f.inspection.revision || f.inspection.status === 'Waiting'\">\n <i class=\"fa\" aria-hidden=\"true\"\n [class.fa-check-circle]=\"f.inspection.revision && f.inspection.status === 'Accepted'\"\n [class.fa-times-circle]=\"f.inspection.revision && f.inspection.status === 'Rejected'\"\n [class.fa-edit]=\"f.inspection.revision && f.inspection.status === 'Draft'\"\n [class.fa-clock]=\"!f.inspection.revision || f.inspection.status === 'Waiting'\"></i>\n {{ statusLabel(f.inspection.revision ? f.inspection.status : 'Waiting') }}\n </span>\n </p></div>\n </div>\n </div></div>\n <div class=\"card mb-3\"><div class=\"card-body\">\n <h5>{{ f.inspection.templateSnapshot?.form?.name || 'Ölçüm / Parametreler' }} <small>{{ f.inspection.templateSnapshot?.form?.documentCode }}</small></h5>\n <p class=\"print-only text-muted\">Yayın: {{ f.inspection.templateSnapshot?.form?.publicationDate | date:'dd.MM.yyyy' }} · Revizyon: {{ f.inspection.templateSnapshot?.form?.revisionDate | date:'dd.MM.yyyy' }} / {{ f.inspection.templateSnapshot?.form?.revisionNumber }}</p>\n <p *ngIf=\"!parameters.length\" class=\"text-muted\">Detay seçin. Bu kaleme ait form ve sorular Kalite Parametreleri ekranından tanımlanmalıdır.</p>\n <div class=\"table-responsive\"><table class=\"table table-bordered table-sm measurement-table\" *ngIf=\"parameters.length\">\n <thead><tr><th>Soru / Parametre</th><th>Birim</th><th>Nominal / Limit</th><th>Ölçüm Değeri / Yanıt</th><th>Uygunluk</th></tr></thead>\n <tbody><tr *ngFor=\"let p of parameters\" [class.out-of-limit]=\"measurement(p).outOfLimit\">\n <td>{{ p.name }}<span *ngIf=\"p.required\" class=\"text-danger\"> *</span></td><td>{{ p.unit || '—' }}</td><td>{{ limitLabel(p) }}</td>\n <td><input *ngIf=\"p.valueType === 'Number'\" type=\"number\" class=\"form-control form-control-sm\" [(ngModel)]=\"measurement(p).number\" (ngModelChange)=\"changed()\" [attr.step]=\"inputStep(p)\" [disabled]=\"!editable || p.calculated || busy\" [attr.aria-label]=\"p.name\" />\n <select *ngIf=\"p.valueType === 'Choice'\" class=\"form-control form-control-sm\" [(ngModel)]=\"measurement(p).text\" (change)=\"changed()\" [disabled]=\"!editable || busy\"><option value=\"\">Seçin</option><option *ngFor=\"let option of p.options\" [value]=\"option\">{{ option }}</option></select>\n <input *ngIf=\"p.valueType === 'Text'\" class=\"form-control form-control-sm\" [(ngModel)]=\"measurement(p).text\" (ngModelChange)=\"changed()\" [disabled]=\"!editable || busy\" [attr.aria-label]=\"p.name\" />\n </td><td><span *ngIf=\"measurement(p).outOfLimit\" class=\"badge badge-danger\">Limit Dışı</span><span *ngIf=\"!measurement(p).outOfLimit && (measurement(p).number != null || measurement(p).text)\" class=\"badge badge-success\">{{ p.calculated ? 'Otomatik' : 'Uygun' }}</span></td>\n </tr></tbody>\n </table></div>\n <div *ngIf=\"palm\" class=\"border rounded p-3 mt-3\">\n <h6>Gemi / Parti Kompozit Numunesi</h6><label>Parti Kodu</label><div class=\"d-flex\"><input class=\"form-control\" [(ngModel)]=\"f.inspection.batchNumber\" [disabled]=\"!editable || busy\" /><button class=\"btn btn-outline-secondary ml-2\" (click)=\"refreshComposite()\">Numuneyi Getir</button></div>\n <p class=\"text-muted mt-2\">Kaynak mal girişi veya parti koduyla ilişkilendirilen numune diğer araçlarda salt okunur gösterilir.</p>\n <ng-container *ngIf=\"f.compositeSample as sample\"><p>{{ sample.analyst }} · {{ sample.sampledAt | date:'dd.MM.yyyy HH:mm' }}</p><div class=\"row\"><div class=\"col-md-3 mb-2\" *ngFor=\"let value of sample.measurements\"><strong>{{ value.parameterName }}</strong>: {{ value.number != null ? value.number : value.text }} {{ value.unit }}</div></div></ng-container>\n <button *ngIf=\"!f.compositeSample && editable && allowed('Composite') && !compositeEditor\" class=\"btn btn-outline-primary\" (click)=\"beginComposite()\">Kompozit Numune Gir</button>\n <div *ngIf=\"compositeEditor\" class=\"print-exclude\"><div class=\"row\"><div class=\"col-md-3 mb-2\" *ngFor=\"let p of parameters\"><label>{{ p.name }}</label><input *ngIf=\"p.valueType === 'Number'\" type=\"number\" class=\"form-control\" [(ngModel)]=\"measurement(p, true).number\" (ngModelChange)=\"changed(true)\" [disabled]=\"p.calculated || busy\" /><select *ngIf=\"p.valueType === 'Choice'\" class=\"form-control\" [(ngModel)]=\"measurement(p, true).text\" (change)=\"changed(true)\"><option value=\"\"></option><option *ngFor=\"let option of p.options\" [value]=\"option\">{{ option }}</option></select><input *ngIf=\"p.valueType === 'Text'\" class=\"form-control\" [(ngModel)]=\"measurement(p, true).text\" /></div></div><button class=\"btn btn-primary\" (click)=\"saveComposite()\" [disabled]=\"busy\">Numuneyi Kaydet</button><button class=\"btn btn-secondary ml-2\" (click)=\"compositeEditor = false\">Vazgeç</button></div>\n </div>\n </div></div>\n <div class=\"card\"><div class=\"card-body\"><h5>Değerlendirme</h5><div class=\"row\">\n <div class=\"col-md-3\"><label>Genel Değerlendirme</label><select class=\"form-control\" [(ngModel)]=\"decision\" [attr.data-print-value]=\"statusLabel(decision || (f.inspection.revision ? f.inspection.status : 'Waiting'))\" [disabled]=\"!editable || busy\"><option value=\"\">Seçin</option><option *ngIf=\"allowed('Accept')\" value=\"Accepted\">Kabul</option><option *ngIf=\"allowed('Reject')\" value=\"Rejected\">Ret</option></select></div>\n <div class=\"col-md-3\"><label>Analizi Yapan *</label><input class=\"form-control\" [(ngModel)]=\"f.inspection.analyst\" [disabled]=\"!editable || busy\" /></div>\n <div class=\"col-md-3\"><label>Kontrol Tarihi / Saati *</label><input type=\"datetime-local\" class=\"form-control\" [(ngModel)]=\"f.inspection.inspectedAt\" (change)=\"changed()\" [disabled]=\"!editable || busy\" /></div>\n <div class=\"col-md-3\"><label>Miktar (kg)</label><input class=\"form-control\" [value]=\"f.inspection.quantityKg == null ? 'Tartım sonrası gelir' : f.inspection.quantityKg\" disabled /></div>\n <div class=\"col-md-4 mt-3\"><label>Tank No</label><select class=\"form-control\" [(ngModel)]=\"f.inspection.tankCode\" [disabled]=\"!editable || busy\"><option value=\"\">Seçin</option><option *ngFor=\"let tank of tanks\" [value]=\"tank.code\">{{ tank.name }}</option></select></div>\n <div class=\"col-md-4 mt-3\"><label>Yağ Cinsi</label><select class=\"form-control\" [(ngModel)]=\"f.inspection.oilType\" (change)=\"changed()\" [disabled]=\"!editable || busy\"><option value=\"\">Seçin</option><option>Ayçiçek</option><option>Rafine Ayçiçek</option><option>Palm Oil</option><option>Palm Olein</option></select></div>\n <div class=\"col-md-12 mt-3\"><label>Açıklama / Diğer <span *ngIf=\"decision === 'Rejected'\">*</span></label><textarea rows=\"3\" class=\"form-control\" [(ngModel)]=\"f.inspection.notes\" [disabled]=\"!editable || busy\"></textarea></div>\n </div><div *ngIf=\"validationError\" class=\"alert alert-danger mt-3 mb-2\" role=\"alert\">{{ validationError }}</div><div class=\"mt-3\"><button *ngIf=\"editable\" class=\"btn btn-outline-primary mr-2\" (click)=\"save(false)\" [disabled]=\"busy || !parameters.length\">Kaydet</button><button *ngIf=\"editable && (allowed('Accept') || allowed('Reject'))\" class=\"btn btn-primary mr-2\" (click)=\"save(true)\" [disabled]=\"busy || !parameters.length\">Kaydet ve Onayla</button><button *ngIf=\"allowed('Print')\" class=\"btn btn-outline-secondary mr-2\" (click)=\"print()\" [disabled]=\"busy || !f.inspection.revision\">Formu Yazdır</button><button class=\"btn btn-secondary\" (click)=\"back()\">Vazgeç</button></div>\n <p *ngIf=\"!f.canEdit\" class=\"text-muted mt-3\">Araç tartıma girdiği, çıktığı veya iptal edildiği için kayıt salt okunur.</p>\n </div></div>\n </ng-container>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { PermissionService } from '@abp/ng.core';\nimport { MovementDetail, MovementType, QualityShift, QualityTank, QualityLaborant } from '../models/intake.models';\nimport { QualityApiService } from '../services/quality-api.service';\nimport { errorMessage } from '../services/quality-measurements';\n\n@Component({ selector: 'lib-quality-definitions', templateUrl: './quality-definitions.component.html', styleUrls: ['./intake.component.scss'] })\nexport class QualityDefinitionsComponent implements OnInit {\n tab: 'details' | 'tanks' | 'shifts' = 'details'; types: MovementType[] = []; details: MovementDetail[] = []; tanks: QualityTank[] = []; shifts: QualityShift[] = [];\n detail: MovementDetail | null = null; tank: QualityTank | null = null; shift: QualityShift | null = null; isNew = true; busy = false; error = ''; modalError = ''; success = '';\n laborants: QualityLaborant[] = []; laborantsBusy = false; laborantsError = '';\n profiles = [{ code: '', name: 'Soruları kendim tanımlayacağım' }, { code: 'RAW', name: 'Ham Ayçiçek Yağı' }, { code: 'REFINED', name: 'Rafine Yağ' }, { code: 'PALM', name: 'Palm Oil / Palm Olein' }, { code: 'COAL', name: 'Kömür' }, { code: 'NAOH', name: 'Kostik (NaOH)' }, { code: 'PHOSPHORIC', name: 'Fosforik Asit' }, { code: 'SULFURIC', name: 'Sülfürik Asit' }, { code: 'PERLITE', name: 'Perlit' }, { code: 'EARTH', name: 'Ağartma Toprağı' }];\n constructor(private api: QualityApiService, private permissions: PermissionService) {}\n get canEdit(): boolean { return this.permissions.getGrantedPolicy('Hitsoft.Kadooglu.Kalite.Definitions.Edit'); }\n get canDelete(): boolean { return this.permissions.getGrantedPolicy('Hitsoft.Kadooglu.Kalite.Definitions.Delete'); }\n ngOnInit(): void { this.load(); }\n load(): void {\n this.busy = true; this.error = '';\n if (this.tab === 'details') {\n this.api.movementTypes().subscribe({ next: x => this.types = x, error: e => this.error = errorMessage(e) });\n this.api.movementDetails().subscribe({ next: x => { this.details = x; this.busy = false; }, error: e => { this.error = errorMessage(e); this.busy = false; } });\n } else if (this.tab === 'tanks') this.api.tanks().subscribe({ next: x => { this.tanks = x; this.busy = false; }, error: e => { this.error = errorMessage(e); this.busy = false; } });\n else this.api.shifts().subscribe({ next: x => { this.shifts = x; this.busy = false; }, error: e => { this.error = errorMessage(e); this.busy = false; } });\n }\n selectTab(tab: 'details' | 'tanks' | 'shifts'): void { this.tab = tab; this.close(); this.load(); }\n name(code: string): string { return this.types.find(x => x.code === code)?.name || code; }\n openDetail(value?: MovementDetail): void { this.error = ''; this.modalError = ''; this.isNew = !value; this.detail = value ? { ...value } : { code: '', movementTypeCode: '', detailCode: '', name: '', profile: '', active: true }; }\n openTank(value?: QualityTank): void { this.error = ''; this.modalError = ''; this.isNew = !value; this.tank = value ? { ...value } : { code: '', name: '', type: 'Raw', capacity: null, active: true }; }\n openShift(value?: QualityShift): void {\n this.error = ''; this.modalError = '';\n this.isNew = !value;\n this.shift = value ? { ...value, analystUserId: value.analystUserId || null } : { code: '', name: '', startHour: 7, endHour: 15, analyst: '', analystUserId: null, active: true };\n this.laborants = []; this.laborantsBusy = true; this.laborantsError = '';\n this.api.laborants().subscribe({ next: x => { this.laborants = x; this.laborantsBusy = false; },\n error: e => { this.laborantsError = errorMessage(e); this.laborantsBusy = false; } });\n }\n laborantChanged(): void {\n if (this.shift) this.shift.analyst = this.laborants.find(x => x.id === this.shift!.analystUserId)?.userName || '';\n }\n get selectedLaborantMissing(): boolean { return !!this.shift?.analystUserId && !this.laborants.some(x => x.id === this.shift!.analystUserId); }\n close(): void { this.detail = null; this.tank = null; this.shift = null; this.modalError = ''; }\n save(): void {\n const value = this.detail || this.tank || this.shift; if (!value) return;\n value.code = this.isNew ? value.code.trim().toUpperCase() : value.code; this.busy = true; this.modalError = '';\n const request = this.detail ? this.api.saveDetail(this.detail, this.isNew) : this.tank ? this.api.saveTank(this.tank, this.isNew) : this.api.saveShift(this.shift!);\n request.subscribe({ next: () => { this.close(); this.success = 'Tanım kaydedildi.'; this.load(); }, error: e => { this.modalError = errorMessage(e); this.busy = false; } });\n }\n delete(): void {\n const value = this.detail || this.tank || this.shift;\n if (!value || this.isNew || this.busy) return;\n const type = this.detail ? 'araç hareket türü detayını' : this.tank ? 'tankı' : 'vardiyayı';\n if (!confirm(`${value.code} kodlu ${type} ve bağlı tanımları kalıcı olarak silinsin mi?`)) return;\n this.busy = true; this.modalError = '';\n const request = this.detail ? this.api.deleteDetail(value.code) : this.tank ? this.api.deleteTank(value.code) : this.api.deleteShift(value.code);\n request.subscribe({ next: () => { this.close(); this.success = 'Tanım silindi.'; this.load(); }, error: e => { this.modalError = errorMessage(e); this.busy = false; } });\n }\n}\n","<div class=\"container-fluid\"><h3>Kalite Tanımları</h3><div class=\"card\"><div class=\"card-body\">\n <div class=\"d-flex justify-content-between mb-3\"><div class=\"btn-group\">\n <button class=\"btn\" [class.btn-primary]=\"tab === 'details'\" [class.btn-outline-secondary]=\"tab !== 'details'\" (click)=\"selectTab('details')\">Araç Hareket Türleri Detay</button>\n <button class=\"btn\" [class.btn-primary]=\"tab === 'tanks'\" [class.btn-outline-secondary]=\"tab !== 'tanks'\" (click)=\"selectTab('tanks')\">Tanklar</button>\n <button class=\"btn\" [class.btn-primary]=\"tab === 'shifts'\" [class.btn-outline-secondary]=\"tab !== 'shifts'\" (click)=\"selectTab('shifts')\">Vardiyalar</button>\n </div><button class=\"btn btn-primary\" *ngIf=\"canEdit\" [disabled]=\"busy\" (click)=\"tab === 'details' ? openDetail() : tab === 'tanks' ? openTank() : openShift()\">+ Yeni Kayıt</button></div>\n <div *ngIf=\"error\" class=\"alert alert-danger\">{{ error }}</div><div *ngIf=\"success\" class=\"alert alert-success\">{{ success }}</div><div *ngIf=\"busy\" class=\"quality-loading\" role=\"status\">Tanımlar yükleniyor…</div>\n <div class=\"table-responsive\" [hidden]=\"busy\">\n <table *ngIf=\"tab === 'details'\" class=\"table table-striped table-bordered\"><thead><tr><th>İşlemler</th><th>Araç Hareket Türü</th><th>Detay Kodu</th><th>Detay Adı</th><th>Aktif</th></tr></thead><tbody><tr *ngFor=\"let d of details\"><td><button *ngIf=\"canEdit\" class=\"btn btn-sm btn-outline-primary\" (click)=\"openDetail(d)\">Düzenle</button><a class=\"quality-questions-link\" [routerLink]=\"['/kalite/parameters']\" [queryParams]=\"{type: 'Input', detail: d.code}\">Kalite Soruları</a></td><td>{{ name(d.movementTypeCode) }}</td><td>{{ d.detailCode || '—' }}</td><td>{{ d.name || '—' }}</td><td>{{ d.active ? 'Evet' : 'Hayır' }}</td></tr></tbody></table>\n <table *ngIf=\"tab === 'tanks'\" class=\"table table-striped table-bordered\"><thead><tr><th>İşlemler</th><th>Kod</th><th>Ad</th><th>Tip</th><th>Kapasite</th><th>Aktif</th></tr></thead><tbody><tr *ngFor=\"let t of tanks\"><td><button *ngIf=\"canEdit\" class=\"btn btn-sm btn-outline-primary\" (click)=\"openTank(t)\">Düzenle</button></td><td>{{ t.code }}</td><td>{{ t.name }}</td><td>{{ t.type === 'Raw' ? 'Ham Yağ' : t.type === 'Refined' ? 'Rafine' : t.type === 'Product' ? 'Ürün' : 'Ara' }}</td><td>{{ t.capacity }}</td><td>{{ t.active ? 'Evet' : 'Hayır' }}</td></tr></tbody></table>\n <table *ngIf=\"tab === 'shifts'\" class=\"table table-striped table-bordered\"><thead><tr><th>İşlemler</th><th>Kod</th><th>Ad</th><th>Başlangıç</th><th>Bitiş</th><th>Laborant</th><th>Aktif</th></tr></thead><tbody><tr *ngFor=\"let s of shifts\"><td><button *ngIf=\"canEdit\" class=\"btn btn-sm btn-outline-primary\" (click)=\"openShift(s)\">Düzenle</button></td><td>{{ s.code }}</td><td>{{ s.name }}</td><td>{{ s.startHour | number:'2.0-0' }}:00</td><td>{{ s.endHour | number:'2.0-0' }}:00</td><td>{{ s.analyst }}</td><td>{{ s.active ? 'Evet' : 'Hayır' }}</td></tr></tbody></table>\n </div><p *ngIf=\"tab === 'details'\" class=\"text-muted\">Etkin tanımlarda bulunan araç hareket türleri kalite kontrole tabidir. Detay kodu ve adı boş bırakılarak yalnız hareket türü başlığı tanımlanabilir.</p>\n</div></div></div>\n<abp-modal [visible]=\"!!(detail || tank || shift)\" (visibleChange)=\"!$event && close()\" [busy]=\"busy\" [options]=\"{size: 'lg'}\">\n <ng-template #abpHeader><h5>{{ isNew ? 'Yeni Tanım' : 'Tanımı Düzenle' }}</h5></ng-template>\n <ng-template #abpBody><div *ngIf=\"modalError\" class=\"alert alert-danger\">{{ modalError }}</div>\n <div *ngIf=\"detail as d\" class=\"row\">\n <div class=\"col-md-4\"><label>Kayıt Kodu *</label><input class=\"form-control\" [(ngModel)]=\"d.code\" [disabled]=\"!isNew\" maxlength=\"24\" /></div><div class=\"col-md-8\"><label>Araç Hareket Türü *</label><select class=\"form-control\" [(ngModel)]=\"d.movementTypeCode\" [disabled]=\"!isNew\"><option value=\"\">Seçin</option><option *ngFor=\"let type of types\" [value]=\"type.code\">{{ type.name }}</option></select></div>\n <div class=\"col-md-4 mt-3\"><label>Detay Kodu</label><input class=\"form-control\" [(ngModel)]=\"d.detailCode\" /></div><div class=\"col-md-8 mt-3\"><label>Detay Adı</label><input class=\"form-control\" [(ngModel)]=\"d.name\" /></div>\n <div class=\"col-md-12 mt-3\"><label>Başlangıç Soruları</label><select class=\"form-control\" [(ngModel)]=\"d.profile\" [disabled]=\"!isNew\"><option *ngFor=\"let p of profiles\" [value]=\"p.code\">{{ p.name }}</option></select><small class=\"text-muted\">Seçilen şablonun soruları ve limitleri Kalite Parametreleri ekranından düzenlenebilir.</small></div><div class=\"col-md-12 mt-3\"><label><input type=\"checkbox\" [(ngModel)]=\"d.active\" /> Aktif</label></div>\n </div>\n <div *ngIf=\"tank as t\" class=\"row\"><div class=\"col-md-4\"><label>Kod *</label><input class=\"form-control\" [(ngModel)]=\"t.code\" [disabled]=\"!isNew\" /></div><div class=\"col-md-8\"><label>Ad *</label><input class=\"form-control\" [(ngModel)]=\"t.name\" /></div><div class=\"col-md-6 mt-3\"><label>Tip</label><select class=\"form-control\" [(ngModel)]=\"t.type\"><option value=\"Raw\">Ham Yağ</option><option value=\"Refined\">Rafine</option><option value=\"Intermediate\">Ara</option><option value=\"Product\">Ürün</option></select></div><div class=\"col-md-6 mt-3\"><label>Kapasite</label><input type=\"number\" min=\"0\" class=\"form-control\" [(ngModel)]=\"t.capacity\" /></div><div class=\"col-md-12 mt-3\"><label><input type=\"checkbox\" [(ngModel)]=\"t.active\" /> Aktif</label></div></div>\n <div *ngIf=\"shift as s\" class=\"row\">\n <div class=\"col-md-3\"><label>Kod *</label><input class=\"form-control\" [(ngModel)]=\"s.code\" [disabled]=\"!isNew\" /></div>\n <div class=\"col-md-9\"><label>Ad *</label><input class=\"form-control\" [(ngModel)]=\"s.name\" /></div>\n <div class=\"col-md-4 mt-3\"><label>Başlangıç Saati</label><input type=\"number\" min=\"0\" max=\"23\" class=\"form-control\" [(ngModel)]=\"s.startHour\" /></div>\n <div class=\"col-md-4 mt-3\"><label>Bitiş Saati</label><input type=\"number\" min=\"0\" max=\"23\" class=\"form-control\" [(ngModel)]=\"s.endHour\" /></div>\n <div class=\"col-md-4 mt-3\"><label>Laborant</label>\n <select class=\"form-control\" [(ngModel)]=\"s.analystUserId\" (change)=\"laborantChanged()\" [disabled]=\"busy || laborantsBusy\">\n <option [ngValue]=\"null\">{{ !s.analystUserId && s.analyst ? 'Mevcut: ' + s.analyst + ' (eski kayıt)' : 'Seçin' }}</option>\n <option *ngIf=\"selectedLaborantMissing\" [ngValue]=\"s.analystUserId\" disabled>{{ s.analyst }} (seçilebilir değil)</option>\n <option *ngFor=\"let user of laborants\" [ngValue]=\"user.id\">{{ user.userName }}</option>\n </select>\n <small *ngIf=\"laborantsBusy\" class=\"text-muted\">Kullanıcılar yükleniyor…</small>\n <small *ngIf=\"!laborantsBusy && !laborantsError && !laborants.length\" class=\"text-muted\">Bu firmada aktif ve proses veri girişi yetkisi olan kullanıcı bulunamadı.</small>\n <div *ngIf=\"laborantsError\" class=\"text-danger\" role=\"alert\">{{ laborantsError }}</div>\n </div>\n <div class=\"col-md-12 mt-3\"><label><input type=\"checkbox\" [(ngModel)]=\"s.active\" /> Aktif</label></div>\n </div>\n </ng-template><ng-template #abpFooter><button class=\"btn btn-danger mr-auto\" *ngIf=\"canDelete && !isNew\" [disabled]=\"busy\" (click)=\"delete()\">Sil</button><button class=\"btn btn-secondary\" [disabled]=\"busy\" (click)=\"close()\">Vazgeç</button><button class=\"btn btn-primary\" [disabled]=\"busy\" (click)=\"save()\">Kaydet</button></ng-template>\n</abp-modal>\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { PermissionService } from '@abp/ng.core';\nimport { QualityApiService } from '../services/quality-api.service';\nimport { MovementType, ReportFilter, QualityReport, ReportRow, ReportSection } from '../models/intake.models';\nimport { QualityForm, QualityFacility, QualityParameter } from '../models/quality.models';\nimport { download, errorMessage, localDate, statusLabel } from '../services/quality-measurements';\n\n@Component({ selector: 'lib-quality-reports', templateUrl: './quality-reports.component.html', styleUrls: ['./intake.component.scss'] })\nexport class QualityReportsComponent implements OnInit {\n filter: ReportFilter = { type: 'Input', from: localDate(new Date(new Date().getFullYear(), new Date().getMonth(), 1)), until: localDate(), groupBy: 'None' };\n report: QualityReport | null = null; forms: QualityForm[] = []; facilities: QualityFacility[] = []; types: MovementType[] = []; busy = false; error = ''; statusLabel = statusLabel;\n constructor(private api: QualityApiService, private route: ActivatedRoute, private permissions: PermissionService) {}\n ngOnInit(): void {\n this.filter.type = this.route.snapshot.data['type'] || 'Input';\n this.api.reportForms().subscribe({ next: x => this.forms = x, error: e => this.error = errorMessage(e) });\n this.api.definitionFacilities().subscribe({ next: x => this.facilities = x, error: e => this.error = errorMessage(e) });\n this.api.qualityMovementTypes().subscribe({ next: x => this.types = x, error: e => this.error = errorMessage(e) });\n }\n get canExport(): boolean { return this.permissions.getGrantedPolicy('Hitsoft.Kadooglu.Kalite.Reports.Export'); }\n get visibleForms(): QualityForm[] { return this.forms.filter(x => (x.controlType || 'Process') === (this.filter.type === 'Process' ? 'Process' : 'Input')); }\n load(): void { this.busy = true; this.error = ''; this.api.report(this.filter).subscribe({ next: x => { this.report = x; this.busy = false; }, error: e => { this.error = errorMessage(e); this.busy = false; } }); }\n measurement(row: ReportRow, p: QualityParameter) { return row.measurements.find(x => x.parameterCode === p.code); }\n pdf(): void { this.api.reportPdf(this.filter).subscribe({ next: b => download(b, `Kalite-${this.filter.type}-${this.filter.from}.pdf`), error: e => this.error = errorMessage(e) }); }\n excel(): void {\n this.busy = true; this.error = '';\n this.api.report(this.filter, true).subscribe({ next: async report => {\n try {\n const { Workbook } = await import('exceljs');\n const workbook = new Workbook(); workbook.creator = 'Kalite';\n let index = 0;\n if (report.type === 'Rejected') {\n const summary = workbook.addWorksheet('Ret Özeti');\n summary.addRow(['Grup', 'Toplam Kayıt', 'Ret Adedi', 'Ret Oranı (%)']);\n report.rejectionSummary.forEach(g => summary.addRow([g.groupName, g.total, g.rejected, g.rate]));\n summary.columns.forEach(c => c.width = 25);\n }\n for (const section of report.sections) {\n const sheet = workbook.addWorksheet(`Form ${++index}`);\n sheet.addRow([section.form.name]);\n sheet.addRow(['Doküman', section.form.documentCode, 'Yayın', section.form.publicationDate.slice(0, 10), 'Revizyon', section.form.revisionDate.slice(0, 10), section.form.revisionNumber]);\n sheet.addRow([section.groupName]);\n const divisor = section.form.quantityUnit === 't' ? 1000 : 1;\n const fixed = ['Tarih / Saat', 'Plaka', 'Dorse', 'Muhatap', 'Gemi', 'Hareket Türü', 'Detay', 'Menşei', 'Stok Nakli', 'Tank', 'Aktarılan Tank', 'Yağ Cinsi', `Miktar (${section.form.quantityUnit || 'kg'})`, 'Kalite Durumu', 'Analizi Yapan', 'Açıklama'];\n const header = sheet.addRow([...fixed, ...section.columns.map(p => p.name + (p.unit ? ` (${p.unit})` : ''))]);\n header.font = { bold: true }; header.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FFE8E1EF' } };\n for (const row of section.rows) {\n const excelRow = sheet.addRow([new Date(row.date), row.composite ? 'Gemi Kompozit Numunesi' : row.plate, row.trailerPlate,\n row.partner, row.ship, row.movementType, row.detail, row.origin === 'Imported' ? 'İthal' : row.origin === 'Domestic' ? 'İç Piyasa' : '',\n row.stockTransfer, row.tank, row.outputTank, row.oilType, row.quantityKg == null ? null : row.quantityKg / divisor, statusLabel(row.status), row.analyst, row.notes,\n ...section.columns.map(p => { const m = this.measurement(row, p); return m?.number ?? m?.text ?? ''; })]);\n excelRow.getCell(1).numFmt = 'dd.mm.yyyy hh:mm'; excelRow.getCell(13).numFmt = '#,##0.00';\n if (row.status === 'Rejected') excelRow.eachCell(c => c.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FFFFE1E6' } });\n section.columns.forEach((p, i) => {\n const cell = excelRow.getCell(fixed.length + i + 1);\n cell.numFmt = p.decimalPlaces ? '0.' + '0'.repeat(p.decimalPlaces) : '0';\n if (this.measurement(row, p)?.outOfLimit) cell.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FFFFAAAA' } };\n });\n }\n const totals: (string | number | null)[] = Array(fixed.length).fill(null); totals[0] = 'ORTALAMA'; totals[1] = section.averageMode === 'Weighted' ? 'Miktar ağırlıklı' : 'Aritmetik'; totals[12] = section.totalKg / divisor;\n sheet.addRow([...totals, ...section.columns.map(p => section.averages[p.code] ?? null)]).font = { bold: true };\n sheet.addRow(['Analizi Yapan / Kontrol Eden', ...Array.from(new Set(section.rows.map(r => r.analyst).filter(Boolean)))]);\n if (section.form.documentCode === 'FR.85') sheet.addRow(['KABUL', '', 'RED', '', 'ŞARTLI KABUL', '']);\n sheet.columns.forEach(c => { c.width = 20; c.alignment = { vertical: 'middle', wrapText: true }; });\n sheet.views = [{ state: 'frozen', ySplit: 4, xSplit: 2 }];\n sheet.pageSetup = { orientation: 'landscape', paperSize: 8, fitToPage: true, fitToWidth: 1, fitToHeight: 0 };\n }\n if (!workbook.worksheets.length) workbook.addWorksheet('Kayıt Yok').addRow(['Seçilen filtrelerde kayıt bulunamadı.']);\n const data = await workbook.xlsx.writeBuffer();\n download(new Blob([data as BlobPart], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }), `Kalite-${report.type}-${this.filter.from}.xlsx`);\n } catch (e) { this.error = errorMessage(e); } finally { this.busy = false; }\n }, error: e => { this.error = errorMessage(e); this.busy = false; } });\n }\n}\n","<div class=\"container-fluid\"><h3>{{ filter.type === 'Process' ? 'Rafineri Proses Analiz Raporu' : filter.type === 'Rejected' ? 'Kalite Kontrol Ret Raporu' : 'Girdi Kontrol Raporları' }}</h3>\r\n <div class=\"card\"><div class=\"card-body\"><div class=\"row\">\r\n <div class=\"col-md-3\"><label>Başlangıç</label><input type=\"date\" class=\"form-control\" [(ngModel)]=\"filter.from\" /></div><div class=\"col-md-3\"><label>Bitiş</label><input type=\"date\" class=\"form-control\" [(ngModel)]=\"filter.until\" /></div>\r\n <div class=\"col-md-3\"><label>Form</label><select class=\"form-control\" [(ngModel)]=\"filter.formCode\"><option value=\"\">Tümü</option><option *ngFor=\"let form of visibleForms\" [value]=\"form.code\">{{ form.documentCode }} – {{ form.name }}</option></select></div>\r\n <div class=\"col-md-3\" *ngIf=\"filter.type === 'Process'\"><label>Tesis</label><select class=\"form-control\" [(ngModel)]=\"filter.facilityCode\"><option value=\"\">Tümü</option><option *ngFor=\"let facility of facilities\" [value]=\"facility.code\">{{ facility.name }}</option></select></div>\r\n <div class=\"col-md-3\" *ngIf=\"filter.type !== 'Process'\"><label>Hareket Türü</label><select class=\"form-control\" [(ngModel)]=\"filter.movementTypeCode\"><option value=\"\">Tümü</option><option *ngFor=\"let type of types\" [value]=\"type.code\">{{ type.name }}</option></select></div>\r\n <div class=\"col-md-3 mt-3\" *ngIf=\"filter.type !== 'Process'\"><label>Muhatap</label><input class=\"form-control\" [(ngModel)]=\"filter.partner\" /></div><div class=\"col-md-3 mt-3\" *ngIf=\"filter.type !== 'Process'\"><label>Gemi</label><input class=\"form-control\" [(ngModel)]=\"filter.ship\" /></div>\r\n <div class=\"col-md-3 mt-3\" *ngIf=\"filter.type !== 'Process'\"><label>Gruplama</label><select class=\"form-control\" [(ngModel)]=\"filter.groupBy\"><option value=\"None\">Yok</option><option value=\"Ship\">Gemi / Parti</option><option value=\"Partner\">Muhatap</option><option value=\"Movement\">Hareket Türü / Malzeme</option><option value=\"Month\">Ay</option></select></div>\r\n <div class=\"col-md-3 mt-3\"><label>Durum</label><select class=\"form-control\" [(ngModel)]=\"filter.status\"><option value=\"\">Tümü</option><ng-container *ngIf=\"filter.type === 'Process'\"><option value=\"Draft\">Taslak</option><option value=\"LaborantSigned\">Laborant İmzalı</option><option value=\"Checked\">Kontrol Edildi</option><option value=\"Approved\">Onaylı</option></ng-container><ng-container *ngIf=\"filter.type !== 'Process'\"><option value=\"Draft\">Taslak</option><option value=\"Accepted\">Kabul</option><option value=\"Rejected\">Ret</option></ng-container></select></div>\r\n </div><div class=\"mt-3\"><button class=\"btn btn-primary mr-2\" (click)=\"load()\" [disabled]=\"busy\">Raporu Getir</button><button *ngIf=\"canExport\" class=\"btn btn-outline-primary mr-2\" (click)=\"pdf()\" [disabled]=\"busy\">PDF</button><button *ngIf=\"canExport\" class=\"btn btn-outline-primary\" (click)=\"excel()\" [disabled]=\"busy\">Excel</button></div>\r\n <div *ngIf=\"error\" class=\"alert alert-danger mt-3\">{{ error }}</div><div *ngIf=\"busy\" class=\"quality-loading\" role=\"status\">Rapor hazırlanıyor…</div>\r\n </div></div>\r\n <ng-container *ngIf=\"report as r\"><div class=\"card mt-3\"><div class=\"card-body\">Toplam Kayıt: <strong>{{ r.totalRecords }}</strong> · Ret: <strong>{{ r.rejectedRecords }}</strong> · Ret Oranı: <strong>% {{ r.rejectionRate }}</strong>\r\n <table *ngIf=\"r.type === 'Rejected'\" class=\"table table-sm mt-3\"><thead><tr><th>Grup</th><th>Toplam</th><th>Ret</th><th>Ret Oranı (%)</th></tr></thead><tbody><tr *ngFor=\"let g of r.rejectionSummary\"><td>{{ g.groupName }}</td><td>{{ g.total }}</td><td>{{ g.rejected }}</td><td>{{ g.rate }}</td></tr></tbody></table>\r\n </div></div>\r\n <div class=\"card mt-3\" *ngFor=\"let section of r.sections\"><div class=\"card-body\"><h5>{{ section.form.name }} – {{ section.groupName }}</h5><p class=\"text-muted\">{{ section.form.documentCode }} · Yayın: {{ section.form.publicationDate | date:'dd.MM.yyyy' }} · Revizyon: {{ section.form.revisionDate | date:'dd.MM.yyyy' }} / {{ section.form.revisionNumber }}</p>\r\n <div class=\"table-responsive\"><table class=\"table table-bordered table-sm\"><thead><tr><th>Tarih / Saat</th><th>{{ r.type === 'Process' ? 'Tank / Aktarılan Tank' : 'Plaka / Firma / Gemi' }}</th><th>Durum</th><th>Miktar ({{ section.form.quantityUnit || 'kg' }})</th><th *ngFor=\"let p of section.columns\">{{ p.name }} <small>{{ p.unit }}</small></th><th>Analizi Yapan / Açıklama</th></tr></thead>\r\n <tbody><tr *ngFor=\"let row of section.rows\" [class.rejected-row]=\"row.status === 'Rejected'\"><td>{{ row.date | date:'dd.MM.yyyy HH:mm' }}</td><td>{{ row.composite ? 'Gemi Kompozit Numunesi' : r.type === 'Process' ? ((row.tank || row.outputTank) ? (row.tank || '') + ' / ' + (row.outputTank || '') : '') : row.plate }}<br />{{ row.partner }} {{ row.ship }}</td><td>{{ statusLabel(row.status) }}</td><td>{{ row.quantityKg == null ? '' : row.quantityKg / (section.form.quantityUnit === 't' ? 1000 : 1) }}</td><td *ngFor=\"let p of section.columns\" [class.out-of-limit]=\"measurement(row, p)?.outOfLimit\">{{ measurement(row, p)?.number != null ? (measurement(row, p)?.number | number:'1.0-8') : measurement(row, p)?.text }}</td><td>{{ row.analyst }}<br />{{ row.notes }}</td></tr>\r\n <tr class=\"bg-light\"><th>ORTALAMA</th><th>{{ section.averageMode === 'Weighted' ? 'Miktar ağırlıklı' : 'Aritmetik' }}</th><th>TOPLAM</th><th>{{ section.totalKg / (section.form.quantityUnit === 't' ? 1000 : 1) | number:'1.0-2' }}</th><td *ngFor=\"let p of section.columns\">{{ section.averages[p.code] | number:'1.0-8' }}</td><td></td></tr></tbody></table></div>\r\n </div></div><p *ngIf=\"!r.sections.length\" class=\"text-muted mt-3\">Seçilen filtrelerde kayıt bulunamadı.</p>\r\n </ng-container>\r\n</div>\r\n","import { Component, OnInit, OnDestroy } from '@angular/core';\r\nimport { QualityApiService } from '../services/quality-api.service';\r\nimport { QualityNotification, NotificationSettings } from '../models/intake.models';\r\nimport { errorMessage } from '../services/quality-measurements';\r\nimport { Router } from '@angular/router';\r\nimport { ConfigStateService, PermissionService } from '@abp/ng.core';\r\nimport { Subscription, timer, of } from 'rxjs';\r\nimport { switchMap, catchError } from 'rxjs/operators';\r\n\r\n@Component({ selector: 'lib-quality-notifications', template: `<div class=\"container-fluid\"><h3>Kalite Bildirimleri</h3><div *ngIf=\"error\" class=\"alert alert-danger\">{{error}}</div><div class=\"card mb-2\" *ngFor=\"let n of items\"><div class=\"card-body\"><strong>{{n.title}}</strong> <span *ngIf=\"!n.isRead\" class=\"badge badge-primary\">Yeni</span><small class=\"float-right\">{{n.createdAt | date:'dd.MM.yyyy HH:mm'}}</small><div class=\"mt-2\" [innerHTML]=\"n.body\"></div><button class=\"btn btn-outline-primary mt-2\" (click)=\"open(n)\">Kaydı Aç</button><button class=\"btn btn-outline-secondary mt-2 ml-2\" *ngIf=\"!n.isRead\" (click)=\"read(n)\">Okundu İşaretle</button></div></div><p *ngIf=\"!items.length\">Bildirim bulunmuyor.</p></div>` })\r\nexport class QualityNotificationsComponent implements OnInit {\r\n items: QualityNotification[] = []; error = '';\r\n constructor(private api: QualityApiService, private router: Router) {}\r\n ngOnInit(): void { this.api.notifications().subscribe({ next: x => this.items = x, error: e => this.error = errorMessage(e) }); }\r\n read(n: QualityNotification): void { this.api.readNotification(n.code).subscribe({ next: () => n.isRead = true, error: e => this.error = errorMessage(e) }); }\r\n open(n: QualityNotification): void { this.read(n); this.router.navigateByUrl(n.url); }\r\n}\r\n\r\n@Component({ selector: 'lib-quality-notification-bell', template: `<a class=\"nav-link position-relative\" routerLink=\"/kalite/notifications\" aria-label=\"Kalite bildirimleri\"><i class=\"fas fa-bell\" aria-hidden=\"true\"></i><span class=\"badge badge-danger\" *ngIf=\"count\">{{count}}</span></a>` })\r\nexport class QualityNotificationBellComponent implements OnInit, OnDestroy {\r\n count = 0; private subscription?: Subscription;\r\n constructor(private api: QualityApiService, private config: ConfigStateService) {}\r\n ngOnInit(): void { this.subscription = this.config.getOne$('currentUser').pipe(switchMap(user => user?.isAuthenticated ? timer(0, 60000).pipe(switchMap(() => this.api.unreadNotifications().pipe(catchError(() => of(0))))) : of(0))).subscribe(count => this.count = count); }\r\n ngOnDestroy(): void { this.subscription?.unsubscribe(); }\r\n}\r\n\r\n@Component({ selector: 'lib-quality-notification-settings', template: `<div class=\"container-fluid\"><h3>Kalite Bildirim Ayarları</h3><div *ngIf=\"error\" class=\"alert alert-danger\">{{error}}</div><div *ngIf=\"success\" class=\"alert alert-success\">{{success}}</div><div class=\"card\" *ngIf=\"settings as s\"><div class=\"card-body\"><label class=\"d-block\"><input type=\"checkbox\" [(ngModel)]=\"s.portalEnabled\" /> Portal içi bildirim</label><label class=\"d-block\"><input type=\"checkbox\" [(ngModel)]=\"s.emailEnabled\" /> E-posta bildirimi</label><label class=\"d-block\"><input type=\"checkbox\" [(ngModel)]=\"s.reminderEnabled\" /> Bekleyen kontrol hatırlatması</label><label class=\"mt-3\">Portal Adresi (e-posta bağlantıları için)</label><input class=\"form-control\" [(ngModel)]=\"s.portalBaseUrl\" placeholder=\"https://portal.example.com\" /><div class=\"row mt-3\"><div class=\"col-md-4\"><label>Hatırlatma Süresi (dakika)</label><input type=\"number\" min=\"1\" max=\"10080\" class=\"form-control\" [(ngModel)]=\"s.reminderMinutes\" /></div><div class=\"col-md-4\"><label>Kalite Alıcı Rolleri (her satır bir rol)</label><textarea class=\"form-control\" rows=\"4\" [(ngModel)]=\"qualityRoles\"></textarea></div><div class=\"col-md-4\"><label>Ret Bildirimi Alıcı Rolleri (her satır bir rol)</label><textarea class=\"form-control\" rows=\"4\" [(ngModel)]=\"securityRoles\"></textarea></div></div><button class=\"btn btn-primary mt-3\" (click)=\"save()\" [disabled]=\"busy\">Kaydet</button><h5 class=\"mt-4\" *ngIf=\"failures.length\">Gönderim Sorunları</h5><div class=\"alert alert-warning\" *ngFor=\"let failure of failures\">{{failure.title || failure.eventType}} · {{failure.error}}</div></div></div></div>` })\r\nexport class QualityNotificationSettingsComponent implements OnInit {\r\n settings: NotificationSettings | null = null; failures: any[] = []; qualityRoles = ''; securityRoles = ''; error = ''; success = ''; busy = false;\r\n constructor(private api: QualityApiService) {}\r\n ngOnInit(): void { this.api.notificationFailures().subscribe({next: x => this.failures = x}); this.api.notificationSettings().subscribe({ next: x => { this.settings = x; this.qualityRoles = x.qualityRoles.join('\\n'); this.securityRoles = x.securityRoles.join('\\n'); }, error: e => this.error = errorMessage(e) }); }\r\n save(): void { if (!this.settings) return; this.busy = true; this.settings.qualityRoles = this.qualityRoles.split('\\n').map(x => x.trim()).filter(Boolean); this.settings.securityRoles = this.securityRoles.split('\\n').map(x => x.trim()).filter(Boolean); this.api.saveNotificationSettings(this.settings).subscribe({ next: () => { this.busy = false; this.success = 'Bildirim ayarları kaydedildi.'; }, error: e => { this.error = errorMessage(e); this.busy = false; } }); }\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { ProcessAnalysisComponent } from './components/process-analysis.component';\nimport { QualityParametersComponent } from './components/quality-parameters.component';\nimport { IntakeListComponent } from './components/intake-list.component';\nimport { IntakeFormComponent } from './components/intake-form.component';\nimport { QualityDefinitionsComponent } from './components/quality-definitions.component';\nimport { QualityReportsComponent } from './components/quality-reports.component';\nimport { QualityNotificationsComponent, QualityNotificationSettingsComponent } from './components/quality-notifications.component';\n\nconst routes: Routes = [\n {\n path: '',\n pathMatch: 'full',\n redirectTo: 'process-analysis',\n },\n { path: 'process-analysis', component: ProcessAnalysisComponent },\n { path: 'parameters', component: QualityParametersComponent },\n { path: 'intake', component: IntakeListComponent },\n { path: 'intake/:id', component: IntakeFormComponent },\n { path: 'definitions', component: QualityDefinitionsComponent },\n { path: 'reports/input', component: QualityReportsComponent, data: { type: 'Input' } },\n { path: 'reports/process', component: QualityReportsComponent, data: { type: 'Process' } },\n { path: 'reports/rejected', component: QualityReportsComponent, data: { type: 'Rejected' } },\n { path: 'notifications', component: QualityNotificationsComponent },\n { path: 'notification-settings', component: QualityNotificationSettingsComponent },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class KaliteRoutingModule {}\n","import { APP_INITIALIZER, ModuleWithProviders, NgModule } from '@angular/core';\nimport { CoreModule } from '@abp/ng.core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { NavItemsService } from '@abp/ng.theme.shared';\nimport { QualityNotificationsComponent, QualityNotificationBellComponent, QualityNotificationSettingsComponent } from './components/quality-notifications.component';\n\n@NgModule({ declarations: [QualityNotificationsComponent, QualityNotificationBellComponent, QualityNotificationSettingsComponent], imports: [CoreModule, FormsModule, RouterModule], exports: [QualityNotificationBellComponent, QualityNotificationsComponent, QualityNotificationSettingsComponent] })\nexport class KaliteNotificationModule {\n static forRoot(): ModuleWithProviders<KaliteNotificationModule> {\n return { ngModule: KaliteNotificationModule, providers: [{ provide: APP_INITIALIZER, multi: true, deps: [NavItemsService], useFactory: configureNotifications }] };\n }\n}\nexport function configureNotifications(nav: NavItemsService) {\n return () => nav.addItems([{ id: 'Kalite.Notifications', component: QualityNotificationBellComponent, order: 90 }]);\n}\n","import { NgModule, NgModuleFactory, ModuleWithProviders } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CoreModule, LazyModuleFactory } from '@abp/ng.core';\nimport { ThemeSharedModule } from '@abp/ng.theme.shared';\nimport { KaliteComponent } from './components/kalite.component';\nimport { KaliteRoutingModule } from './kalite-routing.module';\nimport { ProcessAnalysisComponent } from './components/process-analysis.component';\nimport { QualityParametersComponent } from './components/quality-parameters.component';\nimport { IntakeListComponent } from './components/intake-list.component';\nimport { IntakeFormComponent } from './components/intake-form.component';\nimport { QualityDefinitionsComponent } from './components/quality-definitions.component';\nimport { QualityReportsComponent } from './components/quality-reports.component';\nimport { KaliteNotificationModule } from './kalite-notification.module';\nimport { DxDataGridModule } from 'devextreme-angular';\nimport { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';\n\n@NgModule({\n declarations: [KaliteComponent, ProcessAnalysisComponent, QualityParametersComponent, IntakeListComponent,\n IntakeFormComponent, QualityDefinitionsComponent, QualityReportsComponent],\n imports: [CoreModule, ThemeSharedModule, FormsModule, DxDataGridModule, NgbDropdownModule, KaliteNotificationModule, KaliteRoutingModule],\n exports: [ProcessAnalysisComponent, QualityParametersComponent],\n})\nexport class KaliteModule {\n static forChild(): ModuleWithProviders<KaliteModule> {\n return {\n ngModule: KaliteModule,\n providers: [],\n };\n }\n\n static forLazy(): NgModuleFactory<KaliteModule> {\n return new LazyModuleFactory(KaliteModule.forChild());\n }\n}\n","/*\n * Public API Surface of kalite\n */\n\nexport * from './lib/components/kalite.component';\nexport * from './lib/components/process-analysis.component';\nexport * from './lib/components/quality-parameters.component';\nexport * from './lib/models/quality.models';\nexport * from './lib/services/quality-api.service';\nexport * from './lib/services/kalite.service';\nexport * from './lib/kalite.module';\nexport * from './lib/kalite-notification.module';\nexport * from './lib/models/intake.models';\nexport * from './lib/components/intake-list.component';\nexport * from './lib/components/intake-form.component';\nexport * from './lib/components/quality-notifications.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.KaliteService","i1.QualityApiService","i4","i3","i5","i2"],"mappings":"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"}