<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cokr.xit.base.code.dao.CodeMapper">

<resultMap id="categoryRow" type="cokr.xit.base.code.CodeCategory">
	<result property="id" column="CTGR_ID"/>
	<result property="name" column="CTGR_NM"/>
	<result property="description" column="DSCRP"/>
	<result property="createdAt" column="REG_DT"/>
	<result property="createdBy" column="RGTR"/>
	<result property="lastModified" column="MDFCN_DT"/>
	<result property="modifiedBy" column="MDFR"/>
	<result property="useYN" column="USE_YN"/>
</resultMap>

<resultMap id="groupRow" type="cokr.xit.base.code.CodeGroup">
	<result property="id" column="GRP_ID"/>
	<result property="name" column="GRP_NM"/>
	<result property="categoryID" column="CTGR_ID"/>
	<result property="description" column="DSCRP"/>
	<result property="createdAt" column="REG_DT"/>
	<result property="createdBy" column="RGTR"/>
	<result property="lastModified" column="MDFCN_DT"/>
	<result property="modifiedBy" column="MDFR"/>
	<result property="useYN" column="USE_YN"/>
</resultMap>

<resultMap id="codeRow" type="cokr.xit.base.code.CommonCode">
	<result property="groupID" column="GRP_ID"/>
	<result property="code" column="CODE"/>
	<result property="value" column="CODE_VAL"/>
	<result property="description" column="DSCRP"/>
	<result property="etc1" column="ETC_1"/>
	<result property="etc2" column="ETC_2"/>
	<result property="etc3" column="ETC_3"/>
	<result property="sortOrder" column="SRT_ORD"/>
	<result property="createdAt" column="REG_DT"/>
	<result property="createdBy" column="RGTR"/>
	<result property="lastModified" column="MDFCN_DT"/>
	<result property="modifiedBy" column="MDFR"/>
	<result property="useYN" column="USE_YN"/>
</resultMap>

<sql id="selectCategories"><include refid="utility.paging-prefix" />
SELECT *
  FROM TB_CODE_CTGR
 WHERE USE_YN = 'Y'
<if test="categoryIDs != null">  AND CTGR_ID IN (<foreach collection="categoryIDs" item="categoryID" separator=",">#{categoryID}</foreach>)</if>
<include refid="utility.orderBy" />
<include refid="utility.paging-suffix" /></sql>

<select id="getCategoryList" parameterType="map" resultType="dataobject">/* 코드 카테고리 목록 조회(codeMapper.getCategoryList) */
<include refid="selectCategories" /></select>

<select id="getCategories" parameterType="map" resultMap="categoryRow">/*코드 카테고리 가져오기(codeMapper.getCategories)*/
<include refid="selectCategories" /></select>

<insert id="insertCategory" parameterType="map">/* 코드 카테고리 등록(codeMapper.insertCategory) */
INSERT INTO TB_CODE_CTGR (
       CTGR_ID
     , CTGR_NM
     , DSCRP
     , REG_DT
     , RGTR
     , MDFCN_DT
     , MDFR
     , USE_YN
) VALUES (
       #{category.id}
     , #{category.name}
     , #{category.description}
     ,<include refid="utility.now" />
     , #{currentUser.id}
     ,<include refid="utility.now" />
     , #{currentUser.id}
     , 'Y'
)</insert>

<update id="updateCategory" parameterType="map">/* 코드 카테고리 수정(codeMapper.updateCategory) */
UPDATE TB_CODE_CTGR SET
       CTGR_NM = #{category.name}
     , DSCRP = #{category.description}
     , MDFCN_DT =<include refid="utility.now" />
     , MDFR = #{currentUser.id}
WHERE CTGR_ID = #{category.id}</update>

<delete id="removeCategories" parameterType="map">/* 코드 카테고리 제거(codeMapper.removeCategories) */
UPDATE TB_CODE_CTGR SET
       MDFCN_DT =<include refid="utility.now" />
     , MDFR = #{currentUser.id}
     , USE_YN = 'N'
<if test='categoryIDs != null'>WHERE CTGR_ID IN (<foreach collection="categoryIDs" item="categoryID" separator=",">#{categoryID}</foreach>)</if></delete>

<sql id="selectGroups"><include refid="utility.paging-prefix" />
SELECT *
  FROM TB_CODE_GRP
 WHERE USE_YN = 'Y'
<if test="categoryIDs != null">AND CTGR_ID IN (<foreach collection="categoryIDs" item="categoryID" separator=",">#{categoryID}</foreach>)</if>
<if test="groupIDs != null">AND GRP_ID IN (<foreach collection="groupIDs" item="groupID" separator=",">#{groupID}</foreach>)</if>
<include refid="utility.orderBy" />
<include refid="utility.paging-suffix" /></sql>

<select id="getGroupList" parameterType="dataobject" resultType="dataobject">/* 코드그룹 목록 조회(codeMapper.getGroupList) */
<include refid="selectGroups" /></select>

<select id="getGroups" parameterType="map" resultMap="groupRow">/* 코드그룹 가져오기(codeMapper.getGroups) */
<include refid="selectGroups" /></select>

<insert id="insertGroup" parameterType="map">/* 코드그룹 등록(codeMapper.insertGroup) */
INSERT INTO TB_CODE_GRP (
       GRP_ID
     , GRP_NM
     , CTGR_ID
     , DSCRP
     , REG_DT
     , RGTR
     , MDFCN_DT
     , MDFR
     , USE_YN
) VALUES (
       #{group.id}
     , #{group.name}
     , #{group.categoryID}
     , #{group.description}
     ,<include refid="utility.now" />
     , #{currentUser.id}
     ,<include refid="utility.now" />
     , #{currentUser.id}
     , 'Y'
)</insert>

<update id="updateGroup" parameterType="map">/* 코드그룹 수정(codeMapper.updateGroup) */
UPDATE TB_CODE_GRP SET
       GRP_NM = #{group.name}
     , CTGR_ID = #{group.categoryID}
     , DSCRP = #{group.description}
     , MDFCN_DT =<include refid="utility.now" />
     , MDFR = #{currentUser.id}
 WHERE GRP_ID = #{group.id}</update>

<update id="removeGroups" parameterType="map">/*코드그룹 제거(codeMapper.removeGroups) */
UPDATE TB_CODE_GRP SET
       USE_YN = 'N'
     , MDFCN_DT =<include refid="utility.now" />
     , MDFR = #{currentUser.id}
<where>
<if test="categoryIDs != null">CTGR_ID IN (<foreach collection="categoryIDs" item="categoryID" separator=",">#{categoryID}</foreach>)</if>
<if test="groupIDs != null">GRP_ID IN (<foreach collection="groupIDs" item="groupID" separator=",">#{groupID}</foreach>)</if>
</where></update>

<sql id="selectCodes"><include refid="utility.paging-prefix" />
SELECT *
  FROM TB_CMN_CODE
 WHERE USE_YN = 'Y'
  <if test='groupIDs != null'>AND GRP_ID IN (<foreach collection="groupIDs" item="groupID" separator=",">#{groupID}</foreach>)</if>
  <if test='codes != null'>AND CODE IN (<foreach collection="codes" item="code" separator=",">#{code}</foreach>)</if>
<include refid="utility.orderBy" />
<include refid="utility.paging-suffix" /></sql>

<select id="getCodeList" parameterType="map" resultType="dataobject">/* 그룹별 코드 가져오기(codeMapper.getCodeList) */
<include refid="selectCodes" /></select>

<select id="getCodes" parameterType="map" resultMap="codeRow">/* 코드 가져오기(codeMapper.getCodes) */
<include refid="selectCodes" /></select>

<insert id="insertCode" parameterType="map">/* 코드 등록(codeMapper.insertCode) */
INSERT INTO TB_CMN_CODE (
       GRP_ID
     , CODE
     , CODE_VAL
     , DSCRP
     , ETC_1
     , ETC_2
     , ETC_3
     , SRT_ORD
     , REG_DT
     , RGTR
     , MDFCN_DT
     , MDFR
     , USE_YN
) VALUES (
       #{code.groupID}
     , #{code.code}
     , #{code.value}
     , #{code.description}
     , #{code.etc1}
     , #{code.etc2}
     , #{code.etc3}
     , #{code.sortOrder}
     ,<include refid="utility.now" />
     , #{currentUser.id}
     ,<include refid="utility.now" />
     , #{currentUser.id}
     , 'Y'
)</insert>

<update id="updateCode" parameterType="map">/* 코드 수정(codeMapper.updateCode) */
UPDATE TB_CMN_CODE SET
       CODE_VAL = #{code.value}
     , DSCRP = #{code.description}
     , ETC_1 = #{code.etc1}
     , ETC_2 = #{code.etc2}
     , ETC_3 = #{code.etc3}
     , MDFCN_DT =<include refid="utility.now" />
     , MDFR = #{currentUser.id}
 WHERE GRP_ID = #{code.groupID}
   AND CODE = #{code.code}</update>

<update id="reorderCodes" parameterType="map">/* 코드 정렬순서 변경(codeMapper.reorderCodes) */
UPDATE TB_CMN_CODE SET
       SRT_ORD = CASE CODE<foreach collection="codes" item="code" index="index" separator=" ">
                 WHEN #{code} THEN #{index}</foreach>
                 ELSE SRT_ORD 
                 END
     , MDFCN_DT =<include refid="utility.now" />
     , MDFR = #{currentUser.id}
 WHERE GRP_ID = #{groupID}
   AND CODE IN (<foreach collection="codes" item="code" separator=",">#{code}</foreach>)</update>

<update id="removeCodes" parameterType="map">/* 코드 제거(codeMapper.removeCodes) */
UPDATE TB_CMN_CODE SET
       MDFCN_DT =<include refid="utility.now" />
     , MDFR = #{currentUser.id}
     , USE_YN = 'N'
<where>
<if test="groupIDs != null">AND GRP_ID IN (<foreach collection="groupIDs" item="groupID" separator=",">#{groupID}</foreach>)</if>
<if test="codes != null">AND CODE IN (<foreach collection="codes" item="code" separator=",">#{code}</foreach>) </if>
</where></update>

</mapper>