Compare commits

...

3 Commits

Author SHA1 Message Date
유지인 dd95fdf716 문자메세지가 전송가 전송 된다.
관리자가 수정요청 할 시 입력메세지가 프로젝트 등록자에게 문자메세지가 전송된다.
2025-11-28 14:06:33 +09:00
유지인 d160f60216 프로젝트 등록자가 (관리자가 수정요청 한)프로젝트의 요청사항[수정] 클릭하여 입력메세지와, 항목화 된 수정요청 대상을 확인하여 수정작업 하도록 한다. 2025-11-28 14:05:34 +09:00
유지인 5cf28edb71 관리자가 검수등록대기 목록의 프로젝트를 수정요청 할 시 항목화 된 수정요청 대상을 체크하여 저장 할 수 있다.
저장시 입력 메세지가 프로젝트 등록자에게 문자메세지가 전송된다.
관리자가 체크한 수정요청 대상은 비트마스크 연산 되어 입력 메세지와 수정요청 상태 테이블에 저장된다.
2025-11-28 14:02:48 +09:00
14 changed files with 366 additions and 31 deletions

View File

@ -275,9 +275,10 @@ public class ManageListController {
strUtil sUtil = new strUtil(); strUtil sUtil = new strUtil();
String widthSize = sUtil.checkNull((String)params.get("width")); String widthSize = sUtil.checkNull((String)params.get("width"));
String heightSize = "395"; String heightSize = "665";
String PROJECT_CODE = sUtil.checkNull((String)params.get("PROJECT_CODE")); String PROJECT_CODE = sUtil.checkNull((String)params.get("PROJECT_CODE"));
String PROC = sUtil.checkNull((String)params.get("PROC")); String PROC = sUtil.checkNull((String)params.get("PROC"));
ArrayList<?> MODI_ITEM_LIST = new ArrayList<>(); // "수정요청 대상" 체크 할 항목 조회
String MODEIFY_CALL_REASON = ""; String MODEIFY_CALL_REASON = "";
if ("view".equals(PROC)) { if ("view".equals(PROC)) {
@ -285,8 +286,11 @@ public class ManageListController {
if (result != null) { if (result != null) {
MODEIFY_CALL_REASON = (sUtil.checkNull(result.get("modeifyCallReason").toString())).replaceAll("\n","<br>"); MODEIFY_CALL_REASON = (sUtil.checkNull(result.get("modeifyCallReason").toString())).replaceAll("\n","<br>");
} }
} else {
MODI_ITEM_LIST = masterService.selectModifyItem(params);
} }
resultList.put("modeifyCallReason", MODEIFY_CALL_REASON); resultList.put("modeifyCallReason", MODEIFY_CALL_REASON);
resultList.put("modiItemList", MODI_ITEM_LIST);
resultList.put("heightSize", heightSize); resultList.put("heightSize", heightSize);
resultList.put("widthSize", widthSize); resultList.put("widthSize", widthSize);
resultList.put("projectCode", PROJECT_CODE); resultList.put("projectCode", PROJECT_CODE);

View File

@ -24,5 +24,9 @@ public interface ManageListMapper {
public EgovMap updateModeifyTbl(HashMap<String,Object> params) throws Exception; public EgovMap updateModeifyTbl(HashMap<String,Object> params) throws Exception;
public EgovMap updateModeifyUser(HashMap<String,Object> params) throws Exception; public EgovMap updateModeifyUser(HashMap<String,Object> params) throws Exception;
public ArrayList<?> selectModifyItem(HashMap<String,Object> params) throws Exception;
public ArrayList<?> selectModifyItemBitmask(HashMap<String,Object> params) throws Exception;
} }

View File

@ -23,4 +23,8 @@ public interface ManageListService {
public EgovMap updateModeifyTbl(HashMap<String,Object> params) throws Exception; public EgovMap updateModeifyTbl(HashMap<String,Object> params) throws Exception;
public EgovMap updateModeifyUser(HashMap<String,Object> params) throws Exception; public EgovMap updateModeifyUser(HashMap<String,Object> params) throws Exception;
public ArrayList<?> selectModifyItem(HashMap<String,Object> params) throws Exception;
public ArrayList<?> selectModifyItemBitmask(HashMap<String,Object> params) throws Exception;
} }

View File

@ -57,4 +57,14 @@ public class ManageListServiceImpl implements ManageListService {
return manageListMapper.updateModeifyUser(params); return manageListMapper.updateModeifyUser(params);
} }
@Override
public ArrayList<?> selectModifyItem(HashMap<String, Object> params) throws Exception {
return manageListMapper.selectModifyItem(params);
}
@Override
public ArrayList<?> selectModifyItemBitmask(HashMap<String, Object> params) throws Exception {
return manageListMapper.selectModifyItemBitmask(params);
}
} }

View File

@ -374,6 +374,7 @@ public class RegiController {
String PROJECT_CODE = files[k].toString();// 확인필요..데이터이름이 제대로 들어오는가????? String PROJECT_CODE = files[k].toString();// 확인필요..데이터이름이 제대로 들어오는가?????
String PROC = sUtil.checkNull(String.valueOf(params.get("PROC"))); String PROC = sUtil.checkNull(String.valueOf(params.get("PROC")));
String MODEIFY_CALL_REASON = sUtil.checkNull(String.valueOf(params.get("MODEIFY_CALL_REASON"))); String MODEIFY_CALL_REASON = sUtil.checkNull(String.valueOf(params.get("MODEIFY_CALL_REASON")));
String MODIFY_ITEM = sUtil.checkNull(String.valueOf(params.get("MODIFY_ITEM")));
params.put("PROJECT_CODE", PROJECT_CODE); params.put("PROJECT_CODE", PROJECT_CODE);
params.put("USERID", request.getSession().getAttribute("USERID"));//userid는 param 값 가져오는 지 확인. params.put("USERID", request.getSession().getAttribute("USERID"));//userid는 param 값 가져오는 지 확인.
try { try {
@ -553,7 +554,7 @@ public class RegiController {
// TEMP_MANAGE_STATE INSERT // TEMP_MANAGE_STATE INSERT
params.put("STATE", "5");// 수정요청으로 변경 params.put("STATE", "5");// 수정요청으로 변경
params.put("MODEIFY_CALL_REASON", MODEIFY_CALL_REASON);// 수정요청으로 params.put("MODEIFY_CALL_REASON", MODEIFY_CALL_REASON);// 수정요청으로
// 변경 params.put("MODIFY_ITEM", MODIFY_ITEM); // 변경
affectRow += masterService.mergeStateInsertModeify(params); affectRow += masterService.mergeStateInsertModeify(params);
// ------------------------------------------------------- // -------------------------------------------------------
@ -608,6 +609,7 @@ public class RegiController {
String PROJECT_CODE = sUtil.checkNull(String.valueOf(params.get("PROJECT_CODE"))); String PROJECT_CODE = sUtil.checkNull(String.valueOf(params.get("PROJECT_CODE")));
String PROC = sUtil.checkNull(String.valueOf(params.get("PROC"))); String PROC = sUtil.checkNull(String.valueOf(params.get("PROC")));
String MODEIFY_CALL_REASON = sUtil.checkNull(String.valueOf(params.get("MODEIFY_CALL_REASON"))); String MODEIFY_CALL_REASON = sUtil.checkNull(String.valueOf(params.get("MODEIFY_CALL_REASON")));
String MODIFY_ITEM = sUtil.checkNull(String.valueOf(params.get("MODIFY_ITEM")));
params.put("PROJECT_CODE", PROJECT_CODE); params.put("PROJECT_CODE", PROJECT_CODE);
params.put("USERID", request.getSession().getAttribute("USERID")); params.put("USERID", request.getSession().getAttribute("USERID"));
try { try {
@ -768,7 +770,8 @@ public class RegiController {
// TEMP_MANAGE_STATE INSERT // TEMP_MANAGE_STATE INSERT
params.put("STATE", "5");// 수정요청으로 변경 params.put("STATE", "5");// 수정요청으로 변경
params.put("MODEIFY_CALL_REASON", MODEIFY_CALL_REASON);// 수정요청으로 params.put("MODEIFY_CALL_REASON", MODEIFY_CALL_REASON);// 수정요청으로
// 변경 params.put("MODIFY_ITEM", MODIFY_ITEM); // 변경
affectRow += masterService.mergeStateInsertModeify(params); affectRow += masterService.mergeStateInsertModeify(params);
// ------------------------------------------------------- // -------------------------------------------------------
@ -963,7 +966,16 @@ public class RegiController {
String smsId = ""; String smsId = "";
smsId = result.get("SMS_ID").toString(); smsId = result.get("SMS_ID").toString();
params.put("SMS_ID", smsId); params.put("SMS_ID", smsId);
params.put("PROJECT_CODE", project_code);
params.put("REQ_GBN", reqGbn);
params.put("RET_CODE", retCode);
params.put("RET_MESSAGE", retMessage);
params.put("RET_LAST_POINT", retLastPoint);
params.put("SMS_TO_ID", sms_to_id);
params.put("SMS_TO_PHONE",sms_to_phone);
params.put("SMS_FROM_ID", sms_from_id);
params.put("SMS_FROM_PHONE", sms_from_phone);
params.put("SMS_MSG", sms_msg);
int affectRow = masterService.insertSmsLog(params); int affectRow = masterService.insertSmsLog(params);
// PARAMSET // PARAMSET
@ -1763,13 +1775,16 @@ public class RegiController {
ModelAndView mav, HttpServletRequest request, HttpServletResponse response)throws Exception { ModelAndView mav, HttpServletRequest request, HttpServletResponse response)throws Exception {
LOGGER.info("세션 아이디 : " + request.getSession().getAttribute("USERID") + " params userid : " + params.get("USER_ID")); LOGGER.info("세션 아이디 : " + request.getSession().getAttribute("USERID") + " params userid : " + params.get("USER_ID"));
ArrayList<?> MODI_ITEM_LIST = new ArrayList<>(); // "수정요청 대상" 관리자가 체크한 항목 조회
if(request.getSession().getAttribute("USERID").equals(params.get("USER_ID"))) { if(request.getSession().getAttribute("USERID").equals(params.get("USER_ID"))) {
mav.setViewName("web/manage/select_modeify_call_reason"); mav.setViewName("web/manage/select_modeify_call_reason");
EgovMap result = masterService.selectModeifyCallReason(params); EgovMap result = masterService.selectModeifyCallReason(params);
MODI_ITEM_LIST = masterService.selectModifyItemBitmask(params);
mav.addObject("result", result); mav.addObject("result", result);
mav.addObject("modiItem", MODI_ITEM_LIST);
} }
return mav; return mav;
} }

View File

@ -194,4 +194,6 @@ public interface RegiPageMapper {
public ArrayList<HashMap<String, Object>> getHoleNamesByProjectCode(HashMap<String,Object> params) throws Exception; public ArrayList<HashMap<String, Object>> getHoleNamesByProjectCode(HashMap<String,Object> params) throws Exception;
List<EgovMap> getInputdateRangeByUserid(Map<String, Object> params) throws Exception; List<EgovMap> getInputdateRangeByUserid(Map<String, Object> params) throws Exception;
public ArrayList<?> selectModifyItemBitmask(HashMap<String,Object> params) throws Exception;
} }

View File

@ -199,4 +199,6 @@ public interface RegiPageService {
public int deleteOldDatas(HashMap<String, Object> params) throws Exception; public int deleteOldDatas(HashMap<String, Object> params) throws Exception;
List<EgovMap> getInputdateRangeByUserid(Map<String, Object> params) throws Exception; List<EgovMap> getInputdateRangeByUserid(Map<String, Object> params) throws Exception;
public ArrayList<?> selectModifyItemBitmask(HashMap<String,Object> params) throws Exception;
} }

View File

@ -500,4 +500,10 @@ public class RegiPageServiceImpl implements RegiPageService {
public List<EgovMap> getInputdateRangeByUserid(Map<String, Object> params) throws Exception { public List<EgovMap> getInputdateRangeByUserid(Map<String, Object> params) throws Exception {
return regiPageMapper.getInputdateRangeByUserid(params); return regiPageMapper.getInputdateRangeByUserid(params);
} }
@Override
public ArrayList<?> selectModifyItemBitmask(HashMap<String, Object> params) throws Exception {
return regiPageMapper.selectModifyItemBitmask(params);
}
} }

View File

@ -395,4 +395,16 @@
]]> ]]>
</select> </select>
<!-- 수정요청사유 팝업 > 수정요청대상에 표시 할 항목 조회 -->
<select id="selectModifyItem" parameterType="map" resultType="java.util.HashMap">
SELECT GRP.GRP_IDX
,IT.IT_IDX
,GRP.NAME AS GRP_NAME
,IT.NAME AS ITEM_NAME
FROM TEMP_MANAGE_STATE_MODI_IT IT
LEFT JOIN TEMP_MANAGE_STATE_MODI_GRP GRP ON GRP.GRP_IDX = IT.GRP_IDX
WHERE IT.USE_YN = 'Y'
ORDER BY GRP."ORDER", IT."ORDER"
</select>
</mapper> </mapper>

View File

@ -31,12 +31,19 @@
DECODE(A.STATE,'4','insert','5','insert','') AS INS, DECODE(A.STATE,'4','insert','5','insert','') AS INS,
DECODE(A.STATE,'4','delete','') AS DEL, DECODE(A.STATE,'4','delete','') AS DEL,
DECODE(A.STATE,'5','true','false') AS CURSOR, DECODE(A.STATE,'5','true','false') AS CURSOR,
B.SMS_MSG B.SMS_MSG,
FROM TEMP_PROJECT_INFO A, TEMP_SMS_LOG B ST.MODIFY_ITEM
FROM TEMP_PROJECT_INFO A
LEFT JOIN (SELECT *
FROM (SELECT L.*
,ROW_NUMBER() OVER (PARTITION BY PROJECT_CODE ORDER BY REG_DATE DESC) AS RN
FROM TEMP_SMS_LOG L)
WHERE RN = 1) B ON A.PROJECT_CODE = B.PROJECT_CODE
LEFT JOIN TEMP_MANAGE_STATE ST ON ST.PROJECT_CODE = A.PROJECT_CODE
AND ST.STATE = '5'
WHERE WHERE
NVL(A.USE_YN,' ') <> 'N' AND A.USERID = #{userId} AND NVL(A.USE_YN,' ') <> 'N' AND A.USERID = #{userId}
A.PROJECT_CODE = B.PROJECT_CODE (+)
]]> ]]>
<if test="projectName != null and projectName != ''"> <if test="projectName != null and projectName != ''">
@ -314,8 +321,8 @@
<insert id="insertHistSeq" parameterType="map"> <insert id="insertHistSeq" parameterType="map">
<![CDATA[ <![CDATA[
INSERT INTO TEMP_MANAGE_HIST (PROJECT_CODE, HIST_SEQ, MODEIFY_CALL_REASON, MODIFY_USERID, MODIFY_CALL_DATE, MODIFY_FIN_DATE, CREATEDATE ) INSERT INTO TEMP_MANAGE_HIST (PROJECT_CODE, HIST_SEQ, MODEIFY_CALL_REASON, MODIFY_USERID, MODIFY_CALL_DATE, MODIFY_FIN_DATE, CREATEDATE, MODIFY_ITEM )
SELECT SA.PROJECT_CODE, NVL(SA.HIST_SEQ, 1), SA.MODEIFY_CALL_REASON, SB.USERID, SA.MODIFY_CALL_DATE, SYSDATE, CREATEDATE SELECT SA.PROJECT_CODE, NVL(SA.HIST_SEQ, 1), SA.MODEIFY_CALL_REASON, SB.USERID, SA.MODIFY_CALL_DATE, SYSDATE, CREATEDATE, MODIFY_ITEM
FROM TEMP_MANAGE_STATE SA FROM TEMP_MANAGE_STATE SA
, WEB_DATAINPUT SB , WEB_DATAINPUT SB
WHERE SA.PROJECT_CODE = #{PROJECT_CODE} WHERE SA.PROJECT_CODE = #{PROJECT_CODE}
@ -366,6 +373,7 @@
WHEN MATCHED THEN WHEN MATCHED THEN
UPDATE SET STATE = #{STATE} UPDATE SET STATE = #{STATE}
, MODEIFY_CALL_REASON = #{MODEIFY_CALL_REASON} , MODEIFY_CALL_REASON = #{MODEIFY_CALL_REASON}
, MODIFY_ITEM = #{MODIFY_ITEM}
, USERID = #{USERID} , USERID = #{USERID}
, DATETIME = SYSDATE , DATETIME = SYSDATE
, COMPLETEDATE = '' , COMPLETEDATE = ''
@ -377,6 +385,7 @@
PROJECT_CODE PROJECT_CODE
, STATE , STATE
, MODEIFY_CALL_REASON , MODEIFY_CALL_REASON
, MODIFY_ITEM
, USERID , USERID
, DATETIME , DATETIME
, MODIFY_CALL_DATE , MODIFY_CALL_DATE
@ -384,6 +393,7 @@
#{PROJECT_CODE} #{PROJECT_CODE}
, #{STATE} , #{STATE}
, #{MODEIFY_CALL_REASON} , #{MODEIFY_CALL_REASON}
, #{MODIFY_ITEM}
, #{USERID} , #{USERID}
, SYSDATE , SYSDATE
, 1 , 1
@ -413,8 +423,8 @@
<insert id="insertRecode" parameterType="map"> <insert id="insertRecode" parameterType="map">
<![CDATA[ <![CDATA[
INSERT INTO TEMP_MANAGE_HIST (PROJECT_CODE, HIST_SEQ, MODEIFY_CALL_REASON, MODIFY_USERID, MODIFY_CALL_DATE, MODIFY_FIN_DATE, CREATEDATE, MODIFY_DESC ) INSERT INTO TEMP_MANAGE_HIST (PROJECT_CODE, HIST_SEQ, MODEIFY_CALL_REASON, MODIFY_USERID, MODIFY_CALL_DATE, MODIFY_FIN_DATE, CREATEDATE, MODIFY_DESC, MODIFY_ITEM )
SELECT SA.PROJECT_CODE, NVL(SA.HIST_SEQ, 1), SA.MODEIFY_CALL_REASON, '${USERID}', SA.MODIFY_CALL_DATE, SYSDATE, CREATEDATE, '검수자가 입력자의 동의를 받아 직접 등록' SELECT SA.PROJECT_CODE, NVL(SA.HIST_SEQ, 1), SA.MODEIFY_CALL_REASON, '${USERID}', SA.MODIFY_CALL_DATE, SYSDATE, CREATEDATE, '검수자가 입력자의 동의를 받아 직접 등록', MODIFY_ITEM
FROM TEMP_MANAGE_STATE SA FROM TEMP_MANAGE_STATE SA
, WEB_DATAINPUT SB , WEB_DATAINPUT SB
WHERE SA.PROJECT_CODE = #{PROJECT_CODE} WHERE SA.PROJECT_CODE = #{PROJECT_CODE}
@ -548,6 +558,7 @@ MERGE INTO TEMP_MANAGE_STATE
WHEN MATCHED THEN WHEN MATCHED THEN
UPDATE SET STATE = #{STATE} UPDATE SET STATE = #{STATE}
, MODEIFY_CALL_REASON = #{MODEIFY_CALL_REASON} , MODEIFY_CALL_REASON = #{MODEIFY_CALL_REASON}
, MODIFY_ITEM = #{MODIFY_ITEM}
, USERID = #{USERID} , USERID = #{USERID}
, DATETIME = SYSDATE , DATETIME = SYSDATE
, COMPLETEDATE = '' , COMPLETEDATE = ''
@ -559,6 +570,7 @@ MERGE INTO TEMP_MANAGE_STATE
PROJECT_CODE PROJECT_CODE
, STATE , STATE
, MODEIFY_CALL_REASON , MODEIFY_CALL_REASON
, MODIFY_ITEM
, USERID , USERID
, DATETIME , DATETIME
, HIST_SEQ , HIST_SEQ
@ -567,6 +579,7 @@ MERGE INTO TEMP_MANAGE_STATE
#{PROJECT_CODE} #{PROJECT_CODE}
, #{STATE} , #{STATE}
, #{MODEIFY_CALL_REASON} , #{MODEIFY_CALL_REASON}
, #{MODIFY_ITEM}
, #{USERID} , #{USERID}
, SYSDATE , SYSDATE
, 1 , 1
@ -1404,8 +1417,11 @@ INSERT INTO TEMP_SMS_LOG (
<select id="selectModeifyCallReason" parameterType="map" resultType="EgovMap"> <select id="selectModeifyCallReason" parameterType="map" resultType="EgovMap">
<![CDATA[ <![CDATA[
SELECT SMS_MSG SELECT SMS_MSG
FROM TEMP_SMS_LOG FROM (SELECT L.SMS_MSG
WHERE PROJECT_CODE = #{PROJECT_CODE} ,ROW_NUMBER() OVER (PARTITION BY L.PROJECT_CODE ORDER BY L.REG_DATE DESC) AS RN
FROM TEMP_SMS_LOG L
WHERE L.PROJECT_CODE = #{PROJECT_CODE})
WHERE RN = 1
]]> ]]>
</select> </select>
@ -1434,4 +1450,17 @@ INSERT INTO TEMP_SMS_LOG (
AND tmi.REPORT_TYPE = 'CH' AND tmi.REPORT_TYPE = 'CH'
</select> </select>
<!-- 수정요청사유 팝업 > 관리자가 체크한 수정대상 항목 조회 -->
<select id="selectModifyItemBitmask" parameterType="map" resultType="java.util.HashMap">
SELECT GRP.GRP_IDX
,IT.IT_IDX
,GRP.NAME AS GRP_NAME
,GRP."DESC" AS GRP_DESC
,IT.NAME AS ITEM_NAME
FROM TEMP_MANAGE_STATE_MODI_IT IT
LEFT JOIN TEMP_MANAGE_STATE_MODI_GRP GRP ON GRP.GRP_IDX = IT.GRP_IDX
WHERE BITAND(#{MODIFY_ITEM}, IT.IT_IDX) > 0
AND IT.USE_YN = 'Y'
ORDER BY GRP."ORDER", IT."ORDER"
</select>
</mapper> </mapper>

View File

@ -119,9 +119,11 @@ function delBtnClick(report_type, project_code) {
// 수정 버튼 // 수정 버튼
function msgBtnTemplate(report_type, project_code, message){ // function msgBtnTemplate(report_type, project_code, message){
function msgBtnTemplate(report_type, project_code, modify_item, message){
if (msg = "message"){ if (msg = "message"){
return '<button type="button" class="k-button k-button-modifycall popup_open" onclick="selectModifycallBtnClick('+"'"+report_type+"','"+project_code+"'"+');">수정</button>'; // return '<button type="button" class="k-button k-button-modifycall popup_open" onclick="selectModifycallBtnClick('+"'"+report_type+"','"+project_code+"'"+');">수정</button>';
return '<button type="button" class="k-button k-button-modifycall popup_open" onclick="selectModifycallBtnClick('+"'"+report_type+"','"+project_code+"','"+modify_item+"'"+');">수정</button>';
} }
else{ else{
return " "; return " ";
@ -129,11 +131,11 @@ function msgBtnTemplate(report_type, project_code, message){
} }
//수정요청 클릭 //수정요청 클릭
function selectModifycallBtnClick(projectCode, createUserid) { function selectModifycallBtnClick(projectCode, createUserid, modifyItem) {
var url = "/selectModeifyCallReason.do"; var url = "/selectModeifyCallReason.do";
var param = "PROJECT_CODE=" + projectCode + "&USER_ID=" + createUserid; var param = "PROJECT_CODE=" + projectCode + "&USER_ID=" + createUserid + "&MODIFY_ITEM=" + modifyItem;
fn_openPopup(url, param, '480', '330'); fn_openPopup(url, param, '480', '665');
} }
@ -199,7 +201,8 @@ function kendoGrid() {
field: "message", field: "message",
width: 70, width: 70,
title: "요청사항", title: "요청사항",
template: "#if (data.smsMsg != '') {# <div class='td-data'>#= msgBtnTemplate(data.projectCode, data.userid) #</div>#}#" // template: "#if (data.smsMsg != '') {# <div class='td-data'>#= msgBtnTemplate(data.projectCode, data.userid) #</div>#}#"
template: "#if (data.state == '5') {# <div class='td-data'>#= msgBtnTemplate(data.projectCode, data.userid, data.modifyItem) #</div>#}#"
}, },
{ {
field: "excelUpload", field: "excelUpload",

View File

@ -245,7 +245,7 @@ function modifycallBtnClick(project_code, checkuserid) {
var url = "/modeifyCallReason.do"; var url = "/modeifyCallReason.do";
var param = "PROJECT_CODE="+project_code; var param = "PROJECT_CODE="+project_code;
fn_openPopup(url, param, '480', '275'); fn_openPopup(url, param, '480', '775');
}else{ }else{
alert("해당 검수자가 아닙니다."); alert("해당 검수자가 아닙니다.");
} }

View File

@ -11,8 +11,46 @@
<link rel="stylesheet" type="text/css" href="/web/css/popup.css"/> <link rel="stylesheet" type="text/css" href="/web/css/popup.css"/>
<script type="text/javascript" src="/web/js/tree/lib/jquery.js"></script> <script type="text/javascript" src="/web/js/tree/lib/jquery.js"></script>
<script type="text/javascript"> <style>
/* 1depth UL 전체 */
.pop_contents > ul {
list-style: none;
padding-left: 0;
margin: 0;
visibility: visible !important;
}
/* 1depth LI (제목) */
.pop_contents > ul > li {
margin-bottom: 12px;
font-weight: bold;
}
/* 2depth UL — 라디오 리스트 가로 정렬 */
.pop_contents ul ul {
list-style: none;
margin: 6px 0 0 0;
padding-left: 0;
display: flex; /* 가로 정렬 핵심 */
flex-wrap: wrap; /* 라디오 많으면 자동 줄바꿈 */
gap: 20px; /* 라디오 간 간격 */
}
.pop_contents ul ul input[type="checkbox"] {
vertical-align: middle;
margin-right: 4px;
}
/* 2depth 항목 */
.pop_contents ul ul li {
font-weight: normal;
margin: 0;
padding: 0;
}
</style>
<script type="text/javascript">
let addNum = 0;
//html이 ready 된 상태에서 내용 적용. //html이 ready 된 상태에서 내용 적용.
$(document).ready(function() { $(document).ready(function() {
resize(); resize();
@ -51,7 +89,8 @@ function fn_smsOpenPop() {
// SMS전송결과 CALLBACK // SMS전송결과 CALLBACK
function fn_smsGetResult(returnValue) { function fn_smsGetResult(returnValue) {
addNum = 0;
addNumModifyItemValue(); // 선택된 체크박스의 value값을 모두 더한다.(비트마스크 연산시 필요)
var result = returnValue var result = returnValue
@ -73,6 +112,20 @@ function fn_smsGetResult(returnValue) {
//window.close(); //window.close();
} }
/**
* 수정요청 항목(비트마스크연산) 저장을 위한 처리
* 0은 선택하지 않은것임
*/
function addNumModifyItemValue(){
var ele = $('input[name="MODIFY_ITEM_VAL"]:checked')
$.each(ele, function(index, item) {
<%-- console.log("this addNum : " + addNum + ", this val : " + parseInt($(item).val()))--%>
addNum = addNum + parseInt($(item).val())
<%-- console.log("=============================")--%>
});
$('#MODIFY_ITEM').val(addNum);
}
</script> </script>
@ -82,6 +135,7 @@ function fn_smsGetResult(returnValue) {
<form name="frmModifyCall" id="frmModifyCall" method="post"> <form name="frmModifyCall" id="frmModifyCall" method="post">
<input type="hidden" id="PROC" name="PROC" value="MODIFY_POP" /> <input type="hidden" id="PROC" name="PROC" value="MODIFY_POP" />
<input type="hidden" id="REPORT_TYPE" name="REPORT_TYPE" value="" /> <input type="hidden" id="REPORT_TYPE" name="REPORT_TYPE" value="" />
<input type="hidden" id="MODIFY_ITEM" name="MODIFY_ITEM" value="" />
<input type="hidden" id="PROJECT_CODE" name="PROJECT_CODE" value="${resultList.projectCode}" /> <input type="hidden" id="PROJECT_CODE" name="PROJECT_CODE" value="${resultList.projectCode}" />
<div id="pop_wrap"> <div id="pop_wrap">
<div class="popup_area" style="background-color:#f9f9f9; border:1px solid #cfcfd1;"> <div class="popup_area" style="background-color:#f9f9f9; border:1px solid #cfcfd1;">
@ -91,15 +145,92 @@ function fn_smsGetResult(returnValue) {
<c:choose> <c:choose>
<c:when test="${resultList.proc eq 'view'}"> <c:when test="${resultList.proc eq 'view'}">
<div class="pop_contents" style="position:relative;word-wrap:break-word;min-height:200px;">${resultList.modeifyCallReason}</div> <div class="pop_contents" style="position:relative;word-wrap:break-word;min-height:147px;">${resultList.modeifyCallReason}</div>
</c:when> </c:when>
<c:otherwise> <c:otherwise>
<div class="pop_contents"><textarea name="MODEIFY_CALL_REASON" id="MODEIFY_CALL_REASON" rows="10" style="width:96%;"></textarea></div> <div class="pop_contents"><textarea name="MODEIFY_CALL_REASON" id="MODEIFY_CALL_REASON" rows="5" style="width:96%;"></textarea></div>
<div style="text-align:center;margin-bottom:10px;"><a href="#" onClick="fn_submit();"><img src="/web/images/btn_save.png" alt="저장" /></a></div>
</c:otherwise> </c:otherwise>
</c:choose> </c:choose>
</div> </div>
<div class="popup_area" style="background-color:#f9f9f9; border:1px solid #cfcfd1;">
<div class="pop_title" style="border-bottom:1px solid #dddddd;">수정요청 대상</div>
<div class="pop_contents">
<c:set var="prevGrp" value="" />
<ul>
<c:forEach var="item" items="${resultList.modiItemList}" varStatus="st">
<!-- 새로운 그룹이 시작되는 경우 -->
<c:if test="${prevGrp ne item.GRP_IDX}">
<!-- 첫 그룹이 아니라면 이전 그룹의 ul/li 닫기 -->
<c:if test="${!st.first}">
</ul>
</li>
</c:if>
<!-- 그룹 제목 표시 -->
<li data-grp="${item.GRP_IDX }">
${item.GRP_NAME}
<ul>
</c:if>
<!-- 아이템 출력 -->
<li>
<label>
<input type="checkbox" name="MODIFY_ITEM_VAL" value="${item.IT_IDX}" />
${item.ITEM_NAME}
</label>
</li>
<!-- prevGrp 최신화 -->
<c:set var="prevGrp" value="${item.GRP_IDX}" />
<!-- 마지막 루프일 경우 태그 닫기 -->
<c:if test="${st.last}">
</ul>
</li>
</c:if>
</c:forEach>
<%-- <li>시험 데이터 미입력/그래프 누락
<ul>
<li><label><input type="checkbox" name="sCls" />입도시험</label></li>
<li><label><input type="checkbox" name="sCls" />일축압축시험</label></li>
</ul>
</li>
<li>프로젝트 기본 정보 미기재
<ul>
<li><label><input type="checkbox" name="sCls" />목적</label></li>
<li><label><input type="checkbox" name="sCls" />공사상황</label></li>
<li><label><input type="checkbox" name="sCls" />코어사진</label></li>
<li><label><input type="checkbox" name="sCls" />하향식탄성파</label></li>
</ul>
</li>
<li>파일 누락·단위 오류 등
<ul>
<li><label><input type="checkbox" name="sCls" />단위 확인</label></li>
<li><label><input type="checkbox" name="sCls" />위치 오류</label></li>
<li><label><input type="checkbox" name="sCls" />파일 누락</label></li>
</ul>
</li>
<li>첨부 파일 요청
<ul>
<li><label><input type="checkbox" name="sCls" />보고서 재첨부</label></li>
<li><label><input type="checkbox" name="sCls" />시험정보 추가 요청</label></li>
</ul>
</li>
<li>정밀 품질 보정 요청
<ul>
<li><label><input type="checkbox" name="sCls" />그래프 오류</label></li>
<li><label><input type="checkbox" name="sCls" />지층정보 오류</label></li>
<li><label><input type="checkbox" name="sCls" />사진 누락</label></li>
</ul>
</li> --%>
</ul>
</div> </div>
</div>
</div>
<c:choose>
<c:when test="${resultList.proc ne 'view'}">
<div style="text-align:center;margin-bottom:10px;"><a href="#" onClick="fn_submit();"><img src="/web/images/btn_save.png" alt="저장" /></a></div>
</c:when>
</c:choose>
</form> </form>
</body> </body>
</html> </html>

View File

@ -11,6 +11,83 @@
<link rel="stylesheet" type="text/css" href="/web/css/popup.css"/> <link rel="stylesheet" type="text/css" href="/web/css/popup.css"/>
<script type="text/javascript" src="/web/js/tree/lib/jquery.js"></script> <script type="text/javascript" src="/web/js/tree/lib/jquery.js"></script>
<style>
/* 1depth UL 전체 */
.pop_contents > ul {
list-style: none;
padding-left: 0;
margin: 0;
visibility: visible !important;
}
/* 1depth LI (제목) */
.pop_contents > ul > li {
margin-bottom: 12px;
font-weight: bold;
}
/* 2depth UL — 라디오 리스트 가로 정렬 */
.pop_contents ul ul {
list-style: none;
margin: 6px 0 0 0;
padding-left: 0;
display: flex; /* 가로 정렬 핵심 */
flex-wrap: wrap; /* 라디오 많으면 자동 줄바꿈 */
gap: 10px; /* 라디오 간 간격 */
}
.pop_contents ul ul input[type="checkbox"] {
vertical-align: middle;
margin-right: 4px;
}
/* 2depth 항목 */
.pop_contents ul ul li {
font-weight: normal;
margin: 0;
padding: 0;
}
i.help {
position: relative;
margin-left: 5px;
border: 2px solid #89c2ff;
padding: 0px 3px;
border-radius: 10px;
color: #89c2ff;
background: #fff;
font-size: 11px;
font-weight: 800;
cursor:pointer;
}
.help:hover::after {
content: attr(data-tooltip);
position: absolute;
top: 24px;
left: 0;
white-space: normal;
width: 240px;
background: #333;
color: #fff;
padding: 8px 10px;
border-radius: 4px;
font-size: 12px;
z-index: 9999;
box-shadow: 0 2px 8px rgba(0,0,0,0.3);
}
.help:hover::before {
content: "";
position: absolute;
top: 18px;
left: 8px;
border-width: 6px;
border-style: solid;
border-color: #333 transparent transparent transparent;
z-index: 9999;
}
</style>
<script type="text/javascript"> <script type="text/javascript">
//html이 ready 된 상태에서 내용 적용. //html이 ready 된 상태에서 내용 적용.
@ -36,10 +113,46 @@ function resize(){
<div class="popup_area" style="background-color:#f9f9f9; border:1px solid #cfcfd1;"> <div class="popup_area" style="background-color:#f9f9f9; border:1px solid #cfcfd1;">
<div class="btn_close_right" onclick="popup_close();return false;"><a href="#"><img src="/web/images/pop_btn_close.png" alt="창닫기" /></a></div> <div class="btn_close_right" onclick="popup_close();return false;"><a href="#"><img src="/web/images/pop_btn_close.png" alt="창닫기" /></a></div>
<div class="pop_title" style="border-bottom:1px solid #dddddd;">수정요청사유</div> <div class="pop_title" style="border-bottom:1px solid #dddddd;">수정요청사유</div>
<div class="pop_contents" style="position:relative;word-wrap:break-word;min-height:200px;">${result.smsMsg}</div> <div class="pop_contents" style="position:relative;word-wrap:break-word;min-height:200px;">${result.smsMsg}</div>
</div> </div>
<c:choose>
<c:when test="${empty modiItem }">
</c:when>
<c:otherwise>
<div class="popup_area" style="background-color:#f9f9f9; border:1px solid #cfcfd1;">
<div class="pop_title" style="border-bottom:1px solid #dddddd;">수정요청 대상</div>
<div class="pop_contents">
<c:set var="prevGrp" value="" />
<ul>
<c:forEach var="item" items="${modiItem}" varStatus="st">
<!-- 새로운 그룹이 시작되는 경우 -->
<c:if test="${prevGrp ne item.GRP_IDX}">
<!-- 첫 그룹이 아니라면 이전 그룹의 ul/li 닫기 -->
<c:if test="${!st.first}">
</ul>
</li>
</c:if>
<!-- 그룹 제목 표시 -->
<li data-grp="${item.GRP_IDX }">
${item.GRP_NAME} <c:if test="${not empty item.GRP_DESC }"><i class="help" data-tooltip="${ item.GRP_DESC }">?</i></c:if>
<ul>
</c:if>
<!-- 아이템 출력 -->
<li>${item.ITEM_NAME}<c:if test="${!(st.last or item.GRP_IDX ne modiItem[st.index + 1].GRP_IDX)}">,</c:if>
</li>
<!-- prevGrp 최신화 -->
<c:set var="prevGrp" value="${item.GRP_IDX}" />
<!-- 마지막 루프일 경우 태그 닫기 -->
<c:if test="${st.last}">
</ul>
</li>
</c:if>
</c:forEach>
</ul>
</div>
</div>
</c:otherwise>
</c:choose>
</div> </div>
</form> </form>
</body> </body>