Files
Asegasa.NET/bdAsegasa/Informes/CarteraPerdida.cs
2026-04-28 11:52:16 +02:00

198 lines
13 KiB
C#

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<ReciboCarteraPerdida>();
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<ReciboCarteraPerdida>();
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; }
}
}
}