Files
sam-kd/instock/fetch_inspection.php
hskwon aca1767eb9 초기 커밋: 5130 레거시 시스템
- URL 하드코딩 → .env APP_URL 기반 동적 URL로 변경
- DB 연결 하드코딩 → .env 기반으로 변경
- MySQL strict mode DATE 오류 수정
2025-12-10 20:14:31 +09:00

455 lines
21 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- 모달창 -->
<div class="modal fade" id="supplierModal" tabindex="-1" aria-labelledby="supplierModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="supplierModalLabel"> 납품업체 추가</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<label for="newSupplierInput" class="form-label">납품업체 이름:</label>
<input type="text" id="newSupplierInput" class="form-control">
</div>
<div class="modal-footer">
<button type="button" id="addSupplierBtn" class="btn btn-dark">추가</button>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">취소</button>
</div>
</div>
</div>
</div>
<!-- 제조사 모달창 -->
<div class="modal fade" id="manufacturerModal" tabindex="-1" aria-labelledby="manufacturerModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="manufacturerModalLabel"> 제조사 추가</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<label for="newManufacturerInput" class="form-label">제조사 이름:</label>
<input type="text" id="newManufacturerInput" class="form-control">
</div>
<div class="modal-footer">
<button type="button" id="addManufacturerBtn" class="btn btn-dark">추가</button>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">취소</button>
</div>
</div>
</div>
</div>
<!-- 단위 모달창 -->
<div class="modal fade" id="unitModal" tabindex="-1" aria-labelledby="unitModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="unitModalLabel"> 단위 추가</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<label for="newUnitInput" class="form-label">단위 이름:</label>
<input type="text" id="newUnitInput" class="form-control">
</div>
<div class="modal-footer">
<button type="button" id="addUnitBtn" class="btn btn-dark">추가</button>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">취소</button>
</div>
</div>
</div>
</div>
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/session.php");
$mode = isset($_POST['mode']) ? $_POST['mode'] : '';
$num = isset($_POST['num']) ? $_POST['num'] : '';
$tablename = 'instock';
require_once($_SERVER['DOCUMENT_ROOT'] . "/lib/mydb.php");
$pdo = db_connect();
// `instock` 테이블에서 `item_name` 컬럼 값 가져오기
$sql = "SELECT item_name FROM {$DB}.{$tablename} WHERE is_deleted IS NULL";
try {
$stmh = $pdo->query($sql);
$itemNames = $stmh->fetchAll(PDO::FETCH_COLUMN, 0); // item_name 컬럼의 값을 배열로 저장
// 공백 및 엔터, 탭 제거
$cleanedItemNames = array_map(function($name) {
// 모든 공백, 탭, 줄 바꿈 제거
return preg_replace('/\s+/', '', $name);
}, $itemNames);
// 중복 제거
$uniqueItemNames = array_unique($cleanedItemNames);
// 공백으로만 구성된 요소 제거
$uniqueItemNames = array_filter($uniqueItemNames, function($name) {
return trim($name) !== '';
});
$uniqueItemNames = array_filter($uniqueItemNames, function($name) {
return trim($name) !== ' '; // 전각문자 일반 공백: ' ' 전각 공백: ' ' (유니코드 U+3000) 이 차이로 오류가 난것임
});
// 한글, 영문 오름차순 정렬
usort($uniqueItemNames, function($a, $b) {
return strcoll($a, $b); // strcoll을 사용해 로케일에 따른 오름차순 정렬
});
// 결과 출력 (예: 배열 확인용)
// print_r($uniqueItemNames);
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
// `instock` 테이블에서 `supplier` 컬럼 값 가져오기
$sql = "SELECT supplier FROM {$DB}.{$tablename} WHERE is_deleted IS NULL";
try {
$stmh = $pdo->query($sql);
$supplierNames = $stmh->fetchAll(PDO::FETCH_COLUMN, 0); // supplier 컬럼의 값을 배열로 저장
// 공백 및 엔터, 탭 제거
$cleanedSupplierNames = array_map(function($name) {
return preg_replace('/\s+/', '', $name);
}, $supplierNames);
// 중복 제거
$uniqueSupplierNames = array_unique($cleanedSupplierNames);
// 공백으로만 구성된 요소 제거
$uniqueSupplierNames = array_filter($uniqueSupplierNames, function($name) {
return trim($name) !== '' && trim($name) !== ' ';
});
// 한글, 영문 오름차순 정렬
usort($uniqueSupplierNames, function($a, $b) {
return strcoll($a, $b); // 로케일에 따른 오름차순 정렬
});
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
// `instock` 테이블에서 `manufacturer` 컬럼 값 가져오기
$sql = "SELECT manufacturer FROM {$DB}.{$tablename} WHERE is_deleted IS NULL";
try {
$stmh = $pdo->query($sql);
$manufacturerNames = $stmh->fetchAll(PDO::FETCH_COLUMN, 0); // manufacturer 컬럼의 값을 배열로 저장
// 공백 및 엔터, 탭 제거
$cleanedManufacturerNames = array_map(function($name) {
return preg_replace('/\s+/', '', $name); // 공백 제거
}, $manufacturerNames);
// 중복 제거
$uniqueManufacturerNames = array_unique($cleanedManufacturerNames);
// 공백으로만 구성된 요소 제거
$uniqueManufacturerNames = array_filter($uniqueManufacturerNames, function($name) {
return trim($name) !== '' && trim($name) !== ' '; // 전각 공백도 제거
});
// 한글, 영문 오름차순 정렬
usort($uniqueManufacturerNames, function($a, $b) {
return strcoll($a, $b); // 로케일에 따른 정렬
});
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
// `instock` 테이블에서 `unit` 컬럼 값 가져오기
$sql = "SELECT unit FROM {$DB}.{$tablename} WHERE is_deleted IS NULL";
try {
$stmh = $pdo->query($sql);
$unitNames = $stmh->fetchAll(PDO::FETCH_COLUMN, 0); // unit 컬럼의 값을 배열로 저장
// 공백 및 엔터, 탭 제거
$cleanedUnitNames = array_map(function($name) {
return preg_replace('/\s+/', '', $name); // 공백 제거
}, $unitNames);
// 중복 제거
$uniqueUnitNames = array_unique($cleanedUnitNames);
// 공백으로만 구성된 요소 제거
$uniqueUnitNames = array_filter($uniqueUnitNames, function($name) {
return trim($name) !== '' && trim($name) !== ' '; // 전각 공백도 제거
});
// 한글, 영문 오름차순 정렬
usort($uniqueUnitNames, function($a, $b) {
return strcoll($a, $b); // 로케일에 따른 정렬
});
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
if ($mode === 'update' && $num) {
try {
$sql = "SELECT * FROM ". $DB . "." . $tablename . " WHERE num=?";
$stmh = $pdo->prepare($sql);
$stmh->bindValue(1, $num, PDO::PARAM_INT);
$stmh->execute();
$row = $stmh->fetch(PDO::FETCH_ASSOC);
include '_row.php';
} catch (PDOException $Exception) {
echo "오류: ".$Exception->getMessage();
exit;
}
} else if ($mode === 'copy' && $num) {
try {
$sql = "SELECT * FROM ". $DB . "." . $tablename . " WHERE num=?";
$stmh = $pdo->prepare($sql);
$stmh->bindValue(1, $num, PDO::PARAM_INT);
$stmh->execute();
$row = $stmh->fetch(PDO::FETCH_ASSOC);
include '_row.php';
$num = ''; //copy일때는 $num 초기화
} catch (PDOException $Exception) {
echo "오류: ".$Exception->getMessage();
exit;
}
} else {
include '_request.php';
$mode = 'insert';
$inspection_date = date('Y-m-d');
// $lot_no = date('ymd') . '-'; // 현재 날짜를 "년도(2자리)+월+일" 형식으로 생성 후 '-' 추가
$currentDate = date('ymd'); // 예: 240926
$filepath = $_SERVER['DOCUMENT_ROOT'] . '/instock/lotnum.txt';
// 파일이 존재하지 않으면 새로 생성
if (!file_exists($filepath)) {
$lot_no = $currentDate . '-01';
} else {
// 파일에서 이전 로트번호 읽기
$lastLotNumber = file_get_contents($filepath);
list($date, $number) = explode('-', $lastLotNumber);
// 날짜가 같으면 번호를 증가, 다르면 01로 초기화
if ($date === $currentDate) {
$newNumber = str_pad((int)$number + 1, 2, '0', STR_PAD_LEFT);
$lot_no = $currentDate . '-' . $newNumber;
} else {
$lot_no = $currentDate . '-01';
}
}
// 로트번호 갱신 서버저장은 저장버튼 클릭시 시작
// file_put_contents($filepath, $lot_no);
}
// `instock` 테이블에서 `specification` 컬럼 값 가져오기
$sql = "SELECT specification FROM {$DB}.{$tablename} WHERE item_name = ? AND is_deleted IS NULL";
try {
$stmh = $pdo->prepare($sql);
$stmh->execute([$item_name]);
$specificationNames = $stmh->fetchAll(PDO::FETCH_COLUMN, 0); // specification 컬럼의 값을 배열로 저장
// 공백 및 엔터, 탭 제거
$cleanedspecificationNames = array_map(function($name) {
return preg_replace('/\s+/', '', $name); // 공백 제거
}, $specificationNames);
// $cleanedspecificationNames = array_map(function ($spec) {
// return str_replace(["\r\n", "\r", "\n"], '', $spec);
// }, $cleanedspecificationNames);
// 중복 제거
$uniquespecificationNames = array_unique($cleanedspecificationNames);
// 공백으로만 구성된 요소 제거
$uniquespecificationNames = array_filter($uniquespecificationNames, function($name) {
return trim($name) !== '' && trim($name) !== ' '; // 전각 공백도 제거
});
// 한글, 영문 오름차순 정렬
usort($uniquespecificationNames, function($a, $b) {
return strcoll($a, $b); // 로케일에 따른 정렬
});
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
$title_message = ($mode === 'update') ? '수입검사 수정' : '수입검사 신규 등록';
$specification_clean = preg_replace('/(\s+|<br>|<br\/>|<br \/>|\r\n|\r|\n)/', ' ', $specification);
$remarks_clean = preg_replace('/(\s+|<br>|<br\/>|<br \/>|\r\n|\r|\n)/', ' ', $remarks);
$item_name_clean = preg_replace('/(\s+|<br>|<br\/>|<br \/>|\r\n|\r|\n)/', ' ', $item_name);
?>
<input type="hidden" id="update_log" name="update_log" value="<?=$update_log?>">
<div class="container-fluid">
<div class="d-flex align-items-center justify-content-center">
<div class="card justify-content-center">
<div class="card-header text-center">
<span class="text-center fs-5 ms-2 me-4"><?=$title_message?></span>
<?php if ($mode === 'update'): ?>
<button type="button" id="viewinspection" class="btn btn-dark btn-sm me-3"
data-num="<?= htmlspecialchars($num) ?>"
data-specification="<?= htmlspecialchars($specification_clean) ?>"
data-remarks="<?= htmlspecialchars($remarks_clean) ?>"
data-itemname="<?= htmlspecialchars($item_name_clean) ?>" >
<i class="bi bi-list"></i> 수입검사서
</button>
<?php endif; ?>
</div>
<div class="card-body">
<div class="row justify-content-center text-center">
<div class="d-flex align-items-center justify-content-center m-2">
<table class="table table-bordered table-hover">
<tbody>
<tr>
<td class="text-center fs-6 fw-bold" style="width:150px;">로트번호</td>
<td class="text-center" style="width:200px;">
<input type="text" class="form-control fs-6 noborder-input" id="lot_no" name="lot_no" value="<?=$lot_no?>" autocomplete="off" required >
</td>
<td class="text-center fs-6 fw-bold" style="width:150px;">검사일</td>
<td class="text-center" style="width:200px;">
<input type="date" class="form-control fs-6 noborder-input" id="inspection_date" name="inspection_date" value="<?=$inspection_date?>" required >
</td>
</tr>
<tr>
<td class="text-center fs-6 fw-bold" style="width:150px;">납품업체</td>
<!-- 납품업체 선택 -->
<td class="text-center" style="width:200px;">
<select class="form-control fs-6 noborder-input" id="supplier" name="supplier" required >
<option value="">선택</option>
<?php
foreach ($uniqueSupplierNames as $name) {
$selected = (isset($supplier) && $supplier === $name) ? 'selected' : '';
echo "<option value=\"$name\" $selected>$name</option>";
}
?>
<option value="direct" class='text-danger'>직접입력</option> <!-- 직접입력 옵션 -->
</select>
</td>
<td class="text-center fs-6 fw-bold" style="width:150px;">품명</td>
<td class="text-center" style="width:200px;">
<select class="form-control fs-6 noborder-input" id="item_name" name="item_name" required >
<option value="">선택</option> <!-- 기본값: 선택 -->
<?php
foreach ($uniqueItemNames as $name) {
// 기본적으로 선택된 옵션이 있는 경우, `selected` 속성 추가
$selected = (isset($item_name) && $item_name === $name) ? 'selected' : '';
echo "<option value=\"$name\" $selected>$name</option>";
}
?>
</select>
</td>
</tr>
<tr>
<td class="text-center fs-6 fw-bold" style="width:150px;">규격</td>
<td class="text-center" style="width:200px;">
<select class="form-control fs-6 noborder-input" id="specification" name="specification" required >
<option value="">선택</option> <!-- 기본값: 선택 -->
<?php
foreach ($uniquespecificationNames as $name) {
$selected = (isset($specification) && $specification === $name) ? 'selected' : '';
echo "<option value=\"$name\" $selected>$name</option>";
}
?>
</td>
<td class="text-center fs-6 fw-bold" style="width:150px;">단위</td>
<td class="text-center" style="width:200px;">
<select class="form-control fs-6 noborder-input" id="unit" name="unit">
<option value="">선택</option>
<?php
foreach ($uniqueUnitNames as $name) {
// 기존 값이 있으면 선택
$selected = (isset($unit) && $unit === $name) ? 'selected' : '';
echo "<option value=\"$name\" $selected>$name</option>";
}
?>
<option value="direct" class='text-danger'>직접입력</option> <!-- 직접입력 옵션 -->
</select>
</td>
</tr>
<tr>
<td class="text-center fs-6 fw-bold" style="width:150px;">품목코드</td>
<td class="text-center" colspan="3" >
<input type="text" class="form-control fs-6 noborder-input" id="prodcode" name="prodcode" value="<?=$prodcode?>" autocomplete="off" required >
</td>
</tr>
<tr>
<td class="text-center fs-6 fw-bold" style="width:150px;">입고량</td>
<td class="text-center" style="width:200px;">
<input type="text" class="form-control text-center fs-6 noborder-input" id="received_qty" name="received_qty" value="<?=$received_qty?>" autocomplete="off" onkeyup="inputNumberFormat(this)" required >
</td>
<td class="text-center fs-6 fw-bold" style="width:150px;">자재번호</td>
<td class="text-center" style="width:200px;">
<input type="text" class="form-control fs-6 noborder-input" id="material_no" name="material_no" value="<?=$material_no?>" autocomplete="off">
</td>
</tr>
<tr>
<td class="text-center fs-6 fw-bold" style="width:150px;">제조사</td>
<td class="text-center" style="width:200px;">
<select class="form-control fs-6 noborder-input" id="manufacturer" name="manufacturer" required >
<option value="">선택</option>
<?php
foreach ($uniqueManufacturerNames as $name) {
// 기본적으로 선택된 옵션이 있는 경우, `selected` 속성 추가
$selected = (isset($manufacturer) && $manufacturer === $name) ? 'selected' : '';
echo "<option value=\"$name\" $selected>$name</option>";
}
?>
<option value="direct" class='text-danger'>직접입력</option> <!-- 직접입력 옵션 -->
</select>
</td>
<td class="text-center fs-6 fw-bold" style="width:150px;">소진여부</td>
<td class="text-center" style="width:200px;">
<input type="text" class="form-control text-center fs-6 noborder-input" id="lotDone" name="lotDone" value="<?=$lotDone?>" autocomplete="off">
</td>
</tr>
<tr>
<td class="text-center fs-6 fw-bold" style="width:150px;">매입가(VAT 별도)</td>
<td class="text-center" style="width:200px;">
<input type="text" class="form-control text-center fs-6 noborder-input"
id="purchase_price_excl_vat" name="purchase_price_excl_vat"
value="<?= isset($purchase_price_excl_vat) && is_numeric($purchase_price_excl_vat) ? number_format($purchase_price_excl_vat) : '' ?>"
autocomplete="off" onkeyup="inputNumberFormat(this)">
</td>
<td class="text-center fs-6 fw-bold" style="width:150px;">중량(kg)</td>
<td class="text-center" style="width:200px;">
<input type="text" class="form-control text-center fs-6 noborder-input"
id="weight_kg" name="weight_kg"
value="<?= isset($weight_kg) && is_numeric($weight_kg) ? number_format($weight_kg) : '' ?>"
autocomplete="off" onkeyup="inputNumberFormat(this)">
</td>
</tr>
<tr>
</td>
<td class="text-center fs-6 fw-bold" style="width:150px;">비고</td>
<td colspan="3" class="text-center" >
<input type="text" class="form-control fs-6 noborder-input text-start" id="remarks" name="remarks" value="<?=$remarks?>" autocomplete="off">
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="d-flex justify-content-center">
<button type="button" id="saveBtn" class="btn btn-dark btn-sm me-3">
<i class="bi bi-floppy-fill"></i> 저장
</button>
<?php if($mode != 'insert') { ?>
<button type="button" id="copyBtn" class="btn btn-primary btn-sm me-3">
<i class="bi bi-copy"></i> 복사
</button>
<button type="button" id="deleteBtn" class="btn btn-danger btn-sm me-3">
<i class="bi bi-trash"></i> 삭제
</button>
<?php } ?>
<button type="button" id="closeBtn" class="btn btn-outline-dark btn-sm me-2">
&times; 닫기
</button>
</div>
</div>
</div>
</div>
</div>