<?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="com.mx.dla.dda.contrato.generales.daos.GeneralesDAO">

	<resultMap id="contrato" type="ContratoDTO">
		<id property="idContrato" 				column="ID_CONTRATO" />
		<result property="idEstudio" 			column="ID_ESTUDIO" />
		<result property="idEstatus" 			column="ID_ESTATUS" />
		<result property="idTipoMovimiento"		column="ID_TIPO_MOVIMIENTO" />
		<result property="idTipoContrato" 		column="ID_TIPO_CONTRATO" />
		<result property="idApartado" 			column="ID_APARTADO" />
		<result property="numeroContrato" 		column="NUMERO_CONTRATO" />
		<result property="fechaInicio" 			column="FECHA_INICIO" />
		<result property="fechaFin" 			column="FECHA_FIN" />
		<result property="idContratoOriginal" 	column="ID_CONTRATO_ORIGINAL" />
		<result property="fechaAlta" 			column="FECHA_ALTA" />
		<result property="idSap" 				column="ID_SAP" />
		<result property="amortizable" 			column="AMORTIZABLE" />
		<result property="fechaWS" 				column="FECHA_WS" />
		<result property="fechaModificaSAP" 	column="FECHA_MODIFSAP" />
		<result property="annios" 				column="ANNIOS" />
		<result property="meses" 				column="MESES" />
		<result property="tipoAmortizacion" 	column="TIPO_AMORTIZACION" />
		<result property="fechaAutorizacion" 	column="FECHA_AUTORIZACION" />
		<result property="idContratoPadre" 		column="ID_CONTRATO_PADRE" />
		<result property="claveIva" 			column="CLAVE_IVA" />
		<result property="idContratoBv" 		column="ID_CONTRATO_BV" />
		<result property="statusBv" 			column="ESTATUS_BV" />
		<result property="statusSap" 			column="ESTATUS_SAP" />
	</resultMap>
	
	<resultMap id="fechas" type="FechasDTO">
		<id property="inicio" 	column="FECHA_INICIO" />
		<result property="fin" 	column="FECHA_FIN" />
	</resultMap>
	
	<resultMap id="area" type="AreaDTO">
		<id property="idArea" 				column="ID_AREA" />
		<result property="descripcionArea" 	column="DESC_AREA" />
		<result property="autorizaContrato"	column="AUTORIZA_CONTRATO" />
		<result property="orden" 			column="CAMBIA_ESTATUS" />
		<result property="enviaExterno" 	column="ENVIA_EXTERNO" />
		<result property="idEstatus" 		column="ID_ESTATUS_AUTORIZA" /> 
	</resultMap>
	
	<insert id="registrarContrato" parameterType="ContratoDTO" useGeneratedKeys="true" keyProperty="idContrato">

		<selectKey keyProperty="idContrato" resultType="long" order="BEFORE">
			select DDA_SQT_CONTRATO.nextVal from DUAL
		</selectKey>
		
		INSERT INTO DDA_T_CONTRATO (ID_CONTRATO, 
									ID_ESTUDIO, 
									ID_ESTATUS, 
									ID_TIPO_MOVIMIENTO, 
									ID_TIPO_CONTRATO,
									ID_APARTADO, 
									NUMERO_CONTRATO, 
									FECHA_INICIO, 
									FECHA_FIN, 
									ID_CONTRATO_ORIGINAL,
									FECHA_ALTA, 
									ID_SAP,  
									AMORTIZABLE, 
									ANNIOS, 
									MESES, 
									TIPO_AMORTIZACION,
									FECHA_AUTORIZACION,
									CLAVE_IVA)
		VALUES ( #{idContrato ,javaType=long, jdbcType=NUMERIC}, 
				 #{idEstudio ,javaType=long, jdbcType=NUMERIC}, 
				 #{idEstatus ,javaType=long, jdbcType=NUMERIC}, 
				 #{idTipoMovimiento ,javaType=long, jdbcType=NUMERIC},
				 #{idTipoContrato ,javaType=long, jdbcType=NUMERIC}, 
				 #{idApartado ,javaType=long, jdbcType=NUMERIC}, 
				 #{numeroContrato ,javaType=String, jdbcType=VARCHAR}, 
				 #{fechaInicio}, 
				 #{fechaFin }, 
				 #{idContrato,javaType=long, jdbcType=NUMERIC},
				 #{fechaAlta },  
				 #{idSap ,javaType=String, jdbcType=VARCHAR},
				 #{amortizable ,javaType=String, jdbcType=VARCHAR},
				 #{annios ,javaType=String, jdbcType=VARCHAR}, 
				 #{meses ,javaType=String, jdbcType=VARCHAR}, 
				 #{tipoAmortizacion ,javaType=String, jdbcType=VARCHAR},
				 #{fechaAutorizacion},
				 #{claveIva ,javaType=String, jdbcType=VARCHAR} )
	</insert>
	
	<update id="actualizaNumeroContrato">
		UPDATE DDA_T_CONTRATO SET NUMERO_CONTRATO=#{numeroContrato} WHERE ID_CONTRATO=#{idContrato}
	</update>
	
	<select id="obtenerContrato" resultMap="contrato" parameterType="map">
	
		SELECT	ID_CONTRATO, 
		ID_ESTUDIO, 
				ID_ESTATUS, 
				ID_TIPO_MOVIMIENTO, 
				ID_TIPO_CONTRATO,
				ID_APARTADO, 
				NUMERO_CONTRATO, 
				FECHA_INICIO, 
				FECHA_FIN, 
				ID_CONTRATO_ORIGINAL,
				FECHA_ALTA, 
				ID_SAP,  
				AMORTIZABLE, 
				FECHA_WS, 
				FECHA_MODIFSAP, 
				ANNIOS, 
				MESES,
				INFLACION, 
				TIPO_AMORTIZACION, 
				FECHA_AUTORIZACION,
				ID_CONTRATO_PADRE,
				CLAVE_IVA,
				ID_CONTRATO_BV,
				ESTATUS_SAP
		FROM DDA_T_CONTRATO WHERE ID_CONTRATO=#{idContrato}
		
	</select>
	
	<update id="actualizaContrato">
		UPDATE DDA_T_CONTRATO SET ID_ESTUDIO=#{campoEstudio}, FECHA_INICIO=#{campoFechaInicio}, 
		FECHA_FIN=#{campoFechaFin}, ID_APARTADO=#{apartado}, ANNIOS=#{annios}, 
		MESES=#{meses}, FECHA_AUTORIZACION=#{campoFechaAutorizacion}, CLAVE_IVA=#{indicador}
		WHERE ID_CONTRATO=#{campoContrato}
	</update>
	
	<!-- <update id="llamarEliminaContrato" parameterType="long" statementType="CALLABLE">
		{ CALL DDA_CONTRATOSBORRAR(#{idContrato, mode=IN, javaType=long, jdbcType=NUMERIC}, #{noError, mode=OUT, javaType=long, jdbcType=NUMERIC}, #{strError, mode=OUT, javaType=String, jdbcType=VARCHAR}) }
	</update> -->
	
	<update id="llamarEliminaContrato" parameterType="map" statementType="CALLABLE">
		{ CALL DDA_CONTRATOSBORRAR(#{idContrato, mode=IN, javaType=long, jdbcType=NUMERIC}, #{noError, mode=OUT, javaType=long, jdbcType=NUMERIC}, #{strError, mode=OUT, javaType=String, jdbcType=VARCHAR}) }
	</update>

	<select id="llamarCrearNumeroContrato" parameterType="map" statementType="CALLABLE" resultType="String"> 
    	{ 
    		#{numeroContrato, javaType=String, jdbcType=VARCHAR, mode=OUT} = call DDA_CREARNUMEROCONTRATO(#{idEstudio, mode=IN, javaType=long, jdbcType=NUMERIC},
    																										#{idTipo, mode=IN, javaType=long, jdbcType=NUMERIC},
    																										#{idContrato, mode=IN, javaType=long, jdbcType=NUMERIC}, 
    																										#{idMovimiento, mode=IN, javaType=long, jdbcType=NUMERIC})
    	}
	</select>
	
	<update id="actualizaIdEstudioContrato">
		UPDATE DDA_T_CONTRATO SET ID_ESTUDIO=#{idEstudio} WHERE ID_CONTRATO=#{idContrato}
	</update>
	
	<delete id="eliminaEstudioVirtual" parameterType="long">
		{ CALL ELIMINAESTUDIO(#{idEstudio, mode=IN, javaType=long, jdbcType=NUMERIC}) }
	</delete>
	
	<update id="actulizaEstudioTitulos">
		  UPDATE DDA_C_TITULO SET ID_ESTUDIO=#{idEstudioNew} WHERE ID_ESTUDIO=#{idEstudioAct}
	</update>
	
	<select id="obtenerAreaPorOrdenWF" resultMap="area">
	
		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 = #{ordenWF}
	
		<!-- SELECT CA.ID_AREA, CA.DESC_AREA, CA.AUTORIZA_CONTRATO, CA.ORDEN, CA.ENVIA_EXTERNO, CA.ID_ESTATUS_AUTORIZA 
		FROM DDA_C_AREA CA WHERE CA.ORDEN = #{ordenArea} -->
	</select>
	
	<select id="obtenerAreaPorExpediente" resultMap="area">
		SELECT CA.ID_AREA, CA.DESC_AREA, CA.AUTORIZA_CONTRATO, CA.ORDEN
		FROM DDA_C_AREA CA JOIN DLA_C_USUARIO CU ON (CA.ID_AREA = CU.ID_AREA) 
		WHERE CU.EXPEDIENTE = #{expediente}
	</select>
	
	<select id="obtenerAreasFinalizadoras" resultMap="area">
		SELECT * FROM DDA_C_AREA WHERE AUTORIZA_CONTRATO = 1
	</select>
	
	<!-- ****************** function to Estudio BO -->
	<select id="obtenIdSapEstudio" resultType="String">
		SELECT ID_SAP FROM DDA_C_ESTUDIO WHERE ID_ESTUDIO = #{idEstudio}
	</select>
	
	<select id="buscarContratosPorIdContratoOriginal"  resultMap="contrato">
		select * from DDA_T_CONTRATO where ID_CONTRATO_ORIGINAL = #{idContratoOriginal}
	</select>
	
	<select id="obtenerFechasMaximaMinimaDeContratosPorContratoOriginal" resultMap="fechas">
		select min(FECHA_INICIO) as inicio ,max(FECHA_FIN) as fin from DDA_T_CONTRATO where ID_CONTRATO_ORIGINAL = #{idContratoOriginal}
	</select>
	
	<select id="obtenerFechaSAP" resultType="String">
		SELECT VALOR FROM DLA_C_PARAMETRO WHERE CLAVE = 'DDA_SINCRONIZACION_SAP'
	</select>
	
	
	<resultMap id="infoDetalleContrato" 	type="InfoDetalleContratoDTO">
		<id property="idContrato" 				column="ID_CONTRATO"/>
		<result property="numeroContrato" 		column="NUMERO_CONTRATO" />
		<result property="descripcionEstatus" 	column="DESC_ESTATUS" />
		<result property="fechaInicio" 			column="FECHA_INICIO" />
		<result property="fechaFin" 			column="FECHA_FIN" />
		<result property="descripcionEstudio" 	column="DESC_ESTUDIO" />
		<result property="descripcionApartado" 	column="DESC_APARTADO" />
		<result property="fechaAutorizacion" 	column="FECHA_AUTORIZACION" />
		<result property="tipoMovimiento" 	    column="ID_TIPO_MOVIMIENTO" />
	</resultMap>
	
	
	<select id="obtenDetalleContrato" resultMap="infoDetalleContrato">
		SELECT  
		        tc.ID_CONTRATO,
		        tc.NUMERO_CONTRATO,
		        cce.DESC_ESTATUS, 
		        tc.FECHA_INICIO, 
		        tc.FECHA_FIN,
		        ce.DESC_ESTUDIO,
		        ta.DESC_APARTADO, 
		        tc.FECHA_AUTORIZACION,
		        tc.ID_TIPO_MOVIMIENTO
		FROM 
		        DDA_T_CONTRATO tc,
		        DDA_C_ESTUDIO ce,
		        DDA_C_CONTRATO_ESTATUS cce,
		        DDA_T_APARTADO ta
		WHERE   tc.ID_CONTRATO = #{idContrato}
		AND     tc.ID_ESTUDIO = ce.ID_ESTUDIO
		AND     tc.ID_ESTATUS = cce.ID_ESTATUS
		AND     tc.ID_APARTADO = ta.ID_APARTADO
	</select>
	
	<resultMap id="detalleCatalogoContrato" type="DetalleCatalogoContratoDTO">
		<result property="tipo" 			column="TIPO" />
		<result property="lista" 			column="LISTA" />
	</resultMap>
	
	<select id="obtenDetalleCatalogos" resultMap="detalleCatalogoContrato">
		SELECT 
		        TIPO, 
		        LISTAGG(DESCIPCION, ', ') WITHIN GROUP (ORDER BY DESCIPCION) AS LISTA 
		FROM (
		        SELECT 
		                'Categorías' AS TIPO, 
		                cc.DESC_CATEGORIA AS DESCIPCION 
		        FROM 
		                DDA_T_CONTRATO_CATEGORIA  tcc,
		                DDA_C_CATEGORIA cc 
		        WHERE   tcc.ID_CATEGORIA = cc.ID_CATEGORIA
		        AND     tcc.ID_CONTRATO = #{idContrato}
		        UNION
		        SELECT 
		                'Servicios' AS TIPO, 
		                cst.DESC_SERVICIO AS DESCIPCION
		        FROM 
		                DDA_T_CONTRATO_SERVICIO  tcs,
		                DDA_C_SERVICIO_TIPO cst 
		        WHERE   tcs.ID_TIPO_SERVICIO =  cst.ID_TIPO_SERVICIO
		        AND     tcs.ID_CONTRATO = #{idContrato}
		        UNION
		        SELECT 
		                'Territorios' AS TIPO, 
		                cct.DESC_TERRITORIO AS DESCIPCION
		        FROM 
		                DDA_T_CONTRATO_TERRITORIO tct,
		                DDA_C_TERRITORIO cct 
		        WHERE   tct.ID_TERRITORIO = cct.ID_TERRITORIO
		        AND     tct.ID_CONTRATO = #{idContrato}
		        UNION
		        SELECT 
		                'Atributos' AS TIPO, 
		                cm.DESC_MEDIO_ENTREGA AS DESCIPCION
		        FROM 
		                DDA_T_CONTRATO_MEDIO_ENTREGA tcm,
		                DDA_C_MEDIO_ENTREGA cm 
		        WHERE   tcm.ID_MEDIO_ENTREGA = cm.ID_MEDIO_ENTREGA
		        AND     tcm.ID_CONTRATO = #{idContrato}
		        UNION
		        SELECT 
		                'Filiales' AS TIPO, 
		                cf.DESC_FILIAL AS DESCIPCION
		        FROM 
		                DDA_T_CONTRATO_DEAL_FILIAL tcdf,
		                DDA_C_FILIAL cf
		        WHERE   tcdf.ID_FILIAL = cf.ID_FILIAL
		        AND     tcdf.ID_CONTRATO = #{idContrato}
		        UNION
		        SELECT 
		                'Types' AS TIPO, 
		                ct.DESC_TYPE
		        FROM 
		                DDA_T_CONTRATO_DEAL_TYPE tcdt,
		                DDA_C_TYPE ct
		        WHERE   tcdt.ID_TYPE = ct.ID_TYPE
		        AND     tcdt.ID_CONTRATO = #{idContrato}
		      ) 
		GROUP BY TIPO
	</select>
	
	<insert id="crearListaNuevaTransaccion" >
		
		<selectKey keyProperty="idLista" resultType="long" order="BEFORE">
    	 		   select DDA_SQT_CNT_LISTA.nextVal from DUAL
  		</selectKey>
		
		INSERT into DDA_T_CNT_LISTA
			(ID_LISTA, ID_CONTRATO, FECHA_CREACION, FECHA_INICIO, FECHA_FIN , ID_CONTRATO_CREACION) 
		VALUES 
			(#{idLista}, #{idContrato}, SYSDATE, #{fechaInicio}, null, #{idContrato})
	</insert>
	
	<insert id="actualizaFechaLista" >
		UPDATE DDA_T_CONTRATO_LISTA SET FECHA_INICIO=#{fechaInicio} WHERE ID_CONTRATO=#{idContrato}
	</insert>
	
	<insert id="cambiarAddendum" >
		UPDATE DDA_T_CONTRATO SET NUMERO_CONTRATO=#{numeroContrato}, FECHA_CAMBIO_VIRTUAL = SYSDATE WHERE ID_CONTRATO=#{idContrato}
	</insert>
	
</mapper>
