Files
Asegasa.NET/guia/procesos/ProcesosTractoresAxa.vb
2026-04-28 11:52:16 +02:00

783 lines
62 KiB
VB.net

Imports tsl5.Extensiones.StringExtensions
Imports bdGestionAsegasa.Utilidades
Public Class ProcesosTractoresAxa
''' <summary>
''' Revisa qué pólizas de la última semana están pendientes de generación de CSV. Se genera el CSV y se crea en la base de datos toda la informacion relacionada y necesaria.
''' </summary>
''' <param name="bd"></param>
''' <remarks>Este método no crea el correo que se envía a AXA diariamente. Para eso se usa otro método distinto.</remarks>
Public Shared Function GenerarYGuardarEnBdCsvTractoresAxa(ByVal bd As bdGestionAsegasa.gestionasegasaEntities)
Dim resultadoGuardarCambios As Integer = 0
Try
Dim listaAltas As New List(Of bdGestionAsegasa.polizassg)
Dim listaAltasFiltradasPorFecha As New List(Of bdGestionAsegasa.polizassg)
Dim idRamoTractores = bd.ramos.First(Function(x) x.Codigo = "1-1").idRamo
Dim idRamoRemolques = bd.ramos.First(Function(x) x.Codigo = "1-1-1").idRamo
Dim idCiaAXA = bd.companias.First(Function(x) x.Codigo = "0027").idCompania
Dim idTipoGestionPoliza = bd.enumeraciones.First(Function(x) x.Codigo = "TGP.CSVAXA").idEnumeracion
Dim idTipoFicheroCSV = bd.enumeraciones.First(Function(x) x.Codigo = "TIPFIC.CSVAXA").idEnumeracion
Dim lineaFichero As bdGestionAsegasa.ficheros
Dim lineaGestionesVarias As bdGestionAsegasa.gestionesvarias
' Datos para comprobar que toca hacerlo
Dim dHoy As Date = Date.Today
Dim dAyer As Date = Date.Today.AddDays(-1)
' Dim dSemana As Date = Date.Today.AddDays(-7)
' Las pólizas que necesitan CSV son las que cumplan estas condiciones:
' - Sean de ramo 1-1 o 1-1-1.
' - La compañía sea AXA.
' - No tengan archivo CSV. Dicho de otro modo, que no tengan líneas en la tabla `gestionespolizassg` con la gestión "Creación de CSV y envío a AXA".
' - Que en la columna idOrigenPresupuesto el valor sea TiposPresupuestos.TRACTORES (2).
' - Que la fecha de creación sea anterior a hoy (ya que esto se ejecutará a las 00:00 y debe procesar las del día anterior).
' - Que la fecha de creación no sea mayor a 7 días.
' - Oculto = false
' Nota: En algún momento me interesaría poner que algunos estos filtros de búsqueda sean parametros que se le pasen a este método.
' Por ahora lo estoy haciendo así como dos consultas porque LINQtoSQL no permite filtrar por Date en los Where.
' Quizás lo mejor sería crear una vista para optimizar el rendimiento. Pero esto se ejecuta una sola vez al día, no sé si merece la pena hacerlo.
Try
listaAltas = (From x In bd.polizassg Where (x.ramos.idRamo = idRamoTractores OrElse x.ramos.idRamo = idRamoRemolques) _
AndAlso x.idCompania = idCiaAXA _
AndAlso x.FechaAceptacionPresupuesto.HasValue _
AndAlso x.FechaBaja.HasValue = False _
AndAlso Not x.gestionespolizassg.Any(Function(y) y.idTipo = idTipoGestionPoliza) _
AndAlso x.idOrigenPresupuesto = bdGestionAsegasa.polizassg.TiposPresupuestos.TRACTORES
).ToList()
'listaAltasFiltradasPorFecha = listaAltas.Where(Function(x) (x.FechaAlta.HasValue AndAlso x.FechaAlta.Value.Date < dHoy) _
' AndAlso (x.FechaAlta.HasValue AndAlso x.FechaAlta.Value.Date >= dSemana)
' ).ToList()
listaAltasFiltradasPorFecha = listaAltas.Where(Function(x) (x.FechaAlta.HasValue AndAlso x.FechaAlta.Value.Date < dHoy)).ToList
Debug.WriteLine("listaAltas: {0}", listaAltas.Count())
Debug.WriteLine("listaAltasFiltradasPorFecha: {0}", listaAltasFiltradasPorFecha.Count())
For Each item In listaAltasFiltradasPorFecha
Debug.WriteLine("({0},{1},{2})", item.idPoliza, item.NumeroPoliza, item.Matricula)
Next
Catch ex As Exception
System.Diagnostics.Debug.Write(ex.ToString)
Call AñadeLog(tsl5.Enumeraciones.TipoLog.Fallo, "En «" & System.Reflection.MethodBase.GetCurrentMethod.ToString & "`",
"En método `" & System.Reflection.MethodBase.GetCurrentMethod.ToString & "`. " _
& Environment.MachineName & " " & ex.ToString, ex)
End Try
If listaAltasFiltradasPorFecha.Count > 0 Then 'Si entra, significa que toca hacerlo.
lineaFichero = New bdGestionAsegasa.ficheros With {
.Descripcion = String.Format("{0} {1}",
bd.enumeraciones.First(Function(x) x.Codigo = "AXATRACTORES.DescripcionFicheroCSV").ValorAlfabeticoLargo,
dAyer.ToString("yyyy-MM-dd")),
.Fecha = Now,
.idTipo = idTipoFicheroCSV,
.NombreFichero = String.Format("{0}{1}.csv",
bd.enumeraciones.First(Function(x) x.Codigo = "AXATRACTORES.NombreFicheroCSV").ValorAlfabeticoLargo,
dAyer.ToString("yyyy-MM-dd"))
}
bd.ficheros.AddObject(lineaFichero)
'bd.GuardarCambios()
lineaGestionesVarias = New bdGestionAsegasa.gestionesvarias With {
.Descripción = lineaFichero.NombreFichero,
.idTipo = idTipoGestionPoliza,
.ficheros = lineaFichero,
.FechaCreacion = Now
}
bd.gestionesvarias.AddObject(lineaGestionesVarias)
' /////////////////////////////////////////////////////////
' // Generar CSV conteniendo todas las altas pendientes //
' ///////////////////////////////////////////////////////
Dim archivoCSV As Byte() = GenerarCsvTractoresAxa(bd, listaAltasFiltradasPorFecha, lineaGestionesVarias)
' /////////////////////////////////////////////////////////////
' // FIN Generar CSV conteniendo todas las altas pendientes //
' ///////////////////////////////////////////////////////////
' Crear líneas en la base de datos para fichero y gestiones varias
lineaFichero.Fichero = archivoCSV
resultadoGuardarCambios = bd.GuardarCambios()
' Notificación Slack
If resultadoGuardarCambios > 0 Then
Try
Dim mensaje As New Text.StringBuilder
mensaje.AppendFormat("Se ha generado un archivo CSV con altas de tractores y/o remolques para AXA.```idFichero: {1}{0}NombreFichero: {2}{0}idGestion: {3}{0}Servidor: {4}```", vbCrLf,
lineaFichero.idFichero, lineaFichero.NombreFichero, lineaGestionesVarias.idGestion, Environment.MachineName)
tsl5.Utilidades.EnviarNotificacionSlack(mensaje.ToString, destinatario:="#asegasa", descripcionRemitente:=Reflection.MethodBase.GetCurrentMethod.ToString)
Catch ex As Exception
' Si esta notificación da error no debe pararse el servicio, así que no hago nada.
End Try
End If
End If
Catch ex As Exception
System.Diagnostics.Debug.WriteLine("No hay líneas o se produjo excepción.")
System.Diagnostics.Debug.WriteLine(ex.ToString)
Call AñadeLog(tsl5.Enumeraciones.TipoLog.Fallo, "En «" & System.Reflection.MethodBase.GetCurrentMethod.ToString & "`",
"En método `" & System.Reflection.MethodBase.GetCurrentMethod.ToString & "`. " _
& Environment.MachineName & " " & ex.ToString, ex)
End Try
Debug.WriteLine(System.Reflection.MethodBase.GetCurrentMethod.ToString)
Return resultadoGuardarCambios
End Function
''' <summary>
''' Este es el método que se encarga de crear el CSV propiamente dicho. Opcionalmente (aunque, por lo general, sí) este método
''' va creando en la tabla `gestionnespolizassg` las líneas indicando que se ha creado el CSV para cada póliza.
''' </summary>
''' <param name="bd"></param>
''' <param name="listaPolizas">La lista de pólizas de tractores que se van a incluir en el CSV.</param>
''' <param name="lineaGestionesVarias">Si este parámetro se recibe, se crean en la tabla `gestionnespolizassg` las líneas que indican que se ha creado el CSV para cada póliza.</param>
''' <returns>Un array de bytes conteniendo el fichero CSV.</returns>
''' <remarks>Si no se recibe el parámtro "lineaGestionesVarias" no se crearán en la base de datos las líneas que indican que se ha creado el CSV para cada póliza.
''' La ventaja de esto es que así se puede usar este método para generar CSV de manera puntual o para depuración.</remarks>
Public Shared Function GenerarCsvTractoresAxa(ByVal bd As bdGestionAsegasa.gestionasegasaEntities, ByVal listaPolizas As List(Of bdGestionAsegasa.polizassg), Optional ByRef lineaGestionesVarias As bdGestionAsegasa.gestionesvarias = Nothing)
Dim archivoCSV As Byte() = Nothing
Dim idTipoGestionPoliza As String = bd.enumeraciones.First(Function(x) x.Codigo = "TGP.CSVAXA").idEnumeracion
Dim sDescripcionGestion As String = bd.enumeraciones.First(Function(x) x.Codigo = "AXATRACTORES.DescripcionGestion").ValorAlfabeticoLargo
Dim nombreArchivoTemporal As String = System.IO.Path.GetTempFileName
Using sw As New IO.StreamWriter(IO.File.Open(nombreArchivoTemporal, IO.FileMode.Create), System.Text.Encoding.GetEncoding("iso-8859-1"))
' Esta línea que escribo a continuación en el archivo era demasiado larga para guardarla en la tabla enumeraciones de la base de datos.
sw.WriteLine("Código Marca;Código Modelo;Código Versión;Medofi;Fecha de Efecto;Hora de Fecha Efecto;CAMPAÑA;Producto;Nº Póliza Reservado;Fecha entrada en Delegación;Duración;Plan de cobro;Canal de cobro;Fecha Vto.;NIF, CIF, OTROS;Nº de NIF ó CIF;Primer apellido si es Empresa, no cumplimentar;Segundo apellido si es Empresa, no cumplimentar;Nombre;Fecha Nacimiento;Estado Civil;SEXO;C.P.;Población;Tipo Vía;Nombre Vía;Numero vía;Resto Vía;Propietario;Nombre propietario;Apellido 1 propietario;Apellido 2 propietario;Nif/Cif propietario;Conductor Titular;Nombre Conductor;1º Apellido Conductor;2º Apellido Conductor;Fecha nacimiento conductor DDMMAAAA;Nif, Cif, Otros;NIF Conductor;SEXO;Fecha carnét DDMMAAAA;Conductor Autorizado 1;Nombre Conductor;1º Apellido Conductor;2º Apellido Conductor;Fecha nto. Conductor DDMMAAAA;NIF Conductor;SEXO;Fecha carnet DDMMAAAA;Conductor Autorizado 2;Nombre Conductor;1º Apellido Conductor;2º Apellido Conductor;Fecha nto. Conductor DDMMAAAA;NIF Conductor;SEXO;Fecha carnet DDMMAAAA;Permiso retirado (fijo);Uso Vehículo (según tabla);Accesorios;Tipo de Accesorios;Descripción (Detallar los accesorios separados por comas);Valor Accesorios (valor total);Peso en Toneladas;Literal de Marca;Literal de Modelo;Literal de Versión;Valor (fijo);Valor LUNAS;Matrícula;Fecha 1ª Matriculación DDMMAAAA;C.P. circulación (poner el CP del conductor);Alarma (fijo);Garaje (fijo);KM recorridos (fijo);Combinación de Garantías;Combinación de Accidentes;Kit RC Explotación Agrícola;PRIMA TOTAL;Nº PîLIZA EMITIDA;PNETA EMITIDA;PTOTAL EMITIDA")
For Each linea In listaPolizas
' Comprobar si el archivo XML es el tractores.xml de tipo "TIPFIC.PRESUPUESTO
Dim idTipoFicheroPresupuesto As Integer = bd.enumeraciones.First(Function(x) x.Codigo = "TIPFIC.PRESUPUESTO").idEnumeracion
If linea.ficheros.idTipo = idTipoFicheroPresupuesto _
AndAlso linea.ficheros.NombreFichero.Trim.ToUpper = "tractores.xml".ToUpper _
AndAlso linea.NumeroPoliza IsNot Nothing AndAlso Not String.IsNullOrWhiteSpace(linea.NumeroPoliza) Then
' Componer la poliza del archivo CSV
Dim lineaCSV As String = ""
Dim lineaCsvCorrecta As Boolean = False
Try
lineaCSV = ComponerLineaCsv(linea, bd)
lineaCsvCorrecta = True
Catch ex As Exception
Dim asunto As String = "No se ha podido generar una línea del CSV de TractoresAXA; idPoliza = " & linea.idPoliza & "; Máquina = " & Environment.MachineName
Dim cuerpo As String = "No se ha podido generar una línea del CSV de TractoresAXA; idPoliza = " & linea.idPoliza & vbCrLf &
"Esto podría significar que falta algún dato en esta póliza. " & vbCrLf &
"En método `" & System.Reflection.MethodBase.GetCurrentMethod.ToString & "`. " _
& vbCrLf & Environment.MachineName & " " & ex.ToString
Call AñadeLog(tsl5.Enumeraciones.TipoLog.Fallo, asunto, cuerpo, ex)
tsl5.Utilidades.EnviarNotificacionSlack(asunto, destinatario:="#asegasa", descripcionRemitente:=Reflection.MethodBase.GetCurrentMethod.ToString)
End Try
If lineaCsvCorrecta Then
sw.WriteLine(lineaCSV)
' Si he sido capaz de componer la línea del archivo CSV, tengo que guardarlo en la tabla gestionespolizassg
If lineaGestionesVarias IsNot Nothing AndAlso Not String.IsNullOrWhiteSpace(lineaGestionesVarias.Descripción) Then
linea.gestionespolizassg.Add(New bdGestionAsegasa.gestionespolizassg With {
.idPoliza = linea.idPoliza,
.idTipo = idTipoGestionPoliza,
.Fecha = Date.Now,
.GestionesRealizadas = sDescripcionGestion,
.gestionesvarias = lineaGestionesVarias
})
End If
End If
Else
Dim cadenaError As String = String.Format("Advertencia: el fichero no es de tipo ""TIPFIC.PRESUPUESTO"" o no se llama ""tractores.xml"", o no hay número de póliza; idPoliza = {0}", linea.idPoliza)
Console.WriteLine(cadenaError)
Call AñadeLog(tsl5.Enumeraciones.TipoLog.Fallo, "En «" & System.Reflection.MethodBase.GetCurrentMethod.ToString & "`",
"En método `" & System.Reflection.MethodBase.GetCurrentMethod.ToString & "`. " _
& Environment.MachineName & " " & cadenaError)
End If
Next
sw.Close()
sw.Dispose()
End Using
' Solo tenemos que enviarlo si el archivo tiene más de 1 línea.
' Si solo tiene 1, significa que solo va la línea de la cabecera, es decir,
' que no hay datos de ninguna póliza en ese archivo CSV.
' En ese caso, lanzamos una excepción para que se interruma el proceso.
If NumeroDeLineasEnElArchivoCSV(nombreArchivoTemporal) <= 1 Then
Throw New Exception("El archivo CSV que se ha generado solamente tiene la línea de la cabecera, es decir, no lleva información de ninguna póliza, por lo cual no tiene sentido mandarlo.")
End If
' Pasar el archivo CSV a array de bytes
archivoCSV = IO.File.ReadAllBytes(nombreArchivoTemporal)
Try
IO.File.Delete(nombreArchivoTemporal)
Catch ex As Exception
' Nada, a propósito.
' Si el archivo sobrevive tampoco es un gran problema.
End Try
Return archivoCSV
End Function
''' <summary>
''' Este método solamente crea un CSV; nada se guarda en la base de datos. Principalmente se usará con propósitos de pruebas y/o depuración.
''' </summary>
''' <param name="bd"></param>
''' <param name="cadenaListaPolizas">Una cadena de texto que incluya listas o rangos de pólizas en este formato: "64816901, 64816906-64816911, 64816915".
''' Esto significa "la póliza 64816901, el rango de las pólizas comprendidas entre la 64816906 y la 64816911, y la póliza 64816915". El separador "-" indica rango;
''' el separador "," separa elementos de la lista.</param>
''' <returns>Un array de bytes conteniendo el fichero CSV.</returns>
''' <remarks>Este método solamente crea un CSV; nada se guarda en la base de datos. Principalmente se usará con propósitos de pruebas y/o depuración.
''' Solo funcionará si todas las pólizas especificadas son de tractores de AXA generadas desde WEbAsegasa2018 (agentes.asegasa.com).</remarks>
Public Shared Function GenerarCsvTractoresAxa(ByVal bd As bdGestionAsegasa.gestionasegasaEntities, Optional ByVal cadenaListaPolizas As String = Nothing)
Dim archivoCSV As Byte() = Nothing
Dim listaPolizas As New List(Of bdGestionAsegasa.polizassg)
Dim idRamoTractores As String = (From x In bd.ramos Where x.Codigo = "1-1" Select x.idRamo).FirstOrDefault
Dim idRamoRemolques As String = (From x In bd.ramos Where x.Codigo = "1-1-1" Select x.idRamo).FirstOrDefault
Dim idCiaAXA As String = (From x In bd.companias Where x.Codigo = "0027" Select x.idCompania).FirstOrDefault
Dim listaCadenasSeparadasPorComas As List(Of String) = cadenaListaPolizas.Split(",").ToList
For Each x In listaCadenasSeparadasPorComas
If x.Contains("-") Then
Dim subListaRangos As List(Of String) = x.Split("-").ToList
If subListaRangos.Count = 2 Then
Dim iRangoDesde As UInteger = UInteger.Parse(subListaRangos.First.Trim())
Dim iRangoHasta As UInteger = UInteger.Parse(subListaRangos.Last.Trim())
listaPolizas.AddRange(bd.polizassg.Where(Function(y) (y.ramos.idRamo = idRamoTractores OrElse y.ramos.idRamo = idRamoRemolques) _
AndAlso y.idCompania = idCiaAXA _
AndAlso y.idOrigenPresupuesto = bdGestionAsegasa.polizassg.TiposPresupuestos.TRACTORES _
AndAlso (y.NumeroPoliza >= iRangoDesde AndAlso y.NumeroPoliza <= iRangoHasta)
).OrderBy(Function(y) y.NumeroPoliza).ToList())
Else
Throw New FormatException("Error con el formato de los rangos de números de pólizas especificados: " & cadenaListaPolizas)
End If
Else
Dim sNumeroPoliza As String = x.Trim()
Dim temp = bd.polizassg.Where(Function(y) y.NumeroPoliza = sNumeroPoliza).First
listaPolizas.Add(temp)
End If
Next
For Each poliza In listaPolizas
Debug.WriteLine(String.Format("[{0},{1},{2}]", poliza.idPoliza, poliza.NumeroPoliza, poliza.Matricula))
Next
archivoCSV = GenerarCsvTractoresAxa(bd, listaPolizas)
Return archivoCSV
End Function
''' <summary>
''' Este método solamente crea un CSV; nada se guarda en la base de datos. Principalmente se usará con propósitos de pruebas y/o depuración.
''' </summary>
''' <param name="bd"></param>
''' <param name="fechaDesde">Desde esta fecha se incluirán todas las pólizas de tractores de AXA en el rango que será procesado.</param>
''' <param name="fechaHasta">Hasta esta fecha se incluirán todas las pólizas de tractores de AXA en el rango que será procesado.</param>
''' <returns>Este método solamente crea un CSV; nada se guarda en la base de datos. Principalmente se usará con propósitos de pruebas y/o depuración.</returns>
''' <remarks>Ambas fechas especificadas están incluídas en el rango que será procesado.</remarks>
Public Shared Function GenerarCsvTractoresAxa(ByVal bd As bdGestionAsegasa.gestionasegasaEntities, ByVal fechaDesde As Date, ByVal fechaHasta As Date)
Dim archivoCSV As Byte() = Nothing
Dim idRamoTractores As String = (From x In bd.ramos Where x.Codigo = "1-1" Select x.idRamo).FirstOrDefault
Dim idRamoRemolques As String = (From x In bd.ramos Where x.Codigo = "1-1-1" Select x.idRamo).FirstOrDefault
Dim idCiaAXA As String = (From x In bd.companias Where x.Codigo = "0027" Select x.idCompania).FirstOrDefault
Dim listaAltas As List(Of bdGestionAsegasa.polizassg) = (From x In bd.polizassg Where (x.ramos.idRamo = idRamoTractores OrElse x.ramos.idRamo = idRamoRemolques) _
AndAlso x.idCompania = idCiaAXA _
AndAlso x.idOrigenPresupuesto = bdGestionAsegasa.polizassg.TiposPresupuestos.TRACTORES
).ToList()
Dim listaAltasFiltradasPorFecha As List(Of bdGestionAsegasa.polizassg) = listaAltas.Where(Function(x) (x.FechaAlta.HasValue AndAlso x.FechaAlta.Value.Date <= fechaHasta) _
AndAlso (x.FechaAlta.HasValue AndAlso x.FechaAlta.Value.Date >= fechaDesde)
).ToList()
archivoCSV = GenerarCsvTractoresAxa(bd, listaAltasFiltradasPorFecha)
Return archivoCSV
End Function
Private Shared Function ComponerLineaCsv(poliza As bdGestionAsegasa.polizassg, bd As bdGestionAsegasa.gestionasegasaEntities) As String
' Importante: tengo que hacer trim a todos los campos, por si acaso. Los apellidos se han guardando con espacios por delante.
Dim sb As New Text.StringBuilder
Try
' Primero verifico que todos los campos tengan datos. Si alguno no tiene, lanzo excepción.
Dim listaDatosFaltantes As New List(Of String)
If String.IsNullOrWhiteSpace(poliza.Tractores.TipoVehiculo.Trim()) Then listaDatosFaltantes.Add("poliza.Tractores.TipoVehiculo")
If String.IsNullOrWhiteSpace(poliza.FechaEfecto.ToString("ddMMyyyy")) Then listaDatosFaltantes.Add("poliza.FechaEfecto")
If String.IsNullOrWhiteSpace(poliza.Tomador.CIF.Trim()) Then listaDatosFaltantes.Add("poliza.Tomador.CIF")
If ObtenerTipoDocumentoTractoresAxa(poliza.Tomador.CIF) <> bd.enumeraciones.First(Function(x) x.Codigo = "AXATRACTORES.tipoDoc.PersJuridicaCIF").ValorAlfabeticoLargo Then ' Si no es CIF
If String.IsNullOrWhiteSpace(poliza.Tractores.TomadorApellido1.Trim()) Then listaDatosFaltantes.Add("poliza.Tractores.TomadorApellido1")
'If String.IsNullOrWhiteSpace(poliza.Tractores.TomadorApellido2.Trim()) Then listaDatosFaltantes.Add("poliza.Tractores.TomadorApellido2")
End If
If String.IsNullOrWhiteSpace(poliza.Tractores.TomadorNombre.Trim()) Then listaDatosFaltantes.Add("poliza.Tractores.TomadorNombre")
If String.IsNullOrWhiteSpace(poliza.Tractores.TomadorFechaNacimiento.ToString("ddMMyyyy")) Then listaDatosFaltantes.Add("poliza.Tractores.TomadorFechaNacimiento")
If String.IsNullOrWhiteSpace(poliza.Tractores.EstadoCivil.Trim()) Then listaDatosFaltantes.Add("poliza.Tractores.EstadoCivil")
If ObtenerTipoDocumentoTractoresAxa(poliza.Tomador.CIF) <> bd.enumeraciones.First(Function(x) x.Codigo = "AXATRACTORES.tipoDoc.PersJuridicaCIF").ValorAlfabeticoLargo Then ' Si no es CIF
If String.IsNullOrWhiteSpace(poliza.Tractores.TomadorSexo.ToString) Then listaDatosFaltantes.Add("poliza.Tractores.TomadorSexo")
End If
If String.IsNullOrWhiteSpace(poliza.Tractores.TomadorCodigoPostal.Trim()) Then listaDatosFaltantes.Add("poliza.Tractores.TomadorCodigoPostal")
If String.IsNullOrWhiteSpace(poliza.Tractores.TomadorPoblacion.Trim()) Then listaDatosFaltantes.Add("poliza.Tractores.TomadorPoblacion")
If String.IsNullOrWhiteSpace(poliza.Tractores.TomadorVia.Trim()) Then listaDatosFaltantes.Add("poliza.Tractores.TomadorVia")
If String.IsNullOrWhiteSpace(poliza.Tractores.TomadorNombreVia.Trim()) Then listaDatosFaltantes.Add("poliza.Tractores.TomadorNombreVia")
If String.IsNullOrWhiteSpace(poliza.Tractores.TomadorNumeroVia.Trim()) Then listaDatosFaltantes.Add("poliza.Tractores.TomadorNumeroVia")
If ObtenerTipoDocumentoTractoresAxa(poliza.Propietario.CIF) <> bd.enumeraciones.First(Function(x) x.Codigo = "AXATRACTORES.tipoDoc.PersJuridicaCIF").ValorAlfabeticoLargo Then ' Si no es CIF
If String.IsNullOrWhiteSpace(poliza.Tractores.PropietarioSexo.ToString) Then listaDatosFaltantes.Add("poliza.Tractores.PropietarioSexo")
If String.IsNullOrWhiteSpace(poliza.Tractores.PropietarioApellido1.Trim()) Then listaDatosFaltantes.Add("poliza.Tractores.PropietarioApellido1")
'If String.IsNullOrWhiteSpace(poliza.Tractores.PropietarioApellido2.Trim()) Then listaDatosFaltantes.Add("poliza.Tractores.PropietarioApellido2")
End If
If poliza.Propietario IsNot Nothing AndAlso poliza.Propietario.idEntidad <> poliza.Tomador.idEntidad Then
If String.IsNullOrWhiteSpace(poliza.Propietario.Nombre.Trim) And (ObtenerTipoDocumentoTractoresAxa(poliza.Propietario.CIF) <> bd.enumeraciones.First(Function(x) x.Codigo = "AXATRACTORES.tipoDoc.PersJuridicaCIF").ValorAlfabeticoLargo) Then
listaDatosFaltantes.Add("poliza.propietario.nombre")
End If
If String.IsNullOrWhiteSpace(poliza.Propietario.CIF.Trim()) Then listaDatosFaltantes.Add("poliza.Propietario.CIF")
End If
If poliza.Conductor Is Nothing OrElse poliza.Conductor.idEntidad = poliza.Tomador.idEntidad Then
'If Not poliza.Conductor.FechaExpedicionCarnet.HasValue Then
' listaDatosFaltantes.Add("poliza.Conductor.FechaExpedicionCarnet")
'Else
' If String.IsNullOrWhiteSpace(poliza.Conductor.FechaExpedicionCarnet.Value.ToString("ddMMyyyy")) Then listaDatosFaltantes.Add("poliza.Conductor.FechaExpedicionCarnet")
'End If
If Not (poliza.Tractores.FechaPermisoConduccion > Date.MinValue AndAlso poliza.Tractores.FechaPermisoConduccion < Date.MaxValue) Then
listaDatosFaltantes.Add("poliza.Tractores.FechaPermisoConduccion")
End If
If String.IsNullOrWhiteSpace(poliza.Tractores.FechaPermisoConduccion.ToString("ddMMyyyy")) Then listaDatosFaltantes.Add("poliza.Tractores.FechaPermisoConduccion")
Else
If String.IsNullOrWhiteSpace(poliza.Tractores.ConductorNombre.Trim()) Then listaDatosFaltantes.Add("poliza.Tractores.ConductorNombre")
If String.IsNullOrWhiteSpace(poliza.Tractores.ConductorApellido1.Trim()) Then listaDatosFaltantes.Add("poliza.Tractores.ConductorApellido1")
'If String.IsNullOrWhiteSpace(poliza.Tractores.ConductorApellido2.Trim()) Then listaDatosFaltantes.Add("poliza.Tractores.ConductorApellido2")
If String.IsNullOrWhiteSpace(poliza.Tractores.ConductorFechaNacimiento.ToString("ddMMyyyy")) Then listaDatosFaltantes.Add("poliza.Tractores.ConductorFechaNacimiento")
If String.IsNullOrWhiteSpace(poliza.Conductor.CIF.Trim()) Then listaDatosFaltantes.Add("poliza.Conductor.CIF")
If String.IsNullOrWhiteSpace(poliza.Tractores.ConductorSexo.ToString) Then listaDatosFaltantes.Add("poliza.Tractores.ConductorSexo")
If String.IsNullOrWhiteSpace(poliza.Tractores.FechaPermisoConduccion.ToString("ddMMyyyy")) Then listaDatosFaltantes.Add("poliza.Tractores.FechaPermisoConduccion")
End If
If String.IsNullOrWhiteSpace(poliza.Tractores.UsoVehiculo.Trim()) Then listaDatosFaltantes.Add("poliza.Tractores.UsoVehiculo")
If String.IsNullOrWhiteSpace(poliza.Tractores.Peso.ToString.Trim()) Then listaDatosFaltantes.Add("poliza.Tractores.Peso")
If String.IsNullOrWhiteSpace(poliza.Tractores.Marca.Trim()) Then listaDatosFaltantes.Add("poliza.Tractores.Marca")
If String.IsNullOrWhiteSpace(poliza.Tractores.Modelo.Trim()) Then listaDatosFaltantes.Add("poliza.Tractores.Modelo")
If String.IsNullOrWhiteSpace(poliza.Tractores.Version.Trim()) Then listaDatosFaltantes.Add("poliza.Tractores.Version")
If String.IsNullOrWhiteSpace(poliza.Matricula.ToUpper.Trim()) Then listaDatosFaltantes.Add("poliza.Matricula")
If String.IsNullOrWhiteSpace(poliza.Tractores.FechaPrimeraMatriculacion.ToString("ddMMyyyy")) Then listaDatosFaltantes.Add("poliza.Tractores.FechaPrimeraMatriculacion")
If String.IsNullOrWhiteSpace(poliza.Tractores.TomadorCodigoPostal.Trim()) Then listaDatosFaltantes.Add("poliza.Tractores.TomadorCodigoPostal")
If String.IsNullOrWhiteSpace(poliza.Tractores.CombinacionAccidentes.Trim()) Then listaDatosFaltantes.Add("poliza.Tractores.CombinacionAccidentes")
If String.IsNullOrWhiteSpace(poliza.Tractores.PrimaTotal.Trim()) Then listaDatosFaltantes.Add("poliza.Tractores.PrimaTotal")
If listaDatosFaltantes.Count > 0 Then
Dim sbDatosFaltantes As New Text.StringBuilder
For Each l In listaDatosFaltantes
sbDatosFaltantes.AppendFormat("{0}, ", l) 'Sí, esto es así. No es un error.
Next
Throw New Exception(String.Format("No se puede componer esta línea del CSV porque faltan datos en la póliza idPoliza = {0}; Lista de datos faltantes: {1}.",
poliza.idPoliza,
sbDatosFaltantes.ToString.RecortarPorElFinal(2)))
End If
' Fin de la verificación
' Datos generales de la póliza
sb.AppendFormat("{0};", poliza.Tractores.TipoVehiculo.Trim()) ' Código Marca
sb.AppendFormat("=""{0}"";", "001") ' Código Modelo
sb.AppendFormat("=""{0}"";", "001") ' Código Versión
sb.AppendFormat("{0};", "674392") ' Medofi
sb.AppendFormat("=""{0}"";", poliza.FechaEfecto.ToString("ddMMyyyy")) ' Fecha de Efecto
sb.AppendFormat("{0};", "") ' Hora de Fecha Efecto
sb.AppendFormat("{0};", "") ' CAMPAÑA
sb.AppendFormat("{0};", "8184") ' Producto
sb.AppendFormat("{0};", poliza.NumeroPoliza.Trim()) ' Nº Póliza Reservado
sb.AppendFormat("{0};", "") ' Fecha entrada en Delegación
sb.AppendFormat("{0};", "Anual Renovable") ' Duración
sb.AppendFormat("{0};", "Anual") ' Plan de cobro
sb.AppendFormat("{0};", "Mediador") ' Canal de cobro
sb.AppendFormat("{0};", "") ' Fecha Vto.
' Tomador
sb.AppendFormat("{0};", ObtenerTipoDocumentoTractoresAxa(poliza.Tomador.CIF)) ' NIF, CIF, OTROS
sb.AppendFormat("{0};", poliza.Tomador.CIF.Trim()) ' Nº de NIF ó CIF
sb.AppendFormat("{0};", poliza.Tractores.TomadorApellido1.Trim()) ' Primer apellido si es Empresa, no cumplimentar
sb.AppendFormat("{0};", poliza.Tractores.TomadorApellido2.Trim()) ' Segundo apellido si es Empresa, no cumplimentar
sb.AppendFormat("{0};", poliza.Tractores.TomadorNombre.Trim()) ' Nombre
sb.AppendFormat("=""{0}"";", poliza.Tractores.TomadorFechaNacimiento.ToString("ddMMyyyy")) ' Fecha Nacimiento
sb.AppendFormat("{0};", poliza.Tractores.EstadoCivil.Trim()) ' Estado Civil
If ObtenerTipoDocumentoTractoresAxa(poliza.Tomador.CIF) = bd.enumeraciones.First(Function(x) x.Codigo = "AXATRACTORES.tipoDoc.PersJuridicaCIF").ValorAlfabeticoLargo Then ' Si es CIF
sb.AppendFormat("{0};", bd.enumeraciones.First(Function(x) x.Codigo = "AXATRACTORES.sexo.SinInformar").ValorAlfabetico1) ' SEXO = "sin informar" para personas jurídicas
Else ' Si no es CIF
sb.AppendFormat("{0};", ObtenerSexoTractoresAxa(poliza.Tractores.TomadorSexo, bd)) ' SEXO
End If
sb.AppendFormat("{0};", poliza.Tractores.TomadorCodigoPostal.Trim()) ' C.P.
sb.AppendFormat("{0};", poliza.Tractores.TomadorPoblacion.Trim()) ' Población
sb.AppendFormat("{0};", poliza.Tractores.TomadorVia.Trim()) ' Tipo Vía
sb.AppendFormat("{0};", poliza.Tractores.TomadorNombreVia.Trim()) ' Nombre Vía
sb.AppendFormat("{0};", poliza.Tractores.TomadorNumeroVia.Trim()) ' Numero vía
sb.AppendFormat("{0};", poliza.Tractores.TomadorRestoVia.Trim()) ' Resto Vía
If poliza.Propietario Is Nothing OrElse poliza.Propietario.idEntidad = poliza.Tomador.idEntidad Then
' Propietario: el tomador
sb.AppendFormat("{0};", "El Tomador") ' Propietario
sb.AppendFormat("{0};", "") ' Nombre propietario
sb.AppendFormat("{0};", "") ' Apellido 1 propietario
sb.AppendFormat("{0};", "") ' Apellido 2 propietario
sb.AppendFormat("{0};", "") ' Nif/Cif propietario
Else
If ObtenerTipoDocumentoTractoresAxa(poliza.Propietario.CIF) <> bd.enumeraciones.First(Function(x) x.Codigo = "AXATRACTORES.tipoDoc.PersJuridicaCIF").ValorAlfabeticoLargo Then ' Si no es CIF
' Propietario: otro, persona física
sb.AppendFormat("{0};", "Otra persona distinta del Tomador") ' Propietario
sb.AppendFormat("{0};", poliza.Propietario.Nombre.Trim()) ' Nombre propietario
sb.AppendFormat("{0};", poliza.Tractores.PropietarioApellido1.Trim()) ' Apellido 1 propietario
sb.AppendFormat("{0};", poliza.Tractores.PropietarioApellido2.Trim()) ' Apellido 2 propietario
sb.AppendFormat("{0};", poliza.Propietario.CIF.Trim()) ' Nif/Cif propietario
Else
' Propietario: otro, persona jurídica
sb.AppendFormat("{0};", "Otra persona distinta del Tomador") ' Propietario
sb.AppendFormat("{0};", poliza.Propietario.Nombre.Trim()) ' Nombre propietario
sb.AppendFormat("{0};", "") ' Apellido 1 propietario, no tiene.
sb.AppendFormat("{0};", "") ' Apellido 2 propietario, no tiene.
sb.AppendFormat("{0};", poliza.Propietario.CIF.Trim()) ' Nif/Cif propietario
End If
End If
If poliza.Conductor Is Nothing OrElse poliza.Conductor.idEntidad = poliza.Tomador.idEntidad Then
' Conductor: el tomador
sb.AppendFormat("{0};", "El Tomador") ' Conductor Titular
sb.AppendFormat("{0};", "") ' Nombre Conductor
sb.AppendFormat("{0};", "") ' 1º Apellido Conductor
sb.AppendFormat("{0};", "") ' 2º Apellido Conductor
sb.AppendFormat("{0};", "") ' Fecha nacimiento conductor DDMMAAAA
sb.AppendFormat("{0};", "") ' Nif, Cif, Otros
sb.AppendFormat("{0};", "") ' NIF Conductor
sb.AppendFormat("{0};", "") ' SEXO
sb.AppendFormat("=""{0}"";", poliza.Tractores.FechaPermisoConduccion.ToString("ddMMyyyy")) ' Fecha carnét DDMMAAAA
Else
' Conductor: otro
sb.AppendFormat("{0};", "Es otra persona") ' Conductor Titular
sb.AppendFormat("{0};", poliza.Tractores.ConductorNombre.Trim()) ' Nombre Conductor
sb.AppendFormat("{0};", poliza.Tractores.ConductorApellido1.Trim()) ' 1º Apellido Conductor
sb.AppendFormat("{0};", poliza.Tractores.ConductorApellido2.Trim()) ' 2º Apellido Conductor
sb.AppendFormat("=""{0}"";", poliza.Tractores.ConductorFechaNacimiento.ToString("ddMMyyyy")) ' Fecha nacimiento conductor DDMMAAAA
sb.AppendFormat("{0};", ObtenerTipoDocumentoTractoresAxa(poliza.Conductor.CIF)) ' Nif, Cif, Otros
sb.AppendFormat("{0};", poliza.Conductor.CIF.Trim()) ' NIF Conductor
sb.AppendFormat("{0};", ObtenerSexoTractoresAxa(poliza.Tractores.ConductorSexo, bd)) ' SEXO
sb.AppendFormat("=""{0}"";", poliza.Tractores.FechaPermisoConduccion.ToString("ddMMyyyy")) ' Fecha carnét DDMMAAAA
End If
' Conductor autorizado 1 (siempre vacío)
sb.AppendFormat("{0};", "No se declara") ' Conductor Autorizado 1
sb.AppendFormat("{0};", "") ' Nombre Conductor
sb.AppendFormat("{0};", "") ' 1º Apellido Conductor
sb.AppendFormat("{0};", "") ' 2º Apellido Conductor
sb.AppendFormat("{0};", "") ' Fecha nto. Conductor DDMMAAAA
sb.AppendFormat("{0};", "") ' NIF Conductor
sb.AppendFormat("{0};", "") ' SEXO
sb.AppendFormat("{0};", "") ' Fecha carnet DDMMAAAA
' Conductor autorizado 2 (siempre vacío)
sb.AppendFormat("{0};", "No se declara") ' Conductor Autorizado 2
sb.AppendFormat("{0};", "") ' Nombre Conductor
sb.AppendFormat("{0};", "") ' 1º Apellido Conductor
sb.AppendFormat("{0};", "") ' 2º Apellido Conductor
sb.AppendFormat("{0};", "") ' Fecha nto. Conductor DDMMAAAA
sb.AppendFormat("{0};", "") ' NIF Conductor
sb.AppendFormat("{0};", "") ' SEXO
sb.AppendFormat("{0};", "") ' Fecha carnet DDMMAAAA
' Otros datos
sb.AppendFormat("{0};", "No") ' Permiso retirado (fijo)
sb.AppendFormat("{0};", poliza.Tractores.UsoVehiculo.Trim()) ' Uso Vehículo (según tabla)
sb.AppendFormat("{0};", "") ' Accesorios
sb.AppendFormat("{0};", "") ' Tipo de Accesorios
sb.AppendFormat("{0};", "") ' Descripción (Detallar los accesorios separados por comas)
sb.AppendFormat("{0};", "") ' Valor Accesorios (valor total)
sb.AppendFormat("{0};", poliza.Tractores.Peso.ToString.Trim()) ' Peso en Toneladas
sb.AppendFormat("{0};", poliza.Tractores.Marca.Trim()) ' Literal de Marca
sb.AppendFormat("{0};", poliza.Tractores.Modelo.Trim()) ' Literal de Modelo
sb.AppendFormat("{0};", poliza.Tractores.Version.Trim()) ' Literal de Versión
sb.AppendFormat("{0};", "35.000") ' Valor (fijo)
sb.AppendFormat("=""{0}"";", "0,00") ' Valor LUNAS
sb.AppendFormat("{0};", poliza.Matricula.ToUpper.Trim()) ' Matrícula
sb.AppendFormat("=""{0}"";", poliza.Tractores.FechaPrimeraMatriculacion.ToString("ddMMyyyy")) ' Fecha 1ª Matriculación DDMMAAAA
sb.AppendFormat("=""{0}"";", poliza.Tractores.TomadorCodigoPostal.Trim()) ' C.P. circulación (poner el CP del conductor)
sb.AppendFormat("{0};", "NO") ' Alarma (fijo)
sb.AppendFormat("{0};", "NO") ' Garaje (fijo)
sb.AppendFormat("{0};", "Sin definir") ' KM recorridos (fijo)
sb.AppendFormat("{0};", "Terceros sin Asistencia") ' Combinación de Garantías
sb.AppendFormat("{0};", poliza.Tractores.CombinacionAccidentes.Trim()) ' Combinación de Accidentes
sb.AppendFormat("{0};", "Si") ' Kit RC Explotación Agrícola
sb.AppendFormat("{0};", poliza.Tractores.PrimaTotal.Trim()) ' PRIMA TOTAL
sb.AppendFormat("{0};", "") ' Nº PÓLIZA EMITIDA
sb.AppendFormat("{0};", "") ' PNETA EMITIDA
sb.AppendFormat("{0}", "") ' PTOTAL EMITIDA
Catch ex As Exception
Throw New Exception(ex.Message, ex)
End Try
Return sb.ToString
End Function
Public Shared Function PrepararCorreosCsvTractoresAxa(bd As bdGestionAsegasa.gestionasegasaEntities) As Integer
Const danmundebug As Boolean = False
Dim resultadoGuardarCambios As Integer = 0
Try
Dim dHoy As Date = Date.Today
Dim dAyer As Date = Date.Today.AddDays(-1)
' Dim dSemana As Date = Date.Today.AddDays(-7)
Dim idTipoGestionPoliza As String = bd.enumeraciones.First(Function(x) x.Codigo = "TGP.CSVAXA").idEnumeracion
Dim idTipoFicheroCSV As String = bd.enumeraciones.First(Function(x) x.Codigo = "TIPFIC.CSVAXA").idEnumeracion
Dim nLineasPendientesCorreoCsv As Integer = 0
'// Toca hacerlo si tenemos líneas en la tabla gestionesvarias que cumplan las siguientes condiciones
'// - idTipo = idTipoGestionPoliza
'// - fechaProcesado = NULL
Dim lineasPendientesCorreoCsv As List(Of bdGestionAsegasa.gestionesvarias) =
bd.gestionesvarias.Where(Function(x) x.idTipo = idTipoGestionPoliza _
AndAlso Not x.FechaProcesado.HasValue).ToList()
nLineasPendientesCorreoCsv = lineasPendientesCorreoCsv.Count
'// Preparación del correo que sí lleva CSV
For Each linea In lineasPendientesCorreoCsv
Dim listaEnumeraciones As List(Of bdGestionAsegasa.enumeraciones) = bd.enumeraciones.Where(Function(x) x.Codigo.StartsWith("AXATRACTORES.email.")).ToList()
Dim listaDestinatarios As List(Of String) = (From x In bd.enumeraciones Where x.Codigo.StartsWith("AXATRACTORES.email.destinatario") Select x.ValorAlfabeticoLargo.Trim()).ToList()
Dim remitente = (From x In bd.enumeraciones Where x.Codigo = "AXATRACTORES.email.remitente" Select x.ValorAlfabeticoLargo).FirstOrDefault().Trim()
Dim direccionRespuesta As String = (From x In bd.enumeraciones Where x.Codigo = "AXATRACTORES.email.direccionRespuesta" Select x.ValorAlfabeticoLargo).FirstOrDefault().Trim()
Dim asunto = String.Format("{0} {1}",
bd.enumeraciones.First(Function(x) x.Codigo = "AXATRACTORES.email.asunto").ValorAlfabeticoLargo.Trim(),
linea.ficheros.Descripcion.Split(" ").Last)
Dim cuerpo = String.Format("{0} {1}",
bd.enumeraciones.First(Function(x) x.Codigo = "AXATRACTORES.email.cuerpo").ValorAlfabeticoLargo.Trim(),
linea.ficheros.Descripcion.Split(" ").Last)
Dim nombreArchivoCSV As String = String.Format("{0}{1}.csv",
bd.enumeraciones.First(Function(x) x.Codigo = "AXATRACTORES.NombreFicheroCSV").ValorAlfabeticoLargo,
linea.ficheros.Descripcion.Split(" ").Last)
' Enviar el correo (bueno, en realidad guardarlo en la BD para que se envíe)
Dim cuentaCorreo As bdGestionAsegasa.cuentascorreo = bd.cuentascorreo.First(Function(x) x.Codigo = "CSVAXA")
For Each destinatario In listaDestinatarios
bdGestionAsegasa.correos.GeneraRegistroCorreo(bd, asunto, cuerpo, cuentaCorreo, destinatario,,, linea.idFichero)
Next
' Marcar email como enviado. Si no ha dado excepción hasta aquí, significa que ya está en la tabla de salida de correos.
linea.FechaProcesado = Now
If Not danmundebug Then resultadoGuardarCambios += bd.GuardarCambios()
System.Diagnostics.Debug.WriteLine("lineaCSV.enviado: " & resultadoGuardarCambios)
' Notificación Slack
If resultadoGuardarCambios > 0 Then
Try
Dim mensaje As New Text.StringBuilder
mensaje.AppendFormat("Se ha generado un email para AXA conteniendo el archivo CSV con altas de tractores y/o remolques para AXA.```Asunto: {1}{0}Servidor: {2}```", vbCrLf,
asunto, Environment.MachineName)
tsl5.Utilidades.EnviarNotificacionSlack(mensaje.ToString, destinatario:="#asegasa", descripcionRemitente:=Reflection.MethodBase.GetCurrentMethod.ToString)
Catch ex As Exception
' Si esta notificación da error no debe pararse el servicio, así que no hago nada.
End Try
End If
Next
'TODO danmun: Preparación del correo que NO lleva CSV
'// Preparación del correo que NO lleva CSV
'// Sabremos si hay que hacer esto si no hay líneas pendientes de enviar el correo del CSV y si además
'// hoy no se envió ningún email con CSV (esto sirve para evitar problemas cuando se lanzan estos métodos
'// manualmente, desde los botones rojos del Depurador, por ejemplo)
'If nLineasPendientesCorreoCsv = 0 AndAlso Not YaSeEnvióCsvParaHoy(bd) Then
' resultadoGuardarCambios = 0
' Dim idTipoGestionNoCSV As String = bd.enumeraciones.First(Function(x) x.Codigo = "TGP.NOCSVAXA").idEnumeracion
' '// Hacerlo solamente si no existe una línea en `gestionesvarias` de tipo "TGP.NOCSVAXA" con fecha de procesado dAyer
' If bd.gestionesvarias.Where(Function(x) x.idTipo = idTipoGestionNoCSV AndAlso Not (x.FechaProcesado.Value > dAyer AndAlso x.FechaProcesado.Value < dHoy)).Count = 0 Then
' Dim listaEnumeraciones As List(Of bdGestionAsegasa.enumeraciones) = bd.enumeraciones.Where(Function(x) x.Codigo.StartsWith("AXATRACTORES.emailnocsv.")).ToList()
' Dim listaDestinatarios As List(Of String) = listaEnumeraciones.Where(Function(x) x.Codigo.StartsWith("AXATRACTORES.emailnocsv.destinatario")).Select(Function(x) x.ValorAlfabeticoLargo.Trim()).ToList()
' Dim remitente As String = listaEnumeraciones.First(Function(x) x.Codigo = "AXATRACTORES.emailnocsv.remitente").ValorAlfabeticoLargo.Trim()
' Dim direccionRespuesta As String = listaEnumeraciones.Where(Function(x) x.Codigo = "AXATRACTORES.emailnocsv.direccionResp").Select(Function(x) x.ValorAlfabeticoLargo).FirstOrDefault().Trim()
' Dim asunto As String = String.Format("{0} {1}",
' listaEnumeraciones.First(Function(x) x.Codigo = "AXATRACTORES.emailnocsv.asunto").ValorAlfabeticoLargo.Trim(),
' dAyer.ToString("yyyy-MM-dd"))
' Dim cuerpo As String = String.Format("{0} {1} {2}",
' listaEnumeraciones.First(Function(x) x.Codigo = "AXATRACTORES.emailnocsv.cuerpo1").ValorAlfabeticoLargo.Trim(),
' dAyer.ToString("yyyy-MM-dd"),
' listaEnumeraciones.First(Function(x) x.Codigo = "AXATRACTORES.emailnocsv.cuerpo2").ValorAlfabeticoLargo.Trim())
' Dim sDescripcion As String = String.Format("{0} {1}",
' bd.enumeraciones.First(Function(x) x.Codigo = "AXATRACTORES.DescripcionEmailNoTractores").ValorAlfabeticoLargo,
' dAyer.ToString("yyyy-MM-dd"))
' Dim nuevaGestionVaria As New bdGestionAsegasa.gestionesvarias With {
' .FechaCreacion = Now,
' .idTipo = idTipoGestionNoCSV,
' .Descripción = sDescripcion
' }
' bd.gestionesvarias.AddObject(nuevaGestionVaria)
' ' Enviar el correo (bueno, en realidad guardarlo en la BD para que se envíe)
' Dim cuentaCorreo As bdGestionAsegasa.cuentascorreo = bd.cuentascorreo.First(Function(x) x.Codigo = "CSVAXA")
' For Each destinatario In listaDestinatarios
' bdGestionAsegasa.correos.GeneraRegistroCorreo(bd, asunto, cuerpo, cuentaCorreo, destinatario)
' Next
' ' Marcar email como enviado. Si no ha dado excepción hasta aquí, significa que ya está en la tabla de salida de correos.
' nuevaGestionVaria.FechaProcesado = Now
' If Not danmundebug Then resultadoGuardarCambios += bd.GuardarCambios()
' System.Diagnostics.Debug.WriteLine("Guardada gestión varia NO CSV: " & resultadoGuardarCambios)
' ' Notificación Slack
' If resultadoGuardarCambios > 0 Then
' Try
' Dim mensaje As New Text.StringBuilder
' mensaje.AppendFormat("Se ha generado un email para ASEGASA indicando que no se ha enviado archivo CSV de tractores porque no hay altas en el sistema Asegasa-AXA tractores.```Asunto: {1}{0}Servidor: {2}```", vbCrLf,
' asunto, Environment.MachineName)
' tsl5.Utilidades.EnviarNotificacionSlack(mensaje.ToString, destinatario:="#asegasa", descripcionRemitente:=Reflection.MethodBase.GetCurrentMethod.ToString)
' Catch ex As Exception
' ' Si esta notificación da error no debe pararse el servicio, así que no hago nada.
' End Try
' End If
' End If
'End If
Catch ex As Exception
System.Diagnostics.Debug.WriteLine("No hay líneas o se produjo excepción.")
Call AñadeLog(tsl5.Enumeraciones.TipoLog.Fallo, "En «" & System.Reflection.MethodBase.GetCurrentMethod.ToString & "`",
"En método `" & System.Reflection.MethodBase.GetCurrentMethod.ToString & "`. " _
& Environment.MachineName & " " & ex.ToString, ex)
End Try
Return resultadoGuardarCambios
End Function
Public Shared Function YaSeEnvióCsvParaAyer(ByVal bd As bdGestionAsegasa.gestionasegasaEntities) As Boolean
Dim resultado As Boolean = False
Dim idTipoGestionPoliza As String = bd.enumeraciones.First(Function(x) x.Codigo = "TGP.CSVAXA").idEnumeracion
Dim idTipoFicheroCSV As String = bd.enumeraciones.First(Function(x) x.Codigo = "TIPFIC.CSVAXA").idEnumeracion
Dim dAyer As Date = Today.AddDays(-1)
Dim sDescripcion As String = String.Format("{0}{1}.csv",
bd.enumeraciones.First(Function(x) x.Codigo = "AXATRACTORES.NombreFicheroCSV").ValorAlfabeticoLargo,
dAyer.ToString("yyyy-MM-dd"))
resultado = bd.gestionesvarias.Any(Function(x) x.idTipo = idTipoGestionPoliza AndAlso x.FechaProcesado.HasValue _
AndAlso x.Descripción = sDescripcion)
'resultado = (From x In bd.gestionesvarias Where x.idTipo = idTipoGestionPoliza AndAlso x.FechaProcesado.HasValue AndAlso x.Descripción = sDescripcion).Count > 0
Return resultado
End Function
Public Shared Function YaSeEnvióCsvParaHoy(ByVal bd As bdGestionAsegasa.gestionasegasaEntities) As Boolean
Dim resultado As Boolean = False
Dim idTipoGestionPoliza As String = bd.enumeraciones.First(Function(x) x.Codigo = "TGP.CSVAXA").idEnumeracion
Dim idTipoFicheroCSV As String = bd.enumeraciones.First(Function(x) x.Codigo = "TIPFIC.CSVAXA").idEnumeracion
Dim sDescripcion As String = String.Format("{0}{1}.csv",
bd.enumeraciones.First(Function(x) x.Codigo = "AXATRACTORES.NombreFicheroCSV").ValorAlfabeticoLargo,
Today.ToString("yyyy-MM-dd"))
resultado = bd.gestionesvarias.Any(Function(x) x.idTipo = idTipoGestionPoliza AndAlso x.FechaProcesado.HasValue _
AndAlso x.Descripción = sDescripcion)
Return resultado
End Function
Public Shared Function NumeroDeLineasEnElArchivoCSV(ByVal rutaArchivoCSV As String) As Integer
Dim resultado = 0
resultado = IO.File.ReadLines(rutaArchivoCSV).Count()
Return resultado
End Function
''' <summary>
''' Obtiene el siguiente nº de póliza disponible para TractoresAXA.
''' </summary>
''' <param name="bd"></param>
''' <param name="n">Este parámetro se usa solo para depuración. Sirve para simular cuál es el último nº de póliza usado especificándolo en este parámetro.</param>
''' <returns>Devuelve el siguiente nº de póliza disponible ó -1 si no hay ninguno disponible.</returns>
''' <remarks>Para uso en producción es imprescindible evitar usar el segundo parámetro opcional.</remarks>
'Public Shared Function ObtenerNumeroDePolizaDisponibleTractoresAXA(ByVal bd As bdGestionAsegasa.gestionasegasaEntities, Optional ByVal n As UInteger = 0) As String
' Dim resultado As String = ""
' Dim inicio As bdGestionAsegasa.enumeraciones
' Dim fin As bdGestionAsegasa.enumeraciones
' Dim actual As UInteger = 0
' Dim bEncontrado As Boolean = False
' Dim enumNumeracion = (From x In bd.enumeraciones Where x.Codigo.StartsWith("AXATRACTORES.numeracion.") AndAlso x.ValorAlfabetico1.ToUpper.Trim = "DISPONIBLE"
' Order By x.Codigo Select x).ToList()
' Dim idRamoTractores As String = (From x In bd.ramos Where x.Codigo = "1-1" Select x.idRamo).FirstOrDefault
' Dim idRamoRemolques As String = (From x In bd.ramos Where x.Codigo = "1-1-1" Select x.idRamo).FirstOrDefault
' ' De todos los posibles rangos, tengo que elegir el más bajo que esté disponible.
' ' Como lo he ordenado por Codigo, al hacerlo así ya estoy eligiendo el más bajo disponible.
' ' Con rango más bajo me refiero al valor que está dentro del código, no a los números del rango en sí.
' ' Formato del código: "AXATRACTORES.numeracion.0000"
' inicio = enumNumeracion.Where(Function(x) x.Codigo.EndsWith(".inicio")).FirstOrDefault
' fin = enumNumeracion.Where(Function(x) x.Codigo.EndsWith(".fin")).FirstOrDefault
' Try
' If n = 0 Then
' actual = (From x In bd.polizassg Where x.NumeroPoliza >= inicio.ValorNumerico1 AndAlso x.NumeroPoliza <= fin.ValorNumerico1 AndAlso
' (x.idRamo = idRamoTractores OrElse x.idRamo = idRamoRemolques)
' Order By x.NumeroPoliza Descending
' Select x.NumeroPoliza Take 10).ToList().FirstOrDefault
' Else
' actual = n
' End If
' Catch ex As Exception
' ' Nada, significa que aún no existe el primero.
' End Try
' If actual = 0 Then
' ' Si "actual" vale 0 significa que es la primera vez y tenemos que usar el primero del rango.
' resultado = inicio.ValorNumerico1
' bEncontrado = True
' Else
' If actual < inicio.ValorNumerico1 Then
' resultado = inicio.ValorNumerico1
' bEncontrado = True
' ElseIf actual = fin.ValorNumerico1 Then
' ' Caso en el que hay que pasar a usar el siguiente rango.
' ' Hay que marcar el actual rango como completado.
' inicio.ValorAlfabetico1 = "Usado"
' fin.ValorAlfabetico1 = "Usado"
' bd.GuardarCambios()
' resultado = ObtenerNumeroDePolizaDisponibleTractoresAXA(bd)
' ' Sí, esta es una función recursiva. Está comprobado que esta recursividad funciona adecuadamente según los datos que haya en la base de datos.
' ElseIf actual > fin.ValorNumerico1 Then 'El número final sí lo podemos usar, por eso la comparación se hace con ">".
' resultado = -1 'Significa que ya hemos llegado al límite de asignaciones, no podemos asignar más.
' bEncontrado = True
' ' TODO: Mirar si hay otro rango más?
' Dim asunto As String = "TractoresAXA: Se han acabado los nºs de pólizas reservados para el servicio de TractoresAXA. Todas las altas que se realicen a partir de ahora fallarán hasta que se asignen nuevos rangos."
' Dim cuerpo As String = asunto & vbCrLf & " Hay que avisar a ASEGASA para que gestionen con AXA la asignación de un nuevo rango de nºs de pólizas para este servicio." & vbCrLf &
' "En método `" & System.Reflection.MethodBase.GetCurrentMethod.ToString & "`. " _
' & vbCrLf & Environment.MachineName
' Call AñadeLog(tsl5.Enumeraciones.TipoLog.Fallo, asunto, cuerpo)
' tsl5.Utilidades.EnviarNotificacionSlack(asunto, destinatario:="#asegasa", descripcionRemitente:=Reflection.MethodBase.GetCurrentMethod.ToString)
' Else
' ' Caso normal, en el que hay que usar el número que sigue, porque seguimos dentro del rango.
' '
' ' Pero tengo que comprobar que "actual + 1" no esté usado. ¿Cómo lo hago? Bueno, sería mucha
' ' casualidad y mucha mala suerte que dos altas coincidan en el tiempo de tal modo que ambas
' ' pillen el mismo nº de poliza.
' resultado = actual + 1
' bEncontrado = True
' End If
' End If
' ' TODO: danmun: Lanzar aquí mensajes cuando falten 500, 200, 100, 50, 20, 10, avisando.
' 'If bEncontrado Then
' ' Dim numerosReservadosDisponibles As Integer = ComprobarCuantosNumerosReservadosQuedanDisponibles(actual, inicio, fin)
' ' Dim listaDeLimitesParaEnviarAdvertencias As Integer() = {10, 20, 50, 100, 200, 500}
' ' Dim bAdvertenciaEnviada As Boolean = False
' ' ' La idea es la siguiente: dispongo de un array donde tenemos los límites en los que hay que lanzar la advertencia
' ' ' de que se están gastando los nºs de pólizas reservados para TractoresAXA. El array está ordenado de menor a mayor.
' ' ' Al recorrer el array, compruebo: ¿quedan menos de 10 números disponibles? Si es así, lanzo advertencia y ya no vuelvo
' ' ' a realizar más comprobaciones. Si no es así, compruebo con el siguiente límite, que sería 20. Por lo tanto, es posible
' ' ' completar el recorrido del array sin enviar ninguna advertencia o bien enviando solamente 1.
' ' For Each i In listaDeLimitesParaEnviarAdvertencias
' ' If Not bAdvertenciaEnviada AndAlso numerosReservadosDisponibles < i Then
' ' ' Notificación Slack
' ' Try
' ' Dim asunto As String = String.Format("TractoresAXA: quedan menos de {0} nºs de póliza reservados sin usar.", i)
' ' Dim sbCuerpo As New Text.StringBuilder()
' ' sbCuerpo.AppendFormat("*TractoresAXA*: quedan menos de {1} nºs de póliza reservados sin usar.{0}", vbCrLf, i)
' ' sbCuerpo.AppendLine("Es recomendable avisar a ASEGASA para que gestionen con AXA la asignación de un nuevo rango de nºs de pólizas para este servicio.")
' ' sbCuerpo.AppendFormat("```Próximo nº de póliza que va a ser usado de inmediato: {1}{0}Primer nº del rango actual:{2}{0}Último nº del rango actual: {3}{0}Servidor: {4}```{0}", vbCrLf,
' ' resultado, inicio.ValorNumerico1, fin.ValorNumerico1, Environment.MachineName)
' ' sbCuerpo.AppendFormat("En método `{0}` y en máquina `{1}`.", System.Reflection.MethodBase.GetCurrentMethod.ToString, Environment.MachineName)
' ' Call AñadeLog(tsl5.Enumeraciones.TipoLog.Advertencia, asunto, sbCuerpo.ToString)
' ' tsl5.Utilidades.EnviarNotificacionSlack(sbCuerpo.ToString, destinatario:="#asegasa", descripcionRemitente:=Reflection.MethodBase.GetCurrentMethod.ToString)
' ' Catch ex As Exception
' ' ' Si esta notificación da error no debe pararse el servicio, así que no hago nada.
' ' End Try
' ' bAdvertenciaEnviada = True
' ' End If
' ' Next
' 'End If
' Return resultado
'End Function
Private Shared Function ComprobarCuantosNumerosReservadosQuedanDisponibles(ByVal nActual As Integer, ByRef inicio As bdGestionAsegasa.enumeraciones, ByRef fin As bdGestionAsegasa.enumeraciones) As Integer
' TODO: danmun: comprobar que esto funciona bien cuando hay rangos (creo que va a ser que no)
Dim resultado As Integer = 0
resultado = Integer.Parse(fin.ValorNumerico1) - nActual
Debug.WriteLine("ComprobarCuantosNumerosReservadosQuedanDisponibles = " & resultado)
Return resultado
End Function
Private Shared Function ObtenerTipoDocumentoTractoresAxa(ByVal numeroDocumento As String) As String
Dim TipoDI = numeroDocumento.TipoDocumentoIdentidad
If TipoDI = tsl5.ValidarDocumentoIdentidad.TiposDocumentosEnum.CIF Then
Return "CIF"
Else
Return "NIF"
End If
End Function
Private Shared Function ObtenerSexoTractoresAxa(ByVal cadenaSexo As String, ByVal bd As bdGestionAsegasa.gestionasegasaEntities) As String
Dim resultado As String = bd.enumeraciones.First(Function(x) x.Codigo = "AXATRACTORES.sexo.SinInformar").ValorAlfabetico1
Dim axaHombre As String = bd.enumeraciones.First(Function(x) x.Codigo = "AXATRACTORES.sexo.Hombre").ValorAlfabetico1
Dim axaMujer As String = bd.enumeraciones.First(Function(x) x.Codigo = "AXATRACTORES.sexo.Mujer").ValorAlfabetico1
Dim idEnumSexoHombre As Integer = bd.enumeraciones.First(Function(x) x.Codigo = "SEXO.HOMBRE").idEnumeracion
Dim idEnumSexoMujer As Integer = bd.enumeraciones.First(Function(x) x.Codigo = "SEXO.MUJER").idEnumeracion
If cadenaSexo = idEnumSexoHombre Then resultado = axaHombre
If cadenaSexo = idEnumSexoMujer Then resultado = axaMujer
Return resultado
End Function
End Class