Files
2026-04-28 21:15:09 +03:00

177 lines
7.4 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
// resources/views/admin-ajax/test-package/iso-base-interactive.blade.php
use App\Models\TestPackage;
use App\Models\TestPackBaseStatus;
header('Content-Type: application/json');
// Step 1: test_pack_base_statuses ve test_packages tablolarını join ederek veri çekelim
$query = db('test_pack_base_statuses')
->leftJoin('test_packages', function($join) {
$join->on('test_pack_base_statuses.test_package_no', '=', 'test_packages.test_package_number');
})
->select([
'test_pack_base_statuses.id',
'test_pack_base_statuses.drawing_no as iso_number',
'test_pack_base_statuses.test_package_no',
'test_pack_base_statuses.subcontractor',
'test_pack_base_statuses.responsible_person',
'test_pack_base_statuses.iso_qty',
'test_pack_base_statuses.priority',
'test_pack_base_statuses.priority_info',
'test_pack_base_statuses.target_test_date',
'test_pack_base_statuses.test_medium',
'test_pack_base_statuses.test_pressure_mpa',
'test_pack_base_statuses.tp_status',
'test_pack_base_statuses.total_iso_quantity',
'test_pack_base_statuses.welding_status',
'test_pack_base_statuses.remaining_wdi',
'test_pack_base_statuses.total_wdi',
'test_pack_base_statuses.total_complated_wdi',
'test_pack_base_statuses.pipe_progress',
'test_pack_base_statuses.total_joint_qty',
'test_pack_base_statuses.total_welded_joint_qty',
'test_pack_base_statuses.support_progress',
'test_pack_base_statuses.support_remaining',
'test_pack_base_statuses.welded_support_quantity',
'test_pack_base_statuses.repair_qty',
'test_pack_base_statuses.repair_completed',
'test_pack_base_statuses.repair_remaining',
'test_pack_base_statuses.punch_status',
'test_pack_base_statuses.punch_a_quantity',
'test_pack_base_statuses.punch_b_quantity',
'test_pack_base_statuses.punch_c_quantity',
'test_pack_base_statuses.vt_backlog',
'test_pack_base_statuses.rt_backlog',
'test_pack_base_statuses.ut_backlog',
'test_pack_base_statuses.mt_backlog',
'test_pack_base_statuses.pmi_backlog',
'test_pack_base_statuses.pt_backlog',
'test_pack_base_statuses.ferrit_backlog',
'test_pack_base_statuses.pwht_backlog',
'test_pack_base_statuses.area',
'test_pack_base_statuses.discipline',
'test_pack_base_statuses.test_type',
'test_packages.welding_progress',
'test_packages.test_date',
'test_packages.status',
'test_packages.reinstatement_status',
'test_packages.cleaning_blowing_drying_status'
]);
// Sıralama
$query->orderBy('area', 'ASC')
->orderBy('test_package_no', 'ASC')
->orderBy('drawing_no', 'ASC');
// Tüm veriyi getir
$data = $query->get();
// Test progress hesaplama - test_package_no bazında test_date dolu olanları say
$testPackageTestCounts = [];
$testPackageTotalCounts = [];
foreach ($data as $row) {
$testPackageNo = $row->test_package_no;
if (!isset($testPackageTotalCounts[$testPackageNo])) {
$testPackageTotalCounts[$testPackageNo] = 0;
$testPackageTestCounts[$testPackageNo] = 0;
}
$testPackageTotalCounts[$testPackageNo]++;
if (!empty($row->test_date)) {
$testPackageTestCounts[$testPackageNo]++;
}
}
// Hesaplanmış alanları ekle
foreach ($data as $row) {
// NULL değerleri 0 yap
$row->total_wdi = (float)($row->total_wdi ?? 0);
$row->total_complated_wdi = (float)($row->total_complated_wdi ?? 0);
$row->pipe_progress = (float)($row->pipe_progress ?? 0);
$row->support_progress = (float)($row->support_progress ?? 0);
$row->repair_qty = (int)($row->repair_qty ?? 0);
$row->repair_completed = (int)($row->repair_completed ?? 0);
// Completion oranları
$row->wdi_completion_percentage = $row->total_wdi > 0 ?
round(($row->total_complated_wdi / $row->total_wdi) * 100, 2) : 0;
$row->pipe_progress_percentage = round($row->pipe_progress, 2);
$row->support_progress_percentage = round($row->support_progress, 2);
// Repair completion oranı
$row->repair_completion_percentage = $row->repair_qty > 0 ?
round(($row->repair_completed / $row->repair_qty) * 100, 2) : 0;
// NDT toplam backlog
$row->total_ndt_backlog = (int)($row->vt_backlog ?? 0) + (int)($row->rt_backlog ?? 0) +
(int)($row->ut_backlog ?? 0) + (int)($row->mt_backlog ?? 0) +
(int)($row->pt_backlog ?? 0) + (int)($row->pmi_backlog ?? 0) +
(int)($row->ferrit_backlog ?? 0) + (int)($row->pwht_backlog ?? 0);
// Punch toplam
$row->total_punch_qty = (int)($row->punch_a_quantity ?? 0) + (int)($row->punch_b_quantity ?? 0) +
(int)($row->punch_c_quantity ?? 0);
// Welding completion oranı - basit hesaplama
$row->welding_completion_percentage = $row->wdi_completion_percentage;
$row->total_welds = 1; // dummy value
$row->completed_welds = $row->wdi_completion_percentage >= 100 ? 1 : 0;
// Weld Progress - welding_progress alanından veya hesaplanmış değerden
$row->weld_progress = $row->welding_progress ?? $row->wdi_completion_percentage;
// Test Progress - test_package_no bazında hesaplanmış değerleri ekle
$testPackageNo = $row->test_package_no;
$row->tested_count = $testPackageTestCounts[$testPackageNo] ?? 0;
$row->total_test_count = $testPackageTotalCounts[$testPackageNo] ?? 0;
$row->test_progress = $row->tested_count . '/' . $row->total_test_count;
// Status analizi
$row->overall_status = 'In Progress';
if ($row->tp_status == 'Completed' || $row->welding_status == 'Completed') {
$row->overall_status = 'Completed';
} elseif ($row->wdi_completion_percentage >= 100 && $row->total_ndt_backlog == 0) {
$row->overall_status = 'Ready for Test';
} elseif ($row->total_ndt_backlog > 0) {
$row->overall_status = 'NDT Pending';
} elseif ($row->total_punch_qty > 0) {
$row->overall_status = 'Punch List Open';
}
// General status mapping
$row->tp_general_status = $row->tp_status ?? $row->welding_status ?? 'Unknown';
// Renk kodlama için priority level
$row->priority_level = 'normal';
if (stripos($row->priority ?? '', 'high') !== false || stripos($row->priority ?? '', 'urgent') !== false) {
$row->priority_level = 'high';
} elseif (stripos($row->priority ?? '', 'low') !== false) {
$row->priority_level = 'low';
}
// Tarih formatları
$row->target_test_date_formatted = $row->target_test_date ?
date('d.m.Y', strtotime($row->target_test_date)) : '';
// Progress bar değerleri
$row->wdi_progress_color = $row->wdi_completion_percentage >= 90 ? 'success' :
($row->wdi_completion_percentage >= 70 ? 'warning' : 'danger');
$row->ndt_status_color = $row->total_ndt_backlog == 0 ? 'success' : 'danger';
}
// Laravel Collection'ı array'e çevir ve JSON response
$dataArray = $data->map(function($item) {
return (array) $item;
})->toArray();
// Veri kontrolü - eğer boşsa boş array döndür
if (empty($dataArray)) {
echo json_encode_tr([]);
exit;
}
// DevExtreme DataGrid için JSON response - json_encode_tr kullan (Türkçe karakter desteği için)
echo json_encode_tr($dataArray);