using System; using System.Linq; using System.Collections.Generic; using Microsoft.EntityFrameworkCore; using bdAsegasa; using bdAsegasa.db; namespace Servicio_Gestion_Asegasa.Procesos { public class ProcesosSiniestros { public static void IncorporaSiniestrosEIACV6() { try { using var bd = gestionasegasaEntities.NuevoContexto(); var ltpa = bd.enumeraciones.Where(x => x.idGrupoEnumeracionNavigation.Grupo == "TIPP").ToList(); int tipo = (int)ficheroscompanias.TipoFicheroCompania.SINIESTROS_EIAC; var ficspen = bd.ficheroscompanias .Where(x => x.FechaProcesado == null && x.FechaError == null && x.Tipo == tipo && x.Version == "6.0") .OrderBy(x => x.idFichero) .ToList(); foreach (var f in ficspen) { try { // Asumimos ProcesosEIAC_V6 existe y Utilizamos una librería genérica de serialización dynamic DatosEIAC = tsUtilidades.Utilidades.Deserializa(f.Fichero, Type.GetType("ProcesosEIAC_V6.ProcesosEIAC") ?? typeof(object)); if (DatosEIAC?.Objetos?.Items != null) { IEnumerable items = DatosEIAC.Objetos.Items; var lSins = items.Where(x => x != null && x.GetType().Name == "tipo_siniestro"); foreach (var s in lSins) { List sins = null; string idSiniestroEntidad = s.DatosSiniestro.IdSiniestroEntidad; var seiac = bd.siniestros_eiac.FirstOrDefault(x => x.idSiniestroEntidad == idSiniestroEntidad); if (seiac == null) { seiac = new siniestros_eiac { idSiniestroEntidad = idSiniestroEntidad, idFicheroCompania = f.idFichero, idCompania = f.idCompania }; bd.siniestros_eiac.Add(seiac); } seiac.NumeroPoliza = s.DatosPoliza.IdPoliza; var pol = bd.polizassg .Where(x => x.NumeroPoliza == seiac.NumeroPoliza && x.idCompania == seiac.idCompania) .OrderByDescending(x => x.NumeroSuplemento) .FirstOrDefault(); if (pol != null) seiac.idPoliza = pol.idPoliza; seiac.NumeroSuplemento = s.DatosPoliza.NumeroSuplemento; seiac.FechaDeclaracion = s.DatosSiniestro.FechaDeclaracion; seiac.FechaOcurrencia = s.DatosSiniestro.FechaOcurrencia; seiac.PosicionSiniestro = (int)bdAsegasa.db.siniestros_eiac.ObtienePosicionSiniestroV6((string)s.DatosSiniestro.PosicionSiniestro); seiac.DescripcionSiniestro = tsUtilidades.Extensiones.StringExtensions.Acortar((string)s.DatosSiniestro.DescripcionSiniestro, 2048); seiac.TipologiaSiniestro = s.DatosSiniestro.TipologiaSiniestro; seiac.ImporteIndemnizacion = s.DatosSiniestro.ImporteIndemnizacion; seiac.ImporteReserva = s.DatosSiniestro.ImporteReserva; if (s.DatosSiniestro.LugarSiniestro != null) { if (seiac.idLugarSiniestroNavigation == null) { seiac.idLugarSiniestroNavigation = new direcciones(); } seiac.idLugarSiniestroNavigation.Direccion = s.DatosSiniestro.LugarSiniestro.ClaseVia + " " + s.DatosSiniestro.LugarSiniestro.NombreVia + " " + s.DatosSiniestro.LugarSiniestro.OtrosDatosVia; seiac.idLugarSiniestroNavigation.CodigoPostal = s.DatosSiniestro.LugarSiniestro.CodigoPostal; string codmun = bd.ObtieneCodigoMunicipioMasCoincidente(seiac.idLugarSiniestroNavigation.CodigoPostal, (string)s.DatosSiniestro.LugarSiniestro.Poblacion, true); if (string.IsNullOrEmpty(codmun)) { seiac.idLugarSiniestroNavigation.Direccion += " " + s.DatosSiniestro.LugarSiniestro.Poblacion; } else { seiac.idLugarSiniestroNavigation.CodigoMunicipio = codmun; } seiac.idLugarSiniestroNavigation.Direccion = tsUtilidades.Extensiones.StringExtensions.Acortar(seiac.idLugarSiniestroNavigation.Direccion, 200); } if (s.DatosSiniestro.SituacionesSiniestro != null) { var yaincorporados = new List(); foreach (var sit in s.DatosSiniestro.SituacionesSiniestro) { int numeroOrden = sit.NumeroOrden; if (numeroOrden == 0) numeroOrden = sit.GetHashCode(); if (!yaincorporados.Contains(numeroOrden)) { var est = seiac.estadossiniestros_eiac.FirstOrDefault(x => x.NumeroOrden == numeroOrden); if (est == null) { est = new estadossiniestros_eiac { NumeroOrden = numeroOrden }; seiac.estadossiniestros_eiac.Add(est); } est.SituacionSiniestro = bdAsegasa.estadossiniestros_eiac.ObtieneSituacionSiniestroV6((string)sit.SituacionSiniestro); est.DescripcionSituacion = tsUtilidades.Extensiones.StringExtensions.Acortar((string)sit.DescripcionSituacion, 45); yaincorporados.Add(numeroOrden); } } } if (s.DatosSiniestro.PagosSiniestro != null) { var yaincorporados = new List(); foreach (var pag in s.DatosSiniestro.PagosSiniestro) { int numeroOrden = pag.NumeroOrden; if (numeroOrden == 0) numeroOrden = pag.GetHashCode(); if (!yaincorporados.Contains(numeroOrden)) { var ps = seiac.pagossiniestros_eiac.FirstOrDefault(x => x.NumeroOrden == numeroOrden); if (ps == null) { ps = new pagossiniestros_eiac { NumeroOrden = numeroOrden }; seiac.pagossiniestros_eiac.Add(ps); } ps.FechaPago = pag.FechaPago; ps.FechaLiquidacion = pag.FechaLiquidacion; ps.ImportePago = pag.ImportePago; ps.DescripcionPago = tsUtilidades.Extensiones.StringExtensions.Acortar((string)pag.DescripcionPago, 255); ps.idTipoPago = bdAsegasa.siniestros_eiac.ObtenerTipoPagoV6((string)pag.FormaPago, ltpa); if (pag.FormaPago != null && pag.FormaPago.DatosCuentaCorriente != null) { ps.IBAN = pag.FormaPago.DatosCuentaCorriente.IBAN; } yaincorporados.Add(numeroOrden); } } } if (s.DatosSiniestro.AccionesSiniestro != null) { var yaincorporados = new List(); foreach (var accs in s.DatosSiniestro.AccionesSiniestro) { int numeroOrden = accs.NumeroOrden; if (numeroOrden == 0) numeroOrden = accs.GetHashCode(); if (!yaincorporados.Contains(numeroOrden)) { var acs = seiac.accionessiniestros_eiac.FirstOrDefault(x => x.NumeroOrden == numeroOrden); if (acs == null) { acs = new accionessiniestros_eiac { NumeroOrden = numeroOrden }; seiac.accionessiniestros_eiac.Add(acs); } acs.AccionSiniestro = bdAsegasa.accionessiniestros_eiac.ObtieneAccionSiniestroV6((string)accs.AccionSiniestro); acs.FechaAccion = accs.FechaAccion; acs.DescripcionAccion = accs.DescripcionAccion; acs.SituacionAccion = bdAsegasa.accionessiniestros_eiac.ObtieneSituacionAccionV6((string)accs.SituacionAccion); yaincorporados.Add(numeroOrden); } } } if (s.DatosSiniestro.Expedientes != null) { var yaincorporados = new List(); foreach (var exp in s.DatosSiniestro.Expedientes) { string numeroExpediente = exp.NumeroExpediente; if (string.IsNullOrEmpty(numeroExpediente)) numeroExpediente = exp.GetHashCode().ToString(); if (!yaincorporados.Contains(numeroExpediente)) { var ep = seiac.expedientessiniestros_eiac.FirstOrDefault(x => x.NumeroExpediente == numeroExpediente); if (ep == null) { ep = new expedientessiniestros_eiac { NumeroExpediente = numeroExpediente }; seiac.expedientessiniestros_eiac.Add(ep); } ep.EstadoExpediente = bdAsegasa.expedientessiniestros_eiac.ObtieneEstadoExpedienteV6((string)exp.EstadoExpediente); ep.ImporteReserva = exp.ImporteReserva; ep.TotalPagos = exp.TotalPagos; ep.TotalRecobros = exp.TotalRecobros; ep.FechaInicio = exp.FechaInicio; ep.FechaFin = exp.FechaFin; ep.NumeroOrden = exp.NumeroOrden; yaincorporados.Add(numeroExpediente); } } } if (seiac.idSiniestroNavigation == null) { var fi = seiac.FechaOcurrencia.AddDays(-5); var ff = seiac.FechaOcurrencia.AddDays(5); var fechaInicio = DateOnly.FromDateTime(fi); var fechaFinal = DateOnly.FromDateTime(ff); sins = bd.siniestros.Where(x => x.idPolizaNavigation.NumeroPoliza == seiac.NumeroPoliza && x.FechaAccidente.HasValue && x.FechaAccidente >= fechaInicio && x.FechaAccidente <= fechaFinal).ToList(); if (sins.Count == 1) { seiac.idSiniestroNavigation = sins[0]; } } bool bModificados = false; if (bd.ChangeTracker.Entries().Any(e => e.State == EntityState.Added)) { bModificados = true; seiac.SituacionAsegasa = (int)bdAsegasa.siniestros_eiac.SituacionAsegasaENUM.NUEVO; seiac.FechaSituacion = DateTime.Now; } else { var prmods = bd.ChangeTracker.Entries().Where(e => e.State == EntityState.Modified).ToList(); if (prmods.Count > 0) { foreach (var pr in prmods) { var original = pr.OriginalValues; var nuevosvalores = pr.CurrentValues; foreach (var prop in original.Properties) { var origVal = original[prop]; var newVal = nuevosvalores[prop]; if (origVal?.GetHashCode() != newVal?.GetHashCode()) { bModificados = true; break; } } if (bModificados) break; } } } if (bModificados) { if (!seiac.SituacionAsegasa.HasValue || seiac.SituacionAsegasa.Value != (int)bdAsegasa.siniestros_eiac.SituacionAsegasaENUM.DESCARTADO) { seiac.SituacionAsegasa = (int)bdAsegasa.siniestros_eiac.SituacionAsegasaENUM.MODIFICADO; seiac.FechaSituacion = DateTime.Now; } var nact = new actualizacionessiniestros_eiac { idSiniestroEIACNavigation = seiac, Fecha = DateTime.Now, idFicheroCompania = f.idFichero }; bd.actualizacionessiniestros_eiac.Add(nact); if (seiac.SituacionAsegasa.Value != (int)bdAsegasa.siniestros_eiac.SituacionAsegasaENUM.DESCARTADO) { if (!seiac.idPoliza.HasValue) { seiac.SituacionAsegasa = (int)bdAsegasa.siniestros_eiac.SituacionAsegasaENUM.POLIZA_NO_ENCONTRADA; } else { if (sins == null || sins.Count == 0) { seiac.SituacionAsegasa = (int)bdAsegasa.siniestros_eiac.SituacionAsegasaENUM.SINIESTRO_NO_ENCONTRADO; } else if (sins.Count > 1) { seiac.SituacionAsegasa = (int)bdAsegasa.siniestros_eiac.SituacionAsegasaENUM.VARIOS_SINIESTROS_POSIBLES; } } } bd.SaveChanges(); } } } f.FechaProcesado = DateTime.Now; bd.SaveChanges(); } catch (Exception ex) { f.FechaError = DateTime.Now; bd.SaveChanges(); tsUtilidades.TsNotificacionesClient.RegistrarAsync("En IncorporaSiniestrosEIACV6.", $"Rutina: IncorporaSiniestrosEIACV6. Fichero:{f.NombreFichero} {ex.Message}", tsUtilidades.TsNotificacionesClient.TipoNotificacionEnum.ERROR); } } } catch (Exception ex) { tsUtilidades.TsNotificacionesClient.RegistrarAsync("En IncorporaSiniestrosEIACV6.", $"Rutina: IncorporaSiniestrosEIACV6. {ex.Message}", tsUtilidades.TsNotificacionesClient.TipoNotificacionEnum.ERROR); } } public static void IncorporaExpSiniestrosEIACV6() { try { using var bd = tscgestionasegasa.NuevoContexto(); var ltpa = bd.enumeraciones.Where(x => x.idGrupoEnumeracionNavigation.Grupo == "TIPP").ToList(); int tipo = (int)ficheroscompanias.TipoFicheroCompania.SINIESTROS_EIAC; var ficspen = bd.ficheroscompanias .Where(x => x.Tipo == tipo && x.Version == "6.0") .OrderBy(x => x.idFichero) .ToList(); foreach (var f in ficspen) { try { // Asumimos ProcesosEIAC_V6 existe y Utilizamos una librería genérica de serialización dynamic DatosEIAC = tsUtilidades.Utilidades.Deserializa(f.Fichero, Type.GetType("ProcesosEIAC_V6.ProcesosEIAC") ?? typeof(object)); if (DatosEIAC?.Objetos?.Items != null) { IEnumerable items = DatosEIAC.Objetos.Items; var lSins = items.Where(x => x != null && x.GetType().Name == "tipo_siniestro"); foreach (var s in lSins) { string idSiniestroEntidad = s.DatosSiniestro.IdSiniestroEntidad; var seiac = bd.siniestros_eiac.FirstOrDefault(x => x.idSiniestroEntidad == idSiniestroEntidad); if (seiac != null) { if (s.DatosSiniestro.Expedientes != null) { var yaincorporados = new List(); foreach (var exp in s.DatosSiniestro.Expedientes) { string numeroExpediente = exp.NumeroExpediente; if (string.IsNullOrEmpty(numeroExpediente)) numeroExpediente = exp.GetHashCode().ToString(); if (!yaincorporados.Contains(numeroExpediente)) { var ep = seiac.expedientessiniestros_eiac.FirstOrDefault(x => x.NumeroExpediente == numeroExpediente); if (ep == null) { ep = new expedientessiniestros_eiac { NumeroExpediente = numeroExpediente }; seiac.expedientessiniestros_eiac.Add(ep); } ep.EstadoExpediente = bdAsegasa.expedientessiniestros_eiac.ObtieneEstadoExpedienteV6((string)exp.EstadoExpediente); ep.ImporteReserva = exp.ImporteReserva; ep.TotalPagos = exp.TotalPagos; ep.TotalRecobros = exp.TotalRecobros; ep.FechaInicio = exp.FechaInicio; ep.FechaFin = exp.FechaFin; ep.NumeroOrden = exp.NumeroOrden; yaincorporados.Add(numeroExpediente); } } bd.SaveChanges(); } } } } // f.FechaProcesado = Now (Comentado en el código original) bd.SaveChanges(); } catch (Exception ex) { f.FechaError = DateTime.Now; bd.SaveChanges(); tsUtilidades.TsNotificacionesClient.RegistrarAsync("En IncorporaSiniestrosEIACV6.", $"Rutina: IncorporaSiniestrosEIACV6. Fichero:{f.NombreFichero} {ex.Message}", tsUtilidades.TsNotificacionesClient.TipoNotificacionEnum.ERROR); } } } catch (Exception ex) { tsUtilidades.TsNotificacionesClient.RegistrarAsync("En IncorporaSiniestrosEIACV6.", $"Rutina: IncorporaSiniestrosEIACV6. {ex.Message}", tsUtilidades.TsNotificacionesClient.TipoNotificacionEnum.ERROR); } } } }