using bdAsegasa.dbcontext; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Dynamic.Core; namespace bdAsegasa.Informes { public class CarteraPerdida { public static byte[] GeneraExcelCarteraPerdidaEF(DateOnly fi, DateOnly ff) { try { var bd = tscgestionasegasa.NuevoContexto(); var fai = fi.AddYears(-1); var faf = ff.AddYears(-1); var idLiquidacion = bd.enumeraciones.First(x => x.Codigo == "TIPLIQ.LIQUIDACION").idEnumeracion; var idLiquidacioncia = bd.enumeraciones.First(x => x.Codigo == "TIPLIQ.PGDO.CIA").idEnumeracion; var iddevuelto = bd.enumeraciones.First(x => x.Codigo == "TIPLIQ.DEVUELTO").idEnumeracion; var idDescobro = bd.enumeraciones.First(x => x.Codigo == "TIPLIQ.DESCOBRO").idEnumeracion; var idCabaPGO = bd.enumeraciones.First(x => x.Codigo == "CABA.PGO").idEnumeracion; var idCabaFP = bd.enumeraciones.First(x => x.Codigo == "CABA.FP").idEnumeracion; var idTrex = bd.enumeraciones.First(x => x.Codigo == "TRC.EX").idEnumeracion; var idTrcx = bd.enumeraciones.First(x => x.Codigo == "TRC.CX").idEnumeracion; var idDuru = bd.enumeraciones.First(x => x.Codigo == "DUR.U").idEnumeracion; var lr = new List(); var ps = bd.polizassg.Select(x => new { idpoliza = x.idPoliza, idDuracion = x.idDuracion, idCausaBaja = x.idCausaBaja, FechaBaja = x.FechaBaja, NumeroPoliza = x.NumeroPoliza, idCompania = x.idCompania, NumeroSuplemento = x.NumeroSuplemento, FechaVencimiento = x.FechaVencimiento }).ToList(); var POLS = ps.Where(p => p.NumeroPoliza != null) .GroupBy(p => new { p.NumeroPoliza, p.idCompania }) .Select(g => g.OrderByDescending(Y => Y.NumeroSuplemento).FirstOrDefault()) .Where(X => X.FechaBaja.HasValue == false || (X.idCausaBaja.HasValue && X.idCausaBaja == idCabaFP)) .ToList(); var recsex = bd.vf_recibosextendidos.Where(x => x.FechaEfecto >= fai && x.FechaEfecto <= faf && x.idTipo != idTrex && x.idTipo != idTrcx && x.idDuracion != idDuru) .Select(x => new { idRecibo = x.idRecibo, Tomador = x.Tomador }).ToList(); var recsant = bd.recibos.Where(x => x.FechaEfecto >= fai && x.FechaEfecto <= faf && x.idTipo != idTrex && x.idTipo != idTrcx && x.idPolizaNavigation.idDuracion != idDuru && (x.liquidacionescompaniasrecibos.Any(y => y.idLiquidacionCiaNavigation.idTipoLiquidacion == idLiquidacion || y.idLiquidacionCiaNavigation.idTipoLiquidacion == idLiquidacioncia) || (x.liquidacionescompaniasrecibos.Any(y => y.idLiquidacionCiaNavigation.idTipoLiquidacion == iddevuelto && x.idCausaBaja == idCabaPGO)))) .Select(x => new ReciboCarteraPerdida { NumeroPoliza = x.idPolizaNavigation.NumeroPoliza, idRecibo = x.idRecibo.ToString(), idCompañia = x.idPolizaNavigation.idCompania, Compañía = x.idPolizaNavigation.idCompaniaNavigation.Nombre, Ramo = x.idPolizaNavigation.idRamoNavigation.Descripcion, FechaEfecto = new DateTime(x.FechaEfecto.Year, x.FechaEfecto.Month, x.FechaEfecto.Day), Observaciones = x.idPolizaNavigation.Observaciones }).ToList(); var recs = bd.recibos.Where(x => x.FechaEfecto >= fi && x.FechaEfecto <= ff && x.TotalRecibo > 0 && x.idPolizaNavigation.idDuracion != idDuru) .Select(x => new ReciboCarteraPerdida { NumeroPoliza = x.idPolizaNavigation.NumeroPoliza, idRecibo = x.idRecibo.ToString(), idCompañia = x.idPolizaNavigation.idCompania, Compañía = x.idPolizaNavigation.idCompaniaNavigation.Nombre, Ramo = x.idPolizaNavigation.idRamoNavigation.Descripcion, FechaEfecto = new DateTime(x.FechaEfecto.Year, x.FechaEfecto.Month, x.FechaEfecto.Day), Observaciones = x.idPolizaNavigation.Observaciones }).ToList(); var flim = DateOnly.FromDateTime(DateTime.Now).AddYears(-1); foreach (var r in recsant) { if (lr.Any(X => X.NumeroPoliza == r.NumeroPoliza && X.idCompañia == r.idCompañia) == false && recs.Any(x => x.NumeroPoliza == r.NumeroPoliza && x.idCompañia == r.idCompañia) == false && POLS.Any(x => x.NumeroPoliza == r.NumeroPoliza && x.idCompania == r.idCompañia && !(x.idDuracion == idDuru && x.FechaVencimiento < flim))) { r.Tomador = recsex.First(x => x.idRecibo.ToString() == r.idRecibo).Tomador; lr.Add(r); } } if (lr.Count > 0) { var lrd = lr.OrderBy(x => x.Compañía).ThenBy(x => x.Ramo).Select(x => new { x.NumeroPoliza, x.Compañía, x.Ramo, x.Tomador, FechaEfectoUltimoRecibo = x.FechaEfecto, x.Observaciones }).ToList(); byte[] b = tsUtilidades.Excel.IEnumerableAExcel(lrd); return b; } else { return null; } } catch (Exception ex) { throw new Exception(ex.Message, ex); } } public static byte[] GeneraExcelCarteraPerdida(DateTime fi) { try { var bd = tscgestionasegasa.NuevoContexto(); var idLiquidacion = bd.enumeraciones.First(x => x.Codigo == "TIPLIQ.LIQUIDACION").idEnumeracion; var idLiquidacioncia = bd.enumeraciones.First(x => x.Codigo == "TIPLIQ.PGDO.CIA").idEnumeracion; var fiDate = DateOnly.FromDateTime(fi); var iddevuelto = bd.enumeraciones.First(x => x.Codigo == "TIPLIQ.DEVUELTO").idEnumeracion; var idDescobro = bd.enumeraciones.First(x => x.Codigo == "TIPLIQ.DESCOBRO").idEnumeracion; var idTrex = bd.enumeraciones.First(x => x.Codigo == "TRC.EX").idEnumeracion; var idTrcx = bd.enumeraciones.First(x => x.Codigo == "TRC.CX").idEnumeracion; var idDuru = bd.enumeraciones.First(x => x.Codigo == "DUR.U").idEnumeracion; var lr = new List(); var ps = bd.polizassg.Select(x => new { idpoliza = x.idPoliza, idDuracion = x.idDuracion, idCausaBaja = x.idCausaBaja, FechaBaja = x.FechaBaja, NumeroPoliza = x.NumeroPoliza, idCompania = x.idCompania, NumeroSuplemento = x.NumeroSuplemento, FechaVencimiento = x.FechaVencimiento }).ToList(); var POLS = ps.Where(p => p.NumeroPoliza != null) .GroupBy(p => new { p.NumeroPoliza, p.idCompania }) .Select(g => g.OrderByDescending(Y => Y.NumeroSuplemento).FirstOrDefault()) .Where(X => X.FechaBaja.HasValue == false).ToList(); var recsex = bd.vf_recibosextendidos.Where(x => x.FechaEfecto >= fiDate && x.idTipo != idTrex && x.idTipo != idTrcx && x.idDuracion != idDuru) .Select(x => new { idRecibo = x.idRecibo, Tomador = x.Tomador, NumeroPoliza = x.NumeroPoliza, idCompania = x.idCompania, FechaVencimiento = x.FechaVencimiento }).ToList(); var recsant = bd.recibos.Where(x => x.FechaEfecto >= fiDate && x.FechaVencimiento <= DateOnly.FromDateTime(DateTime.Today) && x.idTipo != idTrex && x.idTipo != idTrcx && x.idPolizaNavigation.idDuracion != idDuru) .Select(x => new ReciboCarteraPerdida { NumeroPoliza = x.idPolizaNavigation.NumeroPoliza, idRecibo = x.idRecibo.ToString(), idCompañia = x.idPolizaNavigation.idCompania, Compañía = x.idPolizaNavigation.idCompaniaNavigation.Nombre, Ramo = x.idPolizaNavigation.idRamoNavigation.Descripcion, FechaEfecto = new DateTime(x.FechaEfecto.Year, x.FechaEfecto.Month, x.FechaEfecto.Day), FechaVencimiento = new DateTime(x.FechaVencimiento.Year, x.FechaVencimiento.Month, x.FechaVencimiento.Day), Observaciones = x.idPolizaNavigation.Observaciones }).ToList(); DateOnly DentroUnMes = DateOnly.FromDateTime( fi.AddMonths(13)); var recs = bd.recibos.Where(x => x.FechaVencimiento >= DentroUnMes && x.TotalRecibo > 0 && x.idPolizaNavigation.idDuracion != idDuru) .Select(x => new ReciboCarteraPerdida { NumeroPoliza = x.idPolizaNavigation.NumeroPoliza, idRecibo = x.idRecibo.ToString(), idCompañia = x.idPolizaNavigation.idCompania, Compañía = x.idPolizaNavigation.idCompaniaNavigation.Nombre, Ramo = x.idPolizaNavigation.idRamoNavigation.Descripcion, FechaEfecto = new DateTime(x.FechaEfecto.Year, x.FechaEfecto.Month, x.FechaEfecto.Day), Observaciones = x.idPolizaNavigation.Observaciones }).ToList(); var flimduru = fi.AddYears(-1); foreach (var r in recsant) { if (lr.Any(X => X.NumeroPoliza == r.NumeroPoliza && X.idCompañia == r.idCompañia) == false && recs.Any(x => x.NumeroPoliza == r.NumeroPoliza && x.idCompañia == r.idCompañia) == false && POLS.Any(x => x.NumeroPoliza == r.NumeroPoliza && x.idCompania == r.idCompañia && !(x.idDuracion == idDuru && x.FechaVencimiento < DateOnly.FromDateTime(flimduru)))) { if (recsex.Any(x => x.NumeroPoliza == r.NumeroPoliza && x.idCompania == r.idCompañia && x.idRecibo.ToString() != r.idRecibo && x.FechaVencimiento > DateOnly.FromDateTime(r.FechaVencimiento.Value)) == false) { r.Tomador = recsex.First(x => x.idRecibo.ToString() == r.idRecibo).Tomador; lr.Add(r); } } } if (lr.Count > 0) { var lrd = lr.OrderBy(x => x.Compañía).ThenBy(x => x.Ramo).Select(x => new { x.NumeroPoliza, x.Compañía, x.Ramo, x.Tomador, FechaEfectoUltimoRecibo = x.FechaEfecto, x.Observaciones }).ToList(); byte[] b = tsUtilidades.Excel.IEnumerableAExcel(lrd); return b; } else { return null; } } catch (Exception ex) { throw new Exception(ex.Message, ex); } } private class ReciboCarteraPerdida { public string idRecibo { get; set; } public string NumeroPoliza { get; set; } public int? idCompañia { get; set; } public string Compañía { get; set; } public string Ramo { get; set; } public string Tomador { get; set; } public DateTime? FechaEfecto { get; set; } public DateTime? FechaVencimiento { get; set; } public string Observaciones { get; set; } } } }