티스토리 뷰
반응형
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 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 구글드라이브API
- 1. #웹개발 2. #로트번호 3. #성적서보기 4. #ajax 5. #jquery 6. #php 7. #프론트엔드 8. #백엔드 9. #부트스트랩 10. #웹기능구현
- 오블완
- 웹제작강의안2주차
- #트리구조
- #카테고리트리
- json파일형태보기
- #php에러해결 #php경고메시지 #nonwellformednumeric #php초보자팁 #웹개발에러 #프로그래밍디버깅 #php정규식 #코드디버깅팁 #웹개발문제해결 #php숫자형변환
- 자바스크립트 코드 기본지식
- 엑셀셀보호
- #웹개발
- 도면자동생성
- Bootstrap 5
- General error: 2031
- ajax오류메시지
- isset을 적용해야 하는 이유
- 엑셀보호
- #계층형데이터
- #tuigrid #자바스크립트그리드 #행삽입 #행삭제 #웹개발팁 #프론트엔드개발 #javascriptgrid #데이터테이블 #ui개선 #그리드커스터마이징
- #데이터무결성
- coalesce는 한국어로 "코얼레스크" 또는 "코얼리스"
- 오토핫키가이드
- 엑셀입력보호
- json파일편하게보는법
- #동적ui
- #textarea #자동높이조절 #ux개선 #웹개발 #프론트엔드 #자바스크립트 #html팁 #웹디자인 #uiux #코딩팁
- 티스토리챌린지
- 효율적코딩방법
- 캐드자동작도
- #데이터베이스설계
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함