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);