51일 차 특이사항
1. 어제 해결 못했던 문제는 얼추 해결이 됐다. 그러나 BOSS, KING계급에서 날짜검색 시 임시저장 글이 사라지는 문제가 발생했다.
- 날짜 검색 조건이 <if>로 설정되어 있어서 그런가? <choose>로 다시 설정해줬다.
- 그래도 해결 안됨.
- 무엇이 문제인지 파악이 안 되고 있다.
- <choose> <when> 태그를 모두 삭제하고 <if>로 바꿔주니 잘 된다.
<select id="apprList" resultMap="apprListRs" parameterType="map">
SELECT
SEQ
,WRITE_ID
,(select MEM_NAME from JSH_APPROVAL_MEMBER sam where sam.mem_id = sal.write_id) WRITE_NAME
,APPR_SUBJECT
,APPR_STATUS
,decode(APPR_STATUS, 'tmp','임시저장','wat','결재대기','ing','결재중','end','결재완료','ret','반려') APPR_STATUS_KOR
,APPR_REG_DATE
,APPR_DATE
,APPR_APPER
,(select MEM_NAME from JSH_APPROVAL_MEMBER sam where sam.mem_id = sal.APPR_APPER) APPER_NAME
FROM JSH_APPROVAL_LIST sal
WHERE 1=1
<if test="searchStatus != 'stEmp' and searchStatus != null and searchStatus != ''">
and APPR_STATUS = #{searchStatus}
</if>
<if test="stDate != null and stDate != ''">
and APPR_REG_DATE >= TO_DATE(#{stDate}, 'yyyy-MM-dd')
</if>
<if test="enDate != null and enDate != ''">
and APPR_REG_DATE <= TO_DATE(#{enDate}, 'yyyy-MM-dd') +1
</if>
<if test="memInfo.memRank == 'CLERK' or memInfo.memRank == 'MANAGER'">
and WRITE_ID = #{memInfo.memId}
</if>
<if test="memInfo.memRank == 'BOSS'">
and (APPR_APPER = #{memInfo.memId}
OR APPR_STATUS = 'wat'
OR (APPR_APPER = #{memInfo.memId} and APPR_STATUS = 'ing')
OR (WRITE_ID = #{memInfo.memId} and APPR_STATUS = 'ret')
OR (WRITE_ID = #{memInfo.memId} and APPR_STATUS = 'tmp'))
</if>
<if test="memInfo.memRank == 'KING'">
and (APPR_STATUS = 'ing'
OR (APPR_APPER = #{memInfo.memId} AND APPR_STATUS = 'end')
OR (WRITE_ID = #{memInfo.memId} and APPR_STATUS = 'tmp'))
</if>
<if test="searchType == 'writeName'">
and write_id in (select mem_id from JSH_APPROVAL_MEMBER where mem_name like '%${searchTxt}%')
</if>
<if test="searchType == 'appSubject'">
and APPR_SUBJECT like '%${searchTxt}%'
</if>
<if test="searchType == 'apperName'">
and APPR_APPER like '%${searchTxt}%'
</if>
order by seq desc
</select>
2. 이로써 결재시스템 제작 완료. 팀장님께 점검을 받아보자. 오류가 있는지 궁금하다.
3. 일경험 일지 쓰기
수정할 사항
1. 검색 조건, 검색어 입력 부분만 검색어가 유지된다. 결제상태, 날짜도 체크 상태가 유지되어야 한다.
$("#searchType").val('${map1.searchType}');
$("#searchTxt").val('${map1.searchTxt}');
$("#searchStatus").val('${map1.searchStatus}');
$("#stDate").val('${map1.stDate}');
$("#enDate").val('${map1.enDate}');
- searchStatus, stDate, enDate 추가해 줘서 해결
2. 반려 시 결제일, 결재자에 기록이 남아야 한다. null값이 들어가는 순간은 사원이 임시저장 혹은 결재를 눌렀을 때다.
- 조건식 변경 : status가 ret인 경우 APPR_DATE와 APPR_APPER에 null 값을 넣어줬는데 삭제했다. 이제 반려하면 결제일과 결재자가 남는다. 사원이 임시저장을 누르거나 결재를 누르면 null값이 들어가서 빈칸이 된다. 과장이 결재 누르면 그제서야 결재일과 결재자가 기록된다.
<update id="update" parameterType="map">
update JSH_APPROVAL_LIST
set
APPR_SUBJECT = #{subj},
APPR_CONTENT = #{content},
APPR_STATUS = #{status},
APPR_DATE =
<choose>
<when test="status == 'tmp'">null</when>
<when test="status == 'wat'">null</when>
<otherwise>sysdate</otherwise>
</choose>,
APPR_APPER =
<choose>
<when test="status == 'tmp'">null</when>
<when test="status == 'wat'">null</when>
<otherwise>#{memInfo.memId}</otherwise>
</choose>
where seq = #{seq}
</update>
3. 부장은 다른 부장의 반려글, 결재완료 글을 볼 수 있어야 한다.
- 조건 변경
<if test="memInfo.memRank == 'KING'">
and (APPR_STATUS = 'ing' <!-- 결제중인 글 -->
OR APPR_STATUS = 'end' <!-- 결제완료 글, 다른 부장이 완료한 것도 보인다. -->
OR APPR_STATUS = 'ret'<!-- 반려시킨 글 -->
OR (WRITE_ID = #{memInfo.memId} and APPR_STATUS = 'tmp')) <!-- 자신이 쓴 임시저장글 -->
</if>
느낀 점
어려웠다. 그래도 마무리가 되는구나. 끊임없이 수정하고 고치고 찾아보고 힘든 일이다. 힘들지만 이런 과정이 익숙해졌다. 답답한 마음도 조금 사라졌다. 인내심을 기르는데 코딩이 최고인 것 같다.
'일경험' 카테고리의 다른 글
[국민취업지원제도 일경험프로그램 53일차] 대리결재 기능 (0) | 2023.10.23 |
---|---|
[국민취업지원제도 일경험프로그램 52일차] 결재시스템 대리결제 (제이쿼리 팝업창 제어 window.open(), window.close()) (0) | 2023.10.20 |
[결재 시스템] 결재 상태가 반려로 바뀌면 결재일과 결재자를 null로 바꿔주기 (0) | 2023.10.18 |
[국민취업지원제도 일경험프로그램 50일차] 결재시스템 2개 남았다⑩ (0) | 2023.10.18 |
[국민취업지원제도 일경험프로그램 49일차] 결재시스템 중간점검⑨ (0) | 2023.10.17 |