diff --git a/WebContent/WEB-INF/view/quality/incomingInspectionList.jsp b/WebContent/WEB-INF/view/quality/incomingInspectionList.jsp
index 3510ef4..3bd43ce 100644
--- a/WebContent/WEB-INF/view/quality/incomingInspectionList.jsp
+++ b/WebContent/WEB-INF/view/quality/incomingInspectionList.jsp
@@ -8,7 +8,7 @@
<%
String menuObjId = request.getParameter("menuObjId");
-String menuName = CommonUtils.getMenuName(menuObjId, "수입검사 관리");
+String menuName = CommonUtils.getMenuName(menuObjId, "수입검사 요청");
%>
@@ -71,9 +71,9 @@ $(document).ready(function(){
fn_search();
});
- // 수입검사 등록
- $("#btnRegist").click(function(){
- fn_registPopUp();
+ // 수입검사 요청
+ $("#btnRequest").click(function(){
+ fn_requestPopUp();
});
// 엑셀 다운로드
@@ -84,42 +84,32 @@ $(document).ready(function(){
fn_search();
});
-// 컬럼: 품의서 No, 발주서 No, 프로젝트번호, 품번, 품명, 공급업체, 입고결과, 검사자, 검사일, 검사결과
+// 컬럼: 품의서 No, 발주서 No, 프로젝트번호, 품번, 품명, 공급업체, 입고결과, 요청일, 요청자
var columns = [
- {headerHozAlign:'center', hozAlign:'center', minWidth:120, widthGrow:1, title:'품의서 No', field:'PROPOSAL_NO',
- formatter:fnc_createGridAnchorTag,
- cellClick:function(e, cell){
- var objId = fnc_checkNull(cell.getData().PROPOSAL_OBJID);
- if(objId != '') fn_openProposalPopUp(objId);
- }
+ {headerHozAlign:'center', hozAlign:'center', minWidth:120, widthGrow:1, title:'품의서 No', field:'PROPOSAL_NO'
+ // formatter:fnc_createGridAnchorTag,
+ // cellClick:function(e, cell){
+ // var objId = fnc_checkNull(cell.getData().PROPOSAL_OBJID);
+ // if(objId != '') fn_openProposalPopUp(objId);
+ // }
},
- {headerHozAlign:'center', hozAlign:'center', minWidth:120, widthGrow:1, title:'발주서 No', field:'PURCHASE_ORDER_NO',
- formatter:fnc_createGridAnchorTag,
- cellClick:function(e, cell){
- var objId = fnc_checkNull(cell.getData().OBJID);
- fn_formPopUp(objId);
- }
+ {headerHozAlign:'center', hozAlign:'center', minWidth:120, widthGrow:1, title:'발주서 No', field:'PURCHASE_ORDER_NO'
+ // formatter:fnc_createGridAnchorTag,
+ // cellClick:function(e, cell){
+ // var objId = fnc_checkNull(cell.getData().OBJID);
+ // fn_formPopUp(objId);
+ // }
},
{headerHozAlign:'center', hozAlign:'center', minWidth:130, widthGrow:1, title:'프로젝트번호', field:'PROJECT_NO'},
+ {headerHozAlign:'center', hozAlign:'center', minWidth:110, widthGrow:1, title:'제품구분', field:'PRODUCT_NAME'},
{headerHozAlign:'center', hozAlign:'left', minWidth:120, widthGrow:2, title:'품번', field:'PART_NO'},
{headerHozAlign:'center', hozAlign:'left', minWidth:150, widthGrow:3, title:'품명', field:'PART_NAME'},
{headerHozAlign:'center', hozAlign:'left', minWidth:130, widthGrow:2, title:'공급업체', field:'PARTNER_NAME'},
{headerHozAlign:'center', hozAlign:'center', minWidth:80, widthGrow:1, title:'입고결과', field:'DELIVERY_STATUS'},
- {headerHozAlign:'center', hozAlign:'center', minWidth:80, widthGrow:1, title:'검사자', field:'INSPECTOR_NAME'},
- {headerHozAlign:'center', hozAlign:'center', minWidth:100, widthGrow:1, title:'검사일', field:'INSPECTION_DATE'},
- {headerHozAlign:'center', hozAlign:'center', minWidth:80, widthGrow:1, title:'검사결과', field:'INSPECTION_RESULT',
- formatter: function(cell, formatterParams, onRendered){
- var val = fnc_checkNull(cell.getValue());
- if(val === 'NG') return 'NG';
- if(val === 'OK') return 'OK';
- return val;
- },
- cellClick:function(e, cell){
- var objId = fnc_checkNull(cell.getData().OBJID);
- var result = fnc_checkNull(cell.getData().INSPECTION_RESULT);
- if(result != '') fn_resultPopUp(objId);
- }
- }
+ {headerHozAlign:'center', hozAlign:'center', minWidth:100, widthGrow:1, title:'요청일', field:'REQUEST_DATE'},
+ {headerHozAlign:'center', hozAlign:'center', minWidth:80, widthGrow:1, title:'요청자', field:'REQUEST_USER_NAME'},
+ {headerHozAlign:'center', hozAlign:'center', minWidth:100, widthGrow:1, title:'검사여부', field:'INSPECTION_YN'},
+ {headerHozAlign:'center', hozAlign:'center', minWidth:80, widthGrow:1, title:'요청현황', field:'REQUEST_STATUS'}
];
// 조회
@@ -136,8 +126,8 @@ function fn_search(){
_tabulGrid = fnc_tabul_search(_tabul_layout_fitColumns, _tabulGrid, "/quality/incomingInspectionGridList.do", columns, true);
}
-// 수입검사 등록 팝업
-function fn_registPopUp(){
+// 수입검사 요청 팝업
+function fn_requestPopUp(){
var selected = _tabulGrid.getSelectedData();
if(selected.length == 0){
Swal.fire("선택된 데이터가 없습니다.");
@@ -148,11 +138,11 @@ function fn_registPopUp(){
return;
}
- var popup_width = 1700;
- var popup_height = 700;
+ var popup_width = 1200;
+ var popup_height = 600;
var hiddenForm = document.hiddenForm;
- var target = "incomingInspectionPopUp";
- var url = "/quality/incomingInspectionFormPopUp.do";
+ var target = "incomingInspectionRequestPopUp";
+ var url = "/quality/incomingInspectionRequestPopUp.do";
fn_centerPopup(popup_width, popup_height, "", target);
@@ -163,23 +153,6 @@ function fn_registPopUp(){
hiddenForm.submit();
}
-// 검사결과 확인/수정 팝업
-function fn_resultPopUp(objId){
- var popup_width = 1700;
- var popup_height = 700;
- var hiddenForm = document.hiddenForm;
- var target = "inspectionResultPopUp";
- var url = "/quality/incomingInspectionFormPopUp.do";
-
- fn_centerPopup(popup_width, popup_height, "", target);
-
- hiddenForm.action = url;
- hiddenForm.OBJID.value = objId;
- hiddenForm.actionType.value = 'view';
- hiddenForm.target = target;
- hiddenForm.submit();
-}
-
// 품의서 팝업
function fn_openProposalPopUp(objId){
var popup_width = 1200;
@@ -229,7 +202,7 @@ function fn_excelDownload(){
<%=menuName%>
-
+
@@ -272,22 +245,13 @@ function fn_excelDownload(){
- |
- |
+ |
+ |
- |
+ |
- ~
-
- |
-
- |
-
-
+ ~
+
|
diff --git a/WebContent/WEB-INF/view/quality/incomingInspectionProgressList.jsp b/WebContent/WEB-INF/view/quality/incomingInspectionProgressList.jsp
new file mode 100644
index 0000000..bb29d8f
--- /dev/null
+++ b/WebContent/WEB-INF/view/quality/incomingInspectionProgressList.jsp
@@ -0,0 +1,340 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ page import="com.pms.common.utils.*"%>
+<%@ page import="java.util.*" %>
+<%@include file= "/init.jsp" %>
+
+
+<%
+String menuObjId = request.getParameter("menuObjId");
+String menuName = CommonUtils.getMenuName(menuObjId, "수입검사 진행");
+%>
+
+
+
+
+ <%=Constants.SYSTEM_NAME%>
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/WebContent/WEB-INF/view/quality/incomingInspectionProgressPopUp.jsp b/WebContent/WEB-INF/view/quality/incomingInspectionProgressPopUp.jsp
new file mode 100644
index 0000000..156d044
--- /dev/null
+++ b/WebContent/WEB-INF/view/quality/incomingInspectionProgressPopUp.jsp
@@ -0,0 +1,816 @@
+<%@ 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();
+%>
+
+
+
+
+
+
+ <%=Constants.SYSTEM_NAME%>
+
+
+
+
+
+
+
+
+
+
diff --git a/WebContent/WEB-INF/view/quality/incomingInspectionRequestPopUp.jsp b/WebContent/WEB-INF/view/quality/incomingInspectionRequestPopUp.jsp
new file mode 100644
index 0000000..c780acd
--- /dev/null
+++ b/WebContent/WEB-INF/view/quality/incomingInspectionRequestPopUp.jsp
@@ -0,0 +1,265 @@
+<%@ 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();
+String connectorName = person.getUserName();
+%>
+
+
+
+
+
+
+ <%=Constants.SYSTEM_NAME%>
+
+
+
+
+
+
+
+
+
+
diff --git a/src/com/pms/controller/QualityController.java b/src/com/pms/controller/QualityController.java
index 9035e09..b4e33dd 100644
--- a/src/com/pms/controller/QualityController.java
+++ b/src/com/pms/controller/QualityController.java
@@ -259,7 +259,7 @@ public class QualityController {
// =====================================================
/**
- * 수입검사 관리 목록 화면
+ * 수입검사 요청 목록 화면
* @param request
* @param paramMap
* @return
@@ -269,6 +269,36 @@ public class QualityController {
ArrayList list = new ArrayList();
Map code_map = new HashMap();
+ 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("request_user_id", commonService.bizMakeOptionList("", (String)paramMap.get("request_user_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";
+ }
+
+ /**
+ * 수입검사 진행 목록 화면
+ * @param request
+ * @param paramMap
+ * @return
+ */
+ @RequestMapping("/quality/incomingInspectionProgressList.do")
+ public String incomingInspectionProgressList(HttpServletRequest request, @RequestParam Map paramMap){
+ ArrayList list = new ArrayList();
+ Map code_map = new HashMap();
+
try {
// 프로젝트번호
code_map.put("project_no", commonService.bizMakeOptionList("", (String)paramMap.get("project_no"), "common.getProjectNameList"));
@@ -285,7 +315,7 @@ public class QualityController {
request.setAttribute("code_map", code_map);
request.setAttribute("LIST", JsonUtil.ListToJson(list));
- return "/quality/incomingInspectionList";
+ return "/quality/incomingInspectionProgressList";
}
/**
@@ -302,7 +332,79 @@ public class QualityController {
}
/**
- * 수입검사 등록 팝업
+ * 수입검사 요청 팝업
+ * @param request
+ * @param paramMap
+ * @return
+ */
+ @RequestMapping("/quality/incomingInspectionRequestPopUp.do")
+ public String incomingInspectionRequestPopUp(HttpServletRequest request, @RequestParam Map paramMap){
+ 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 savedRequestUserId = "";
+ if(info != null && info.get("request_user_id") != null) {
+ savedRequestUserId = (String) info.get("request_user_id");
+ request.setAttribute("info", CommonUtils.toUpperCaseMapKey(info));
+ } else {
+ // 저장된 값 없으면 로그인 사용자로 기본 설정
+ savedRequestUserId = loginUserId;
+ }
+
+ // 요청자 목록 (기존 값 또는 로그인 사용자 selected)
+ code_map.put("request_user_id", commonService.bizMakeOptionList("", savedRequestUserId, "common.getUserselect"));
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ request.setAttribute("code_map", code_map);
+ return "/quality/incomingInspectionRequestPopUp";
+ }
+
+ /**
+ * 수입검사 진행 팝업
+ * @param request
+ * @param paramMap
+ * @return
+ */
+ @RequestMapping("/quality/incomingInspectionProgressPopUp.do")
+ public String incomingInspectionProgressPopUp(HttpServletRequest request, @RequestParam Map paramMap){
+ 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", CommonUtils.toUpperCaseMapKey(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/incomingInspectionProgressPopUp";
+ }
+
+ /**
+ * 수입검사 등록 팝업 (기존 - 호환용)
* @param request
* @param paramMap
* @return
@@ -321,7 +423,7 @@ public class QualityController {
String savedInspectorId = "";
if(info != null && info.get("inspector_id") != null) {
savedInspectorId = (String) info.get("inspector_id");
- request.setAttribute("info", info);
+ request.setAttribute("info", CommonUtils.toUpperCaseMapKey(info));
} else {
// 저장된 값 없으면 로그인 사용자로 기본 설정
savedInspectorId = loginUserId;
@@ -350,6 +452,32 @@ public class QualityController {
return paramMap;
}
+ /**
+ * 수입검사 진행 상세 그리드 목록 조회 (검사여부='검사'인 항목만)
+ * @param request
+ * @param paramMap
+ * @return
+ */
+ @ResponseBody
+ @RequestMapping("/quality/incomingInspectionProgressDetailGridList.do")
+ public Map incomingInspectionProgressDetailGridList(HttpServletRequest request, @RequestParam Map paramMap){
+ commonService.selectListPagingNew("quality.getIncomingInspectionProgressDetailList", request, paramMap);
+ return paramMap;
+ }
+
+ /**
+ * 수입검사 요청 저장
+ * @param request
+ * @param paramMap
+ * @return
+ */
+ @RequestMapping("/quality/saveIncomingInspectionRequest.do")
+ public String saveIncomingInspectionRequest(HttpServletRequest request, @RequestParam Map paramMap){
+ Map map = service.saveIncomingInspectionRequest(request, paramMap);
+ request.setAttribute("RESULT", CommonUtils.getJsonMap(map));
+ return "/ajax/ajaxResult";
+ }
+
/**
* 수입검사 저장
* @param request
@@ -687,4 +815,36 @@ public class QualityController {
return service.saveEcrResult(request, paramMap);
}
+ // =====================================================
+ // 수입검사 불량상세 관련
+ // =====================================================
+
+ /**
+ * 불량상세 목록 조회
+ */
+ @ResponseBody
+ @RequestMapping("/quality/getIncomingInspectionDefectList.do")
+ public Map getIncomingInspectionDefectList(HttpServletRequest request, @RequestParam Map paramMap){
+ Map result = new HashMap();
+ try {
+ List list = service.getIncomingInspectionDefectList(paramMap);
+ result.put("list", list);
+ result.put("result", true);
+ } catch(Exception e) {
+ e.printStackTrace();
+ result.put("result", false);
+ result.put("msg", e.getMessage());
+ }
+ return result;
+ }
+
+ /**
+ * 수입검사 진행 저장 (입고품목 + 불량상세)
+ */
+ @ResponseBody
+ @RequestMapping("/quality/saveIncomingInspectionProgress.do")
+ public Map saveIncomingInspectionProgress(HttpServletRequest request, @RequestParam Map paramMap){
+ return service.saveIncomingInspectionProgress(request, paramMap);
+ }
+
}
diff --git a/src/com/pms/mapper/quality.xml b/src/com/pms/mapper/quality.xml
index a5eede3..0d109cb 100644
--- a/src/com/pms/mapper/quality.xml
+++ b/src/com/pms/mapper/quality.xml
@@ -666,7 +666,7 @@
,POM.PURCHASE_ORDER_NO
,CM.PROJECT_NO
-
+ ,CODE_NAME(CM.PRODUCT) AS PRODUCT_NAME
,(SELECT
CASE
@@ -702,24 +702,83 @@
ELSE '입고중'
END) AS DELIVERY_STATUS
-
- ,(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 '검사중'
+
+ ,(SELECT U.USER_NAME FROM USER_INFO U WHERE U.USER_ID = IID.REQUEST_USER_ID) AS REQUEST_USER_NAME
+ ,IID.REQUEST_DATE
+
+
+ /* 검사자: XXX 외 N건 형태 */
+ ,DEFECT.INSPECTOR_NAME_DISPLAY AS INSPECTOR_NAME
+ /* 검사일: YYYY-MM-DD 외 N건 형태 */
+ ,DEFECT.INSPECTION_DATE_DISPLAY AS INSPECTION_DATE
+ /* 검사결과: 하나라도 NG면 NG */
+ ,(CASE WHEN DEFECT.NG_COUNT > 0 THEN 'NG'
+ WHEN DEFECT.DEFECT_TOTAL_COUNT > 0 AND DEFECT.DEFECT_TOTAL_COUNT = DEFECT.INSPECTED_COUNT THEN 'OK'
+ WHEN DEFECT.INSPECTED_COUNT > 0 THEN '검사중'
ELSE '' END) AS INSPECTION_RESULT
+
+ /* 검사여부: 검사가 하나라도 있으면 '검사', 모두 스킵이면 '스킵', 아무것도 없으면 빈값 */
+ ,(CASE WHEN IID.INSPECTION_YN_COUNT > 0 THEN '검사'
+ WHEN IID.SKIP_YN_COUNT > 0 AND IID.INSPECTION_YN_COUNT = 0 THEN '스킵'
+ ELSE '' END) AS INSPECTION_YN
+
+ /* 요청현황: 입고내역 기준으로 검사여부 선택 현황 계산
+ 미요청: 입고건이 있지만 전부 검사여부 미선택
+ 요청중: 일부만 검사여부 선택됨
+ 요청완료: 전부 검사여부 선택됨 */
+ ,(CASE WHEN REQ.DELIVERY_TOTAL_COUNT IS NULL OR REQ.DELIVERY_TOTAL_COUNT = 0 THEN ''
+ WHEN REQ.SELECTED_COUNT = 0 THEN '미요청'
+ WHEN REQ.SELECTED_COUNT REQ.DELIVERY_TOTAL_COUNT THEN '요청중'
+ ELSE '요청완료' END) AS REQUEST_STATUS
+ ,(SELECT COUNT(1) FROM ATTACH_FILE_INFO AF WHERE AF.TARGET_OBJID = POM.OBJID AND AF.DOC_TYPE = 'INSPECTION_FILE' AND UPPER(AF.STATUS) = 'ACTIVE') AS INSPECTION_FILE_CNT
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
+ ,MAX(REQUEST_USER_ID) AS REQUEST_USER_ID
+ ,MAX(REQUEST_DATE) AS REQUEST_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
+ /* 검사여부 카운트: 검사 선택 건수, 스킵 선택 건수 */
+ ,COUNT(CASE WHEN INSPECTION_YN = '검사' THEN 1 END) AS INSPECTION_YN_COUNT
+ ,COUNT(CASE WHEN INSPECTION_YN = '스킵' THEN 1 END) AS SKIP_YN_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 IID2.PURCHASE_ORDER_MASTER_OBJID
+ /* 검사자: 여러명이면 "XXX 외 N건" 형태로 표시 */
+ ,CASE
+ WHEN COUNT(DISTINCT IDF.INSPECTOR_ID) > 1
+ THEN (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = MIN(IDF.INSPECTOR_ID)) || ' 외 ' || (COUNT(DISTINCT IDF.INSPECTOR_ID) - 1) || '건'
+ WHEN COUNT(DISTINCT IDF.INSPECTOR_ID) = 1
+ THEN (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = MIN(IDF.INSPECTOR_ID))
+ ELSE ''
+ END AS INSPECTOR_NAME_DISPLAY
+ /* 검사일: 여러개면 "YYYY-MM-DD 외 N건" 형태로 표시 */
+ ,CASE
+ WHEN COUNT(DISTINCT IDF.INSPECTION_DATE) > 1
+ THEN TO_CHAR(MIN(IDF.INSPECTION_DATE), 'YYYY-MM-DD') || ' 외 ' || (COUNT(DISTINCT IDF.INSPECTION_DATE) - 1) || '건'
+ WHEN COUNT(DISTINCT IDF.INSPECTION_DATE) = 1
+ THEN TO_CHAR(MIN(IDF.INSPECTION_DATE), 'YYYY-MM-DD')
+ ELSE ''
+ END AS INSPECTION_DATE_DISPLAY
+ ,COUNT(*) AS DEFECT_TOTAL_COUNT
+ ,COUNT(CASE WHEN IDF.INSPECTION_RESULT IS NOT NULL AND IDF.INSPECTION_RESULT != '' THEN 1 END) AS INSPECTED_COUNT
+ ,COUNT(CASE WHEN IDF.INSPECTION_RESULT = 'NG' THEN 1 END) AS NG_COUNT
+ FROM INCOMING_INSPECTION_DETAIL IID2
+ LEFT JOIN INCOMING_INSPECTION_DEFECT IDF ON IDF.INSPECTION_DETAIL_OBJID = IID2.OBJID
+ GROUP BY IID2.PURCHASE_ORDER_MASTER_OBJID
+ ) AS DEFECT ON POM.OBJID::VARCHAR = DEFECT.PURCHASE_ORDER_MASTER_OBJID
+ /* 입고내역 기준 검사여부 선택 현황 (요청현황 계산용) */
+ LEFT OUTER JOIN (
+ SELECT IMI.PURCHASE_ORDER_MASTER_OBJID
+ ,COUNT(*) AS DELIVERY_TOTAL_COUNT
+ ,COUNT(CASE WHEN IID.INSPECTION_YN IS NOT NULL AND IID.INSPECTION_YN != '' THEN 1 END) AS SELECTED_COUNT
+ FROM INVENTORY_MGMT_IN IMI
+ LEFT JOIN INCOMING_INSPECTION_DETAIL IID ON IID.INVENTORY_IN_OBJID = IMI.OBJID
+ WHERE IMI.PURCHASE_ORDER_MASTER_OBJID IS NOT NULL
+ GROUP BY IMI.PURCHASE_ORDER_MASTER_OBJID
+ ) AS REQ ON POM.OBJID::VARCHAR = REQ.PURCHASE_ORDER_MASTER_OBJID
LEFT OUTER JOIN (
SELECT POP.PURCHASE_ORDER_MASTER_OBJID
,SUM(POP.ORDER_QTY::NUMERIC) AS TOTAL_PO_QTY
@@ -1643,7 +1702,10 @@
) THEN 'Y' ELSE 'N' END AS INSPECTION_FILE
, IID.OBJID AS INSPECTION_DETAIL_OBJID
, IID.INSPECTION_TYPE
- , COALESCE(IID.INSPECTION_YN, '검사') AS INSPECTION_YN
+ , COALESCE(IID.INSPECTION_YN, '') AS INSPECTION_YN
+ , IID.REQUEST_DATE
+ , IID.REQUEST_USER_ID
+ , (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = IID.REQUEST_USER_ID) AS REQUEST_USER_NAME
, IID.DEFECT_TYPE
, (SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = IID.DEFECT_TYPE) AS DEFECT_TYPE_NAME
, IID.DEFECT_REASON
@@ -1666,6 +1728,54 @@
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
+
+
+
+
@@ -1685,6 +1795,8 @@
OBJID
, INVENTORY_IN_OBJID
, PURCHASE_ORDER_MASTER_OBJID
+ , REQUEST_DATE
+ , REQUEST_USER_ID
, INSPECTION_DATE
, INSPECTOR_ID
, INSPECTION_TYPE
@@ -1703,6 +1815,8 @@
#{NEW_OBJID}
, #{OBJID}
, #{PURCHASE_ORDER_MASTER_OBJID}
+ , #{REQUEST_DATE}
+ , #{REQUEST_USER_ID}
, #{INSPECTION_DATE}
, #{INSPECTOR_ID}
, #{INSPECTION_TYPE}
@@ -1719,20 +1833,120 @@
, 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}
+ REQUEST_DATE = COALESCE(#{REQUEST_DATE}, INCOMING_INSPECTION_DETAIL.REQUEST_DATE)
+ , REQUEST_USER_ID = COALESCE(#{REQUEST_USER_ID}, INCOMING_INSPECTION_DETAIL.REQUEST_USER_ID)
+ , INSPECTION_DATE = COALESCE(#{INSPECTION_DATE}, INCOMING_INSPECTION_DETAIL.INSPECTION_DATE)
+ , INSPECTOR_ID = COALESCE(#{INSPECTOR_ID}, INCOMING_INSPECTION_DETAIL.INSPECTOR_ID)
+ , INSPECTION_TYPE = COALESCE(#{INSPECTION_TYPE}, INCOMING_INSPECTION_DETAIL.INSPECTION_TYPE)
+ , INSPECTION_YN = COALESCE(#{INSPECTION_YN}, INCOMING_INSPECTION_DETAIL.INSPECTION_YN)
+ , DEFECT_TYPE = COALESCE(#{DEFECT_TYPE}, INCOMING_INSPECTION_DETAIL.DEFECT_TYPE)
+ , DEFECT_REASON = COALESCE(#{DEFECT_REASON}, INCOMING_INSPECTION_DETAIL.DEFECT_REASON)
+ , ACTION_STATUS = COALESCE(#{ACTION_STATUS}, INCOMING_INSPECTION_DETAIL.ACTION_STATUS)
+ , INSPECTION_QTY = COALESCE(#{INSPECTION_QTY}, INCOMING_INSPECTION_DETAIL.INSPECTION_QTY)
+ , DEFECT_QTY = COALESCE(#{DEFECT_QTY}, INCOMING_INSPECTION_DETAIL.DEFECT_QTY)
+ , INSPECTION_RESULT = COALESCE(#{INSPECTION_RESULT}, INCOMING_INSPECTION_DETAIL.INSPECTION_RESULT)
+ , ATTACH_FILE_OBJID = COALESCE(#{ATTACH_FILE_OBJID}, INCOMING_INSPECTION_DETAIL.ATTACH_FILE_OBJID)
+ , REMARK = COALESCE(#{REMARK}, INCOMING_INSPECTION_DETAIL.REMARK)
, MODIFIER = #{WRITER}
, MOD_DATE = NOW()
+
+
+
+
+
+
+
+ INSERT INTO INCOMING_INSPECTION_DEFECT (
+ OBJID
+ , INSPECTION_DETAIL_OBJID
+ , INSPECTION_TYPE
+ , INSPECTION_DATE
+ , INSPECTOR_ID
+ , DEFECT_TYPE
+ , DEFECT_REASON
+ , ACTION_STATUS
+ , ACTION_RESULT
+ , INSPECTION_QTY
+ , DEFECT_QTY
+ , INSPECTION_RESULT
+ , REMARK
+ , WRITER
+ , REG_DATE
+ ) VALUES (
+ #{OBJID}
+ , #{INSPECTION_DETAIL_OBJID}
+ , #{INSPECTION_TYPE}
+ , #{INSPECTION_DATE}::DATE
+ , #{INSPECTOR_ID}
+ , #{DEFECT_TYPE}
+ , #{DEFECT_REASON}
+ , #{ACTION_STATUS}
+ , #{ACTION_RESULT}
+ , #{INSPECTION_QTY}
+ , #{DEFECT_QTY}
+ , #{INSPECTION_RESULT}
+ , #{REMARK}
+ , #{WRITER}
+ , NOW()
+ )
+ ON CONFLICT (OBJID) DO UPDATE SET
+ INSPECTION_TYPE = #{INSPECTION_TYPE}
+ , INSPECTION_DATE = #{INSPECTION_DATE}::DATE
+ , INSPECTOR_ID = #{INSPECTOR_ID}
+ , DEFECT_TYPE = #{DEFECT_TYPE}
+ , DEFECT_REASON = #{DEFECT_REASON}
+ , ACTION_STATUS = #{ACTION_STATUS}
+ , ACTION_RESULT = #{ACTION_RESULT}
+ , INSPECTION_QTY = #{INSPECTION_QTY}
+ , DEFECT_QTY = #{DEFECT_QTY}
+ , INSPECTION_RESULT = #{INSPECTION_RESULT}
+ , REMARK = #{REMARK}
+ , MODIFIER = #{WRITER}
+ , MOD_DATE = NOW()
+
+
+
+
+ DELETE FROM INCOMING_INSPECTION_DEFECT
+ WHERE OBJID = #{OBJID}
+
+
+
+
+ DELETE FROM INCOMING_INSPECTION_DEFECT
+ WHERE INSPECTION_DETAIL_OBJID = #{INSPECTION_DETAIL_OBJID}
+
+
\ No newline at end of file
diff --git a/src/com/pms/service/QualityService.java b/src/com/pms/service/QualityService.java
index aedbb1c..5f7b8c2 100644
--- a/src/com/pms/service/QualityService.java
+++ b/src/com/pms/service/QualityService.java
@@ -17,6 +17,7 @@ import com.pms.common.bean.PersonBean;
import com.pms.common.service.BaseService;
import com.pms.common.utils.CommonUtils;
import com.pms.common.utils.Constants;
+import com.pms.common.JsonUtil;
@Service
public class QualityService extends BaseService{
@@ -661,8 +662,60 @@ public class QualityService extends BaseService{
return resultMap;
}
+ /**
+ * 수입검사 요청 저장 (검사여부, 요청일, 요청자만 저장)
+ */
+ public Map saveIncomingInspectionRequest(HttpServletRequest request, Map paramMap){
+ Map resultMap = new HashMap();
+ SqlSession sqlSession = null;
+ try{
+ sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
+
+ PersonBean person = (PersonBean)request.getSession().getAttribute(Constants.PERSON_BEAN);
+ String writer = CommonUtils.checkNull(person.getUserId());
+
+ String requestDate = CommonUtils.checkNull(paramMap.get("REQUEST_DATE"));
+ String requestUserId = CommonUtils.checkNull(paramMap.get("REQUEST_USER_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>>(){}.getType();
+ List