389 lines
24 KiB
C#
389 lines
24 KiB
C#
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<dynamic> items = DatosEIAC.Objetos.Items;
|
|
var lSins = items.Where(x => x != null && x.GetType().Name == "tipo_siniestro");
|
|
|
|
foreach (var s in lSins)
|
|
{
|
|
List<siniestros> 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<int>();
|
|
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<int>();
|
|
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<int>();
|
|
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<string>();
|
|
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<dynamic> 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<string>();
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
}
|