177 lines
7.4 KiB
PHP
177 lines
7.4 KiB
PHP
<?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);
|