<?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.contrato.generales.daos.ValidacionGeneralesDAO">
	
	<resultMap id="autorizador" type="AutorizadorDTO">
		<result property="expediente" 	column="EXPEDIENTE" />
		<result property="email" 		column="EMAIL" />
		<result property="idArea" 		column="ID_AREA" />
		<result property="idPerfil" 	column="ID_PERFIL" />
	</resultMap>
	
	<resultMap id="correoExterno" type="CorreoExternoDTO">
		<id property="idCorreoExterno" 	column="ID_CORREO_EXTERNO" />
		<result property="correo" 		column="CORREO" />
		<result property="seccion" 		column="SECCION" />
		<result property="estatus" 		column="ESTATUS" />
	</resultMap>
	
	<resultMap id="detalleCorreo" type="DetalleCorreoDTO">
		<result property="numeroContrato" 		column="NUMERO_CONTRATO" />
		<result property="descripcionEstudio"	column="DESC_ESTUDIO" />
		<result property="fechaInicio" 			column="FECHA_INICIO" />
		<result property="fechaFin" 			column="FECHA_FIN" />
		<result property="noTitulos" 			column="NO_TITULOS" />
		<result property="monto" 				column="MONTO" />
	</resultMap>
	
	<resultMap id="WFSeguimiento" type="WFSeguimientoDTO">
		<id property="idWFSeguimiento" 		column="ID_WF_SEG" />
		<result property="idContrato" 		column="ID_CONTRATO" />
		<result property="idPasoWF" 		column="ID_PASO_WF" />
		<result property="fecha1" 			column="FECHA_1RO" />
		<result property="fecha2" 			column="FECHA_2DO" />
		<result property="fecha3" 			column="FECHA_3RO" />
		<result property="estaAutorizado"	column="ESTA_AUTORIZADO" />
	</resultMap>
	
	<resultMap id="WFPaso" type="WFPasoDTO">
		<id property="idArea" 				column="ID_AREA" />
		<result property="descripcionArea" 	column="DESC_AREA" />
		<result property="autorizaContrato"	column="AUTORIZA_CONTRATO" />
		<result property="ordenWF" 			column="ORDEN" />
		<result property="enviaExterno" 	column="ENVIA_EXTERNO" />
		<result property="idEstatus" 		column="ID_ESTATUS_AUTORIZA" />
	</resultMap>
	
	

	<select id="obtenCantidad" resultType="Double">
		SELECT NVL( SUM(COSTO), 0 ) AS COSTO  FROM DDA_T_CONTRATO_TITULO WHERE ID_CONTRATO=#{idContrato}
	</select>
	
	<select id="obtenIdProveedor" resultType="String">
		SELECT ID_SAP FROM DDA_C_ESTUDIO WHERE ID_ESTUDIO=#{idEstudio}
	</select>
	
	<insert id="registraContratoSAP">
		INSERT INTO DDA_T_CONTRATO_SAP (ID_CONTRATO,ANNIO,POSICION,MONTO) 
		VALUES (#{idContrato ,javaType=long, jdbcType=NUMERIC}, #{anio ,javaType=long, jdbcType=NUMERIC}, #{posicion ,javaType=String, jdbcType=VARCHAR}, #{cantidad ,javaType=String, jdbcType=VARCHAR})
	</insert>
	
	<update id="actualizaContratoSAP">
		UPDATE DDA_T_CONTRATO_SAP SET MONTO=#{cantidad} WHERE ID_CONTRATO=#{idContrato}
	</update>
	
	<select id="obtenMontoContratoSAP" resultType="Double">
		SELECT NVL( SUM(MONTO), 0 ) AS MONTO FROM DDA_T_CONTRATO_SAP WHERE ID_CONTRATO=#{idContrato}
	</select>
	
	<select id="obtenerIdSapEstudioContrato" resultType="String">
		SELECT DDA_C_ESTUDIO.ID_SAP 
		FROM DDA_T_CONTRATO JOIN DDA_C_ESTUDIO ON (DDA_T_CONTRATO.ID_ESTUDIO = DDA_C_ESTUDIO.ID_ESTUDIO) 
		WHERE ID_CONTRATO=#{idContrato}
	</select>
	
	<select id="contarDocumentosContrato" resultType="Integer">
		SELECT COUNT (EXTENSION) AS NO_DOCTOS 
		FROM (SELECT UPPER (SUBSTR(NOMBRE_ARCHIVO, -3)) AS EXTENSION FROM DDA_T_CONTRATO_DOCTO WHERE DDA_T_CONTRATO_DOCTO.ID_CONTRATO = #{idContrato}) 
		WHERE EXTENSION = 'PDF'
	</select>
	
	<select id="contarFilialesContrato" resultType="Integer">
		SELECT COUNT(ID_CONTRATO) AS NO_FILIALES FROM DDA_T_CONTRATO_DEAL_FILIAL WHERE ID_CONTRATO = #{idContrato}
	</select>
	
	<select id="contarCondicionesPagoContrato" resultType="Integer">
		SELECT COUNT(ID_CONTRATO) AS NO_CONDICIONES FROM DDA_T_CONTRATO_PAGO WHERE ID_CONTRATO = #{idContrato}
	</select>
	
	<select id="esContratoAmortizable" resultType="String">
		SELECT AMORTIZABLE FROM DDA_T_CONTRATO WHERE ID_CONTRATO = #{idContrato}
	</select>
	
	<select id="contarAmortizacionesContrato" resultType="Integer">
		SELECT COUNT(ID_CONTRATO) AS NO_AMORTIZACIONES FROM DDA_T_CONTRATO_AMORTIZACION WHERE ID_CONTRATO = #{idContrato}
	</select>
	
	<select id="contarTitulosActivosContrato" resultType="Integer">
		<!-- SELECT COUNT(ID_CONTRATO) AS NO_TITULOS FROM DDA_T_CONTRATO_TITULO WHERE ID_CONTRATO = #{idContrato} -->
		SELECT NVL( COUNT(ID_TITULO_CNT), 0 ) AS NO_TITULOS FROM DDA_T_CONTRATO_TITULO WHERE ID_CONTRATO = #{idContrato} AND ESTATUS = 'ACTIVO'
	</select>
	
	<select id="obtenerTotalTitulosEnTerminos" resultType="Integer">
		SELECT NVL( SUM( TOTAL_TITULOS ), 0 ) AS TOTAL_TITULOS FROM DDA_T_CONTRATO_TERMINO WHERE ID_CONTRATO = #{idContrato}
	</select>
	
	<select id="obtenerApartadoContrato" resultType="Long">
		SELECT ID_APARTADO FROM DDA_T_CONTRATO WHERE ID_CONTRATO = #{idContrato}
	</select>
	
	<select id="obtenerAutorizador" resultMap="autorizador">
		SELECT CU.EXPEDIENTE, CU.EMAIL, CU.ID_AREA, CUP.ID_PERFIL 
		FROM DLA_C_USUARIO CU JOIN (DLA_C_USUARIO_PERFIL CUP JOIN (DLA_C_PERFIL CP JOIN DLA_C_PERFIL_MENU PM 
		ON (CP.ID_PERFIL = PM.ID_PERFIL)) ON (CUP.ID_PERFIL = CP.ID_PERFIL)) ON (CU.EXPEDIENTE = CUP.EXPEDIENTE) 
		WHERE PM.ID_MENU = #{idMenu} <if test="idArea != null"> AND CU.ID_AREA = #{idArea} </if>
	</select>
	
	<select id="obtenerTodosAreas" resultMap="autorizador">
		SELECT 
		        CU.EXPEDIENTE, 
		        CU.EMAIL, 
		        CU.ID_AREA, 
		        CUP.ID_PERFIL
		FROM  
		        DLA_C_USUARIO cu,
		        DLA_C_USUARIO_PERFIL cup
		WHERE cu.EXPEDIENTE = cup.EXPEDIENTE
		ORDER BY ID_AREA
	</select>
	
	<select id="obtenerCorreoExterno" resultMap="correoExterno">
		SELECT TCE.ID_CORREO_EXTERNO, TCE.CORREO, TCE.SECCION, TCE.ESTATUS 
		FROM DDA_T_CORREO_EXTERNO TCE WHERE TCE.ESTATUS = 1 AND SECCION = #{seccion} ORDER BY TCE.SECCION
<!-- 		SELECT TCE.ID_CORREO_EXTERNO, TCE.CORREO, TCE.SECCION, TCE.ESTATUS 
		FROM DDA_T_CORREO_EXTERNO TCE WHERE TCE.ESTATUS = 1 ORDER BY TCE.SECCION -->
	</select>
	
	<select id="obtenerDetalleParaCorreo" resultMap="detalleCorreo">
		SELECT TC.NUMERO_CONTRATO, CE.DESC_ESTUDIO, TC.FECHA_INICIO, TC.FECHA_FIN, 
		DECODE( NVL( COUNT(TCT.ID_TITULO_CNT), ''), '', 0, COUNT(TCT.ID_TITULO_CNT) ) AS NO_TITULOS, 
		DECODE( NVL( SUM(TCT.COSTO), ''), '', 0, SUM(TCT.COSTO) ) AS MONTO 
		FROM DDA_T_CONTRATO_TITULO TCT RIGHT JOIN (DDA_T_CONTRATO TC JOIN DDA_C_ESTUDIO CE ON(TC.ID_ESTUDIO = CE.ID_ESTUDIO)) ON (TCT.ID_CONTRATO = TC.ID_CONTRATO ) 
		WHERE TC.ID_CONTRATO = #{idContrato} GROUP BY (TC.NUMERO_CONTRATO, CE.DESC_ESTUDIO, TC.FECHA_INICIO, TC.FECHA_FIN)
<!-- 		SELECT TC.NUMERO_CONTRATO, CE.DESC_ESTUDIO, TC.FECHA_INICIO, TC.FECHA_FIN, COUNT(TCT.ID_TITULO) AS NO_TITULOS, SUM(TCT.COSTO) AS MONTO 
		FROM DDA_T_CONTRATO_TITULO TCT JOIN (DDA_T_CONTRATO TC JOIN DDA_C_ESTUDIO CE ON(TC.ID_ESTUDIO = CE.ID_ESTUDIO)) ON (TCT.ID_CONTRATO = TC.ID_CONTRATO ) 
		WHERE TC.ID_CONTRATO = #{idContrato} GROUP BY (TC.NUMERO_CONTRATO, CE.DESC_ESTUDIO, TC.FECHA_INICIO, TC.FECHA_FIN) -->
	</select>
	
	<select id="obtenIdMenuParaAutorizarContrato" resultType="Long">
		SELECT ID_MENU FROM DLA_C_MENU WHERE NOMBRE = #{nombre}
	</select>
	
	<insert id="registraAutorizacion">  <!-- por modificar -->
	
		INSERT INTO DDA_T_CONTRATO_WF(ID_CONTRATO, ID_PASO_WF, EXPEDIENTE, FECHA_AUTORIZACION)
		VALUES (#{idContrato ,javaType=long, jdbcType=NUMERIC}, #{idAreaWF ,javaType=long, jdbcType=NUMERIC}, #{expediente ,javaType=String, jdbcType=VARCHAR}, #{fechaRegistro})
	</insert>
	
	<delete id="eliminaAutorizacionRegistrada">
		DELETE DDA_T_CONTRATO_WF WHERE ID_CONTRATO = #{idContrato} AND ID_PASO_WF = #{idPaso}
	</delete>
	
	<select id="obtenerTipoFees" resultType="String">
		SELECT DISTINCT TIPO_PAGO FROM DDA_T_CONTRATO_PAGO WHERE ID_CONTRATO = #{idContrato}
	</select>
	
	<select id="contarTerminosContrato" resultType="Integer">
		SELECT COUNT(ID_CONTRATO) AS NO_TERMINOS FROM DDA_T_CONTRATO_TERMINO WHERE ID_CONTRATO = #{idContrato}
	</select>
	
	<select id="obtenerDescripcionEstudio" resultType="String">
		SELECT DESC_ESTUDIO FROM DDA_C_ESTUDIO WHERE ID_ESTUDIO = #{idEstudio}
	</select>
	
	<select id="contarSinSubnumero" resultType="Integer">
		SELECT 
       		 	COUNT(tcss.ID_REGISTRO_SAP) AS SINSUBNUMERO
		FROM 
		        DDA_T_CONTRATO_SAP_SUBNUM tcss 
		WHERE 
		        tcss.ID_CONTRATO = #{idContrato}
		AND     tcss.DISMINUCION IS NOT NULL
		AND     tcss.SUBNUMERO IS NULL
	</select>
	
	<update id="actualizaEstaAutorizado">
		UPDATE DDA_T_WF_SEGUIMIENTO SET ESTA_AUTORIZADO = 1 WHERE ID_CONTRATO = #{idContrato} AND ID_PASO_WF = #{idPasoWF}
	</update>
	
	<insert id="registraWFSeguimiento" parameterType="WFSeguimientoDTO" useGeneratedKeys="true" keyProperty="idWFSeguimiento">

		<selectKey keyProperty="idWFSeguimiento" resultType="long" order="BEFORE">
			select DDA_SQT_WF_SEGUIMIENTO.nextVal from DUAL
		</selectKey>
		
		INSERT INTO DDA_T_WF_SEGUIMIENTO (
											ID_WF_SEG, 
											ID_CONTRATO, 
											ID_PASO_WF, 
											FECHA_1RO, 
											FECHA_2DO, 
											FECHA_3RO, 
											ESTA_AUTORIZADO
										)  VALUES (
											#{idWFSeguimiento}, 
											#{idContrato}, 
											#{idPasoWF}, 
											 sysdate, 
											#{fecha2, javaType=Date, jdbcType=DATE},
											#{fecha3, javaType=Date, jdbcType=DATE},
											#{estaAutorizado}
										)
	</insert>
	
	<select id="obtnerWFPaso" resultMap="WFPaso">
		SELECT 
              ca.ID_AREA, 
              ca.DESC_AREA, 
              ca.AUTORIZA_CONTRATO, 
              cwf.ORDEN, 
              cwf.ENVIA_EXTERNO, 
              cwf.ID_ESTATUS_AUTORIZA 
        FROM 
              DDA_C_WF_AUTORIZACION cwf 
              JOIN DDA_C_AREA ca 
              ON (cwf.ID_AREA = ca.ID_AREA) where cwf.ORDEN = #{ordenPasoWF}
	</select>
	
	<insert id="registraPasoWF"> 
		INSERT INTO DDA_T_CONTRATO_WF(ID_CONTRATO, ID_PASO_WF, EXPEDIENTE, FECHA_AUTORIZACION)
		VALUES (#{idContrato ,javaType=long, jdbcType=NUMERIC}, #{idPasoWF ,javaType=int, jdbcType=NUMERIC}, #{expediente ,javaType=String, jdbcType=VARCHAR}, #{fechaRegistro})
	</insert>
	
	<select id="obtenerIdSapApartado" resultType="String">
		select ta.ID_SAP from dda_t_apartado ta where ta.ID_APARTADO = #{idApartado}
	</select>
	
	<select id="ObtenerErroresCalculoMinimoGarantizado" resultType="Integer">
		SELECT COUNT (*) AS ERRORES FROM DDA_T_CNT_MG 
		WHERE ID_CONTRATO_ORIGINAL=#{idContrato}
		AND ESTATUS != 'OK'
	</select>

</mapper>
