steelmake 테이블 구조를 확인했으니, 이제 steelmake 테이블의 데이터를 활용하여 "가공여부"를 계산하고 표시하는 로직을 추가하겠습니다. steelmake 테이블에서 proditem, prodspec, prodsteelnum, remainspec, remainsteelnum 등의 컬럼을 활용하여 가공 여부를 판단할 수 있습니다.
1. 가공여부 판단 로직
steelmake 테이블에서 가공 여부는 다음과 같은 조건으로 판단할 수 있습니다:
- proditem, prodspec, prodsteelnum이 모두 존재하면, 해당 데이터는 가공된 데이터로 간주합니다.
- remainspec, remainsteelnum이 존재하면, 잔여 재고가 있는 것으로 간주합니다.
이를 바탕으로 searchStock 함수를 수정하여 가공 여부를 계산합니다.
2. PHP 부분 수정
searchStock 함수에서 가공 여부를 계산하고, 이를 결과에 포함시킵니다.
function searchStock($pdo, $steel_item, $spec, $fromdate = null, $todate = null) {
try {
// 기존 코드 생략...
// 2. 1차 가공 입고 총 수량 (steelmakes 테이블)
// 입고는 proditem, prodspec, prodsteelnum, remainspec, remainsteelnum 기준으로 처리
$sql_produced = "
SELECT SUM(CAST(prodsteelnum AS UNSIGNED)) AS total_produced,
CASE
WHEN proditem IS NOT NULL AND prodspec IS NOT NULL AND prodsteelnum IS NOT NULL THEN '가공됨'
WHEN remainspec IS NOT NULL OR remainsteelnum IS NOT NULL THEN '잔여재고'
ELSE '미가공'
END AS processing_status
FROM steelmake
WHERE is_deleted IS NULL
AND TRIM(proditem) = :steel_item
AND prodspec LIKE :spec
AND (remainsteelnum IS NOT NULL OR remainspec IS NOT NULL)
";
if ($fromdate && $todate) {
$sql_produced .= " AND outdate BETWEEN :fromdate AND :todate";
}
$stmt_produced = $pdo->prepare($sql_produced);
$params_produced = [
':steel_item' => $steel_item,
':spec' => "%$spec%"
];
if ($fromdate && $todate) {
$params_produced[':fromdate'] = $fromdate;
$params_produced[':todate'] = $todate;
}
$stmt_produced->execute($params_produced);
$result_produced = $stmt_produced->fetch(PDO::FETCH_ASSOC);
$total_produced = $result_produced['total_produced'] ?? 0;
$processing_status = $result_produced['processing_status'] ?? '미가공';
// 기존 코드 생략...
// 결과 반환
return [
'stock' => $stock,
'total_purchased' => $total_purchased,
'total_produced' => $total_produced,
'total_used' => $total_used,
'total_final_out' => $total_final_out,
'difference' => $difference,
'processing_status' => $processing_status // 가공여부 추가
];
} catch (PDOException $e) {
// 오류 처리 및 디버그 정보 반환
error_log("재고 계산 오류: " . $e->getMessage());
return [
'stock' => null,
'error' => $e->getMessage()
];
}
}
3. HTML 테이블 수정
테이블의 헤더에 "가공여부" 열을 추가하고, 각 행에 가공여부 정보를 표시합니다.
<table class="table table-hover" id="myTable">
<thead class="table-primary">
<tr>
<th class="text-center" style="width: 200px;">원자재 종류</th>
<th class="text-center" style="width: 200px;">규격</th>
<th class="text-center" style="width: 100px;">입고</th>
<th class="text-center" style="width: 100px;">출고</th>
<th class="text-center" style="width: 100px;">재고</th>
<th class="text-center" style="width: 100px;">가공여부</th> <!-- 가공여부 열 추가 -->
</tr>
</thead>
<tbody>
<?php foreach ($stock_result as $stock): ?>
<tr data-steel-item="<?= htmlspecialchars($stock['steel_item'], ENT_QUOTES, 'UTF-8') ?>" data-spec="<?= htmlspecialchars($stock['spec'], ENT_QUOTES, 'UTF-8') ?>">
<td class="text-center"><?= htmlspecialchars($stock['steel_item'], ENT_QUOTES, 'UTF-8') ?></td>
<td class="text-center"><?= htmlspecialchars($stock['spec'], ENT_QUOTES, 'UTF-8') ?></td>
<td class="text-center"><?= ($stock['total_purchased'] + $stock['total_produced'] > 0) ? number_format($stock['total_purchased'] + $stock['total_produced']) : '' ?></td>
<td class="text-center"><?= ($stock['total_used'] + $stock['total_final_out'] > 0) ? number_format($stock['total_used'] + $stock['total_final_out']) : '' ?></td>
<td class="text-center"><?= number_format($stock['difference']) ?></td>
<td class="text-center"><?= htmlspecialchars($stock['processing_status'], ENT_QUOTES, 'UTF-8') ?></td> <!-- 가공여부 표시 -->
</tr>
<?php endforeach; ?>
</tbody>
</table>
4. JavaScript 부분 수정
DataTables 초기화 부분에서 새로운 열("가공여부")을 포함하도록 설정합니다.
$(document).ready(function() {
if ($('#myTable').length) {
dataTable = $('#myTable').DataTable({
"paging": true,
"ordering": true,
"searching": true,
"pageLength": 25,
"lengthMenu": [25, 50, 100, 200, 500, 1000],
"language": {
"lengthMenu": "Show _MENU_ entries",
"search": "Live Search:"
},
"order": [[0, 'desc']],
"columns": [
{ "data": "steel_item" },
{ "data": "spec" },
{ "data": "total_purchased" },
{ "data": "total_used" },
{ "data": "difference" },
{ "data": "processing_status" } // 가공여부 열 추가
]
});
}
});
5. 결과
이제 테이블에 "가공여부" 열이 추가되고, 각 원자재의 가공 상태가 표시됩니다. steelmake 테이블의 데이터를 기반으로 가공 여부가 "가공됨", "잔여재고", "미가공" 중 하나로 표시됩니다.
6. 추가 고려사항
- 가공여부 판단 로직: 현재는 proditem, prodspec, prodsteelnum, remainspec, remainsteelnum을 기반으로 가공 여부를 판단하고 있습니다. 필요에 따라 이 로직을 더 세분화하거나 변경할 수 있습니다.
- 데이터 정합성: steelmake 테이블의 데이터가 정확하게 업데이트되고 있는지 확인해야 합니다. 특히 proditem, prodspec, prodsteelnum, remainspec, remainsteelnum 컬럼이 정확하게 관리되고 있는지 확인해야 합니다.
이렇게 수정하면 steelmake 테이블의 데이터를 더욱 명확하게 표시할 수 있습니다.
반응형
'IT tech Coding > php' 카테고리의 다른 글
PHP에서 브라켓 품목코드 기반 재고 조회 기능 구현하기 (0) | 2025.02.06 |
---|---|
PHP에서 마지막 요소에 <br>을 넣지 않는 방법 (0) | 2025.02.05 |
PHP에서 효율적인 검색 쿼리 작성법: 특정 아이템과 스펙 검색하기 (0) | 2025.01.21 |
PHP 리팩토링으로 웹 애플리케이션 효율 높이기 (0) | 2025.01.17 |
PHP에서 문자열 포함 여부를 확인하는 방법: strpos() 함수 완벽 가이드 (0) | 2025.01.16 |