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

216 lines
7.3 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/summary2.blade.php
use App\Models\TestPackage;
header('Content-Type: application/json');
$testPackageAreaMap = [];
$weldLogAreas = db('weld_logs')
->select('test_package_no', 'project')
->whereNotNull('test_package_no')
->whereNotNull('project')
->where('test_package_no', '!=', '')
->where('project', '!=', '')
->groupBy('test_package_no', 'project')
->get();
foreach ($weldLogAreas as $weldLog) {
$testPackageAreaMap[$weldLog->test_package_no] = $weldLog->project;
}
// test_pack_base_statuses tablosundan responsible_person mapping'i oluştur
$testPackageResponsiblePersonMap = [];
$baseStatuses = db('test_pack_base_statuses')
->select('test_package_no', 'responsible_person')
->whereNotNull('test_package_no')
->where('test_package_no', '!=', '')
->get();
foreach ($baseStatuses as $baseStatus) {
if (!empty($baseStatus->responsible_person)) {
$testPackageResponsiblePersonMap[$baseStatus->test_package_no] = $baseStatus->responsible_person;
}
}
$allTestPackages = TestPackage::select(
'test_package_number',
'test_type',
'tp_general_status',
'welding_status',
'status',
'ndt_status',
'punch_status',
'total_wdi',
'a_punch_point_open',
'b_punch_point_open',
'c_punch_point_open',
'subcontractor'
)->whereNotNull('test_package_number')
->where('test_package_number', '!=', '')
->get();
// Area, Subcontractor ve Responsible Person bazlı 3 seviyeli array yapısı
$areaStats = [];
foreach ($allTestPackages as $testPackage) {
$area = $testPackageAreaMap[$testPackage->test_package_number] ?? 'Unknown';
$subcontractor = !empty($testPackage->subcontractor) ? $testPackage->subcontractor : 'Unassigned';
// responsible_person bilgisini test_pack_base_statuses tablosundan al
$responsiblePerson = $testPackageResponsiblePersonMap[$testPackage->test_package_number] ?? 'Unassigned';
$testType = !empty($testPackage->test_type) ? $testPackage->test_type : 'Unknown';
if (!isset($areaStats[$area])) {
$areaStats[$area] = [];
}
if (!isset($areaStats[$area][$subcontractor])) {
$areaStats[$area][$subcontractor] = [];
}
if (!isset($areaStats[$area][$subcontractor][$responsiblePerson])) {
$areaStats[$area][$subcontractor][$responsiblePerson] = [
'area' => $area,
'subcontractor' => $subcontractor,
'responsible_person' => $responsiblePerson,
'test_types' => [],
'total_tp_qty' => 0,
'total_tp_wdi' => 0,
'prep_qty' => 0,
'prep_wdi' => 0,
'approved_qty' => 0,
'approved_wdi' => 0,
'linecheck_qty' => 0,
'a_punch_qty' => 0,
'b_punch_qty' => 0,
'c_punch_qty' => 0,
'linecheck_wdi' => 0,
'tp_released_qty' => 0,
'tp_released_wdi' => 0,
'b_waiting_qty' => 0,
'ndt_status_qty' => 0,
'punch_status_qty' => 0,
'ready_for_reinstatement_qty' => 0,
'ready_for_test_qty' => 0,
'repair_waiting_qty' => 0,
'welding_ongoing_qty' => 0,
'completed_qty' => 0,
];
}
$row =& $areaStats[$area][$subcontractor][$responsiblePerson];
// Test type'ı array'e ekle (unique olacak şekilde)
if (!empty($testType) && !in_array($testType, $row['test_types'])) {
$row['test_types'][] = $testType;
}
$wdi = (float) $testPackage->total_wdi;
$wdi = round((float) $testPackage->total_wdi, 2);
$row['total_tp_qty']++;
$row['total_tp_wdi'] += $wdi;
if (!empty($testPackage->welding_status) && stripos($testPackage->welding_status, 'prep') !== false) {
$row['prep_qty']++;
$row['prep_wdi'] += $wdi;
}
if (!empty($testPackage->status) && stripos($testPackage->status, 'released') !== false) {
$row['tp_released_qty']++;
$row['tp_released_wdi'] += $wdi;
}
if (!empty($testPackage->punch_status)) {
$row['linecheck_qty']++;
$row['linecheck_wdi'] += $wdi;
}
$row['a_punch_qty'] += (int) $testPackage->a_punch_point_open;
$row['b_punch_qty'] += (int) $testPackage->b_punch_point_open;
$row['c_punch_qty'] += (int) $testPackage->c_punch_point_open;
switch ($testPackage->tp_general_status) {
case 'B Waiting':
$row['b_waiting_qty']++;
break;
case 'NDT':
$row['ndt_status_qty']++;
break;
case 'Punch':
$row['punch_status_qty']++;
break;
case 'Ready for Reinstatement':
$row['ready_for_reinstatement_qty']++;
break;
case 'Ready for Test':
$row['ready_for_test_qty']++;
break;
case 'Repair Waiting':
$row['repair_waiting_qty']++;
break;
case 'Welding Ongoing':
$row['welding_ongoing_qty']++;
break;
case 'Completed':
$row['completed_qty']++;
break;
}
if (
(!empty($testPackage->tp_general_status) && stripos($testPackage->tp_general_status, 'approved') !== false) ||
(!empty($testPackage->status) && stripos($testPackage->status, 'approved') !== false)
) {
$row['approved_qty']++;
$row['approved_wdi'] += $wdi;
}
}
// 3 seviyeli array'i düzleştir
$data = [];
foreach ($areaStats as $subcontractors) {
foreach ($subcontractors as $responsiblePersons) {
if (is_array($responsiblePersons)) {
foreach ($responsiblePersons as $stats) {
$stats['total_tp_wdi'] = round($stats['total_tp_wdi'], 2);
$stats['prep_wdi'] = round($stats['prep_wdi'], 2);
$stats['approved_wdi'] = round($stats['approved_wdi'], 2);
$stats['linecheck_wdi'] = round($stats['linecheck_wdi'], 2);
$stats['tp_released_wdi'] = round($stats['tp_released_wdi'], 2);
// Test type'ları virgülle ayırarak birleştir
$stats['test_type'] = !empty($stats['test_types']) ? implode(', ', $stats['test_types']) : 'Unknown';
unset($stats['test_types']); // Array'i kaldır
$data[] = $stats;
}
}
}
}
// Grand total hesapla
$numericKeys = [
'total_tp_qty', 'total_tp_wdi', 'prep_qty', 'prep_wdi', 'approved_qty', 'approved_wdi',
'linecheck_qty', 'linecheck_wdi', 'a_punch_qty', 'b_punch_qty', 'c_punch_qty',
'tp_released_qty', 'tp_released_wdi', 'b_waiting_qty', 'ndt_status_qty',
'punch_status_qty', 'ready_for_reinstatement_qty', 'ready_for_test_qty',
'repair_waiting_qty', 'welding_ongoing_qty', 'completed_qty'
];
$grand = [
'area' => 'Grand Total',
'subcontractor' => 'All Subcontractors',
'responsible_person' => 'All Responsible Persons',
'test_type' => 'All Test Types',
];
foreach ($numericKeys as $key) {
$grand[$key] = array_sum(array_column($data, $key));
}
$grand['total_tp_wdi'] = round($grand['total_tp_wdi'], 2);
$grand['prep_wdi'] = round($grand['prep_wdi'], 2);
$grand['approved_wdi'] = round($grand['approved_wdi'], 2);
$grand['linecheck_wdi'] = round($grand['linecheck_wdi'], 2);
$grand['tp_released_wdi'] = round($grand['tp_released_wdi'], 2);
$data[] = $grand;
echo json_encode_tr($data);