Imports System.Data.SqlClient

Public Class TitularizacionDAO

    Dim Operaciones As New Operaciones



    Public Function ProcesoDatos(ByVal Coleccion As Collection, ByVal Codigo As String, ByVal Diccionario As Dictionary(Of String, Collection), ByVal Estado As String)
        Dim objCon As New Conexion
        Dim retorno As Integer
        Dim sql As String
        Dim cmd As SqlCommand
        Dim myTrans As SqlTransaction
        Dim cn As SqlConnection = objCon.Conectar
        If cn.State = ConnectionState.Closed Then
            cn.Open()
        End If

        myTrans = cn.BeginTransaction()
        Try


            If Estado = "Nuevo" Then

                sql = "INSERT INTO [dbo].[TIT0](
           [CodInv]
           ,[FechaEmision]
           ,[Tasa]
           ,[MontoCompra]
           ,[MontoCompraPrimario]



) VALUES(
           @CodInv
           ,@FechaEmision
           ,@Tasa
           ,@MontoCompra
           ,@MontoCompraPrimario


)
    "





            Else
                sql = "UPDATE [dbo].[TIT0] SET

           [FechaEmision]=@FechaEmision
           ,[Tasa]=@Tasa
           ,[MontoCompra]=@MontoCompra
           ,[MontoCompraPrimario]=@MontoCompraPrimario
         where [CodInv]=@CodInv
           
    "
            End If
            cmd = New SqlCommand
            cmd.CommandText = sql
            cmd.Connection = cn






            cmd.Transaction = myTrans

            With cmd.Parameters
                .Add("@CodInv", SqlDbType.VarChar).Value = Codigo
                .Add("@FechaEmision", SqlDbType.DateTime).Value = Operaciones.ConvertirFecha(Coleccion(1).ToString)
                .Add("@Tasa", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(2).ToString)
                .Add("@MontoCompra", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(3).ToString)
                .Add("@MontoCompraPrimario", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(4).ToString)


            End With


            retorno = cmd.ExecuteNonQuery

















            If Not Diccionario Is Nothing And Not Diccionario.Count = 0 Then



                sql = "DELETE FROM [dbo].[TIT2]
            WHERE [CodInv]=@CodInv "


                cmd = New SqlCommand
                cmd.CommandText = sql
                cmd.Connection = cn
                cmd.Transaction = myTrans
                cmd.Parameters.Add("@CodInv", SqlDbType.VarChar).Value = Codigo


                retorno = cmd.ExecuteNonQuery




                For Each DatosDiccionario In Diccionario
                    Dim Coleccion2 As Collection = DatosDiccionario.Value
                    sql = "INSERT INTO [dbo].[TIT2](
           [CodInv]
           ,[Correlativo]
           ,[Fecha] 
           ,[Dias] 
           ,[Cuota] 
           ,[AmortCap] 
           ,[Interes] 
           ,[Saldos] 
           ,[Porcentaje]
           ,[Vigente]

) VALUES(
           @CodInv
           ,@Correlativo
           ,@Fecha
           ,@Dias
           ,@Cuota 
           ,@AmortCap 
           ,@Interes 
           ,@Saldos 
           ,@Porcentaje 
           ,@Vigente

)
    "

                    cmd = New SqlCommand
                    cmd.CommandText = sql
                    cmd.Connection = cn
                    cmd.Transaction = myTrans

                    With cmd.Parameters
                        .Add("@CodInv", SqlDbType.VarChar).Value = Codigo
                        .Add("@Correlativo", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion2(1).ToString)
                        .Add("@Fecha", SqlDbType.DateTime).Value = Operaciones.ConvertirFecha(Coleccion2(2).ToString)
                        .Add("@Dias", SqlDbType.Int).Value = Operaciones.ConvertirEntero(Coleccion2(3).ToString)
                        .Add("@Cuota", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion2(4).ToString)
                        .Add("@AmortCap", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion2(5).ToString)
                        .Add("@Interes", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion2(6).ToString)
                        .Add("@Saldos", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion2(7).ToString)
                        .Add("@Porcentaje ", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion2(8).ToString)
                        .Add("@Vigente", SqlDbType.VarChar).Value = Coleccion2(9).ToString

                    End With
                    retorno = cmd.ExecuteNonQuery





                Next


            End If



            ''''''''''''''''''












            myTrans.Commit()
            MsgBox("Datos Ingresados")
        Catch ex As Exception
            myTrans.Rollback()
            MsgBox(ex.Message)
        End Try
        cn.Close()

        Return retorno


    End Function









































    Public Function NuevaTIT(ByVal Coleccion As Collection, ByVal Codigo As String)
        Dim objCon As New Conexion
        Dim retorno As Integer
        Dim sql As String
        Dim cmd As SqlCommand
        Dim cn As SqlConnection = objCon.Conectar
        If cn.State = ConnectionState.Closed Then
            cn.Open()
        End If
        sql = "INSERT INTO [dbo].[TIT0](
           [CodInv]
           ,[EmisTotal]
           ,[FechaEmision]
           ,[Tasa]
           ,[Periodicidad]
           ,[Periodos]
           ,[MontoCompra]
           ,[MontoCompraPrimario]
           ,[CS1]
           ,[CS2]
           ,[CS3]
           ,[CS4]
           ,[CS5]
           

) VALUES(
           @CodInv
           ,@EmisTotal
           ,@FechaEmision
           ,@Tasa
           ,@Periodicidad
           ,@Periodos
           ,@MontoCompra
           ,@MontoCompraPrimario
           ,@CS1
           ,@CS2
           ,@CS3
           ,@CS4
           ,@CS5

)
    "

        cmd = New SqlCommand
        cmd.CommandText = sql

        With cmd.Parameters
            .Add("@CodInv", SqlDbType.VarChar).Value = Codigo
            .Add("@EmisTotal", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(1).ToString)
            .Add("@FechaEmision", SqlDbType.DateTime).Value = Operaciones.ConvertirFecha(Coleccion(2).ToString)
            .Add("@Tasa", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(3).ToString)
            .Add("@Periodicidad", SqlDbType.Int).Value = Operaciones.ConvertirEntero(Coleccion(4).ToString)
            .Add("@Periodos", SqlDbType.Int).Value = Operaciones.ConvertirEntero(Coleccion(5).ToString)
            .Add("@MontoCompra", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(6).ToString)
            .Add("@MontoCompraPrimario", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(7).ToString)
            .Add("@CS1", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(8).ToString)
            .Add("@CS2", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(9).ToString)
            .Add("@CS3", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(10).ToString)
            .Add("@CS4", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(11).ToString)
            .Add("@CS5", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(12).ToString)

        End With


        cmd.Connection = cn

        retorno = cmd.ExecuteNonQuery

        cn.Close()
        Return retorno

    End Function





    Public Function ModificarTIT(ByVal Coleccion As Collection, ByVal Codigo As String)
        Dim objCon As New Conexion
        Dim retorno As Integer
        Dim sql As String
        Dim cmd As SqlCommand
        Dim cn As SqlConnection = objCon.Conectar
        If cn.State = ConnectionState.Closed Then
            cn.Open()
        End If
        sql = "UPDATE [dbo].[TIT0] SET
           [EmisTotal]=@EmisTotal
           ,[FechaEmision]=@FechaEmision
           ,[Tasa]=@Tasa
           ,[Periodicidad]=@Periodicidad
           ,[Periodos]=@Periodos
           ,[MontoCompra]=@MontoCompra
           ,[MontoCompraPrimario]=@MontoCompraPrimario
           ,[CS1]=@CS1
           ,[CS2]=@CS2
           ,[CS3]=@CS3
           ,[CS4]=@CS4
           ,[CS5]=@CS5
         where [CodInv]=@CodInv
           
        
           
           
           
           
           
           


    "

        cmd = New SqlCommand
        cmd.CommandText = sql

        With cmd.Parameters
            .Add("@CodInv", SqlDbType.VarChar).Value = Codigo
            .Add("@EmisTotal", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(1).ToString)
            .Add("@FechaEmision", SqlDbType.DateTime).Value = Operaciones.ConvertirFecha(Coleccion(2).ToString)
            .Add("@Tasa", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(3).ToString)
            .Add("@Periodicidad", SqlDbType.Int).Value = Operaciones.ConvertirEntero(Coleccion(4).ToString)
            .Add("@Periodos", SqlDbType.Int).Value = Operaciones.ConvertirEntero(Coleccion(5).ToString)
            .Add("@MontoCompra", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(6).ToString)
            .Add("@MontoCompraPrimario", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(7).ToString)
            .Add("@CS1", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(8).ToString)
            .Add("@CS2", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(9).ToString)
            .Add("@CS3", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(10).ToString)
            .Add("@CS4", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(11).ToString)
            .Add("@CS5", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(12).ToString)


        End With


        cmd.Connection = cn

        retorno = cmd.ExecuteNonQuery

        cn.Close()
        Return retorno

    End Function

    Public Function Eliminar(ByVal Codigo As String)



        Dim objCon As New Conexion

        Dim retorno As Integer
        Dim sql As String
        Dim cmd As SqlCommand
        Dim myTrans As SqlTransaction
        Dim cn As SqlConnection = objCon.Conectar
        If cn.State = ConnectionState.Closed Then
            cn.Open()
        End If

        myTrans = cn.BeginTransaction()
        Try

            sql = "DELETE FROM [dbo].[TIT0]
      WHERE [CodInv]=@CodInv"


            cmd = New SqlCommand
            cmd.CommandText = sql
            cmd.Connection = cn
            cmd.Transaction = myTrans
            cmd.Parameters.Add("@CodInv", SqlDbType.VarChar).Value = Codigo


            retorno = cmd.ExecuteNonQuery



            sql = "DELETE FROM [dbo].[TIT2]
      WHERE [CodInv]=@CodInv"


            cmd = New SqlCommand
            cmd.CommandText = sql
            cmd.Connection = cn
            cmd.Transaction = myTrans
            cmd.Parameters.Add("@CodInv", SqlDbType.VarChar).Value = Codigo


            retorno = cmd.ExecuteNonQuery

            myTrans.Commit()
            MsgBox("Datos Eliminados")
        Catch ex As Exception
            myTrans.Rollback()
            MsgBox(ex.Message)
            cn.Close()
            Return False
        End Try
        cn.Close()
        Return True
    End Function



    Public Function NuevaAmortCap(ByVal Coleccion As Collection, ByVal Codigo As String)
        Dim objCon As New Conexion
        Dim retorno As Integer
        Dim sql As String
        Dim cmd As SqlCommand
        Dim cn As SqlConnection = objCon.Conectar
        If cn.State = ConnectionState.Closed Then
            cn.Open()
        End If
        sql = "INSERT INTO [dbo].[TIT1](
           [CodInv]
           ,[Correlativo]
           ,[Fecha]
           ,[CSFlujo]
           ,[AmortCap]
           ,[Interes]
           ,[Amort]
           ,[Saldos]
           

) VALUES(
           @CodInv
           ,@Correlativo
           ,@Fecha
           ,@CSFlujo
           ,@AmortCap
           ,@Interes
           ,@Amort
           ,@Saldos


)
    "

        cmd = New SqlCommand
        cmd.CommandText = sql

        With cmd.Parameters
            .Add("@CodInv", SqlDbType.VarChar).Value = Codigo
            .Add("@Correlativo", SqlDbType.Int).Value = Operaciones.ConvertirEntero(Coleccion(1).ToString)
            .Add("@Fecha", SqlDbType.DateTime).Value = Operaciones.ConvertirFecha(Coleccion(2).ToString)
            .Add("@CSFlujo", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(3).ToString)
            .Add("@AmortCap", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(4).ToString)
            .Add("@Interes", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(5).ToString)
            .Add("@Amort", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(6).ToString)
            .Add("@Saldos", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(7).ToString)

        End With


        cmd.Connection = cn

        retorno = cmd.ExecuteNonQuery

        cn.Close()
        Return retorno

    End Function




    Public Function ModificarAmortCap(ByVal Coleccion As Collection, ByVal Codigo As String)
        Dim objCon As New Conexion
        Dim retorno As Integer
        Dim sql As String
        Dim cmd As SqlCommand
        Dim cn As SqlConnection = objCon.Conectar
        If cn.State = ConnectionState.Closed Then
            cn.Open()
        End If
        sql = "UPDATE [dbo].[TIT1] SET
            [Fecha]=@Fecha
           ,[CSFlujo]=@CSFlujo
           ,[AmortCap]=@AmortCap
           ,[Interes]=@Interes
           ,[Amort]=@Amort
           ,[Saldos]=@Saldos
           where [CodInv]=@CodInv AND [Correlativo]=@Correlativo
           
           
           
           
           
           
           
           
           



    "

        cmd = New SqlCommand
        cmd.CommandText = sql

        With cmd.Parameters
            .Add("@CodInv", SqlDbType.VarChar).Value = Codigo
            .Add("@Correlativo", SqlDbType.Int).Value = Operaciones.ConvertirEntero(Coleccion(1).ToString)
            .Add("@Fecha", SqlDbType.DateTime).Value = Operaciones.ConvertirFecha(Coleccion(2).ToString)
            .Add("@CSFlujo", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(3).ToString)
            .Add("@AmortCap", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(4).ToString)
            .Add("@Interes", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(5).ToString)
            .Add("@Amort", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(6).ToString)
            .Add("@Saldos", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(7).ToString)


        End With


        cmd.Connection = cn

        retorno = cmd.ExecuteNonQuery

        cn.Close()
        Return retorno

    End Function











    Public Function NuevaAmort(ByVal Coleccion As Collection, ByVal Codigo As String)
        Dim objCon As New Conexion
        Dim retorno As Integer
        Dim sql As String
        Dim cmd As SqlCommand
        Dim cn As SqlConnection = objCon.Conectar
        If cn.State = ConnectionState.Closed Then
            cn.Open()
        End If
        sql = "INSERT INTO [dbo].[TIT2](
           [CodInv]
           ,[Correlativo]
           ,[Fecha] 
           ,[Dias] 
           ,[Cuota] 
           ,[AmortCap] 
           ,[Interes] 
           ,[Saldos] 
           ,[Porcentaje]

) VALUES(
           @CodInv
           ,@Correlativo
           ,@Fecha
           ,@Dias
           ,@Cuota 
           ,@AmortCap 
           ,@Interes 
           ,@Saldos 
           ,@Porcentaje 


)
    "

        cmd = New SqlCommand
        cmd.CommandText = sql
        Try

            With cmd.Parameters
                .Add("@CodInv", SqlDbType.VarChar).Value = Codigo
                .Add("@Correlativo", SqlDbType.Int).Value = Operaciones.ConvertirEntero(Coleccion(1).ToString)
                .Add("@Fecha", SqlDbType.DateTime).Value = Operaciones.ConvertirFecha(Coleccion(2).ToString)
                .Add("@Dias", SqlDbType.Int).Value = Operaciones.ConvertirEntero(Coleccion(3).ToString)
                .Add("@Cuota", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(4).ToString)
                .Add("@AmortCap", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(5).ToString)
                .Add("@Interes", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(6).ToString)
                .Add("@Saldos", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(7).ToString)
                .Add("@Porcentaje ", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(8).ToString)

            End With


            cmd.Connection = cn

            retorno = cmd.ExecuteNonQuery
            cn.Close()
        Catch ex As Exception
            MsgBox("Error al ingresar datos")
            cn.Close()
            Return Nothing
        End Try

        Return retorno

    End Function














    Public Function ModificarAmort(ByVal Coleccion As Collection, ByVal Codigo As String)
        Dim objCon As New Conexion
        Dim retorno As Integer
        Dim sql As String
        Dim cmd As SqlCommand
        Dim cn As SqlConnection = objCon.Conectar
        If cn.State = ConnectionState.Closed Then
            cn.Open()
        End If
        sql = "UPDATE [dbo].[TIT2] SET
           [Fecha] =@Fecha
           ,[Dias] =@Dias
           ,[Cuota] =@Cuota
           ,[AmortCap]= @AmortCap 
           ,[Interes] =@Interes 
           ,[Saldos] =@Saldos 
           ,[Porcentaje] =@Porcentaje 
           where  [CodInv]=@CodInv AND [Correlativo]=@Correlativo

           
           
           
           
            
           
           
           



    "

        cmd = New SqlCommand
        cmd.CommandText = sql
        Try


            With cmd.Parameters
                .Add("@CodInv", SqlDbType.VarChar).Value = Codigo
                .Add("@Correlativo", SqlDbType.Int).Value = Operaciones.ConvertirEntero(Coleccion(1).ToString)
                .Add("@Fecha", SqlDbType.DateTime).Value = Operaciones.ConvertirFecha(Coleccion(2).ToString)
                .Add("@Dias", SqlDbType.Int).Value = Operaciones.ConvertirEntero(Coleccion(3).ToString)
                .Add("@Cuota", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(4).ToString)
                .Add("@AmortCap", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(5).ToString)
                .Add("@Interes", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(6).ToString)
                .Add("@Saldos", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(7).ToString)
                .Add("@Porcentaje ", SqlDbType.Float).Value = Operaciones.ConvertirDecimal(Coleccion(8).ToString)


            End With


            cmd.Connection = cn

            retorno = cmd.ExecuteNonQuery

        Catch ex As Exception
            MsgBox("Error de Modificación")
            cn.Close()
            Return Nothing
        End Try
        cn.Close()
        Return retorno

    End Function



    Public Sub EliminarAmort(ByVal Codigo As String, ByVal correlativo As Integer)
        Dim objCon As New Conexion
        Dim sql As String
        Dim cmd As SqlCommand
        Dim res As Integer
        Dim cn As SqlConnection = objCon.Conectar
        If cn.State = ConnectionState.Closed Then
            cn.Open()
        End If
        sql = "DELETE FROM [dbo].[TIT2]
      WHERE [CodInv]=@CodInv AND Correlativo=@Correlativo"



        cmd = New SqlCommand
        cmd.CommandText = sql
        cmd.Parameters.Add("@CodInv", SqlDbType.VarChar).Value = Codigo
        cmd.Parameters.Add("@Correlativo", SqlDbType.Int).Value = correlativo
        cmd.Connection = cn

        res = cmd.ExecuteNonQuery
        cn.Close()
    End Sub





    Public Function CargarTIT(ByVal Codigo As String)
        Dim objCon As New Conexion
        Dim sql As String
        Dim cmd As SqlCommand
        Dim Coleccion As New Collection
        Dim cn As SqlConnection = objCon.Conectar
        If cn.State = ConnectionState.Closed Then
            cn.Open()
        End If
        sql = "SELECT * FROM [dbo].[TIT0] WHERE CodInv=@Codigo"


        cmd = New SqlCommand

        cmd.CommandText = sql
        cmd.Parameters.Add("@Codigo", SqlDbType.VarChar).Value = Codigo
        cmd.Connection = cn

        ' Dim Datos = cmd.ExecuteScalar
        Dim Datos = cmd.ExecuteReader
        If Datos.HasRows Then
            'SE ENCONTRO EL REGISTRO


            If Datos.Read Then

                Coleccion.Add(Datos.Item("FechaEmision"))
                Coleccion.Add(Datos.Item("Tasa"))
                Coleccion.Add(Datos.Item("MontoCompra"))
                Coleccion.Add(Datos.Item("MontoCompraPrimario"))


                Return Coleccion
            End If
        End If
        cn.Close()
        Return Coleccion
    End Function


    Public Function CargarAmortCap(ByVal codigo As String)
        Dim objCon As New Conexion
        Dim cn As SqlConnection = objCon.Conectar
        If cn.State = ConnectionState.Closed Then
            cn.Open()
        End If
        Dim sql = "select * from TIT1 where CodInv='" + codigo + "'"

        Dim cmd As New SqlCommand(sql, cn)
        Dim dr As SqlDataReader
        dr = cmd.ExecuteReader

        Return dr
    End Function

    Public Function CargarAmort(ByVal codigo As String)
        Dim objCon As New Conexion
        Dim cn As SqlConnection = objCon.Conectar
        If cn.State = ConnectionState.Closed Then
            cn.Open()
        End If
        Dim sql = "select * from TIT2 where CodInv='" + codigo + "' order by Correlativo"

        Dim cmd As New SqlCommand(sql, cn)
        Dim dr As SqlDataReader
        dr = cmd.ExecuteReader

        Return dr
    End Function
End Class
