Public Shared Function ObtieneRecibosAvisoImperativoLegal(Optional bd As bdGestionAsegasa.gestionasegasaEntities = Nothing, Optional RecibosSinComunicacion As List(Of String) = Nothing) As List(Of recibos)

        If bd Is Nothing Then bd = bdGestionAsegasa.gestionasegasaEntities.NuevoContexto
        Dim tgsms As Integer = FormaComunicacionEnum.POR_SMS
        Dim tgcarta As Integer = FormaComunicacionEnum.POR_CARTA
        Dim tgsa As Integer = FormaComunicacionEnum.SIN_DOMICILIO_NI_TLF_VALIDO
        Dim tgsn As Integer = FormaComunicacionEnum.NINGUNA
        Dim TipoCarta As Integer = TipoGestionEnum.AVISO_IMPERATIVO_LEGAL


        'Dim idTre = bd.enumeraciones.First(Function(X) X.Codigo = "TRC.E").idEnumeracion
        'Dim idTres = bd.enumeraciones.First(Function(X) X.Codigo = "TRC.ES").idEnumeracion
        Dim idTrex = bd.enumeraciones.First(Function(X) X.Codigo = "TRC.EX").idEnumeracion
        'Dim idTrc = bd.enumeraciones.First(Function(X) X.Codigo = "TRC.C").idEnumeracion
        'Dim idTrcs = bd.enumeraciones.First(Function(X) X.Codigo = "TRC.CS").idEnumeracion
        Dim idTrcx = bd.enumeraciones.First(Function(X) X.Codigo = "TRC.CX").idEnumeracion
        Dim idtippba = bd.enumeraciones.First(Function(X) X.Codigo = "TIPP.BA").idEnumeracion
        Dim idtipcia = bd.enumeraciones.First(Function(X) X.Codigo = "TIPP.CIA").idEnumeracion
        Dim idtipFAE = bd.enumeraciones.First(Function(X) X.Codigo = "TIPP.FAE").idEnumeracion
        ' Dim idtippe = bd.enumeraciones.First(Function(X) X.Codigo = "TIPP.PE").idEnumeracion
        Dim idtipag = bd.enumeraciones.First(Function(X) X.Codigo = "TIPP.AG").idEnumeracion
        ' Dim idtipag = bd.enumeraciones.First(Function(X) X.Codigo = "TIPP.AG").idEnumeracion

        Dim TipoRemesa = TipoGestionEnum.AVISO_REMESA_O_COBRO_DIRECTO

        Dim FechaLimite = Today.AddDays(-15)
        Dim feflim = Today.AddDays(-10)
        '   Dim FechaEfectoLimite = Today.AddDays(25)
        Dim FechaEfectoLimite = Today.AddDays(30)
        'Dim rs = bd.recibos.
        '    Include("agentes").Include("subagentes").Include("polizassg.entidadespolizas.entidades").Include("polizassg.ramos").Include("polizassg.companias").Include("enumeraciones1").Include("enumeraciones3").
        '    Where(Function(x) x.PrimaNeta.Value > 0 And x.FechaPago.HasValue = False And
        '        x.FechaBaja.HasValue = False And x.idTipoPago <> idtippba And x.idTipoPago <> idtipag And x.idTipoPago <> idtipcia And x.idTipo <> idTrex And x.idTipo <> idTrcx _
        '        And Not x.gestionesrecibos.Any(Function(y) y.Tipo = TipoCarta) _
        '        And x.gestionesrecibos.Any(Function(y) y.Tipo = TipoRemesa And y.Fecha <= FechaLimite) _
        '        And x.FechaEfecto > feflim).ToList
        Dim rsco = bd.recibos.
            Include("agentes").Include("subagentes").Include("polizassg.entidadespolizas.entidades").Include("polizassg.ramos").Include("polizassg.companias").Include("enumeraciones1").Include("enumeraciones3").
            Where(Function(x) x.PrimaNeta.Value > 0 AndAlso x.FechaPago.HasValue = False And
                x.FechaBaja.HasValue = False AndAlso x.idTipoPago <> idtippba And x.idTipoPago <> idtipag AndAlso x.idTipoPago <> idtipcia AndAlso x.idTipoPago <> idtipFAE AndAlso x.idTipo <> idTrex AndAlso x.idTipo <> idTrcx _
                AndAlso Not x.gestionesrecibos.Any(Function(y) y.Tipo = TipoCarta) _
                AndAlso x.gestionesrecibos.Any(Function(y) y.Tipo = TipoRemesa And y.Fecha <= FechaLimite) _
                AndAlso x.FechaEfecto < feflim AndAlso FechaEfectoLimite >= x.FechaEfecto).ToList.Where(Function(x) x.BloquearFacturacion = False).ToList

        Dim rsba = bd.recibos.
            Include("agentes").Include("subagentes").Include("polizassg.entidadespolizas.entidades").Include("polizassg.ramos").Include("polizassg.companias").Include("enumeraciones1").Include("enumeraciones3").
            Where(Function(x) x.PrimaNeta.Value > 0 AndAlso x.FechaPago.HasValue = False AndAlso x.FechaDevolucionBanco.HasValue AndAlso
                x.FechaBaja.HasValue = False AndAlso x.idTipoPago = idtippba And x.idTipo <> idTrex AndAlso x.idTipo <> idTrcx _
                AndAlso Not x.gestionesrecibos.Any(Function(y) y.Tipo = TipoCarta) _
                AndAlso x.gestionesrecibos.Any(Function(y) y.Tipo = TipoRemesa AndAlso y.Fecha <= FechaLimite) _
                AndAlso x.FechaEfecto < feflim AndAlso FechaEfectoLimite >= x.FechaEfecto).ToList.Where(Function(x) x.BloquearFacturacion = False).ToList

        Dim rs = rsco.Union(rsba).ToList

        Dim lr = rs.Select(Function(x) New With {.CodigoRecibo = x.CodigoRecibo, .NumeroPoliza = x.polizassg.NumeroPoliza, .NumeroSuplemento = x.polizassg.NumeroSuplemento, .FechaEfecto = x.FechaEfecto, .TipoPago = x.TipoPago, .FechaDevolucionBanco = x.FechaDevolucionBanco, .Tomador = x.polizassg.Tomador.RazonSocial, .BienesAsegurados = x.polizassg.BienesAsegurados, .Ramo = x.polizassg.ramos.Descripcion, .Compañia = x.polizassg.companias.Nombre, .Agente = x.agentes.Nombre}).ToList
        'Dim f = tsWPF.Utilidades.Varias.IEnumerableAExcel(lr)
        'IO.File.WriteAllBytes("c:\tmp\recibosimperativo.xlsx", f)


        For Each r In rs
            If RecibosSinComunicacion IsNot Nothing AndAlso RecibosSinComunicacion.Contains(r.CodigoRecibo) Then
                r.FormaComunicacionTMP = tgsn
            Else
                If r.polizassg.EntidadPolizaTomador.Telefono1.EsNumeroTelefonoMovilEspañolValido Or r.polizassg.EntidadPolizaTomador.Telefono2.EsNumeroTelefonoMovilEspañolValido Then
                    r.FormaComunicacionTMP = tgsms
                Else
                    If r.polizassg.EntidadPolizaTomador.direcciones IsNot Nothing AndAlso r.polizassg.EntidadPolizaTomador.direcciones.CodigoPostal.NothingAVacio <> "" AndAlso r.polizassg.EntidadPolizaTomador.direcciones.municipios IsNot Nothing AndAlso r.polizassg.EntidadPolizaTomador.direcciones.Direccion.NothingAVacio <> "" Then
                        r.FormaComunicacionTMP = tgcarta
                    Else
                        r.FormaComunicacionTMP = tgsa
                    End If
                End If
            End If
        Next
        Return rs
    
End
Public Shared Function ObtieneRecibosCartaRemesa(Optional bd As bdGestionAsegasa.gestionasegasaEntities = Nothing) As List(Of recibos)
        Try
            If bd Is Nothing Then bd = bdGestionAsegasa.gestionasegasaEntities.NuevoContexto
            Dim tgninguna As Integer = FormaComunicacionEnum.NINGUNA
            Dim tgsms As Integer = FormaComunicacionEnum.POR_SMS
            Dim tgcarta As Integer = FormaComunicacionEnum.POR_CARTA
            Dim tgsa As Integer = FormaComunicacionEnum.SIN_DOMICILIO_NI_TLF_VALIDO
            '   Dim idRamo17 = bd.ramos.First(Function(x) x.Codigo = "17").idRamo
            Dim idTre = bd.enumeraciones.First(Function(X) X.Codigo = "TRC.E").idEnumeracion
            Dim idTres = bd.enumeraciones.First(Function(X) X.Codigo = "TRC.ES").idEnumeracion
            Dim idTrex = bd.enumeraciones.First(Function(X) X.Codigo = "TRC.EX").idEnumeracion
            Dim idTrc = bd.enumeraciones.First(Function(X) X.Codigo = "TRC.C").idEnumeracion
            Dim idTrcs = bd.enumeraciones.First(Function(X) X.Codigo = "TRC.CS").idEnumeracion
            Dim idTrcx = bd.enumeraciones.First(Function(X) X.Codigo = "TRC.CX").idEnumeracion
            Dim idtippba = bd.enumeraciones.First(Function(X) X.Codigo = "TIPP.BA").idEnumeracion
            Dim idtipcia = bd.enumeraciones.First(Function(X) X.Codigo = "TIPP.CIA").idEnumeracion
            Dim idtipFAE = bd.enumeraciones.First(Function(X) X.Codigo = "TIPP.FAE").idEnumeracion
            Dim idtipag = bd.enumeraciones.First(Function(X) X.Codigo = "TIPP.AG").idEnumeracion
            Dim ahora = bdGestionAsegasa.Utilidades.AhoraMysql(bd)
            Dim FecLim = ahora.Date.AddDays(20)
            Dim TipoCartaRemesa As Integer = TipoGestionEnum.AVISO_REMESA_O_COBRO_DIRECTO
            Dim rs = bd.recibos.Include("agentes").Include("subagentes").Include("polizassg.entidadespolizas.entidades").Include("polizassg.ramos").Include("polizassg.companias").Include("enumeraciones1").Include("enumeraciones2").Include("enumeraciones3") _
        .Where(Function(x) x.FechaPago.HasValue = False AndAlso x.FechaCartaRemesaCobroDirecto Is Nothing AndAlso Not x.gestionesrecibos.Any(Function(y) y.Tipo = TipoCartaRemesa) AndAlso
            x.FechaBaja Is Nothing AndAlso x.TotalRecibo > 0 And
            (x.idTipoPago <> idtipcia AndAlso x.idTipoPago <> idtipFAE AndAlso x.idTipoPago <> idtipag) AndAlso
             x.FechaEfecto < FecLim).ToList.Where(Function(x) x.BloquearFacturacion = False).ToList

            '    Dim rs = bd.recibos.Where(Function(x) x.idRecibo = 429451).ToList
            For Each r In rs
                Try
                    If r.FechaEfecto < ahora.AddDays(-20) Or r.FechaPago.HasValue Or r.idRemesa.HasValue Then
                        If Not (r.idRemesa.HasValue AndAlso Today.Subtract(r.remesas.Fecha.Value.Date).TotalDays > 0) AndAlso (r.polizassg.EntidadPolizaTomador.Telefono1.EsNumeroTelefonoMovilEspañolValido Or r.polizassg.EntidadPolizaTomador.Telefono2.EsNumeroTelefonoMovilEspañolValido) Then
                            r.FormaComunicacionTMP = tgsms
                        Else
                            r.FormaComunicacionTMP = tgninguna
                        End If
                    Else
                        If r.polizassg.EntidadPolizaTomador Is Nothing Then
                            r.FormaComunicacionTMP = tgsa
                        Else
                            If r.polizassg.EntidadPolizaTomador.Telefono1.EsNumeroTelefonoMovilEspañolValido Or r.polizassg.EntidadPolizaTomador.Telefono2.EsNumeroTelefonoMovilEspañolValido Then
                                r.FormaComunicacionTMP = tgsms
                            Else
                                If r.polizassg.EntidadPolizaTomador IsNot Nothing AndAlso r.polizassg.EntidadPolizaTomador.direcciones IsNot Nothing AndAlso r.polizassg.EntidadPolizaTomador.direcciones.CodigoPostal.NothingAVacio <> "" AndAlso r.polizassg.EntidadPolizaTomador.direcciones.municipios IsNot Nothing AndAlso r.polizassg.EntidadPolizaTomador.direcciones.Direccion.NothingAVacio <> "" Then
                                    r.FormaComunicacionTMP = tgcarta
                                Else
                                    r.FormaComunicacionTMP = tgsa
                                End If
                            End If
                        End If
                    End If
                Catch ex As Exception
                    Throw New Exception(ex.Message, ex)
                End Try
            Next
            Return rs
        Catch ex As Exception
            Throw New Exception(ex.Message, ex)
        End Try
    
End
Public Shared Function ObtieneRecibosCartaBaja(Optional bd As bdGestionAsegasa.gestionasegasaEntities = Nothing, Optional RecibosSinComunicacion As List(Of String) = Nothing) As List(Of recibos)
        If bd Is Nothing Then bd = bdGestionAsegasa.gestionasegasaEntities.NuevoContexto
        Dim tgsms As Integer = FormaComunicacionEnum.POR_SMS
        Dim tgcarta As Integer = FormaComunicacionEnum.POR_CARTA
        Dim tgsa As Integer = FormaComunicacionEnum.SIN_DOMICILIO_NI_TLF_VALIDO
        Dim tgsn As Integer = FormaComunicacionEnum.NINGUNA
        Dim TipoCarta As Integer = TipoGestionEnum.AVISO_POLIZA_DE_BAJA

        Dim Cabas = bd.enumeraciones.Where(Function(x) x.Codigo = "CABA.CIA" Or x.Codigo = "CABA.ASEG" Or x.Codigo = "CABA.AGEN" Or x.Codigo = "CABA.VTA" Or x.Codigo = "CABA.BJA" Or x.Codigo = "CABA.ASFP" Or x.Codigo = "CABA.SIN").Select(Function(x) x.idEnumeracion).ToList
        Dim FechaInicio As New Date(2019, 12, 31)
        Dim rs = bd.recibos.Include("agentes").Include("subagentes").Include("polizassg.entidadespolizas.entidades").Include("polizassg.ramos").Include("polizassg.companias").Include("enumeraciones1").Include("enumeraciones3").Where(Function(x) x.FechaBaja.HasValue AndAlso x.FechaBaja > FechaInicio AndAlso Cabas.Contains(x.idCausaBaja) AndAlso Not x.gestionesrecibos.Any(Function(y) y.Tipo = TipoCarta)).ToList.Where(Function(x) x.BloquearFacturacion = False).ToList
        For Each r In rs
            If RecibosSinComunicacion IsNot Nothing AndAlso RecibosSinComunicacion.Contains(r.CodigoRecibo) Then
                r.FormaComunicacionTMP = tgsn
            Else
                If r.polizassg.EntidadPolizaTomador.Telefono1.EsNumeroTelefonoMovilEspañolValido Or r.polizassg.EntidadPolizaTomador.Telefono2.EsNumeroTelefonoMovilEspañolValido Then
                    r.FormaComunicacionTMP = tgsms
                Else
                    If r.polizassg.EntidadPolizaTomador.direcciones IsNot Nothing AndAlso r.polizassg.EntidadPolizaTomador.direcciones.CodigoPostal.NothingAVacio <> "" AndAlso r.polizassg.EntidadPolizaTomador.direcciones.municipios IsNot Nothing And r.polizassg.EntidadPolizaTomador.direcciones.Direccion.NothingAVacio <> "" Then
                        r.FormaComunicacionTMP = tgcarta
                    Else
                        r.FormaComunicacionTMP = tgsa
                    End If
                End If
            End If
        Next
        Return rs
    
End
Public Shared Function ObtieneRecibosComunicacionDevueltoBanco(Optional bd As bdGestionAsegasa.gestionasegasaEntities = Nothing) As List(Of recibos)
        If bd Is Nothing Then bd = bdGestionAsegasa.gestionasegasaEntities.NuevoContexto
        Dim tgsms As Integer = FormaComunicacionEnum.POR_SMS
        Dim tgcarta As Integer = FormaComunicacionEnum.POR_CARTA
        Dim tgsa As Integer = FormaComunicacionEnum.SIN_DOMICILIO_NI_TLF_VALIDO
        Dim TipoCarta As Integer = TipoGestionEnum.AVISO_RECIBO_DEVUELTO_BANCO
        '      Dim idTipoContDev As Integer = TipoGestionEnum.CONTABILIZACIÓN_DEVOLUCIÓN_BANCO_SISTEMA_HP


        Dim idTrex = bd.enumeraciones.First(Function(X) X.Codigo = "TRC.EX").idEnumeracion
        Dim idTrcx = bd.enumeraciones.First(Function(X) X.Codigo = "TRC.CX").idEnumeracion
        Dim idtippba = bd.enumeraciones.First(Function(X) X.Codigo = "TIPP.BA").idEnumeracion


        '        Dim rs = bd.recibos.Include("agentes").Include("subagentes").Include("polizassg.entidadespolizas.entidades").Include("polizassg.ramos").Include("polizassg.companias").Include("enumeraciones1").Include("enumeraciones3").Where(Function(x) x.FechaBaja.HasValue = False And x.FechaCartaDevuelto.HasValue = False And x.FechaDevolucionBanco.HasValue And x.idTipoPago = idtippba And x.idTipo <> idTrex And x.idTipo <> idTrcx And Not x.gestionesrecibos.Any(Function(y) y.Tipo = TipoCarta) And (x.idAsientoDevueltoBanco.HasValue Or x.gestionesrecibos.Any(Function(y) y.Tipo = idTipoContDev))).ToList
        Dim rs = bd.recibos.Include("agentes").Include("subagentes").Include("polizassg.entidadespolizas.entidades").Include("polizassg.ramos").Include("polizassg.companias").Include("enumeraciones1").Include("enumeraciones3").Where(Function(x) x.FechaBaja.HasValue = False AndAlso x.FechaCartaDevuelto.HasValue = False AndAlso x.FechaDevolucionBanco.HasValue AndAlso x.idTipoPago = idtippba AndAlso x.idTipo <> idTrex And x.idTipo <> idTrcx And Not x.gestionesrecibos.Any(Function(y) y.Tipo = TipoCarta) And (x.idAsientoDevueltoBanco.HasValue Or x.FechaAsientoDevueltoBanco.HasValue)).ToList.Where(Function(x) x.BloquearFacturacion = False).ToList
        For Each r In rs
            If r.polizassg.EntidadPolizaTomador.Telefono1.EsNumeroTelefonoMovilEspañolValido Or r.polizassg.EntidadPolizaTomador.Telefono2.EsNumeroTelefonoMovilEspañolValido Then
                r.FormaComunicacionTMP = tgsms
            Else
                If r.polizassg.EntidadPolizaTomador.direcciones IsNot Nothing AndAlso r.polizassg.EntidadPolizaTomador.direcciones.CodigoPostal.NothingAVacio <> "" AndAlso r.polizassg.EntidadPolizaTomador.direcciones.municipios IsNot Nothing AndAlso r.polizassg.EntidadPolizaTomador.direcciones.Direccion.NothingAVacio <> "" Then
                    r.FormaComunicacionTMP = tgcarta
                Else
                    r.FormaComunicacionTMP = tgsa
                End If
            End If
        Next
        Return rs
    
End
Public Function AListadoDevueltos() As ListadoDevueltos
        Return New ListadoDevueltos(Me)
    
End
Public Function AListadoBajas() As ListadoBajas
        Return New ListadoBajas(Me)
    
End
Public Function AListadoAsegurados() As ListadoAsegurados
        Return New ListadoAsegurados(Me)
    
End
