<?xml version="1.0" encoding="UTF-8"?>
<!-- Es un archivo de mapeo -->
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.mx.dla.dda.admin.catalogos.estudios.daos.CatalogoEstudiosDAO">

	<resultMap id="estudio" type="CatalogoEstudioDTO">	

		<id property="idEstudio" 		column="ID_ESTUDIO" />
		<result property="idSap" 		column="ID_SAP" />
		<result property="descripcionEstudio" 	column="DESC_ESTUDIO" />
		<result property="descripcionGrupo" 	column="DESC_GRUPO" />
		<result property="moneda" 				column="MONEDA" />
		<result property="codigoPais" 			column="CODIGO_PAIS" />
		<result property="nombrePais" 			column="NOMBRE_PAIS" />
		<result property="sociedad" 			column="SOCIEDAD" />
		<result property="siglaDda" 			column="SIGLA_DDA" />
		<result property="orden" 				column="ORDEN" />
		<result property="idGrupo" 				column="ID_GRUPO" />
		<result property="esAddOn" 				column="ES_ADD_ON" />
		<result property="addOn" 			column="ADD_ON" />
		
	</resultMap>
	
	<resultMap id="estudioAddon" type="EstudioAddonDTO">	

		<id property="idEstudio" 		column="ID_ESTUDIO" />
		<result property="nombre" 		column="NOMBRE" />
		<result property="idReporte" 	column="ID_REPORTE" />
		<result property="formula" 		column="DESC_FORMULA" />
		<result property="addon" 		column="ADD_ON" />
		<result property="agrupado" 	column="AGRUPADO" />
		<result property="reduClientes" column="RED_CLIENTES" />
		<result property="decimales" 	column="DECIMALES" />
		
	</resultMap>
	
	<resultMap id="reportes" type="ReporteAddonDTO">	

		<id property="idReporte" 		column="ID_REPORTE" />
		<result property="formula" 		column="FORMULA" />
		<result property="descFormula" 		column="DESC_FORMULA" />
		<result property="columnnas" 	column="COLUMNAS" />
		
	</resultMap>
	
	<resultMap id="menuEstudio" type="EstudioMenuDTO">	
		<id property="idEstudio" 		column="ID_ESTUDIO" />
		<result property="descripcionEstudio" 	column="DESC_ESTUDIO" />
	</resultMap>
	
	<resultMap id="menuContrato" type="CatalogoContratoDTO">	
		<id property="idContrato" 		column="ID_CONTRATO" />
		<result property="numContrato" 	column="NUMERO_CONTRATO" />
	</resultMap>

	<select id="catalogoEstudios" resultMap="estudio">
		SELECT ce.ID_ESTUDIO,
	        ce.ID_SAP,
	        ce.DESC_ESTUDIO,
	        ceg.DESC_GRUPO,
	        ce.MONEDA,
	        ce.CODIGO_PAIS,
	        ce.NOMBRE_PAIS,
	        ce.SOCIEDAD,
	        ce.SIGLA_DDA,
	        ce.ORDEN,
	        ce.ID_GRUPO
			FROM DDA_C_ESTUDIO ce JOIN DDA_C_ESTUDIO_GRUPO ceg ON (ce.ID_GRUPO = ceg.ID_GRUPO)
			ORDER BY ce.DESC_ESTUDIO
	</select>
	
	<select id="catalogoEstudiosAddOn" resultMap="estudioAddon">
		SELECT ID_ESTUDIO, NOMBRE, r.DESC_FORMULA, e.ID_REPORTE, ADD_ON, 
		CASE WHEN AGRUPADO = 1 THEN 'SI' ELSE 'NO' END AS AGRUPADO, RED_CLIENTES, DECIMALES
		FROM DDA_C_ESTUDIO_ADD_ON e INNER JOIN DDA_C_REPORTE_ADD_ON r ON e.ID_REPORTE = r.ID_REPORTE ORDER BY NOMBRE
	</select>
	
	<select id="catalogoEstudiosAddOnById" resultMap="estudioAddon">
		SELECT ID_ESTUDIO, NOMBRE, r.DESC_FORMULA, e.ID_REPORTE, ADD_ON, 
		CASE WHEN AGRUPADO = 1 THEN 'SI' ELSE 'NO' END AS AGRUPADO, RED_CLIENTES, DECIMALES
		FROM DDA_C_ESTUDIO_ADD_ON e INNER JOIN DDA_C_REPORTE_ADD_ON r ON e.ID_REPORTE = r.ID_REPORTE 
		WHERE ID_ESTUDIO = #{idEstudio} ORDER BY NOMBRE
	</select>
	
	<select id="obtenerEstudioPorId" resultMap="estudio">
		SELECT 	ce.ID_ESTUDIO,
	        	ce.DESC_ESTUDIO
		FROM 	DDA_C_ESTUDIO ce
		WHERE 	ce.ID_ESTUDIO = #{idEstudio}
	</select>

	<select id="menuCatalogoEstudios" resultMap="menuEstudio">
		select	estudio.ID_ESTUDIO		ID_ESTUDIO,
            	estudio.DESC_ESTUDIO	DESC_ESTUDIO
		from    DDA_C_ESTUDIO estudio
		ORDER BY estudio.DESC_ESTUDIO
	</select>

	<select id="catalogoEstudiosPorId" resultMap="estudio">
		select	estudio.ID_ESTUDIO		ID_ESTUDIO,
		        estudio.ID_SAP 			ID_SAP,
            	estudio.DESC_ESTUDIO	DESC_ESTUDIO,
            	estudio.MONEDA 			MONEDA,
		        estudio.CODIGO_PAIS 	CODIGO_PAIS,
		        estudio.NOMBRE_PAIS 	NOMBRE_PAIS,
            	estudio.SOCIEDAD 		SOCIEDAD,
            	estudio.SIGLA_DDA		SIGLA_DDA,
            	estudio.ORDEN			ORDEN,
            	estudio.ID_GRUPO        ID_GRUPO
		from    DDA_C_ESTUDIO estudio
		where   estudio.ID_ESTUDIO=#{idEstudio}
	</select>
	
	<update id="updateEstudio" parameterType="CatalogoEstudioDTO">
		update 	DDA_C_ESTUDIO 
  		set 	SIGLA_DDA=#{siglaDda}, 
  				DESC_ESTUDIO = #{descripcionEstudio},
  				ID_GRUPO = #{idGrupo},
  				ORDEN=#{orden},
  				ES_ADD_ON = #{esAddOn},
  				ADD_ON = #{addOn}
  		where 	ID_ESTUDIO=#{idEstudio} 
  	</update>
  	
  	<insert id="guardarEstudio" parameterType="CatalogoEstudioDTO">
		<selectKey keyProperty="idEstudio" resultType="int" order="BEFORE">
	     		   select DDA_SQC_ESTUDIO.nextVal from DUAL
	  	</selectKey> 	  	
		INSERT INTO DDA_C_ESTUDIO 
		      ( ID_ESTUDIO  ,  ID_SAP,         DESC_ESTUDIO,      MONEDA,  CODIGO_PAIS, NOMBRE_PAIS, SOCIEDAD, SIGLA_DDA, ORDEN, ID_GRUPO)
 	    VALUES( #{idEstudio},   null,  #{descripcionEstudio},        null,        null,        null,     null,      null, null, #{idGrupo}) 	    	        	   
  	</insert>
  	
  	<update id="actualizaEstudio">
  		UPDATE DDA_C_ESTUDIO SET SIGLA_DDA = #{siglaDda}, ID_GRUPO = #{idGrupo}, ES_ADD_ON = #{esAddOn}, ADD_ON = #{addOn}  WHERE ID_ESTUDIO = #{idEstudio}
  	</update>
  	  	
  	<select id="findIdGrupoDefault" resultType="long">
		select	ID_GRUPO from DDA_C_ESTUDIO_GRUPO where ES_EDITABLE = 0
	</select>
	
	<select id="obtenSiglaEstudios" resultType="String">
		SELECT  
		        SIGLA_DDA 
		FROM 
		        DDA_C_ESTUDIO
		WHERE SIGLA_DDA IS NOT NULL
		AND NOT (ID_ESTUDIO = #{idEstudio} AND SIGLA_DDA = #{sigla})
		ORDER BY DESC_ESTUDIO
	</select>
	
	<select id="numContratosXEstuio" resultType="int">
		select count(*) from DDA_T_CONTRATO where id_estudio = #{idEstudio}
	</select>
	
	<select id="contratosByEstudio" resultMap="menuContrato">
		SELECT ID_CONTRATO, NUMERO_CONTRATO FROM DDA_T_CONTRATO WHERE id_estudio = #{idEstudio} ORDER BY NUMERO_CONTRATO
	</select>
	
	
	<select id="getTiposReporte" resultMap="reportes">
		SELECT ID_REPORTE, DESC_FORMULA, FORMULA, COLUMNAS FROM DDA_C_REPORTE_ADD_ON
	</select>
	
	<select id="getTiposReporteById" resultMap="reportes">
		SELECT ID_REPORTE, DESC_FORMULA, FORMULA, COLUMNAS FROM DDA_C_REPORTE_ADD_ON WHERE ID_REPORTE = #{id}
	</select>
	
  	<insert id="guardarAddon" parameterType="EstudioAddonDTO">
  	
		<selectKey keyProperty="idEstudio" resultType="int" order="BEFORE">
	     		   select DDA_SQC_ESTUDIO_ADD_ON.nextVal from DUAL
	  	</selectKey>
	  	INSERT INTO DDA_C_ESTUDIO_ADD_ON
		(ID_ESTUDIO, NOMBRE, ID_REPORTE, ADD_ON, AGRUPADO, RED_CLIENTES, DECIMALES)
		VALUES(#{idEstudio}, #{nombre}, #{idReporte}, #{addon}, #{agrupado}, #{reduClientes}, #{decimales})	    	        	   
  	</insert>
  	
	<update id="updateAddon" parameterType="EstudioAddonDTO">
		update 	DDA_C_ESTUDIO_ADD_ON 
  		set 	ADD_ON=#{addon}, 
  				ID_REPORTE = #{idReporte},
  				RED_CLIENTES = #{reduClientes},
  				NOMBRE = #{nombre},
  				AGRUPADO = #{agrupado}
  		where 	ID_ESTUDIO=#{idEstudio} 
  	</update>
		
	<update id="cerrarHistorico" parameterType="EstudioAddonDTO">
		UPDATE DDA_CV_ADD_ONS_HISTORICO SET CERRADO = 1 WHERE EXTRACT(MONTH FROM MES_CARGA)= #{mes}
		AND EXTRACT(YEAR FROM MES_CARGA)= #{anio} AND ID_ESTUDIO = #{idEstudio}
  	</update>
  	
  	<select id="guardarHistorico" parameterType="map" statementType="CALLABLE">
      { CALL DDA_ADD_ONS_HISTORICO( #{idEstudio, mode=IN, javaType=LONG, jdbcType=NUMERIC},
      #{anio, mode=IN, javaType=INTEGER, jdbcType=NUMERIC},#{mes, mode=IN, javaType=INTEGER, jdbcType=NUMERIC},
      #{reportetype, mode=IN, javaType=INTEGER, jdbcType=NUMERIC} ) } 
   </select>

</mapper>
