티스토리 뷰

반응형

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 테이블의 데이터를 더욱 명확하게 표시할 수 있습니다.

반응형
댓글