Merge pull request 'V2025120101' (#89) from V2025120101 into main

Reviewed-on: #89
This commit was merged in pull request #89.
This commit is contained in:
2025-12-05 09:27:49 +00:00
16 changed files with 881 additions and 375 deletions

View File

@@ -80,13 +80,10 @@ $(document).ready(function(){
var columns = [
// 요구사항: 품의서 No, 발주서 No, 프로젝트번호, 품번, 품명, 공급업체, 발주수량, 입고수량, 미입고수량, 검사성적서, 입고결과
{headerHozAlign : 'center', hozAlign : 'center', minWidth : 130, widthGrow : 1, title : '품의서 No', field : 'PROPOSAL_NO',
formatter:fnc_createGridAnchorTag,
cellClick:function(e, cell){
var proposalObjId = fnc_checkNull(cell.getData().PROPOSAL_OBJID);
if(proposalObjId != ''){
fn_openProposalPopUp(proposalObjId);
}
}
formatter: fnc_createGridAnchorTag,
cellClick : function(e, cell) {
fn_openProposalFormPopUp(cell.getData().SALES_REQUEST_OBJID);
}
},
{headerHozAlign : 'center', hozAlign : 'center', minWidth : 130, widthGrow : 1, title : '발주서 No', field : 'PURCHASE_ORDER_NO',
formatter:fnc_createGridAnchorTag,
@@ -214,6 +211,12 @@ function fn_deliveryAcceptanceViewPopUp(objId,DELIVERY_STATUS){
hiddenForm.submit();
}
// 품의서 상세 팝업
function fn_openProposalFormPopUp(objId){
var url = "/salesMng/proposalFormPopUp.do?PROPOSAL_OBJID=" + fnc_checkNull(objId);
window.open(url, "proposalFormPopUp", "width=1200,height=900,scrollbars=yes,resizable=yes");
}
//부적합등록
function fn_deliveryInvaildPopUp(){
@@ -324,7 +327,7 @@ function fn_openInspectionFilePopUp(objId){
<%-- <input type="button" class="plm_btns" value="부적합등록" id="btnInvaild"> --%>
</div>
</div>
<%-- 검색필터 주석처리
<div id="plmSearchZon">
<table>
<tr>
@@ -394,7 +397,6 @@ function fn_openInspectionFilePopUp(objId){
</tr>
</table>
</div>
--%>
<%@include file= "/WEB-INF/view/common/common_gridArea.jsp" %>
</div>

View File

@@ -812,7 +812,6 @@ function fn_openMailFormPopup(purchaseOrderObjId){
</div>
<%-- 검색필터 주석처리
<div id="plmSearchZon">
<table class="">
@@ -875,12 +874,9 @@ function fn_openMailFormPopup(purchaseOrderObjId){
</tr>
</table>
</div>
--%>
<%-- 총발주금액 주석처리
<div style="width:50%;float:left; color: RED;" class="purchaseOrderSum">
</div>
--%>
<%@include file= "/WEB-INF/view/common/common_gridArea.jsp" %>
</div>

View File

@@ -1,8 +1,15 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page import="com.pms.common.utils.*"%>
<%@ page import="java.util.*" %>
<%@include file= "/init.jsp" %>
<%
PersonBean person = (PersonBean) session.getAttribute(Constants.PERSON_BEAN);
String connector = person.getUserId();
%>
<c:set var="now" value="<%=new java.util.Date()%>" />
<c:set var="today"><fmt:formatDate value="${now}" pattern="yyyy-MM-dd" /></c:set>
<!DOCTYPE html>
<html>
<head>
@@ -11,62 +18,67 @@
</head>
<style>
.form-table {
width: 100%;
border-collapse: collapse;
.form-header {
display: flex;
align-items: center;
gap: 20px;
padding: 10px 15px;
background: #f8f9fa;
border-bottom: 1px solid #ddd;
}
.form-table th, .form-table td {
border: 1px solid #ddd;
padding: 10px;
}
.form-table th {
background: #f5f5f5;
text-align: left;
width: 150px;
.form-header label {
font-weight: bold;
margin-right: 5px;
}
.form-table td input[type="text"],
.form-table td select,
.form-table td textarea {
width: 100%;
padding: 8px;
.form-header .required {
color: red;
}
.form-header input, .form-header select {
padding: 5px 10px;
border: 1px solid #ccc;
border-radius: 3px;
box-sizing: border-box;
}
.form-table td textarea {
min-height: 100px;
resize: vertical;
}
.btn-wrap {
text-align: center;
margin-top: 20px;
padding: 15px;
}
.btn-wrap button {
padding: 10px 30px;
margin: 0 5px;
border: none;
border-radius: 3px;
cursor: pointer;
font-size: 14px;
}
.btn-save {
background: #3c8dbc;
color: #fff;
}
.btn-close {
background: #6c757d;
color: #fff;
}
.required {
color: red;
}
</style>
<script type="text/javascript">
var _editable = true;
var grid;
var modifiedRows = [];
// 불량유형 목록 (0001820)
var _DEFECT_TYPE_LIST = [];
// 불량원인 목록 (불량유형의 하위코드)
var _DEFECT_REASON_LIST = [];
// 처리현황 목록
var _ACTION_STATUS_LIST = [
{"CODE": "", "NAME": "선택"},
{"CODE": "Rework", "NAME": "Rework"},
{"CODE": "Scrap", "NAME": "Scrap"}
];
// 검사자 목록
var _INSPECTOR_LIST = [];
$(document).ready(function(){
fnc_datepick();
$('.select2').select2();
// 불량유형 목록 조회
_DEFECT_TYPE_LIST = [{"CODE": "", "NAME": "선택"}].concat(
fnc_getJsonAllDataListBySqlId({"sqlId": "common.getCodeselect", "code": "0001820"})
);
// 검사자 목록 조회
_INSPECTOR_LIST = [{"CODE": "", "NAME": "선택"}].concat(
fnc_getJsonAllDataListBySqlId({"sqlId": "common.getUserselect"})
);
// 검사일 기본 설정 (저장된 값 없으면 오늘 날짜)
var savedInspectionDate = "${info.inspection_date}";
if(savedInspectionDate != '' && savedInspectionDate != 'null'){
$("#INSPECTION_DATE").val(savedInspectionDate);
} else if($("#INSPECTION_DATE").val() == ''){
$("#INSPECTION_DATE").val("${today}");
}
// 저장 버튼
$("#btnSave").click(function(){
@@ -77,111 +89,312 @@ $(document).ready(function(){
$("#btnClose").click(function(){
self.close();
});
// 그리드 초기화 및 조회
fn_search();
// 셀 편집 이벤트
grid.on("cellEdited", function(cell) {
var row = cell.getRow();
var rowData = row.getData();
// 불량유형 변경 시 불량원인 목록 갱신
if (cell.getField() === 'DEFECT_TYPE') {
row.update({"DEFECT_REASON": ""}); // 불량원인 초기화
}
// 검사여부 변경 시 처리
if (cell.getField() === 'INSPECTION_YN') {
if (cell.getValue() === '스킵') {
// 스킵인 경우 불량 관련 필드 초기화
row.update({
"DEFECT_TYPE": "",
"DEFECT_REASON": "",
"ACTION_STATUS": "",
"INSPECTION_QTY": "",
"DEFECT_QTY": "",
"DEFECT_RATE": ""
});
}
}
// 검사수량, 불량수량 변경 시 불량율 자동 계산
if (cell.getField() === 'INSPECTION_QTY' || cell.getField() === 'DEFECT_QTY') {
fn_calcDefectRate(row);
}
// 검사결과 자동 설정 (불량수량 > 0이면 NG, 아니면 OK)
if (cell.getField() === 'DEFECT_QTY') {
var defectQty = parseInt(rowData.DEFECT_QTY) || 0;
if (defectQty > 0) {
row.update({"INSPECTION_RESULT": "NG"});
} else {
row.update({"INSPECTION_RESULT": "OK"});
}
}
rowData.GRID_STATUS = 'U';
});
});
function fn_save(){
// 유효성 검사
if($("#INSPECTOR_ID").val() == ''){
Swal.fire("검사자를 선택해주세요.");
$("#INSPECTOR_ID").focus();
return;
// 불량율 계산
function fn_calcDefectRate(row) {
var data = row.getData();
var inspectionQty = parseInt(data.INSPECTION_QTY) || 0;
var defectQty = parseInt(data.DEFECT_QTY) || 0;
if (inspectionQty > 0) {
var rate = (defectQty / inspectionQty * 100).toFixed(2);
row.update({"DEFECT_RATE": rate});
} else {
row.update({"DEFECT_RATE": ""});
}
}
// 편집 가능 여부 체크
function editCheck(cell) {
return _editable;
}
// 검사여부가 '검사'인 경우만 편집 가능
function editCheckInspection(cell) {
var rowData = cell.getRow().getData();
return rowData.INSPECTION_YN === '검사';
}
// 품목상세 팝업
function fn_openPartDetailPopUp(partObjId) {
if (!partObjId) return;
var popup_width = 1200;
var popup_height = 900;
var url = "/partMng/partMngDetailPopUp.do?OBJID=" + partObjId;
window.open(url, "partMngDetailPopUp", "width=" + popup_width + ",height=" + popup_height + ",scrollbars=yes,resizable=yes");
}
function fn_search() {
var columns = [
//{formatter:"rowSelection", titleFormatter:"rowSelection", hozAlign:"center", headerSort:false, width:30},
{title:'품번', field:'PART_NO', headerHozAlign:'center', hozAlign:'left', width:180, editor:false,
formatter: fnc_createGridAnchorTag,
cellClick: function(e, cell) {
fn_openPartDetailPopUp(cell.getData().PART_OBJID);
}
},
{title:'품명', field:'PART_NAME', headerHozAlign:'center', hozAlign:'left', width:180, editor:false},
{title:'입고일', field:'DELIVERY_DATE', headerHozAlign:'center', hozAlign:'center', width:100, editor:false},
{title:'입고수량', field:'DELIVERY_QTY', headerHozAlign:'center', hozAlign:'right', width:80, editor:false,
formatter:"money", formatterParams:{thousand:",", precision:false}
},
{title:'검사성적서', field:'INSPECTION_FILE', headerHozAlign:'center', hozAlign:'center', width:90, editor:false},
{title:'검사구분', field:'INSPECTION_TYPE', headerHozAlign:'center', hozAlign:'center', width:80,
editor:"select",
editorParams:{values:{"원자재":"원자재", "외주가공":"외주가공"}}
},
{title:'검사여부', field:'INSPECTION_YN', headerHozAlign:'center', hozAlign:'center', width:80,
editor:"select",
editorParams:{values:{"검사":"검사", "스킵":"스킵"}},
cellEdited: function(cell) {
// 스킵 선택 시 검사결과 자동 OK
if (cell.getValue() === '스킵') {
cell.getRow().update({"INSPECTION_RESULT": "OK"});
}
}
},
{title:'불량유형', field:'DEFECT_TYPE', headerHozAlign:'center', hozAlign:'center', width:100,
editor: fnc_customSelectEditor,
formatter: function(cell) {
if (cell.getData().INSPECTION_YN === '스킵') return '-';
return fnc_customSelectFormatter(cell, {valueId:"CODE", labelId:"NAME", values:_DEFECT_TYPE_LIST});
},
editorParams: {valueId:"CODE", labelId:"NAME", values:_DEFECT_TYPE_LIST},
editable: editCheckInspection
},
{title:'불량원인', field:'DEFECT_REASON', headerHozAlign:'center', hozAlign:'center', width:100,
editor: fnc_customSelectEditor,
formatter: function(cell) {
if (cell.getData().INSPECTION_YN === '스킵') return '-';
var defectType = cell.getData().DEFECT_TYPE;
if (defectType) {
var reasonList = [{"CODE": "", "NAME": "선택"}].concat(
fnc_getJsonAllDataListBySqlId({"sqlId": "common.getCodeselect", "code": defectType})
);
return fnc_customSelectFormatter(cell, {valueId:"CODE", labelId:"NAME", values: reasonList});
}
return fnc_customSelectFormatter(cell, {valueId:"CODE", labelId:"NAME", values: [{"CODE": "", "NAME": "선택"}]});
},
editorParams: function(cell) {
var defectType = cell.getData().DEFECT_TYPE;
if (defectType) {
var reasonList = [{"CODE": "", "NAME": "선택"}].concat(
fnc_getJsonAllDataListBySqlId({"sqlId": "common.getCodeselect", "code": defectType})
);
return {valueId:"CODE", labelId:"NAME", values: reasonList};
}
return {valueId:"CODE", labelId:"NAME", values: [{"CODE": "", "NAME": "선택"}]};
},
editable: editCheckInspection
},
{title:'처리현황', field:'ACTION_STATUS', headerHozAlign:'center', hozAlign:'center', width:80,
editor: fnc_customSelectEditor,
formatter: function(cell) {
if (cell.getData().INSPECTION_YN === '스킵') return '-';
return fnc_customSelectFormatter(cell, {valueId:"CODE", labelId:"NAME", values:_ACTION_STATUS_LIST});
},
editorParams: {valueId:"CODE", labelId:"NAME", values:_ACTION_STATUS_LIST},
editable: editCheckInspection
},
{title:'검사수량', field:'INSPECTION_QTY', headerHozAlign:'center', hozAlign:'right', width:80,
editor:"input", editable: editCheckInspection,
formatter: function(cell) {
if (cell.getData().INSPECTION_YN === '스킵') return '-';
return cell.getValue();
}
},
{title:'불량수량', field:'DEFECT_QTY', headerHozAlign:'center', hozAlign:'right', width:80,
editor:"input", editable: editCheckInspection,
formatter: function(cell) {
if (cell.getData().INSPECTION_YN === '스킵') return '-';
return cell.getValue();
}
},
{title:'불량율', field:'DEFECT_RATE', headerHozAlign:'center', hozAlign:'right', width:70, editor:false,
formatter: function(cell) {
if (cell.getData().INSPECTION_YN === '스킵') return '-';
var val = cell.getValue();
if (val) return val + '%';
return '';
}
},
{title:'검사결과', field:'INSPECTION_RESULT', headerHozAlign:'center', hozAlign:'center', width:80,
editor:"select",
editorParams:{values:{"OK":"OK", "NG":"NG"}},
editable: editCheckInspection,
formatter: function(cell) {
if (cell.getData().INSPECTION_YN === '스킵') return '-';
var val = cell.getValue();
if (val === 'OK') return '<span style="color:#28a745;font-weight:bold;">OK</span>';
if (val === 'NG') return '<span style="color:#dc3545;font-weight:bold;">NG</span>';
return val;
}
},
{title:'첨부파일', field:'ATTACH_FILE_CNT', headerHozAlign:'center', hozAlign:'center', width:80,
formatter: fnc_subInfoValueFormatter,
cellClick: function(e, cell) {
var objid = fnc_checkNull(cell.getData().OBJID);
fn_openFilePopup(objid);
}
},
{title:'비고', field:'REMARK', headerHozAlign:'center', hozAlign:'left', width:150,
editor:"input", editable: editCheck
}
];
var param = {
PURCHASE_ORDER_MASTER_OBJID: "${param.OBJID}"
};
grid = fnc_tabul_search(_tabul_layout_fitDataStretch, grid, "/quality/incomingInspectionDetailGridList.do", columns, false, false, true, param);
}
// 파일 첨부 팝업
function fn_openFilePopup(objId) {
var url = "/projectConcept/FileRegistPopup.do?docType=INCOMING_INSPECTION&targetObjId=" + objId + "&docTypeName=수입검사첨부";
window.open(url, "filePopup", "width=700,height=500,scrollbars=yes,resizable=yes");
}
// 저장
function fn_save() {
// 유효성 검사
if($("#INSPECTION_DATE").val() == ''){
Swal.fire("검사일을 입력해주세요.");
$("#INSPECTION_DATE").focus();
return;
}
if($("#INSPECTION_RESULT").val() == ''){
Swal.fire("검사결과를 선택해주세요.");
$("#INSPECTION_RESULT").focus();
if($("#INSPECTOR_ID").val() == ''){
Swal.fire("검사를 선택해주세요.");
$("#INSPECTOR_ID").focus();
return;
}
if(confirm("저장하시겠습니까?")){
$.ajax({
url: "/quality/saveIncomingInspection.do",
type: "POST",
data: $("#form1").serialize(),
dataType: "json",
success: function(data){
Swal.fire(data.msg);
if(data.result){
opener.fn_search();
self.close();
}
},
error: function(xhr, status, error){
Swal.fire("저장 중 오류가 발생했습니다.");
}
});
var gridData = grid.getData();
if(gridData.length == 0){
Swal.fire("검사할 항목이 없습니다.");
return;
}
Swal.fire({
title: '저장 확인',
text: '수입검사 내용을 저장하시겠습니까?',
icon: 'question',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: '저장',
cancelButtonText: '취소'
}).then((result) => {
if (result.isConfirmed) {
var param = $("#form1").serializeObject();
param.dataListJson = JSON.stringify(gridData);
$.ajax({
url: "/quality/saveIncomingInspection.do",
type: "POST",
data: param,
dataType: "json",
success: function(data) {
Swal.fire({
title: data.result ? '저장 완료' : '저장 실패',
text: data.msg,
icon: data.result ? 'success' : 'error'
}).then(() => {
if(data.result){
opener.fn_search();
self.close();
}
});
},
error: function(xhr, status, error) {
Swal.fire('서버 오류가 발생했습니다.');
}
});
}
});
}
// 팝업 닫힐 때 부모 새로고침
window.addEventListener('unload', function() {
if(window.opener && window.opener.fn_search) {
window.opener.fn_search();
}
});
</script>
<body>
<form name="form1" id="form1" method="post">
<input type="hidden" name="OBJID" id="OBJID" value="${info.OBJID}">
<input type="hidden" name="PURCHASE_ORDER_MASTER_OBJID" id="PURCHASE_ORDER_MASTER_OBJID" value="${param.OBJID}">
<section>
<div class="businessPopup">
<div class="businessPopupTitle">
<h2>수입검사 등록</h2>
</div>
<div style="padding: 20px;">
<table class="form-table">
<colgroup>
<col width="150px">
<col width="*">
<col width="150px">
<col width="*">
</colgroup>
<tbody>
<tr>
<th>발주서 No</th>
<td>${param.PURCHASE_ORDER_NO}</td>
<th>검사자 <span class="required">*</span></th>
<td>
<select name="INSPECTOR_ID" id="INSPECTOR_ID">
<option value="">선택</option>
<c:forEach var="item" items="${userList}">
<option value="${item.USER_ID}" <c:if test="${info.INSPECTOR_ID == item.USER_ID}">selected</c:if>>${item.USER_NAME}</option>
</c:forEach>
</select>
</td>
</tr>
<tr>
<th>검사일 <span class="required">*</span></th>
<td>
<input type="text" name="INSPECTION_DATE" id="INSPECTION_DATE" class="datepicker" value="${info.INSPECTION_DATE}">
</td>
<th>검사결과 <span class="required">*</span></th>
<td>
<select name="INSPECTION_RESULT" id="INSPECTION_RESULT">
<option value="">선택</option>
<option value="OK" <c:if test="${info.INSPECTION_RESULT == 'OK'}">selected</c:if>>OK</option>
<option value="NG" <c:if test="${info.INSPECTION_RESULT == 'NG'}">selected</c:if>>NG</option>
</select>
</td>
</tr>
<tr>
<th>검사 메모</th>
<td colspan="3">
<textarea name="INSPECTION_MEMO" id="INSPECTION_MEMO">${info.INSPECTION_MEMO}</textarea>
</td>
</tr>
</tbody>
</table>
<div class="btn-wrap">
<button type="button" id="btnSave" class="btn-save">저장</button>
<button type="button" id="btnClose" class="btn-close">닫기</button>
</div>
<body style="overflow-x: hidden;">
<form name="form1" id="form1" action="" method="post" onsubmit="return false">
<input type="hidden" name="PURCHASE_ORDER_MASTER_OBJID" id="PURCHASE_ORDER_MASTER_OBJID" value="${param.OBJID}">
<div class="plm_menu_name_gdnsi">
<h2><span>수입검사 등록</span></h2>
<div class="btnArea">
<input type="button" value="저장" class="plm_btns" id="btnSave">
<input type="button" value="닫기" class="plm_btns" id="btnClose">
</div>
</div>
</section>
</form>
<div class="form-header">
<div>
<label>검사일<span class="required">*</span></label>
<input type="text" name="INSPECTION_DATE" id="INSPECTION_DATE" class="date_icon" style="width:120px;" value="${info.INSPECTION_DATE}">
</div>
<div>
<label>검사자<span class="required">*</span></label>
<select name="INSPECTOR_ID" id="INSPECTOR_ID" class="select2" style="width:150px;">
<option value="">선택</option>
${code_map.inspector_id}
</select>
</div>
</div>
<%@include file= "/WEB-INF/view/common/common_gridArea.jsp" %>
</form>
</body>
</html>

View File

@@ -43,11 +43,6 @@ String menuName = CommonUtils.getMenuName(menuObjId, "수입검사 관리");
.inspection-ng { color: #dc3545; font-weight: bold; cursor: pointer; }
.inspection-ok { color: #28a745; font-weight: bold; cursor: pointer; }
.inspection-ng:hover, .inspection-ok:hover { text-decoration: underline; }
/* 검색필터 아이템 스타일 */
.search-item { display: flex; align-items: center; gap: 5px; }
.search-item label { font-weight: bold; white-space: nowrap; min-width: 70px; }
.search-item input, .search-item select { height: 28px; }
</style>
<script type="text/javascript">
@@ -122,24 +117,18 @@ var columns = [
// 조회
function fn_search(){
// 검색 파라미터를 form1에서 가져와서 전달
// 프로젝트번호 multi select 처리
var selectedProjectNos = $("#project_no").val();
$('input[name="project_nos"]').remove();
$('<input>').attr({
type: 'hidden',
name: 'project_nos',
value: selectedProjectNos
}).appendTo('#form1');
_tabulGrid = fnc_tabul_search(_tabul_layout_fitColumns, _tabulGrid, "/quality/incomingInspectionGridList.do", columns, true);
}
// 검색조건 초기화
function fn_reset(){
$("#search_proposal_no").val("");
$("#search_purchase_order_no").val("");
$("#search_project_no").val("");
$("#search_part_no").val("");
$("#search_part_name").val("");
$("#search_partner_name").val("");
$("#search_delivery_status").val("");
$("#search_inspector").val("");
$("#search_inspection_date").val("");
$("#search_inspection_result").val("");
}
// 수입검사 등록 팝업
function fn_registPopUp(){
var selected = _tabulGrid.getSelectedData();
@@ -152,8 +141,8 @@ function fn_registPopUp(){
return;
}
var popup_width = 1200;
var popup_height = 800;
var popup_width = 1700;
var popup_height = 700;
var hiddenForm = document.hiddenForm;
var target = "incomingInspectionPopUp";
var url = "/quality/incomingInspectionFormPopUp.do";
@@ -169,8 +158,8 @@ function fn_registPopUp(){
// 검사결과 확인/수정 팝업
function fn_resultPopUp(objId){
var popup_width = 1200;
var popup_height = 800;
var popup_width = 1700;
var popup_height = 700;
var hiddenForm = document.hiddenForm;
var target = "inspectionResultPopUp";
var url = "/quality/incomingInspectionFormPopUp.do";
@@ -240,56 +229,61 @@ function fn_excelDownload(){
</div>
<div id="plmSearchZon">
<div style="display:flex; flex-wrap:wrap; gap:10px; align-items:center;">
<div class="search-item">
<label>품의서 No</label>
<input type="text" name="search_proposal_no" id="search_proposal_no" style="width:120px;" autocomplete="off">
</div>
<div class="search-item">
<label>발주서 No</label>
<input type="text" name="search_purchase_order_no" id="search_purchase_order_no" style="width:120px;" autocomplete="off">
</div>
<div class="search-item">
<label>프로젝트번호</label>
<input type="text" name="search_project_no" id="search_project_no" style="width:120px;" autocomplete="off">
</div>
<div class="search-item">
<label>품번</label>
<input type="text" name="search_part_no" id="search_part_no" style="width:120px;" autocomplete="off">
</div>
<div class="search-item">
<label>품명</label>
<input type="text" name="search_part_name" id="search_part_name" style="width:120px;" autocomplete="off">
</div>
<div class="search-item">
<label>공급업체</label>
<input type="text" name="search_partner_name" id="search_partner_name" style="width:120px;" autocomplete="off">
</div>
<div class="search-item">
<label>입고결과</label>
<select name="search_delivery_status" id="search_delivery_status" style="width:120px;">
<option value="">전체</option>
<option value="입고중">입고중</option>
<option value="입고완료">입고완료</option>
</select>
</div>
<div class="search-item">
<label>검사자</label>
<input type="text" name="search_inspector" id="search_inspector" style="width:120px;" autocomplete="off">
</div>
<div class="search-item">
<label>검사일</label>
<input type="text" name="search_inspection_date" id="search_inspection_date" class="date_icon" style="width:120px;" autocomplete="off">
</div>
<div class="search-item">
<label>검사결과</label>
<select name="search_inspection_result" id="search_inspection_result" style="width:120px;">
<option value="">전체</option>
<option value="OK">OK</option>
<option value="NG">NG</option>
</select>
</div>
</div>
<table>
<tr>
<td><label for="">품의서 No</label></td>
<td><input type="text" name="search_proposal_no" id="search_proposal_no" style="width:120px;" autocomplete="off" value="${param.search_proposal_no}"></td>
<td><label for="">발주서 No</label></td>
<td><input type="text" name="search_purchase_order_no" id="search_purchase_order_no" style="width:120px;" autocomplete="off" value="${param.search_purchase_order_no}"></td>
<td><label for="">프로젝트번호</label></td>
<td>
<select name="project_no" id="project_no" style="width:210px;" class="select2" autocomplete="off" multiple="multiple">
<option value="">선택</option>
${code_map.project_no}
</select>
</td>
<td><label for="">품번</label></td>
<td><input type="text" name="search_part_no" id="search_part_no" style="width:170px;" autocomplete="off" value="${param.search_part_no}"></td>
<td><label for="">품명</label></td>
<td><input type="text" name="search_part_name" id="search_part_name" style="width:170px;" autocomplete="off" value="${param.search_part_name}"></td>
<td><label for="">공급업체</label></td>
<td><select name="search_partner" id="search_partner" class="select2" autocomplete="off" style="width:250px;"><option value="">선택</option>${code_map.partner_objid}</select></td>
</tr>
<tr>
<td><label for="">입고결과</label></td>
<td>
<select name="search_delivery_status" id="search_delivery_status" class="select2" autocomplete="off" style="width:120px;">
<option value="">전체</option>
<option value="입고중">입고중</option>
<option value="입고완료">입고완료</option>
</select>
</td>
<td><label for="">검사자</label></td>
<td><select name="inspector_id" id="inspector_id" class="select2" autocomplete="off" style="width:120px;"><option value="">선택</option>${code_map.inspector_id}</select></td>
<td class=""><label>검사일</label></td>
<td>
<input type="text" name="inspection_start_date" id="inspection_start_date" style="width:100px;" autocomplete="off" value="${param.inspection_start_date}" class="date_icon">~
<input type="text" name="inspection_end_date" id="inspection_end_date" style="width:100px;" autocomplete="off" value="${param.inspection_end_date }" class="date_icon">
</td>
<td><label for="">검사결과</label></td>
<td>
<select name="search_inspection_result" id="search_inspection_result" class="select2" autocomplete="off" style="width:120px;">
<option value="">전체</option>
<option value="OK">OK</option>
<option value="NG">NG</option>
</select>
</td>
</tr>
</table>
</div>
<%@include file= "/WEB-INF/view/common/common_gridArea.jsp" %>

View File

@@ -238,7 +238,7 @@ function _fnc_datepick(){
<input type="button" value="발주서생성" class="plm_btns" id="btnCreatePO" style="background:#28a745; color:white;">
</div>
</div>
<%-- 검색필터 주석처리
<div id="plmSearchZon">
<table>
<tbody>
@@ -270,7 +270,6 @@ function _fnc_datepick(){
</tbody>
</table>
</div>
--%>
<%@include file= "/WEB-INF/view/common/common_gridArea.jsp" %>
</div>

View File

@@ -164,14 +164,13 @@ $(document).ready(function(){
});
});
// 공급업체 목록 로드 (협력업체관리 ADMIN_SUPPLY_MNG + 일반거래처관리 CLIENT_MNG)
// 공급업체 목록 로드 (일반거래처관리 CLIENT_MNG)
function fn_loadVendorList(callback) {
vendorList = {}; // 객체 형태로 변경
vendorList[''] = '선택'; // 빈 값
// 1. 협력업체 로드 (ADMIN_SUPPLY_MNG)
$.ajax({
url: "/admin/supplyMngPagingGridList.do",
url: "/admin/clientMngListPagingGridList.do",
method: 'post',
data: {
countPerPage: 9999
@@ -180,44 +179,18 @@ function fn_loadVendorList(callback) {
success: function(data) {
if(data && data.RESULTLIST) {
data.RESULTLIST.forEach(function(item) {
var name = item.SUPPLY_NAME || '';
var name = item.CLIENT_NM || '';
var objid = item.OBJID || '';
if(objid && name) {
vendorList[objid] = name;
}
});
}
console.log("협력업체 로드 완료:", Object.keys(vendorList).length + "개", vendorList);
// 2. 일반거래처 로드 (CLIENT_MNG) - C_ 접두사 붙여서 구분
$.ajax({
url: "/admin/clientMngListPagingGridList.do",
method: 'post',
data: {
countPerPage: 9999
},
dataType: 'json',
success: function(data2) {
if(data2 && data2.RESULTLIST) {
data2.RESULTLIST.forEach(function(item) {
var name = item.CLIENT_NM || '';
var objid = item.OBJID || '';
if(objid && name) {
vendorList['C_' + objid] = name + ' (일반)';
}
});
}
console.log("vendorList 최종 생성 완료:", Object.keys(vendorList).length + "개", vendorList);
if(callback) callback();
},
error: function(xhr, status, error) {
logError("일반거래처 목록 로드 실패:", error);
if(callback) callback();
}
});
console.log("공급업체 로드 완료:", Object.keys(vendorList).length + "개", vendorList);
if(callback) callback();
},
error: function(xhr, status, error) {
logError("협력업체 목록 로드 실패:", error);
logError("공급업체 목록 로드 실패:", error);
if(callback) callback();
}
});

View File

@@ -610,8 +610,8 @@ public class PurchaseOrderController {
code_map.put("PO_CLIENT_ID", commonService.bizMakeOptionList("Y", (String)info.get("PO_CLIENT_ID"),"admin.getSUPPLYInfoGridList", "searchHeadOffice", true, "objid", "supply_name", new String []{"supply_address","office_no","supply_fax_no","bus_reg_no","email"} ));
//당사프로젝트번호 project_no
code_map.put("project_no", commonService.bizMakeOptionList("", (String)info.get("CONTRACT_MGMT_OBJID"),"common.getProjectNameList"));
//공급업체
code_map.put("partner_cd", commonService.bizMakeOptionList("", (String)info.get("PARTNER_OBJID" ),"common.getmatersupplyselect"));
//공급업체 (CLIENT_MNG 테이블 사용)
code_map.put("partner_cd", commonService.bizMakeOptionList("", (String)info.get("PARTNER_OBJID" ),"common.getClientMngSupplySelect"));
//구매담당자
code_map.put("sales_mng_user_id", commonService.bizMakeOptionList("", (String)info.get("SALES_MNG_USER_ID"),"common.getUserselect", new String []{"cell_phone"} ));

View File

@@ -1,5 +1,6 @@
package com.pms.controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -10,14 +11,21 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.pms.common.bean.PersonBean;
import com.pms.common.utils.CommonUtils;
import com.pms.common.utils.Constants;
import com.pms.common.JsonUtil;
import com.pms.service.CommonService;
import com.pms.service.QualityService;
@Controller
public class QualityController {
@Autowired
CommonService commonService;
QualityService service = null;
@Autowired
@@ -257,19 +265,25 @@ public class QualityController {
* @return
*/
@RequestMapping("/quality/incomingInspectionList.do")
public String incomingInspectionList(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
// 검색조건용 리스트 조회
List proposalNoList = service.getProposalNoList(paramMap);
List purchaseOrderNoList = service.getPurchaseOrderNoList(paramMap);
List projectNoList = service.getProjectNoList(paramMap);
List partnerList = service.getPartnerList(paramMap);
List inspectorList = service.getInspectorList(paramMap);
public String incomingInspectionList(HttpServletRequest request, @RequestParam Map paramMap){
ArrayList list = new ArrayList();
Map code_map = new HashMap();
request.setAttribute("proposalNoList", proposalNoList);
request.setAttribute("purchaseOrderNoList", purchaseOrderNoList);
request.setAttribute("projectNoList", projectNoList);
request.setAttribute("partnerList", partnerList);
request.setAttribute("inspectorList", inspectorList);
try {
// 프로젝트번호
code_map.put("project_no", commonService.bizMakeOptionList("", (String)paramMap.get("project_no"), "common.getProjectNameList"));
// 공급업체 (CLIENT_MNG)
code_map.put("partner_objid", commonService.bizMakeOptionList("", (String)paramMap.get("partner_objid"), "common.getClientMngSupplySelect"));
// 검사자
code_map.put("inspector_id", commonService.bizMakeOptionList("", (String)paramMap.get("inspector_id"), "common.getUserselect"));
list = commonService.selectListPaging("quality.getIncomingInspectionList", request, paramMap);
} catch(Exception e) {
e.printStackTrace();
}
request.setAttribute("code_map", code_map);
request.setAttribute("LIST", JsonUtil.ListToJson(list));
return "/quality/incomingInspectionList";
}
@@ -280,10 +294,11 @@ public class QualityController {
* @param paramMap
* @return
*/
@ResponseBody
@RequestMapping("/quality/incomingInspectionGridList.do")
public String incomingInspectionGridList(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
request.setAttribute("RESULT", CommonUtils.getJsonArray(service.getIncomingInspectionList(request, paramMap)));
return "/ajax/ajaxResult";
public Map incomingInspectionGridList(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
commonService.selectListPagingNew("quality.getIncomingInspectionList", request, paramMap);
return paramMap;
}
/**
@@ -294,11 +309,47 @@ public class QualityController {
*/
@RequestMapping("/quality/incomingInspectionFormPopUp.do")
public String incomingInspectionFormPopUp(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
Map info = service.getIncomingInspectionInfo(paramMap);
request.setAttribute("info", info);
Map code_map = new HashMap();
try {
// 로그인 사용자 정보
PersonBean person = (PersonBean) request.getSession().getAttribute(Constants.PERSON_BEAN);
String loginUserId = person != null ? person.getUserId() : "";
// 기존 검사 정보 조회 (검사자, 검사일 가져오기)
Map info = service.getIncomingInspectionDetailInfo(paramMap);
String savedInspectorId = "";
if(info != null && info.get("inspector_id") != null) {
savedInspectorId = (String) info.get("inspector_id");
request.setAttribute("info", info);
} else {
// 저장된 값 없으면 로그인 사용자로 기본 설정
savedInspectorId = loginUserId;
}
// 검사자 목록 (기존 값 또는 로그인 사용자 selected)
code_map.put("inspector_id", commonService.bizMakeOptionList("", savedInspectorId, "common.getUserselect"));
} catch(Exception e) {
e.printStackTrace();
}
request.setAttribute("code_map", code_map);
return "/quality/incomingInspectionFormPopUp";
}
/**
* 수입검사 상세 그리드 목록 조회 (입고결과 기반)
* @param request
* @param paramMap
* @return
*/
@ResponseBody
@RequestMapping("/quality/incomingInspectionDetailGridList.do")
public Map incomingInspectionDetailGridList(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
commonService.selectListPagingNew("quality.getIncomingInspectionDetailList", request, paramMap);
return paramMap;
}
/**
* 수입검사 저장
* @param request

View File

@@ -2717,24 +2717,48 @@ ORDER BY COALESCE(T.REVISION, '1.0')
WHERE OBJID::numeric = #{OBJID}::numeric
</select>
<select id="getmatersupplyselect" parameterType="map" resultType="map">
SELECT
OBJID::VARCHAR AS CODE
,SUPPLY_NAME AS NAME
,OBJID::VARCHAR AS CODE_ID
,SUPPLY_NAME AS CODE_NAME
,SUPPLY_CODE AS CODE_CD
,REG_NO
,CHARGE_USER_NAME
,SUPPLY_TEL_NO
,SUPPLY_FAX_NO
,PAYMENT_METHOD
,STATUS AS STATUS
,'' AS ID
,'' AS EXT_VAL
FROM ADMIN_SUPPLY_MNG
ORDER BY SUPPLY_NAME
</select>
<!-- 공급업체 목록 조회 (ADMIN_SUPPLY_MNG 테이블) -->
<select id="getmatersupplyselect" parameterType="map" resultType="map">
SELECT
OBJID::VARCHAR AS CODE
,SUPPLY_NAME AS NAME
,OBJID::VARCHAR AS CODE_ID
,SUPPLY_NAME AS CODE_NAME
,SUPPLY_CODE AS CODE_CD
,REG_NO
,CHARGE_USER_NAME
,SUPPLY_TEL_NO
,SUPPLY_FAX_NO
,PAYMENT_METHOD
,STATUS AS STATUS
,'' AS ID
,'' AS EXT_VAL
FROM ADMIN_SUPPLY_MNG
ORDER BY SUPPLY_NAME
</select>
<!-- 일반거래처 목록 조회 (CLIENT_MNG 테이블) - 발주서용 -->
<select id="getClientMngSupplySelect" parameterType="map" resultType="map">
SELECT
OBJID::VARCHAR AS CODE
,CLIENT_NM AS NAME
,OBJID::VARCHAR AS CODE_ID
,CLIENT_NM AS CODE_NAME
,CLIENT_CD AS CODE_CD
,BUS_REG_NO AS REG_NO
,CEO_NM AS CHARGE_USER_NAME
,TEL_NO AS SUPPLY_TEL_NO
,FAX_NO AS SUPPLY_FAX_NO
,EMAIL AS SUPPLY_EMAIL
,PAYMENT_TERM AS PAYMENT_METHOD
,USE_YN AS STATUS
,'' AS ID
,'' AS EXT_VAL
FROM CLIENT_MNG
WHERE 1=1
--AND USE_YN = 'Y'
ORDER BY CLIENT_NM
</select>
<select id="getsupCode" parameterType="map" resultType="map">
SELECT OBJID::VARCHAR SUPPLY_CODE

View File

@@ -1387,6 +1387,7 @@ INSERT INTO INVENTORY_MGMT_HISTORY
, CONTRACT_MGMT_OBJID
, PURCHASE_ORDER_MASTER_OBJID
, PURCHASE_ORDER_SUB_OBJID
, RECEIPT_DATE
)
VALUES
(
@@ -1400,6 +1401,7 @@ INSERT INTO INVENTORY_MGMT_HISTORY
, #{CONTRACT_MGMT_OBJID}
, #{PURCHASE_ORDER_MASTER_OBJID}
, #{PURCHASE_ORDER_SUB_OBJID}
, #{RECEIPT_DATE}
)
</update>

View File

@@ -2376,25 +2376,20 @@
WHERE OBJID = #{objId} OR MULTI_MASTER_OBJID = #{objId}
</delete>
<!-- 공급처 정보 조회 (CLIENT_MNG 테이블) -->
<select id="purchaseOrderAdminSupplyInfo" parameterType="map" resultType="map">
SELECT
T1.OBJID
,T1.BUS_REG_NO AS SUPPLY_BUS_NO
,(CASE WHEN T2.OBJID IS NULL THEN T1.CHARGE_USER_NAME ELSE T2.CHARGER_NAME END) AS SUPPLY_USER_NAME
,(CASE WHEN T2.OBJID IS NULL THEN T1.SUPPLY_TEL_NO ELSE T2.PHONE END) AS SUPPLY_USER_HP
,(CASE WHEN T2.OBJID IS NULL THEN T1.OFFICE_NO ELSE T2.TEL END) AS SUPPLY_USER_TEL
,(CASE WHEN T2.OBJID IS NULL THEN T1.SUPPLY_FAX_NO ELSE T2.FAX END) AS SUPPLY_USER_FAX
,(CASE WHEN T2.OBJID IS NULL THEN T1.EMAIL ELSE T2.EMAIL END) AS SUPPLY_USER_EMAIL
,T1.SUPPLY_ADDRESS AS SUPPLY_ADDR
FROM ADMIN_SUPPLY_MNG AS T1
LEFT OUTER JOIN
(SELECT * FROM (SELECT DENSE_RANK() OVER(PARTITION BY T.SUPPLY_OBJID ORDER BY T.CHARGER_NAME ASC) AS TOP, T.*
FROM SUPPLY_CHARGER_MNG T WHERE CHARGER_TYPE = '0000330' /*발주서공급처담당*/
) AS T WHERE TOP = 1
) AS T2
ON T1.OBJID = T2.SUPPLY_OBJID::NUMERIC
,T1.CEO_NM AS SUPPLY_USER_NAME
,T1.VENDOR_MOBILE AS SUPPLY_USER_HP
,T1.TEL_NO AS SUPPLY_USER_TEL
,T1.FAX_NO AS SUPPLY_USER_FAX
,T1.EMAIL AS SUPPLY_USER_EMAIL
,CONCAT(COALESCE(T1.ADDR1,''), ' ', COALESCE(T1.ADDR2,'')) AS SUPPLY_ADDR
FROM CLIENT_MNG AS T1
WHERE 1=1
AND T1.OBJID = #{PARTNER_OBJID}::NUMERIC
AND T1.OBJID::VARCHAR = #{PARTNER_OBJID}::VARCHAR
</select>
<select id="purchaseOrderSalesBomPartListByPartnerContract" parameterType="map" resultType="map">
@@ -3164,10 +3159,11 @@ SELECT POM.OBJID
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.TYPE) AS TYPE_NAME
,POM.PARTNER_OBJID
,CASE
,(SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_NAME
<!-- ,CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME
END AS PARTNER_NAME -->
,POM.SALES_MNG_USER_ID
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS SALES_MNG_USER_NAME
@@ -4202,10 +4198,29 @@ SELECT POM.OBJID
,POM.DELIVERY_DATE
,POM.PARTNER_OBJID
,CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME
,(SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_NAME
<!-- 품의서 번호 -->
,POM.SALES_REQUEST_OBJID
,(SELECT REQUEST_MNG_NO FROM SALES_REQUEST_MASTER WHERE OBJID::VARCHAR = POM.SALES_REQUEST_OBJID) AS PROPOSAL_NO
<!-- 품번/품명 (첫번째 + 외 N건) -->
,(SELECT
CASE
WHEN COUNT(*) > 1 THEN MIN(POP.PART_NO) || ' 외 ' || (COUNT(*) - 1) || '건'
ELSE MIN(POP.PART_NO)
END
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID::VARCHAR
) AS PART_NO
,(SELECT
CASE
WHEN COUNT(*) > 1 THEN MIN(POP.PART_NAME) || ' 외 ' || (COUNT(*) - 1) || '건'
ELSE MIN(POP.PART_NAME)
END
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID::VARCHAR
) AS PART_NAME
,POM.SALES_MNG_USER_ID
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS SALES_MNG_USER_NAME
@@ -4227,9 +4242,9 @@ SELECT POM.OBJID
<!-- ,S1.TOTAL_DEFECT_QTY -->
<!-- ,(CASE WHEN 0 <![CDATA[ >= ]]> ((SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - (S1.TOTAL_DELIVERY_QTY - S1.TOTAL_DEFECT_QTY)) THEN '입고완료' -->
<!-- ,((SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - (S1.TOTAL_DELIVERY_QTY - S1.TOTAL_DEFECT_QTY )) AS NON_DELIVERY_QTY -->
,((SELECT SUM(REAL_ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - (S1.TOTAL_DELIVERY_QTY )) AS NON_DELIVERY_QTY
,((SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - (S1.TOTAL_DELIVERY_QTY )) AS NON_DELIVERY_QTY
<!-- ,S1.TOTAL_DEFECT_QTY -->
,(CASE WHEN 0 <![CDATA[ >= ]]> ((SELECT SUM(REAL_ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - (S1.TOTAL_DELIVERY_QTY <!-- - S1.TOTAL_DEFECT_QTY -->)) THEN '입고완료'
,(CASE WHEN 0 <![CDATA[ >= ]]> ((SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - (S1.TOTAL_DELIVERY_QTY <!-- - S1.TOTAL_DEFECT_QTY -->)) THEN '입고완료'
WHEN TO_CHAR(NOW(),'YYYY-MM-DD') <![CDATA[ > ]]> POM.DELIVERY_DATE THEN '지연'
ELSE '입고중'
END) AS DELIVERY_STATUS

View File

@@ -660,64 +660,139 @@
<!-- 수입검사 목록 조회 -->
<select id="getIncomingInspectionList" parameterType="map" resultType="map">
SELECT POM.OBJID
, SRM.PROPOSAL_NO
, SRM.OBJID AS PROPOSAL_OBJID
, POM.PURCHASE_ORDER_NO
, CM.PROJECT_NO
, POP.PART_NO
, POP.PART_NAME
, CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME
, CASE
WHEN COALESCE((SELECT SUM(REAL_ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART WHERE PURCHASE_ORDER_MASTER_OBJID = POM.OBJID::VARCHAR), 0)
<![CDATA[ <= ]]> COALESCE((SELECT SUM(RECEIPT_QTY::NUMERIC) FROM ARRIVAL_PLAN WHERE PARENT_OBJID = POM.OBJID), 0)
THEN '입고완료'
ELSE '입고중'
END AS DELIVERY_STATUS
, '' AS INSPECTOR_NAME
, '' AS INSPECTION_DATE
, '' AS INSPECTION_RESULT
FROM PURCHASE_ORDER_MASTER POM
LEFT JOIN PURCHASE_ORDER_PART POP ON POM.OBJID::VARCHAR = POP.PURCHASE_ORDER_MASTER_OBJID
LEFT JOIN SALES_REQUEST_MASTER SRM ON POM.SALES_REQUEST_MASTER_OBJID::VARCHAR = SRM.OBJID::VARCHAR
LEFT JOIN CONTRACT_MNG CM ON POM.CONTRACT_OBJID = CM.OBJID
<!-- 품의서 번호 -->
,POM.SALES_REQUEST_OBJID AS PROPOSAL_OBJID
,(SELECT REQUEST_MNG_NO FROM SALES_REQUEST_MASTER WHERE OBJID::VARCHAR = POM.SALES_REQUEST_OBJID) AS PROPOSAL_NO
,POM.PURCHASE_ORDER_NO
,CM.PROJECT_NO
<!-- 품번/품명 (첫번째 + 외 N건) -->
,(SELECT
CASE
WHEN COUNT(*) > 1 THEN MIN(POP.PART_NO) || ' 외 ' || (COUNT(*) - 1) || '건'
ELSE MIN(POP.PART_NO)
END
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID::VARCHAR
) AS PART_NO
,(SELECT
CASE
WHEN COUNT(*) > 1 THEN MIN(POP.PART_NAME) || ' 외 ' || (COUNT(*) - 1) || '건'
ELSE MIN(POP.PART_NAME)
END
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID::VARCHAR
) AS PART_NAME
<!-- 공급업체 (CLIENT_MNG) -->
,POM.PARTNER_OBJID
,(SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_NAME
<!-- 발주수량 -->
,(SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) AS TOTAL_PO_QTY
<!-- 입고수량/미입고수량 -->
,S1.TOTAL_DELIVERY_QTY
,((SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - COALESCE(S1.TOTAL_DELIVERY_QTY, 0)) AS NON_DELIVERY_QTY
<!-- 입고상태 -->
,(CASE WHEN 0 <![CDATA[ >= ]]> ((SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - COALESCE(S1.TOTAL_DELIVERY_QTY, 0)) THEN '입고완료'
WHEN TO_CHAR(NOW(),'YYYY-MM-DD') <![CDATA[ > ]]> POM.DELIVERY_DATE THEN '지연'
ELSE '입고중'
END) AS DELIVERY_STATUS
<!-- 검사 정보 (INCOMING_INSPECTION_DETAIL에서 조회) -->
,(SELECT U.USER_NAME FROM USER_INFO U WHERE U.USER_ID = IID.INSPECTOR_ID) AS INSPECTOR_NAME
,IID.INSPECTION_DATE
,(CASE WHEN IID.NG_COUNT > 0 THEN 'NG'
WHEN IID.TOTAL_COUNT > 0 AND IID.TOTAL_COUNT = IID.INSPECTED_COUNT THEN 'OK'
WHEN IID.INSPECTED_COUNT > 0 THEN '검사중'
ELSE '' END) AS INSPECTION_RESULT
FROM PURCHASE_ORDER_MASTER AS POM
LEFT OUTER JOIN (
SELECT PURCHASE_ORDER_MASTER_OBJID
,MAX(INSPECTOR_ID) AS INSPECTOR_ID
,MAX(INSPECTION_DATE) AS INSPECTION_DATE
,COUNT(*) AS TOTAL_COUNT
,COUNT(CASE WHEN INSPECTION_RESULT IS NOT NULL AND INSPECTION_RESULT != '' THEN 1 END) AS INSPECTED_COUNT
,COUNT(CASE WHEN INSPECTION_RESULT = 'NG' THEN 1 END) AS NG_COUNT
FROM INCOMING_INSPECTION_DETAIL
GROUP BY PURCHASE_ORDER_MASTER_OBJID
) AS IID ON POM.OBJID::VARCHAR = IID.PURCHASE_ORDER_MASTER_OBJID
LEFT OUTER JOIN (
SELECT POP.PURCHASE_ORDER_MASTER_OBJID
,SUM(POP.ORDER_QTY::NUMERIC) AS TOTAL_PO_QTY
,MAX(DH.RECEIPT_DATE) AS CUR_DELIVERY_DATE
,SUM(DH.RECEIPT_QTY::NUMERIC) AS TOTAL_DELIVERY_QTY
FROM PURCHASE_ORDER_PART POP
LEFT OUTER JOIN ARRIVAL_PLAN DH ON POP.OBJID = DH.ORDER_PART_OBJID
GROUP BY POP.PURCHASE_ORDER_MASTER_OBJID
) AS S1 ON POM.OBJID::VARCHAR = S1.PURCHASE_ORDER_MASTER_OBJID
LEFT OUTER JOIN PROJECT_MGMT AS CM ON POM.CONTRACT_MGMT_OBJID = CM.OBJID
WHERE 1=1
AND POM.STATUS = 'complete'
AND POM.MAIL_SEND_DATE IS NOT NULL
AND (MULTI_MASTER_YN = 'Y' OR NVL(MULTI_MASTER_YN, '') != 'Y' AND NVL(MULTI_YN, '') != 'Y')
<if test="search_proposal_no != null and search_proposal_no != ''">
AND SRM.PROPOSAL_NO = #{search_proposal_no}
AND (SELECT REQUEST_MNG_NO FROM SALES_REQUEST_MASTER WHERE OBJID::VARCHAR = POM.SALES_REQUEST_OBJID) LIKE '%' || #{search_proposal_no} || '%'
</if>
<if test="search_purchase_order_no != null and search_purchase_order_no != ''">
AND POM.PURCHASE_ORDER_NO = #{search_purchase_order_no}
AND TRIM(UPPER(POM.PURCHASE_ORDER_NO)) LIKE '%' || TRIM(UPPER(#{search_purchase_order_no})) || '%'
</if>
<if test="search_project_no != null and search_project_no != ''">
AND CM.PROJECT_NO = #{search_project_no}
AND CM.PROJECT_NO LIKE '%' || #{search_project_no} || '%'
</if>
<if test="search_part_no != null and search_part_no != ''">
AND UPPER(POP.PART_NO) LIKE UPPER('%' || #{search_part_no} || '%')
AND POM.OBJID::VARCHAR IN (
SELECT PURCHASE_ORDER_MASTER_OBJID FROM PURCHASE_ORDER_PART
WHERE TRIM(UPPER(PART_NO)) LIKE '%' || TRIM(UPPER(#{search_part_no})) || '%'
)
</if>
<if test="search_part_name != null and search_part_name != ''">
AND UPPER(POP.PART_NAME) LIKE UPPER('%' || #{search_part_name} || '%')
AND POM.OBJID::VARCHAR IN (
SELECT PURCHASE_ORDER_MASTER_OBJID FROM PURCHASE_ORDER_PART
WHERE TRIM(UPPER(PART_NAME)) LIKE '%' || TRIM(UPPER(#{search_part_name})) || '%'
)
</if>
<if test="search_partner != null and search_partner != ''">
AND POM.PARTNER_OBJID = #{search_partner}
</if>
<if test="search_partner_name != null and search_partner_name != ''">
AND (
UPPER((SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)) LIKE UPPER('%' || #{search_partner_name} || '%')
OR UPPER((SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID::VARCHAR = POM.PARTNER_OBJID)) LIKE UPPER('%' || #{search_partner_name} || '%')
)
AND UPPER((SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = POM.PARTNER_OBJID)) LIKE UPPER('%' || #{search_partner_name} || '%')
</if>
<if test="search_delivery_status != null and search_delivery_status != ''">
AND CASE
WHEN COALESCE((SELECT SUM(REAL_ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART WHERE PURCHASE_ORDER_MASTER_OBJID = POM.OBJID::VARCHAR), 0)
<![CDATA[ <= ]]> COALESCE((SELECT SUM(RECEIPT_QTY::NUMERIC) FROM ARRIVAL_PLAN WHERE PARENT_OBJID = POM.OBJID), 0)
THEN '입고완료'
ELSE '입고중'
END = #{search_delivery_status}
AND (CASE WHEN 0 <![CDATA[ >= ]]> ((SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - COALESCE(S1.TOTAL_DELIVERY_QTY, 0)) THEN '입고완료'
WHEN TO_CHAR(NOW(),'YYYY-MM-DD') <![CDATA[ > ]]> POM.DELIVERY_DATE THEN '지연'
ELSE '입고중'
END) = #{search_delivery_status}
</if>
ORDER BY POM.PURCHASE_ORDER_NO DESC
<!-- 프로젝트번호 (multi select) -->
<if test="project_nos != null and project_nos != ''">
AND CM.PROJECT_NO IN
<foreach item="item" collection="project_nos.split(',')" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<!-- 검사자 -->
<if test="inspector_id != null and inspector_id != ''">
AND IID.INSPECTOR_ID = #{inspector_id}
</if>
<!-- 검사일 (시작) -->
<if test="inspection_start_date != null and inspection_start_date != ''">
AND IID.INSPECTION_DATE <![CDATA[ >= ]]> #{inspection_start_date}
</if>
<!-- 검사일 (종료) -->
<if test="inspection_end_date != null and inspection_end_date != ''">
AND IID.INSPECTION_DATE <![CDATA[ <= ]]> #{inspection_end_date}
</if>
<!-- 검사결과 -->
<if test="search_inspection_result != null and search_inspection_result != ''">
AND (CASE WHEN IID.NG_COUNT > 0 THEN 'NG'
WHEN IID.TOTAL_COUNT > 0 AND IID.TOTAL_COUNT = IID.INSPECTED_COUNT THEN 'OK'
WHEN IID.INSPECTED_COUNT > 0 THEN '검사중'
ELSE '' END) = #{search_inspection_result}
</if>
ORDER BY POM.REGDATE DESC
</select>
<!-- 수입검사 상세 정보 조회 -->
@@ -731,13 +806,13 @@
, A.INSPECTION_MEMO
, A.WRITER
, TO_CHAR(A.REG_DATE, 'YYYY-MM-DD') AS REG_DATE
FROM PMS_QUALITY_INCOMING_INSPECTION A
FROM QUALITY_INCOMING_INSPECTION A
WHERE A.OBJID = #{OBJID}
</select>
<!-- 수입검사 등록 -->
<insert id="insertIncomingInspection" parameterType="map">
INSERT INTO PMS_QUALITY_INCOMING_INSPECTION (
INSERT INTO QUALITY_INCOMING_INSPECTION (
OBJID
, PURCHASE_ORDER_MASTER_OBJID
, INSPECTOR_ID
@@ -760,7 +835,7 @@
<!-- 수입검사 수정 -->
<update id="updateIncomingInspection" parameterType="map">
UPDATE PMS_QUALITY_INCOMING_INSPECTION
UPDATE QUALITY_INCOMING_INSPECTION
SET INSPECTOR_ID = #{INSPECTOR_ID}
, INSPECTION_DATE = TO_DATE(#{INSPECTION_DATE}, 'YYYY-MM-DD')
, INSPECTION_RESULT = #{INSPECTION_RESULT}
@@ -798,7 +873,7 @@
LEFT JOIN PARTNER_MNG PM ON POM.PARTNER_OBJID = PM.OBJID
WHERE 1=1
) A
LEFT JOIN PMS_QUALITY_INCOMING_INSPECTION B ON A.OBJID = B.PURCHASE_ORDER_MASTER_OBJID
LEFT JOIN QUALITY_INCOMING_INSPECTION B ON A.OBJID = B.PURCHASE_ORDER_MASTER_OBJID
ORDER BY A.PURCHASE_ORDER_NO DESC
</select>
@@ -1110,4 +1185,116 @@
WHERE ECR.OBJID = #{OBJID}
</select>
<!-- =====================================================
수입검사 상세 그리드 목록 (입고 결과 기준)
===================================================== -->
<!-- 수입검사 상세 그리드 목록 조회 (INVENTORY_MGMT_IN 기반) -->
<select id="getIncomingInspectionDetailList" parameterType="map" resultType="map">
SELECT IMI.OBJID
, IMI.PARENT_OBJID
, IM.PART_OBJID
, PM.PART_NO
, PM.PART_NAME
, COALESCE(IMI.RECEIPT_DATE, TO_CHAR(IMI.REGDATE, 'YYYY-MM-DD')) AS DELIVERY_DATE
, IMI.RECEIPT_QTY AS DELIVERY_QTY
, CASE WHEN EXISTS (
SELECT 1 FROM ATTACH_FILE_INFO DF
WHERE DF.TARGET_OBJID = POM.OBJID::VARCHAR
AND DF.DOC_TYPE = 'INSPECTION_FILE'
) THEN 'Y' ELSE 'N' END AS INSPECTION_FILE
, IID.OBJID AS INSPECTION_DETAIL_OBJID
, IID.INSPECTION_TYPE
, COALESCE(IID.INSPECTION_YN, '검사') AS INSPECTION_YN
, IID.DEFECT_TYPE
, (SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = IID.DEFECT_TYPE) AS DEFECT_TYPE_NAME
, IID.DEFECT_REASON
, (SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = IID.DEFECT_REASON) AS DEFECT_REASON_NAME
, IID.ACTION_STATUS
, IID.INSPECTION_QTY
, IID.DEFECT_QTY
, CASE WHEN NULLIF(IID.INSPECTION_QTY, '')::NUMERIC > 0
THEN ROUND((COALESCE(NULLIF(IID.DEFECT_QTY, '')::NUMERIC, 0) / NULLIF(IID.INSPECTION_QTY, '')::NUMERIC) * 100, 2)
ELSE NULL END AS DEFECT_RATE
, IID.INSPECTION_RESULT
, IID.ATTACH_FILE_OBJID
, (SELECT COUNT(*) FROM ATTACH_FILE_INFO AFI WHERE AFI.TARGET_OBJID = IMI.OBJID AND AFI.DOC_TYPE = 'INCOMING_INSPECTION' AND STATUS = 'Active') AS ATTACH_FILE_CNT
, IID.REMARK
, IMI.PURCHASE_ORDER_MASTER_OBJID
, POM.PURCHASE_ORDER_NO
FROM INVENTORY_MGMT_IN IMI
INNER JOIN INVENTORY_MGMT IM ON IM.OBJID = IMI.PARENT_OBJID
INNER JOIN PART_MNG PM ON PM.OBJID::VARCHAR = IM.PART_OBJID
LEFT JOIN PURCHASE_ORDER_MASTER POM ON POM.OBJID = IMI.PURCHASE_ORDER_MASTER_OBJID
LEFT JOIN INCOMING_INSPECTION_DETAIL IID ON IID.INVENTORY_IN_OBJID = IMI.OBJID
WHERE IMI.PURCHASE_ORDER_MASTER_OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
ORDER BY IMI.REGDATE, PM.PART_NO
</select>
<!-- 수입검사 상세 정보 조회 (발주서 기준 첫번째 검사 정보) -->
<select id="getIncomingInspectionDetailInfo" parameterType="map" resultType="map">
SELECT IID.INSPECTION_DATE
, IID.INSPECTOR_ID
FROM INCOMING_INSPECTION_DETAIL IID
WHERE IID.PURCHASE_ORDER_MASTER_OBJID = #{OBJID}
ORDER BY IID.REG_DATE DESC
LIMIT 1
</select>
<!-- 수입검사 상세 저장 (UPSERT) -->
<update id="saveIncomingInspectionDetail" parameterType="map">
INSERT INTO INCOMING_INSPECTION_DETAIL (
OBJID
, INVENTORY_IN_OBJID
, PURCHASE_ORDER_MASTER_OBJID
, INSPECTION_DATE
, INSPECTOR_ID
, INSPECTION_TYPE
, INSPECTION_YN
, DEFECT_TYPE
, DEFECT_REASON
, ACTION_STATUS
, INSPECTION_QTY
, DEFECT_QTY
, INSPECTION_RESULT
, ATTACH_FILE_OBJID
, REMARK
, WRITER
, REG_DATE
) VALUES (
#{NEW_OBJID}
, #{OBJID}
, #{PURCHASE_ORDER_MASTER_OBJID}
, #{INSPECTION_DATE}
, #{INSPECTOR_ID}
, #{INSPECTION_TYPE}
, #{INSPECTION_YN}
, #{DEFECT_TYPE}
, #{DEFECT_REASON}
, #{ACTION_STATUS}
, #{INSPECTION_QTY}
, #{DEFECT_QTY}
, #{INSPECTION_RESULT}
, #{ATTACH_FILE_OBJID}
, #{REMARK}
, #{WRITER}
, NOW()
)
ON CONFLICT (INVENTORY_IN_OBJID) DO UPDATE SET
INSPECTION_DATE = #{INSPECTION_DATE}
, INSPECTOR_ID = #{INSPECTOR_ID}
, INSPECTION_TYPE = #{INSPECTION_TYPE}
, INSPECTION_YN = #{INSPECTION_YN}
, DEFECT_TYPE = #{DEFECT_TYPE}
, DEFECT_REASON = #{DEFECT_REASON}
, ACTION_STATUS = #{ACTION_STATUS}
, INSPECTION_QTY = #{INSPECTION_QTY}
, DEFECT_QTY = #{DEFECT_QTY}
, INSPECTION_RESULT = #{INSPECTION_RESULT}
, ATTACH_FILE_OBJID = #{ATTACH_FILE_OBJID}
, REMARK = #{REMARK}
, MODIFIER = #{WRITER}
, MOD_DATE = NOW()
</update>
</mapper>

View File

@@ -3378,7 +3378,6 @@ ORDER BY V.PATH2
VENDOR = #{VENDOR_PM},
UNIT_PRICE = COALESCE(NULLIF(TRIM(#{UNIT_PRICE}::TEXT), '')::NUMERIC, 0),
TOTAL_PRICE = COALESCE(NULLIF(TRIM(#{TOTAL_PRICE}::TEXT), '')::NUMERIC, 0),
PROPOSAL_DATE = COALESCE(PROPOSAL_DATE, NOW()), -- 저장 시 품의서작성일 자동 설정 (기존 값 없으면 오늘 날짜)
EDITER = #{EDITER},
EDIT_DATE = NOW()
WHERE OBJID::VARCHAR = #{OBJID}
@@ -3393,7 +3392,6 @@ ORDER BY V.PATH2
VENDOR_PM = #{VENDOR_PM},
UNIT_PRICE = COALESCE(NULLIF(TRIM(#{UNIT_PRICE}::TEXT), '')::NUMERIC, 0),
TOTAL_PRICE = COALESCE(NULLIF(TRIM(#{TOTAL_PRICE}::TEXT), '')::NUMERIC, 0),
PROPOSAL_DATE = COALESCE(PROPOSAL_DATE, NOW()), -- 저장 시 품의서작성일 자동 설정 (기존 값 없으면 오늘 날짜)
WRITER = #{EDITER}
WHERE OBJID::VARCHAR = #{OBJID}
</update>
@@ -3420,12 +3418,12 @@ ORDER BY V.PATH2
WHERE DOC_TYPE = 'PURCHASE_REQUEST' OR DOC_TYPE IS NULL
</select>
<!-- 다음 품의서 번호 생성 (RPS + YY + - + MMDD + - + 2자리 순번) 예: RPS25-0926-01 -->
<!-- 다음 품의서 번호 생성 (P + YYYYMMDD + - + 3자리 순번) - 품의서용 -->
<select id="getNextProposalNo" resultType="string">
SELECT 'RPS'||TO_CHAR(NOW(),'YY')||'-'||TO_CHAR(NOW(),'MMDD')||'-'||LPAD((COALESCE(MAX(SUBSTR(REQUEST_MNG_NO,12,2)),'0')::INTEGER+1)::TEXT,2,'0')
SELECT 'P'||TO_CHAR(NOW(),'YYYYMMDD')||'-'||LPAD((COALESCE(MAX(SUBSTR(REQUEST_MNG_NO,11,3))::INTEGER, 0)+1)::TEXT,3,'0')
FROM SALES_REQUEST_MASTER
WHERE DOC_TYPE = 'PROPOSAL'
AND REQUEST_MNG_NO LIKE 'RPS'||TO_CHAR(NOW(),'YY')||'-'||TO_CHAR(NOW(),'MMDD')||'%'
AND REQUEST_MNG_NO LIKE 'P'||TO_CHAR(NOW(),'YYYYMMDD')||'%'
</select>
<!-- M-BOM에서 구매리스트 생성 - SALES_REQUEST_MASTER만 생성 (SALES_REQUEST_PART는 생성 안 함) -->
@@ -3832,7 +3830,7 @@ ORDER BY V.PATH2
) A ON SRM.OBJID::VARCHAR = A.TARGET_OBJID::VARCHAR
WHERE 1=1
AND SRM.STATUS IN ('create', 'approvalRequest', 'approvalComplete', 'reject')
-- AND SRM.DOC_TYPE = 'PROPOSAL' -- DOC_TYPE 컬럼 없음, 주석처리
AND SRM.DOC_TYPE = 'PROPOSAL'
<if test="SEARCH_PROPOSAL_NO != null and !''.equals(SEARCH_PROPOSAL_NO)">
AND SRM.REQUEST_MNG_NO LIKE '%${SEARCH_PROPOSAL_NO}%'
</if>
@@ -3970,7 +3968,7 @@ ORDER BY V.PATH2
SRP.UNIT_PRICE,
SRP.TOTAL_PRICE,
SRP.VENDOR_PM,
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID::VARCHAR = SRP.VENDOR_PM) AS VENDOR_NAME,
(SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = SRP.VENDOR_PM) AS VENDOR_NAME,
SRP.REMARK,
SRP.DELIVERY_REQUEST_DATE,
SRP.DELIVERY_REQUEST_DATE AS DELIVERY_REQUEST_DATE_TITLE

View File

@@ -340,6 +340,7 @@ public class InventoryMngService extends BaseService{
historyMap.put("LOCATION" , CommonUtils.checkNull(paramMap.get("location")));
historyMap.put("SUB_LOCATION" , CommonUtils.checkNull(paramMap.get("sub_location")));
historyMap.put("RECEIPT_QTY" , CommonUtils.checkNull(paramMap.get("qty")));
historyMap.put("RECEIPT_DATE" , CommonUtils.checkNull(paramMap.get("receipt_date")));
historyMap.put("WRITER" , personId);
historyMap.put("CONTRACT_MGMT_OBJID",CommonUtils.checkNull(paramMap.get("project_no")));

View File

@@ -619,6 +619,7 @@ public class PurchaseOrderService {
historyMap.put("SUB_LOCATION" , CommonUtils.checkNull(request.getParameterValues("SUB_LOCATION")[i]));
historyMap.put("WRITER" , paramMap.get("WRITER"));
historyMap.put("RECEIPT_QTY", insertQty);
historyMap.put("RECEIPT_DATE", CommonUtils.checkNull(request.getParameterValues("RECEIPT_DATE")[i]));
historyMap.put("CONTRACT_MGMT_OBJID", CONTRACT_MGMT_OBJID);
historyMap.put("PURCHASE_ORDER_MASTER_OBJID", ORDER_OBJID);
historyMap.put("PURCHASE_ORDER_SUB_OBJID", ORDER_OBJID);
@@ -672,6 +673,7 @@ public class PurchaseOrderService {
historyMap.put("SUB_LOCATION" , CommonUtils.checkNull(request.getParameterValues("SUB_LOCATION")[i]));
historyMap.put("WRITER" , paramMap.get("WRITER"));
historyMap.put("RECEIPT_QTY", insertQty);
historyMap.put("RECEIPT_DATE", CommonUtils.checkNull(request.getParameterValues("RECEIPT_DATE")[i]));
historyMap.put("CONTRACT_MGMT_OBJID", contract_mgmt_objid);
historyMap.put("PURCHASE_ORDER_MASTER_OBJID", CommonUtils.checkNull(paramMap.get("ORDER_OBJID")));
historyMap.put("PURCHASE_ORDER_SUB_OBJID", purchase_order_sub_objid);
@@ -699,6 +701,7 @@ public class PurchaseOrderService {
historyMap.put("WRITER" , paramMap.get("WRITER"));
// Determine the quantity to insert based on remainingReceiptQty and ORDER_QTY
historyMap.put("RECEIPT_QTY", insertQty);
historyMap.put("RECEIPT_DATE", CommonUtils.checkNull(request.getParameterValues("RECEIPT_DATE")[i]));
historyMap.put("CONTRACT_MGMT_OBJID", CONTRACT_MGMT_OBJID);
historyMap.put("PURCHASE_ORDER_MASTER_OBJID", ORDER_OBJID);
historyMap.put("PURCHASE_ORDER_SUB_OBJID", ORDER_OBJID);
@@ -745,6 +748,7 @@ public class PurchaseOrderService {
historyMap.put("WRITER" , paramMap.get("WRITER"));
// Determine the quantity to insert based on remainingReceiptQty and ORDER_QTY
historyMap.put("RECEIPT_QTY", insertQty);
historyMap.put("RECEIPT_DATE", CommonUtils.checkNull(request.getParameterValues("RECEIPT_DATE")[i]));
historyMap.put("CONTRACT_MGMT_OBJID", contract_mgmt_objid);
historyMap.put("PURCHASE_ORDER_MASTER_OBJID", CommonUtils.checkNull(paramMap.get("ORDER_OBJID")));
historyMap.put("PURCHASE_ORDER_SUB_OBJID", purchase_order_sub_objid);
@@ -763,6 +767,7 @@ public class PurchaseOrderService {
historyMap.put("LOCATION" , CommonUtils.checkNull(request.getParameterValues("LOCATION")[i]));
historyMap.put("SUB_LOCATION" , CommonUtils.checkNull(request.getParameterValues("SUB_LOCATION")[i]));
historyMap.put("RECEIPT_QTY" , CommonUtils.checkNull(request.getParameterValues("RECEIPT_QTY")[i],"0"));
historyMap.put("RECEIPT_DATE", CommonUtils.checkNull(request.getParameterValues("RECEIPT_DATE")[i]));
historyMap.put("WRITER" , paramMap.get("WRITER"));
historyMap.put("CONTRACT_MGMT_OBJID",CommonUtils.checkNull(paramMap.get("CONTRACT_MGMT_OBJID")));
historyMap.put("PURCHASE_ORDER_MASTER_OBJID", CommonUtils.checkNull(paramMap.get("ORDER_OBJID")));
@@ -896,6 +901,7 @@ public class PurchaseOrderService {
historyMap.put("SUB_LOCATION" , CommonUtils.checkNull(request.getParameterValues("SUB_LOCATION")[i]));
historyMap.put("WRITER" , paramMap.get("WRITER"));
historyMap.put("RECEIPT_QTY", insertQty);
historyMap.put("RECEIPT_DATE", CommonUtils.checkNull(request.getParameterValues("RECEIPT_DATE")[i]));
historyMap.put("CONTRACT_MGMT_OBJID", CONTRACT_MGMT_OBJID);
historyMap.put("PURCHASE_ORDER_MASTER_OBJID", ORDER_OBJID);
historyMap.put("PURCHASE_ORDER_SUB_OBJID", ORDER_OBJID);
@@ -950,6 +956,7 @@ public class PurchaseOrderService {
historyMap.put("SUB_LOCATION" , CommonUtils.checkNull(request.getParameterValues("SUB_LOCATION")[i]));
historyMap.put("WRITER" , paramMap.get("WRITER"));
historyMap.put("RECEIPT_QTY", insertQty);
historyMap.put("RECEIPT_DATE", CommonUtils.checkNull(request.getParameterValues("RECEIPT_DATE")[i]));
historyMap.put("CONTRACT_MGMT_OBJID", contract_mgmt_objid);
historyMap.put("PURCHASE_ORDER_MASTER_OBJID", CommonUtils.checkNull(paramMap.get("ORDER_OBJID")));
historyMap.put("PURCHASE_ORDER_SUB_OBJID", purchase_order_sub_objid);
@@ -977,6 +984,7 @@ public class PurchaseOrderService {
historyMap.put("WRITER" , paramMap.get("WRITER"));
// Determine the quantity to insert based on remainingReceiptQty and ORDER_QTY
historyMap.put("RECEIPT_QTY", insertQty);
historyMap.put("RECEIPT_DATE", CommonUtils.checkNull(request.getParameterValues("RECEIPT_DATE")[i]));
historyMap.put("CONTRACT_MGMT_OBJID", CONTRACT_MGMT_OBJID);
historyMap.put("PURCHASE_ORDER_MASTER_OBJID", ORDER_OBJID);
historyMap.put("PURCHASE_ORDER_SUB_OBJID", ORDER_OBJID);
@@ -1024,6 +1032,7 @@ public class PurchaseOrderService {
historyMap.put("WRITER" , paramMap.get("WRITER"));
// Determine the quantity to insert based on remainingReceiptQty and ORDER_QTY
historyMap.put("RECEIPT_QTY", insertQty);
historyMap.put("RECEIPT_DATE", CommonUtils.checkNull(request.getParameterValues("RECEIPT_DATE")[i]));
historyMap.put("CONTRACT_MGMT_OBJID", contract_mgmt_objid);
historyMap.put("PURCHASE_ORDER_MASTER_OBJID", CommonUtils.checkNull(paramMap.get("ORDER_OBJID")));
historyMap.put("PURCHASE_ORDER_SUB_OBJID", purchase_order_sub_objid);
@@ -1042,6 +1051,7 @@ public class PurchaseOrderService {
historyMap.put("LOCATION" , CommonUtils.checkNull(request.getParameterValues("LOCATION")[i]));
historyMap.put("SUB_LOCATION" , CommonUtils.checkNull(request.getParameterValues("SUB_LOCATION")[i]));
historyMap.put("RECEIPT_QTY" , CommonUtils.checkNull(request.getParameterValues("RECEIPT_QTY")[i],"0"));
historyMap.put("RECEIPT_DATE", CommonUtils.checkNull(request.getParameterValues("RECEIPT_DATE")[i]));
historyMap.put("WRITER" , paramMap.get("WRITER"));
historyMap.put("CONTRACT_MGMT_OBJID",CommonUtils.checkNull(paramMap.get("CONTRACT_MGMT_OBJID")));
historyMap.put("PURCHASE_ORDER_MASTER_OBJID", CommonUtils.checkNull(paramMap.get("ORDER_OBJID")));
@@ -1196,6 +1206,7 @@ public class PurchaseOrderService {
historyMap.put("LOCATION" , CommonUtils.checkNull(request.getParameterValues("LOCATION")[i]));
historyMap.put("SUB_LOCATION" , CommonUtils.checkNull(request.getParameterValues("SUB_LOCATION")[i]));
historyMap.put("RECEIPT_QTY" , CommonUtils.checkNull(request.getParameterValues("RECEIPT_QTY")[i],"0"));
historyMap.put("RECEIPT_DATE", CommonUtils.checkNull(request.getParameterValues("RECEIPT_DATE")[i]));
sqlSession.insert("inventoryMng.insertInventoryIn",historyMap);
}

View File

@@ -645,7 +645,24 @@ public class QualityService extends BaseService{
}
/**
* 수입검사 저장
* 수입검사 상세 정보 조회 (발주서 기준 첫번째 검사 정보)
*/
public Map getIncomingInspectionDetailInfo(Map paramMap){
Map resultMap = new HashMap();
SqlSession sqlSession = null;
try{
sqlSession = SqlMapConfig.getInstance().getSqlSession();
resultMap = sqlSession.selectOne("quality.getIncomingInspectionDetailInfo", paramMap);
}catch(Exception e){
e.printStackTrace();
}finally{
sqlSession.close();
}
return resultMap;
}
/**
* 수입검사 저장 (그리드 데이터 일괄 저장)
*/
public Map saveIncomingInspection(HttpServletRequest request, Map paramMap){
Map resultMap = new HashMap();
@@ -655,15 +672,38 @@ public class QualityService extends BaseService{
PersonBean person = (PersonBean)request.getSession().getAttribute(Constants.PERSON_BEAN);
String writer = CommonUtils.checkNull(person.getUserId());
paramMap.put("writer", writer);
String objId = CommonUtils.checkNull(paramMap.get("OBJID"));
if("".equals(objId)){
objId = CommonUtils.createObjId();
paramMap.put("OBJID", objId);
sqlSession.insert("quality.insertIncomingInspection", paramMap);
} else {
sqlSession.update("quality.updateIncomingInspection", paramMap);
String inspectionDate = CommonUtils.checkNull(paramMap.get("INSPECTION_DATE"));
String inspectorId = CommonUtils.checkNull(paramMap.get("INSPECTOR_ID"));
String purchaseOrderMasterObjId = CommonUtils.checkNull(paramMap.get("PURCHASE_ORDER_MASTER_OBJID"));
String dataListJson = CommonUtils.checkNull(paramMap.get("dataListJson"));
// JSON 파싱
com.google.gson.Gson gson = new com.google.gson.Gson();
java.lang.reflect.Type listType = new com.google.gson.reflect.TypeToken<List<Map<String, String>>>(){}.getType();
List<Map<String, String>> dataList = gson.fromJson(dataListJson, listType);
// 각 행별로 저장
for(Map<String, String> data : dataList){
Map sqlParamMap = new HashMap();
sqlParamMap.put("NEW_OBJID", CommonUtils.createObjId()); // 신규 OBJID 생성
sqlParamMap.put("OBJID", data.get("OBJID")); // INVENTORY_MGMT_IN.OBJID
sqlParamMap.put("PURCHASE_ORDER_MASTER_OBJID", purchaseOrderMasterObjId);
sqlParamMap.put("INSPECTION_DATE", inspectionDate);
sqlParamMap.put("INSPECTOR_ID", inspectorId);
sqlParamMap.put("INSPECTION_TYPE", data.get("INSPECTION_TYPE"));
sqlParamMap.put("INSPECTION_YN", data.get("INSPECTION_YN"));
sqlParamMap.put("DEFECT_TYPE", data.get("DEFECT_TYPE"));
sqlParamMap.put("DEFECT_REASON", data.get("DEFECT_REASON"));
sqlParamMap.put("ACTION_STATUS", data.get("ACTION_STATUS"));
sqlParamMap.put("INSPECTION_QTY", data.get("INSPECTION_QTY"));
sqlParamMap.put("DEFECT_QTY", data.get("DEFECT_QTY"));
sqlParamMap.put("INSPECTION_RESULT", data.get("INSPECTION_RESULT"));
sqlParamMap.put("ATTACH_FILE_OBJID", data.get("ATTACH_FILE_OBJID"));
sqlParamMap.put("REMARK", data.get("REMARK"));
sqlParamMap.put("WRITER", writer);
sqlSession.update("quality.saveIncomingInspectionDetail", sqlParamMap);
}
sqlSession.commit();