TFS_ANTIGUO/SInCathay/ULA.Cathay.CreditoModel.DAL/Credito/SolicitanteDAL.cs

450 lines
17 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using ULA.Cathay.CreditoModel.Credito;
using Ultimus.Interfaces;
using Ultimus.Utilitarios;
using System.Data.Entity;
using System.Data.Entity.Validation;
using ULA.Cathay.CreditoModel.Entidades;
namespace ULA.Cathay.CreditoModel.DAL.Credito
{
public class SolicitanteDAL
{
private UltimusLogs logger = new UltimusLogs("SolicitanteDAL");
/// <summary>
///
/// </summary>
/// <param name="IdSolicitud"></param>
/// <returns></returns>
public List<Solicitante> Obtener(int IdSolicitud)
{
List<Solicitante> listaSolicitante = new List<Solicitante>();
try
{
using (CreditoContex db = new CreditoContex())
{
listaSolicitante = (db.Solicitante.Where(x => x.IdSolicitud == IdSolicitud)
.Include(e => e.Cliente)
.Include(e => e.TipoSolicitante)
.Include(e => e.Cliente.TipoIdentificacion)
.Include(e => e.Cliente.TipoFuenteIngreso)
.Include(e => e.Cliente.TipoTramite)
.Include(e => e.Cliente.ClasificacionCliente)
.Include(e => e.Cliente.TipoCliente)
.Include(e => e.Cliente.Ejecutivo)
.Include(e => e.Cliente.EmailCliente)
.Include(e => e.Solicitud.Oferta)
.Include(e => e.Solicitud.DetalleRequisitos)
.Include(e => e.Solicitud.Oferta.OfertaFacilidades)
).ToList();
foreach (var lista in listaSolicitante)
{
if (lista.TipoSolicitante != null)
lista.TipoSolicitante.ClearVirtualProperties();
if (lista.Cliente != null)
{
if (lista.Cliente.TipoIdentificacion != null)
lista.Cliente.TipoIdentificacion.ClearVirtualProperties();
if (lista.Cliente.TipoFuenteIngreso != null)
lista.Cliente.TipoFuenteIngreso.ClearVirtualProperties();
if (lista.Cliente.TipoTramite != null)
lista.Cliente.TipoTramite.ClearVirtualProperties();
if (lista.Cliente.ClasificacionCliente != null)
lista.Cliente.ClasificacionCliente.ClearVirtualProperties();
if (lista.Cliente.TipoCliente != null)
lista.Cliente.TipoCliente.ClearVirtualProperties();
if (lista.Cliente.Ejecutivo != null)
lista.Cliente.Ejecutivo.ClearVirtualProperties();
}
}
}
}
catch (Exception ex)
{
logger.Error(ex);
}
finally
{
}
return listaSolicitante;
}
/// <summary>
/// Obtiene la informacion basica de los clientes enlazados como solicitantes en la solicitud
/// Importante: La informacion adicional que se requiera debe obtenida con los respectivos metodos de los diferentes DAL. NO POR INCLUIDE
/// </summary>
/// <param name="IdSolicitud">Numero de la solicitud</param>
/// <returns></returns>
public List<Solicitante> ObtenerSolicitantes(int IdSolicitud)
{
List<Solicitante> listaSolicitante = new List<Solicitante>();
try
{
using (CreditoContex db = new CreditoContex())
{
listaSolicitante = (db.Solicitante
.Where(x => x.IdSolicitud == IdSolicitud)
.Include(e => e.Cliente)
.Include(e => e.TipoSolicitante)
.Include(e => e.Cliente.TipoIdentificacion)
.Include(e => e.Cliente.TipoFuenteIngreso)
.Include(e => e.Cliente.TipoTramite)
.Include(e => e.Cliente.ClasificacionCliente)
.Include(e => e.Cliente.TipoCliente)
.Include(e => e.Cliente.Ejecutivo)
).ToList();
}
foreach (var lista in listaSolicitante)
{
if (lista.TipoSolicitante != null)
lista.TipoSolicitante.ClearVirtualProperties();
if (lista.Cliente != null)
{
if (lista.Cliente.TipoIdentificacion != null)
lista.Cliente.TipoIdentificacion.ClearVirtualProperties();
if (lista.Cliente.TipoFuenteIngreso != null)
lista.Cliente.TipoFuenteIngreso.ClearVirtualProperties();
if (lista.Cliente.TipoTramite != null)
lista.Cliente.TipoTramite.ClearVirtualProperties();
if (lista.Cliente.ClasificacionCliente != null)
lista.Cliente.ClasificacionCliente.ClearVirtualProperties();
if (lista.Cliente.TipoCliente != null)
lista.Cliente.TipoCliente.ClearVirtualProperties();
if (lista.Cliente.Ejecutivo != null)
lista.Cliente.Ejecutivo.ClearVirtualProperties();
}
}
}
catch (DbEntityValidationException exs)
{
logger.Error(exs);
}
catch (Exception ex)
{
logger.Error(ex);
throw ex;
}
return listaSolicitante;
}
public Solicitante ObteneCliente(int IdSolicitud)
{
Solicitante ObjSolicitante = new Solicitante();
try
{
using (CreditoContex db = new CreditoContex())
{
ObjSolicitante = (db.Solicitante
.Where(x => x.IdSolicitud == IdSolicitud && x.EsPrincipal == true)
.Include(e => e.Cliente)
).FirstOrDefault();
}
}
catch (DbEntityValidationException exs)
{
logger.Error(exs);
}
catch (Exception ex)
{
logger.Error(ex);
throw ex;
}
return ObjSolicitante;
}
/// <summary>
///
/// </summary>
/// <param name="IdCliente"></param>
/// <returns></returns>
public Solicitante ObtenerIdCliente(int IdCliente)
{
Solicitante ObjSolicitante = new Solicitante(); ;
try
{
using (CreditoContex db = new CreditoContex())
{
ObjSolicitante = (db.Solicitante
.Where(x => x.IdCliente == IdCliente)
.Include(e => e.Cliente)
.Include(e => e.Cliente.TipoIdentificacion)
.Include(e => e.Cliente.TipoFuenteIngreso)
.Include(e => e.Cliente.TipoTramite)
.Include(e => e.Cliente.ClasificacionCliente)
.Include(e => e.Cliente.TipoCliente)
.Include(e => e.Cliente.Ejecutivo)
).FirstOrDefault();
}
}
catch (DbEntityValidationException exs)
{
logger.Error(exs);
}
catch (Exception ex)
{
logger.Error(ex);
throw ex;
}
return ObjSolicitante;
}
/// <summary>
///
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public BaseJson InsertarActualizar(Solicitante model)
{
Solicitante ModeloActual = new Solicitante();
TipoSolicitante TipoSolicitante = null;
BaseJson ValorRetorno = new BaseJson();
bool ChangeTipoSolicitante = false;
bool Exist = false;
try
{
ValorRetorno.CodigoRespuesta = TipoCodigoRespuesta.EXITOSO.ToString();
if (model.TipoSolicitante != null)
TipoSolicitante = model.TipoSolicitante;
model.TipoSolicitante = null;
model.Cliente = null;
model.Solicitud = null;
using (CreditoContex Conn = new CreditoContex())
{
if (TipoSolicitante != null)
ChangeTipoSolicitante = (model.IdTipoSolicitante != TipoSolicitante.IdTipoSolicitante);
Exist = Conn.Solicitante.Where(q => q.IdSolicitud == model.IdSolicitud && q.IdCliente == model.IdCliente && q.IdTipoSolicitante == model.IdTipoSolicitante).Any();
if (ChangeTipoSolicitante && Exist)
{
ValorRetorno.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString();
ValorRetorno.DescripcionRespuesta = "Ya existe un registro del cliente bajo el tipo de participación seleccionado";
return ValorRetorno;
}
if (ChangeTipoSolicitante)
{
ModeloActual = Conn.Solicitante.Where(q => q.IdSolicitud == model.IdSolicitud && q.IdCliente == model.IdCliente && q.IdTipoSolicitante == TipoSolicitante.IdTipoSolicitante).FirstOrDefault();
if (ModeloActual != null)
{
Conn.Solicitante.Remove(ModeloActual);
Conn.SaveChanges();
ModeloActual = null;
}
}
else
ModeloActual = Conn.Solicitante.Where(q => q.IdSolicitud == model.IdSolicitud && q.IdCliente == model.IdCliente && q.IdTipoSolicitante == model.IdTipoSolicitante).FirstOrDefault();
if (ModeloActual == null)
{
model.FechaCreacion = DateTime.Now;
Conn.Solicitante.Add(model);
}
else
{
model.FechaModificacion = DateTime.Now;
model.UsuarioModificado = model.UsuarioCreador;
model.FechaCreacion = ModeloActual.FechaCreacion;
model.UsuarioCreador = ModeloActual.UsuarioCreador;
Conn.Entry(ModeloActual).State = System.Data.Entity.EntityState.Detached;
Conn.Solicitante.Attach(model);
Conn.Entry(model).State = System.Data.Entity.EntityState.Modified;
}
Conn.SaveChanges();
if (TipoSolicitante != null)
model.TipoSolicitante = TipoSolicitante;
}
}
catch (DbEntityValidationException exs)
{
ValorRetorno.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString();
ValorRetorno.DescripcionRespuesta = exs.Message;
logger.Error(exs);
}
catch (Exception ex)
{
ValorRetorno.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString();
ValorRetorno.DescripcionRespuesta = ex.Message;
logger.Error(ex);
}
finally
{
ModeloActual = null;
}
return ValorRetorno;
}
/// <summary>
///
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public BaseJson Eliminar(Solicitante model)
{
Solicitante ModeloActual = new Solicitante();
BaseJson ValorRetorno = new BaseJson();
try
{
ValorRetorno.CodigoRespuesta = TipoCodigoRespuesta.EXITOSO.ToString();
model.TipoSolicitante = null;
model.Cliente = null;
model.Solicitud = null;
using (CreditoContex Conn = new CreditoContex())
{
ModeloActual = Conn.Solicitante.Where(q => q.IdSolicitud == model.IdSolicitud && q.IdCliente == model.IdCliente && q.IdTipoSolicitante == model.IdTipoSolicitante).FirstOrDefault();
if (ModeloActual != null)
{
Conn.Solicitante.Remove(ModeloActual);
Conn.SaveChanges();
}
}
}
catch (DbEntityValidationException exs)
{
ValorRetorno.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString();
logger.Error(exs);
}
catch (Exception ex)
{
ValorRetorno.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString();
logger.Error(ex);
}
finally
{
ModeloActual = null;
}
return ValorRetorno;
}
public Solicitante ObtenerSolicitanteDocumentos(Solicitante model)
{
Solicitante ObjSolicitante = new Solicitante();
try
{
using (CreditoContex db = new CreditoContex())
{
ObjSolicitante = db.Solicitante
.Include("Cliente.BitacoraDocumentosCliente.TipoDocumento")
.Include("Cliente.BitacoraDocumentosCliente.TipoDocumento.TipoExpedienteDocumentos.TipoExpediente")
.Include("Cliente.BitacoraDocumentosCliente.TipoDocumento.TipoDocumentoEpower")
.AsNoTracking()
.FirstOrDefault(x => x.IdSolicitud == model.IdSolicitud
&& ((model.IdCliente > 0 && x.IdCliente == model.IdCliente)
|| (model.IdCliente == 0 && x.IdTipoSolicitante == model.IdTipoSolicitante)
));
}
}
catch (DbEntityValidationException exs)
{
logger.Error(exs);
}
catch (Exception ex)
{
logger.Error(ex);
throw ex;
}
return ObjSolicitante;
}
public List<ListaNombreClientesJSON> ObtenerTipoSolicitantes(int IdSolicitud, int IdTipoSolicitante)
{
List<ListaNombreClientesJSON> solicitantes = null;
try
{
using (CreditoContex db = new CreditoContex())
{
solicitantes = (
from s in db.Solicitante.Where(c => c.IdSolicitud == IdSolicitud && c.IdTipoSolicitante == IdTipoSolicitante)
where s.IdSolicitud == IdSolicitud && s.IdTipoSolicitante == IdTipoSolicitante
select new ListaNombreClientesJSON
{
IdCliente = s.IdCliente,
IdTipoSolicitante = s.IdTipoSolicitante,
NombreCompleto = ((s.Cliente.PrimerNombre != null ? s.Cliente.PrimerNombre : string.Empty)
+ (s.Cliente.PrimerApellido != null ? " "+s.Cliente.PrimerApellido : string.Empty) + (s.Cliente.RazonSocial != null ? s.Cliente.RazonSocial : string.Empty))
}).ToList();
}
}
catch (DbEntityValidationException exs)
{
logger.Error(exs);
throw;
}
catch (Exception ex)
{
logger.Error(ex);
throw;
}
return solicitantes;
}
public bool VerificaTipoSolicitantes(int IdSolicitud, int IdTipoSolicitante)
{
try
{
using (CreditoContex db = new CreditoContex())
{
return db.Solicitante.Any(c => c.IdSolicitud == IdSolicitud && c.IdTipoSolicitante == IdTipoSolicitante);
}
}
catch (DbEntityValidationException exs)
{
logger.Error(exs);
throw;
}
catch (Exception ex)
{
logger.Error(ex);
throw;
}
}
}
}