<?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.factura.general.daos.FacturacionDAO">
   	
   	<resultMap id="resultPagos" type="PagoMesContratoBD">
		<result property="idContrato" column="ID_CONTRATO" />
		<result property="mesTotal"   column="MONTO_PAGAR" />	
		<result property="fecha"      column="MES" /> 
		<result property="idFactura"  column="ID_FACTURA" />	
	</resultMap>
	
	<resultMap id="resultContratos" type="ContratoFacturaDTO">
		<result property="contratoDesc"  column="NUMERO_CONTRATO" />
		<result property="idContratoOri" column="ID_CONTRATO_ORIGINAL" />
		<result property="idContrato"    column="ID_CONTRATO" />
		<result property="idFactura"     column="ID_FACTURA" />
		<result property="idSapCto"      column="ID_SAP" />						
	</resultMap>
		   
	<select id="obtenerCostoMesContrato" resultMap="resultPagos" parameterType="map">
	       SELECT cto.ID_CONTRATO, pago.FECHA_PAGO AS "MES", SUM(pago.MONTO) AS "MONTO_PAGAR"
	           FROM DDA_T_CNT_PAGO pago
		       INNER JOIN DDA_T_CONTRATO cto ON pago.ID_CONTRATO_ORIGINAL = cto.ID_CONTRATO_ORIGINAL		       
		       WHERE cto.ID_CONTRATO_ORIGINAL = #{idContrato} AND cto.ID_CONTRATO = cto.ID_CONTRATO_ORIGINAL  AND pago.TIPO_PAGO in ('OVERAGE', 'MINIMO')		             
		       GROUP BY pago.FECHA_PAGO, cto.ID_CONTRATO
	           ORDER BY pago.FECHA_PAGO
	</select>	
	
	<select id="obtenerPagoMesContrato" resultMap="resultPagos" parameterType="map">
			SELECT det.MES, SUM(det.MONTO_PAGAR) AS "MONTO_PAGAR"
		       FROM DDA_T_FACTURA_DETALLE det                                 
		       WHERE det.ID_CONTRATO_ORIGINAL = #{idContrato}              
		             AND ID_FACTURA != #{idFactura}
		       GROUP BY det.MES, det.ID_CONTRATO_ORIGINAL
		       ORDER BY det.MES
	</select>
	
	<select id="obtenerPagoMesFacturaCto" resultMap="resultPagos" parameterType="map">
			SELECT det.MES, det.MONTO_PAGAR
      			FROM DDA_T_FACTURA_DETALLE det                                 
		  		WHERE det.ID_CONTRATO_ORIGINAL = #{idContrato} AND ID_FACTURA = #{idFactura} AND MONTO_PAGAR IS NOT NULL
	</select>		

   <!-- 
   			SELECT cto.ID_CONTRATO, cto.NUMERO_CONTRATO, cto.ID_CONTRATO_ORIGINAL 
       		FROM DDA_T_CONTRATO cto        
       		WHERE cto.ID_ESTUDIO = #{idEstudio} AND cto.ID_CONTRATO = cto.ID_CONTRATO_ORIGINAL
   -->
	<select id="obtenerContratosEstudio" resultMap="resultContratos" parameterType="map">
		    SELECT distinct (DDA_T_CNT_PAGO.ID_CONTRATO_ORIGINAL) AS ID_CONTRATO, DDA_T_CONTRATO.NUMERO_CONTRATO, DDA_T_CNT_PAGO.ID_CONTRATO_ORIGINAL,  DDA_T_CONTRATO.ID_SAP 
		       FROM DDA_T_CNT_PAGO 
		       INNER JOIN DDA_T_CONTRATO ON DDA_T_CONTRATO.ID_CONTRATO = DDA_T_CNT_PAGO.ID_CONTRATO_ORIGINAL
		       WHERE DDA_T_CONTRATO.ID_ESTUDIO = #{idEstudio} and DDA_T_CONTRATO.CLAVE_IVA = #{indicadorIVA} and DDA_T_CNT_PAGO.TIPO_PAGO in ('OVERAGE', 'MINIMO')   	   
	</select>
	
	<select id="obtenerContratoEnmAden" resultMap="resultContratos" parameterType="map">
			SELECT ID_CONTRATO, NUMERO_CONTRATO, ID_CONTRATO_ORIGINAL, ID_SAP
	        FROM (SELECT cto.ID_CONTRATO, cto.NUMERO_CONTRATO, cto.ID_CONTRATO_ORIGINAL, cto.ID_SAP 
	       	      FROM DDA_T_CONTRATO cto   
	              WHERE cto.ID_CONTRATO_ORIGINAL = #{idCto}
	              Order by cto.ID_CONTRATO DESC
	             )
	        where ROWNUM = 1
     </select>
	
	<select id="obtenerContratosFacturaEstudio" resultMap="resultContratos" parameterType="map">
	     SELECT cto.ID_CONTRATO, cto.NUMERO_CONTRATO, cto.ID_CONTRATO_ORIGINAL, det.ID_FACTURA, cto.ID_SAP 
       		FROM DDA_T_CONTRATO cto       
            INNER JOIN DDA_T_FACTURA_DETALLE det ON det.ID_CONTRATO_ORIGINAL = cto.ID_CONTRATO_ORIGINAL
       		WHERE cto.ID_ESTUDIO = #{idEstudio} and det.ID_FACTURA = #{idFactura} 
     </select>

	<insert id="guardarFacturaDetalle" parameterType="map">
		INSERT
			INTO DDA_T_FACTURA_DETALLE (ID_FACTURA, ID_CONTRATO_ORIGINAL, MES, MONTO_PAGAR) 
			VALUES(#{idFactura}, #{idCtoOri}, TO_DATE(#{mes.mes}, 'dd/mm/yyyy'), #{mes.pagar})	
	</insert>
	
	<update id="actualizarFacturaDetalle" parameterType="map">
		UPDATE DDA_T_FACTURA_DETALLE
			SET MONTO_PAGAR = #{mes.pagar} 
		WHERE ID_FACTURA = #{idFactura} AND MES = TO_DATE(#{mes.mes}, 'dd/mm/yyyy') AND ID_CONTRATO_ORIGINAL = #{idCtoOri} 			
	</update>

</mapper>