147 lines
4.9 KiB
PHP
147 lines
4.9 KiB
PHP
<?php
|
||
// Supports tablosunu çek
|
||
$supportsQuery = db("supports")
|
||
->select("status", "total_weight", "quantity", "zone", "drawing_no", "line_number")
|
||
->whereNotNull('status')
|
||
->orderBy("zone");
|
||
|
||
$supports = method_exists($supportsQuery, 'cursor') ? $supportsQuery->cursor() : $supportsQuery->get();
|
||
|
||
// Weld_logs'tan project ve design_area mapping'i oluştur (performans için)
|
||
$weldLogsMap = [];
|
||
if (count($supports) > 0) {
|
||
$drawingNos = [];
|
||
$lineNumbers = [];
|
||
foreach ($supports as $sup) {
|
||
if (!empty($sup->drawing_no)) {
|
||
$drawingNos[] = $sup->drawing_no;
|
||
}
|
||
if (!empty($sup->line_number)) {
|
||
$lineNumbers[] = $sup->line_number;
|
||
}
|
||
}
|
||
|
||
if (!empty($drawingNos) || !empty($lineNumbers)) {
|
||
$weldLogsQuery = db("weld_logs")
|
||
->select("iso_number", "line_number", "project", "design_area");
|
||
|
||
if (!empty($drawingNos)) {
|
||
$weldLogsQuery->whereIn("iso_number", array_unique($drawingNos));
|
||
}
|
||
if (!empty($lineNumbers)) {
|
||
$weldLogsQuery->whereIn("line_number", array_unique($lineNumbers));
|
||
}
|
||
|
||
$weldLogs = $weldLogsQuery->get();
|
||
|
||
foreach ($weldLogs as $wl) {
|
||
$key = ($wl->iso_number ?? '') . '|' . ($wl->line_number ?? '');
|
||
if (!empty($key) && $key !== '|') {
|
||
$weldLogsMap[$key] = [
|
||
'project' => $wl->project ?? null,
|
||
'design_area' => $wl->design_area ?? null
|
||
];
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
$results = [];
|
||
$projectAreaStats = []; // Project+Area bazında istatistikler için
|
||
|
||
foreach ($supports as $row) {
|
||
$row = (array) $row;
|
||
|
||
$status = $row['status'] ?? '';
|
||
$zone = $row['zone'] ?? '';
|
||
$drawingNo = $row['drawing_no'] ?? '';
|
||
$lineNumber = $row['line_number'] ?? '';
|
||
|
||
// Weld_logs mapping'den project ve design_area'yı al
|
||
$key = $drawingNo . '|' . $lineNumber;
|
||
$weldLogData = $weldLogsMap[$key] ?? null;
|
||
|
||
// Project: weld_logs.project varsa onu kullan, yoksa zone'u kullan
|
||
$project = !empty($weldLogData['project']) ? strtoupper($weldLogData['project']) : strtoupper($zone);
|
||
|
||
// Area: weld_logs.design_area varsa onu kullan, yoksa zone'u kullan
|
||
$area = !empty($weldLogData['design_area']) ? strtoupper($weldLogData['design_area']) : strtoupper($zone);
|
||
|
||
// Determine status category
|
||
// Gerçek status değerleri: "", "0K", "OK"
|
||
$statusCategory = 'Other';
|
||
$statusTrimmed = trim($status);
|
||
|
||
// OK = Installed/Complete Support
|
||
if (strtoupper($statusTrimmed) === 'OK') {
|
||
$statusCategory = 'Installed Support';
|
||
}
|
||
// 0K veya boş = Incomplete (henüz tamamlanmamış)
|
||
elseif (strtoupper($statusTrimmed) === '0K' || empty($statusTrimmed)) {
|
||
$statusCategory = 'Incomplete Support Installation';
|
||
}
|
||
// Eski mantık (eğer gelecekte farklı status değerleri eklenirse)
|
||
else {
|
||
$statusLower = strtolower($statusTrimmed);
|
||
|
||
// Önce incomplete kontrolü (daha spesifik)
|
||
if (stripos($statusLower, 'incomplete') !== false) {
|
||
if (stripos($statusLower, 'weld') !== false) {
|
||
$statusCategory = 'Weld-Incomplete Support';
|
||
} else {
|
||
$statusCategory = 'Incomplete Support Installation';
|
||
}
|
||
}
|
||
// Sonra complete kontrolü (weld ile birlikte)
|
||
elseif (stripos($statusLower, 'weld') !== false && stripos($statusLower, 'complete') !== false) {
|
||
$statusCategory = 'Weld-Complete Support';
|
||
}
|
||
// Son olarak installed veya complete (genel)
|
||
elseif (stripos($statusLower, 'installed') !== false || stripos($statusLower, 'complete') !== false) {
|
||
$statusCategory = 'Installed Support';
|
||
}
|
||
}
|
||
|
||
$key = $project . '|' . $area;
|
||
if (!isset($projectAreaStats[$key])) {
|
||
$projectAreaStats[$key] = [
|
||
'total' => 0,
|
||
'installed' => 0
|
||
];
|
||
}
|
||
|
||
$quantity = (int) ($row['quantity'] ?? 0);
|
||
$projectAreaStats[$key]['total'] += $quantity;
|
||
|
||
// Installed sayısını hesapla - Installed Support veya Weld-Complete Support
|
||
if ($statusCategory === 'Installed Support' || $statusCategory === 'Weld-Complete Support') {
|
||
$projectAreaStats[$key]['installed'] += $quantity;
|
||
}
|
||
|
||
$results[] = [
|
||
'Project' => $project,
|
||
'Area' => $area,
|
||
'Status' => $statusCategory,
|
||
'Weight' => (double) ($row['total_weight'] ?? 0), // kg bazında
|
||
'Quantity' => (int) $quantity, // adet bazında
|
||
'Original Status' => $status
|
||
];
|
||
}
|
||
|
||
// Progress hesapla ve ekle
|
||
foreach ($results as &$result) {
|
||
$key = $result['Project'] . '|' . $result['Area'];
|
||
$total = $projectAreaStats[$key]['total'] ?? 0;
|
||
$installed = $projectAreaStats[$key]['installed'] ?? 0;
|
||
|
||
$progress = 0;
|
||
if ($total > 0) {
|
||
$progress = round(($installed / $total) * 100, 2);
|
||
}
|
||
|
||
$result['Progress'] = $progress;
|
||
}
|
||
|
||
echo json_encode_tr($results);
|
||
?>
|