216 lines
7.3 KiB
PHP
216 lines
7.3 KiB
PHP
<?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); |