본문 바로가기

일경험

[국민취업지원제도 일경험프로그램 51일차] 결재시스템 마무리 ⑩

반응형

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 &gt;= TO_DATE(#{stDate}, 'yyyy-MM-dd')
    </if> 
    <if test="enDate != null and enDate != ''">
        and APPR_REG_DATE &lt;= 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 추가해 줘서 해결

searchStatus&#44; stDate&#44; 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>

 

느낀 점

어려웠다. 그래도 마무리가 되는구나. 끊임없이 수정하고 고치고 찾아보고 힘든 일이다. 힘들지만 이런 과정이 익숙해졌다. 답답한 마음도 조금 사라졌다. 인내심을 기르는데 코딩이 최고인 것 같다. 

 

 

 

 

반응형