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

2106 lines
124 KiB
C#
Raw Blame History

using System;
using System.Collections.Generic;
using System.Linq;
using ULA.Cathay.CreditoModel.Credito;
using Ultimus.Utilitarios;
using Ultimus.Interfaces;
using System.Data.Entity;
using System.Data.Entity.Validation;
using ULA.Cathay.CreditoModel.DAL.CorporativoDatosRecientes;
using ULA.Cathay.CreditoModel.CorporativoDatosRecientes;
using ULA.Cathay.CreditoModel.Entidades;
namespace ULA.Cathay.CreditoModel.DAL.Credito
{
public class OfertaDAL
{
UltimusLogs logs = new UltimusLogs("OfertaDAL");
public decimal TipoCambio { get; set; }
public decimal TasaBasePasiva { get; set; }
public decimal TasaBasePrime { get; set; }
private decimal FactorMinimo = 25000;
/// <summary>
///
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public Oferta ObtenerOfertaSolicitud(int IdSolicitud)
{
Oferta respuesta = new Oferta();
try
{
using (CreditoContex db = new CreditoContex())
{
respuesta = db.Oferta.Where(x => x.IdSolicitud == IdSolicitud).FirstOrDefault();
}
}
catch (Exception ex)
{
logs.Error(ex);
throw ex;
}
return respuesta;
}
public Oferta ObtenerOfertaSolicitud(Oferta model)
{
Oferta respuesta = new Oferta();
HojaSeleccion CriteriosSolicitud = new HojaSeleccion();
try
{
using (CreditoContex Contexto = new CreditoContex())
{
respuesta = (from t in Contexto.Oferta
.Include(e => e.TipoSeleccion)
.Include(e => e.TipoCategoria)
.Include(e => e.Ejecutivo)
.Include(e => e.OfertaOperaciones)
.Include(e => e.Moneda)
.Include("OfertaOperaciones.FormasPagos")
.Include("OfertaOperaciones.Moneda")
.Include("OfertaOperaciones.OfertaOperacionesComisiones")
.Include("OfertaOperaciones.OfertaOperacionesGarantias")
.Where(t => t.IdSolicitud == model.IdSolicitud)
select t).FirstOrDefault();
}
if (respuesta == null)
{
respuesta = new Oferta();
respuesta.Moneda = new Moneda();
respuesta.IdSolicitud = model.IdSolicitud;
respuesta.IdTipoCategoria = model.IdTipoCategoria;
respuesta.Fecha = DateTime.Now;
}
else
{
respuesta.Moneda = respuesta.Moneda == null ? new Moneda() : respuesta.Moneda;
model.IdSolicitud = respuesta.IdSolicitud;
model.IdTipoCategoria = respuesta.IdTipoCategoria;
if (respuesta.Fecha == null)
respuesta.Fecha = DateTime.Now;
}
if (respuesta.IdEjecutivo == null)
{
var EjecutivoTramite = new ClienteDAL().ObtenerPrincipal(model.IdSolicitud);
if (EjecutivoTramite != null && EjecutivoTramite.Ejecutivo != null)
{
respuesta.IdEjecutivo = EjecutivoTramite.IdEjecutivo;
respuesta.Ejecutivo = EjecutivoTramite.Ejecutivo;
}
}
/// Se realizar la evaluaci<63>n de los criterios de selecci<63>n para determinar el tipo de oferta
respuesta.TipoSeleccion = !string.IsNullOrWhiteSpace(model.Process) ? model.Process.Trim().Equals("Credito") ? EvaluarTipoOferta(model.IdSolicitud) : respuesta.TipoSeleccion : respuesta.TipoSeleccion;
if (respuesta.TipoSeleccion != null)
{
respuesta.IdTipoSeleccion = respuesta.TipoSeleccion.IdTipoSeleccion;
CriteriosSolicitud.IdCriterioSeleccion = respuesta.TipoSeleccion.IdCriterioSeleccion.Value;
CriteriosSolicitud.IdSolicitud = respuesta.IdSolicitud;
CriteriosSolicitud = new HojaSeleccionDAL().ObtenerValorCriteriosSolicitud(CriteriosSolicitud).FirstOrDefault();
respuesta.TipoSeleccion.Porcentaje = respuesta.TipoSeleccion.Porcentaje == null ? 0 : respuesta.TipoSeleccion.Porcentaje;
if (CriteriosSolicitud != null)
{
if (CriteriosSolicitud.IdMoneda.Value == 0 && TipoCambio != 0)
respuesta.MontoMaximoLinea = Math.Round(((respuesta.TipoSeleccion.Porcentaje / 100) * decimal.Parse(CriteriosSolicitud.ValorCriterio) / TipoCambio).Value, 3, MidpointRounding.ToEven);
else if (CriteriosSolicitud.IdMoneda.Value == 1)
respuesta.MontoMaximoLinea = Math.Round(((respuesta.TipoSeleccion.Porcentaje / 100) * decimal.Parse(CriteriosSolicitud.ValorCriterio)).Value, 3, MidpointRounding.ToEven);
}
decimal? x = respuesta.MontoMaximoLinea % FactorMinimo;
if (x != 0)
respuesta.MontoMaximoLinea = FactorMinimo - x + respuesta.MontoMaximoLinea;
respuesta.MontoMaximoEspecifico = respuesta.MontoMaximoLinea;
}
///
/// Si la solicitud no tiene valres en los criterios de seleccci<63>n, los valores de los m<>ximos no estan definidos
else
{
respuesta.MontoMaximoLinea = 0;
respuesta.MontoMaximoEspecifico = respuesta.MontoMaximoLinea;
}
respuesta.Step = model.Step;
respuesta.IncidentStatus = model.IncidentStatus;
respuesta.OfertaFacilidades = ObtenerFacilidadesOfertaSolicitud(respuesta);
if (respuesta.OfertaFacilidades != null && respuesta.OfertaFacilidades.Count > 0)
{
foreach (var Facilidades in respuesta.OfertaFacilidades)
{
if (Facilidades.OfertaFacilidadesComisiones != null && Facilidades.OfertaFacilidadesComisiones.Count > 0)
{
foreach (var comision in Facilidades.OfertaFacilidadesComisiones)
{
if( comision.EsPropuesta == true)
{
comision.UsuarioCreador = null;
comision.UsuarioModificado = null;
}
}
}
if (Facilidades.OfertaFacilidadesGarantias != null && Facilidades.OfertaFacilidadesGarantias.Count > 0)
{
foreach (var garantia in Facilidades.OfertaFacilidadesGarantias)
{
if (garantia.EsPropuesta == true)
{
garantia.UsuarioCreador = null;
garantia.UsuarioModificado = null;
}
}
}
}
}
if (respuesta.OfertaOperaciones != null && respuesta.OfertaOperaciones.Count > 0)
{
foreach (var operacion in respuesta.OfertaOperaciones)
{
if (operacion.OfertaOperacionesComisiones != null && operacion.OfertaOperacionesComisiones.Count > 0)
{
foreach (var comision in operacion.OfertaOperacionesComisiones)
{
comision.UsuarioCreador = null;
comision.UsuarioModificado = null;
}
}
if (operacion.OfertaOperacionesGarantias != null && operacion.OfertaOperacionesGarantias.Count > 0)
{
foreach (var garantia in operacion.OfertaOperacionesGarantias)
{
garantia.UsuarioCreador = null;
garantia.UsuarioModificado = null;
}
}
}
}
}
catch (DbEntityValidationException ex1)
{
logs.Error(ex1);
}
catch (Exception ex)
{
logs.Error(ex);
}
finally
{
}
return respuesta;
}
/// <summary>
///
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public List<OfertaFacilidades> ObtenerFacilidadesOfertaSolicitud(Oferta model)
{
List<OfertaFacilidades> respuesta = new List<OfertaFacilidades>();
try
{
using (CreditoContex Contexto = new CreditoContex())
{
if (model != null && string.IsNullOrEmpty(model.Process)) model.Process = "Credito";
var datos = (from d in Contexto.CategoriasPorFacilidad.Include(w => w.TipoFacilidad)
join e in Contexto.OfertaFacilidades
on new { IdTipoFacilidad = d.IdTipoFacilidad, IdSolicitud = model.IdSolicitud }
equals new { IdTipoFacilidad = e.IdTipoFacilidad, IdSolicitud = e.IdSolicitud }
into ej
from e in ej.DefaultIfEmpty()
where d.Estado == true && d.IdTipoCategoria == model.IdTipoCategoria
&& (e.IdSolicitud == model.IdSolicitud || (int?)e.IdSolicitud == null)
select new
{
IdSolicitud = e != null ? e.IdSolicitud : model.IdSolicitud,
IdTipoFacilidad = d.TipoFacilidad.IdTipoFacilidad,
Secuencia = e != null ? e.Secuencia : 0,
Eslinea = e == null ? d.LineaCredito : e.Eslinea,
EsEspecifico = e == null ? d.Especifico : e.EsEspecifico,
MontoMaximo = e != null ? e.MontoMaximo : null,
MontoActual = e != null ? e.MontoActual : null,
Detalle = e != null ? e.Detalle : null,
FechaVencimiento = e != null ? e.FechaVencimiento : null,
FechaVencimientoActual = e != null ? e.FechaVencimientoActual : null,
CodigoNaturalezaGasto = e != null ? e.CodigoNaturalezaGasto : null,
DescNaturalezaGasto = e != null ? e.DescNaturalezaGasto : null,
IdMonedaMontoPropuesto = e != null ? e.IdMonedaMontoPropuesto : 1,
MontoEquivalentePropuesto = e != null ? e.MontoEquivalentePropuesto : null,
MontoPropuesto = e != null ? e.MontoPropuesto : null,
RazonSuperandoLimites = e != null ? e.RazonSuperandoLimites : null,
SubLimiteActual = e != null ? e.SubLimiteActual : null,
SubLimitePropuesto = e != null ? e.SubLimitePropuesto : null,
PlazoMaximoActual = e != null ? e.PlazoMaximoActual : null,
PlazoMaximoPropuesto = e != null ? e.PlazoMaximoPropuesto : null,
Recursos = e != null ? e.Recursos : null,
FormaPagoActual = e != null ? e.FormaPagoActual : null,
FormaPagoPropuesto = e != null ? e.IdFormaPagoPropuesto : null,
TBPActualMonedaLocal = e != null ? e.TBPActualMonedaLocal : null,
TasaActualMonedaLocal = e != null ? e.TasaActualMonedaLocal : null,
PRActualDolares = e != null ? e.PRActualDolares : null,
TasaActualDolares = e != null ? e.TasaActualDolares : null,
TBPPropuestaMonedaLocal = e != null ? e.TBPPropuestaMonedaLocal : TasaBasePasiva,
TasaPropuestaMonedaLocal = e != null ? e.TasaPropuestaMonedaLocal : null,
TRPropuestaDolares = e != null ? e.TRPropuestaDolares : TasaBasePrime,
TotalTBPTasaPropuestaMonedaLocal = e != null ? e.TotalTBPTasaPropuestaMonedaLocal : 0,
TotalPRTasaPropuestaDolares = e != null ? e.TotalPRTasaPropuestaDolares : 0,
TasaPropuestaDolares = e != null ? e.TasaPropuestaDolares : null,
UsuarioCreador = e != null ? e.UsuarioCreador : null,
FechaCreacion = e != null ? e.FechaCreacion : null,
UsuarioModificado = e != null ? e.UsuarioModificado : null,
FechaModificacion = e != null ? e.FechaModificacion : null,
TipoFacilidad = d.TipoFacilidad,
ValorCriterio = "",
Porcentaje = e != null ? e.MontoPropuesto : null,
IdCriterioSeleccion = 0,
IdMoneda = 0,
OtrasTasas = e != null ? e.OtrasTasas : "",
PlazoMeses = e != null ? e.PlazoMeses : 0
}).ToList();
if (model.TipoSeleccion != null && model.Process.Equals("Credito"))
{
var ConfOferta = (from A in Contexto.MatrizOferta
join B in Contexto.HojaSeleccion on new { IdCriterioSeleccion = A.IdCriterioSeleccion, IdTipoSeleccion = A.IdTipoSeleccion } equals
new { IdCriterioSeleccion = B.IdCriterioSeleccion, IdTipoSeleccion = model.TipoSeleccion.IdTipoSeleccion }
into ps
from B in ps
where B.IdSolicitud == model.IdSolicitud
select new
{
IdTipoFacilidad = A.IdTipoFacilidad,
ValorCriterio = B.ValorCriterio,
Porcentaje = A.Porcentaje / 100,
IdCriterioSeleccion = B.IdCriterioSeleccion,
IdMoneda = B.IdMoneda.Value,
}).ToList();
datos = (from q in datos
join p in ConfOferta
on q.IdTipoFacilidad equals p.IdTipoFacilidad
into qp
from p2 in qp.DefaultIfEmpty()
select new
{
IdSolicitud = q.IdSolicitud,
IdTipoFacilidad = q.IdTipoFacilidad,
Secuencia = q.Secuencia,
Eslinea = q.Eslinea,
EsEspecifico = q.EsEspecifico,
MontoMaximo = q.MontoMaximo,
MontoActual = q.MontoActual,
Detalle = q.Detalle,
FechaVencimiento = q.FechaVencimiento,
FechaVencimientoActual = q.FechaVencimientoActual,
CodigoNaturalezaGasto = q.CodigoNaturalezaGasto,
DescNaturalezaGasto = q.DescNaturalezaGasto,
IdMonedaMontoPropuesto = q.IdMonedaMontoPropuesto,
MontoEquivalentePropuesto = q.MontoEquivalentePropuesto,
MontoPropuesto = q.MontoPropuesto,
RazonSuperandoLimites = q.RazonSuperandoLimites,
SubLimiteActual = q.SubLimiteActual,
SubLimitePropuesto = q.SubLimitePropuesto,
PlazoMaximoActual = q.PlazoMaximoActual,
PlazoMaximoPropuesto = q.PlazoMaximoPropuesto,
Recursos = q.Recursos,
FormaPagoActual = q.FormaPagoActual,
FormaPagoPropuesto = q.FormaPagoPropuesto,
TBPActualMonedaLocal = q.TBPActualMonedaLocal,
TasaActualMonedaLocal = q.TasaActualMonedaLocal,
PRActualDolares = q.PRActualDolares,
TasaActualDolares = q.TasaActualDolares,
TBPPropuestaMonedaLocal = q.TBPPropuestaMonedaLocal,
TasaPropuestaMonedaLocal = q.TasaPropuestaMonedaLocal,
TRPropuestaDolares = q.TRPropuestaDolares,
TotalTBPTasaPropuestaMonedaLocal = q.TotalTBPTasaPropuestaMonedaLocal,
TotalPRTasaPropuestaDolares = q.TotalPRTasaPropuestaDolares,
TasaPropuestaDolares = q.TasaPropuestaDolares,
UsuarioCreador = q.UsuarioCreador,
FechaCreacion = q.FechaCreacion,
UsuarioModificado = q.UsuarioModificado,
FechaModificacion = q.FechaModificacion,
TipoFacilidad = q.TipoFacilidad,
ValorCriterio = (p2 == null) ? "0" : p2.ValorCriterio,
Porcentaje = (p2 == null) ? 0 : p2.Porcentaje,
IdCriterioSeleccion = (p2 == null) ? 0 : p2.IdCriterioSeleccion,
IdMoneda = (p2 == null) ? 0 : p2.IdMoneda,
OtrasTasas = q.OtrasTasas,
PlazoMeses = q.PlazoMeses
}).ToList();
}
else if (!model.Process.Equals("Credito"))
datos = datos.Where(q => q.Secuencia != 0).ToList();
foreach (var dato in datos)
{
OfertaFacilidades faci = new OfertaFacilidades
{
IdSolicitud = dato.IdSolicitud,
IdTipoFacilidad = dato.IdTipoFacilidad,
Secuencia = dato.Secuencia,
Eslinea = dato.Eslinea,
EsEspecifico = dato.EsEspecifico,
MontoMaximo = null,
MontoActual = dato.MontoActual,
Detalle = dato.Detalle,
FechaVencimiento = dato.FechaVencimiento,
FechaVencimientoActual = dato.FechaVencimientoActual,
CodigoNaturalezaGasto = dato.CodigoNaturalezaGasto,
DescNaturalezaGasto = dato.DescNaturalezaGasto,
IdMonedaMontoPropuesto = dato.IdMonedaMontoPropuesto,
MontoEquivalentePropuesto = dato.MontoEquivalentePropuesto,
MontoPropuesto = dato.MontoPropuesto,
RazonSuperandoLimites = dato.RazonSuperandoLimites,
SubLimiteActual = dato.SubLimiteActual,
SubLimitePropuesto = dato.SubLimitePropuesto,
PlazoMaximoActual = dato.PlazoMaximoActual,
PlazoMaximoPropuesto = dato.PlazoMaximoPropuesto,
Recursos = dato.Recursos,
FormaPagoActual = dato.FormaPagoActual,
IdFormaPagoPropuesto = dato.FormaPagoPropuesto,
TBPActualMonedaLocal = dato.TBPActualMonedaLocal,
TasaActualMonedaLocal = dato.TasaActualMonedaLocal,
PRActualDolares = dato.PRActualDolares,
TasaActualDolares = dato.TasaActualDolares,
TBPPropuestaMonedaLocal = dato.TBPPropuestaMonedaLocal,
TasaPropuestaMonedaLocal = dato.TasaPropuestaMonedaLocal,
TRPropuestaDolares = dato.TRPropuestaDolares,
TotalTBPTasaPropuestaMonedaLocal = dato.TotalTBPTasaPropuestaMonedaLocal,
TotalPRTasaPropuestaDolares = dato.TotalPRTasaPropuestaDolares,
TasaPropuestaDolares = dato.TasaPropuestaDolares,
UsuarioCreador = dato.UsuarioCreador,
FechaCreacion = dato.FechaCreacion,
UsuarioModificado = dato.UsuarioModificado,
FechaModificacion = dato.FechaModificacion,
TipoFacilidad = dato.TipoFacilidad,
FormasPagos = Contexto.FormasPagos.Where(q => q.IdFormaPago == dato.FormaPagoPropuesto).FirstOrDefault(),
Moneda = Contexto.Moneda.Where(q => q.IdMoneda == dato.IdMonedaMontoPropuesto).FirstOrDefault(),
OtrasTasas = dato.OtrasTasas,
PlazoMeses = dato.PlazoMeses,
OfertaFacilidadesComisiones = Contexto.OfertaFacilidadesComisiones
.Where(e => e.IdSolicitud == dato.IdSolicitud
&& e.IdTipoFacilidad == dato.IdTipoFacilidad
&& e.Secuencia == dato.Secuencia).ToList(),
OfertaFacilidadesGarantias = Contexto.OfertaFacilidadesGarantias
.Where(e => e.IdSolicitud == dato.IdSolicitud
&& e.IdTipoFacilidad == dato.IdTipoFacilidad
&& e.Secuencia == dato.Secuencia).ToList(),
};
if (model.Process.Equals("Credito") && !(EvaluarCondicionEspecial(model, faci.IdTipoFacilidad)))
{
faci.MontoMaximo = 0;
}
else
{
if (dato.IdMoneda == 0 && TipoCambio != 0)
faci.MontoMaximo = string.IsNullOrEmpty(dato.ValorCriterio) ? dato.MontoMaximo : Math.Round(dato.Porcentaje.Value * decimal.Parse(dato.ValorCriterio) / TipoCambio, 3, MidpointRounding.AwayFromZero);
else if (dato.IdMoneda == 1 && TipoCambio != 0)
faci.MontoMaximo = string.IsNullOrEmpty(dato.ValorCriterio) ? dato.MontoMaximo : Math.Round(dato.Porcentaje.Value * decimal.Parse(dato.ValorCriterio), 3, MidpointRounding.AwayFromZero);
}
decimal? x = faci.MontoMaximo % FactorMinimo;
if (x != 0)
faci.MontoMaximo = FactorMinimo - x + faci.MontoMaximo;
respuesta.Add(faci);
}
}
if ((model.Step == EnumEtapas.Etapa_RE_Ela_Caratula ||
model.Step == EnumEtapas.AN_Rev_Doc_Clasificar ||
model.Step == EnumEtapas.AP_Enviar_AProbacion ||
model.Step == EnumEtapas.AP_Corre_Caratula_Adjuntar_Doc ||
model.Step == EnumEtapas.Etapa_IN_ElaSelecOferta ||
model.Step == EnumEtapas.Etapa_IN_GenPropuesta) &&
model.IncidentStatus == EnumStatusIncidentStatus.IncidenteActivo)
{
Solicitante Solicitante = new SolicitanteDAL().ObteneCliente(model.IdSolicitud);
if (TasaBasePasiva == 0 || TasaBasePrime == 0)
{
logs.Error("El servicio de SAP ha retornado la Tasa Base Pasiva del d<>a en: " + TasaBasePasiva.ToString() + " y la Tasa Base Prime del d<>a en" + TasaBasePrime.ToString() + " N<> Solicitud " + model.IdSolicitud.ToString());
}
foreach (var facilidad in respuesta)
{
if (Solicitante.Cliente.IdTipoTramite != EnumTipoTramite.CambioCondiciones)
{
if (facilidad.Secuencia != 0)
{
if (TasaBasePasiva > 0)
{
facilidad.TBPPropuestaMonedaLocal = TasaBasePasiva;
facilidad.TBPActualMonedaLocal = facilidad.TBPActualMonedaLocal != null && facilidad.TBPActualMonedaLocal != 0 ? TasaBasePasiva : 0;
}
if (TasaBasePrime > 0)
{
facilidad.TRPropuestaDolares = TasaBasePrime;
facilidad.PRActualDolares = facilidad.PRActualDolares != null && facilidad.PRActualDolares != 0 ? TasaBasePrime : 0;
}
if (facilidad.TotalTBPTasaPropuestaMonedaLocal != null && facilidad.TotalTBPTasaPropuestaMonedaLocal != 0)
facilidad.TasaPropuestaMonedaLocal = facilidad.TotalTBPTasaPropuestaMonedaLocal - facilidad.TBPPropuestaMonedaLocal;
if (facilidad.TotalPRTasaPropuestaDolares != null && facilidad.TotalPRTasaPropuestaDolares != 0)
facilidad.TasaPropuestaDolares = facilidad.TotalPRTasaPropuestaDolares - facilidad.TRPropuestaDolares;
facilidad.UsuarioModificado = string.Empty;
InsertarActualizarOfertaFacilidades(facilidad, false);
}
}
else if (Solicitante.Cliente.IdTipoTramite == EnumTipoTramite.CambioCondiciones)
{
if (facilidad.Secuencia != 0)
{
#region si el total Cambio
if ((facilidad.TBPPropuestaMonedaLocal + facilidad.TasaPropuestaMonedaLocal) != (facilidad.TasaActualMonedaLocal + facilidad.TBPActualMonedaLocal))
{
if (TasaBasePasiva > 0)
{
facilidad.TBPPropuestaMonedaLocal = TasaBasePasiva;
facilidad.TBPActualMonedaLocal = facilidad.TBPActualMonedaLocal != null && facilidad.TBPActualMonedaLocal != 0 ? TasaBasePasiva : 0;
}
if (facilidad.TotalTBPTasaPropuestaMonedaLocal != null && facilidad.TotalTBPTasaPropuestaMonedaLocal != 0)
facilidad.TasaPropuestaMonedaLocal = facilidad.TotalTBPTasaPropuestaMonedaLocal - facilidad.TBPPropuestaMonedaLocal;
facilidad.UsuarioModificado = string.Empty;
InsertarActualizarOfertaFacilidades(facilidad, false);
}
if ((facilidad.TRPropuestaDolares + facilidad.TasaPropuestaDolares) != (facilidad.PRActualDolares + facilidad.TasaActualDolares))
{
if (TasaBasePrime > 0)
{
facilidad.TRPropuestaDolares = TasaBasePrime;
facilidad.PRActualDolares = facilidad.PRActualDolares != null && facilidad.PRActualDolares != 0 ? TasaBasePrime : 0;
}
if (facilidad.TotalPRTasaPropuestaDolares != null && facilidad.TotalPRTasaPropuestaDolares != 0)
facilidad.TasaPropuestaDolares = facilidad.TotalPRTasaPropuestaDolares - facilidad.TRPropuestaDolares;
facilidad.UsuarioModificado = string.Empty;
InsertarActualizarOfertaFacilidades(facilidad, false);
}
#endregion
#region si el total es igual
if ((facilidad.TBPPropuestaMonedaLocal + facilidad.TasaPropuestaMonedaLocal) == (facilidad.TasaActualMonedaLocal + facilidad.TBPActualMonedaLocal))
{
if (TasaBasePasiva > 0)
{
facilidad.TBPPropuestaMonedaLocal = TasaBasePasiva;
facilidad.TBPActualMonedaLocal = facilidad.TBPActualMonedaLocal != null && facilidad.TBPActualMonedaLocal != 0 ? TasaBasePasiva : 0;
}
if (facilidad.TotalTBPTasaPropuestaMonedaLocal != null && facilidad.TotalTBPTasaPropuestaMonedaLocal != 0)
facilidad.TotalTBPTasaPropuestaMonedaLocal = facilidad.TasaPropuestaMonedaLocal + facilidad.TBPPropuestaMonedaLocal;
facilidad.UsuarioModificado = string.Empty;
InsertarActualizarOfertaFacilidades(facilidad, false);
}
if ((facilidad.TRPropuestaDolares + facilidad.TasaPropuestaDolares) == (facilidad.PRActualDolares + facilidad.TasaActualDolares))
{
if (TasaBasePrime > 0)
{
facilidad.TRPropuestaDolares = TasaBasePrime;
facilidad.PRActualDolares = facilidad.PRActualDolares != null && facilidad.PRActualDolares != 0 ? TasaBasePrime : 0;
}
if (facilidad.TotalPRTasaPropuestaDolares != null && facilidad.TotalPRTasaPropuestaDolares != 0)
facilidad.TotalPRTasaPropuestaDolares = facilidad.TasaPropuestaDolares + facilidad.TRPropuestaDolares;
facilidad.UsuarioModificado = string.Empty;
InsertarActualizarOfertaFacilidades(facilidad, false);
}
#endregion
}
}
}
}
if (model.Step == EnumEtapas.AP_Analizar_Caso && model.IncidentStatus == EnumStatusIncidentStatus.IncidenteActivo)
{
Solicitante Solicitante = new SolicitanteDAL().ObteneCliente(model.IdSolicitud);
int EstadoCaratula = new CaratulaCreditoDAL().ObtenerEstadoCaratula(model.IdSolicitud);
if (EstadoCaratula == 0)
{
foreach (var facilidad in respuesta)
{
if (Solicitante.Cliente.IdTipoTramite != EnumTipoTramite.CambioCondiciones)
{
if (facilidad.Secuencia != 0)
{
if (TasaBasePasiva > 0)
{
facilidad.TBPPropuestaMonedaLocal = TasaBasePasiva;
facilidad.TBPActualMonedaLocal = facilidad.TBPActualMonedaLocal != null && facilidad.TBPActualMonedaLocal != 0 ? TasaBasePasiva : 0;
}
if (TasaBasePasiva > 0)
{
facilidad.TRPropuestaDolares = TasaBasePrime;
facilidad.PRActualDolares = facilidad.PRActualDolares != null && facilidad.PRActualDolares != 0 ? TasaBasePrime : 0;
}
if (facilidad.TotalTBPTasaPropuestaMonedaLocal != null && facilidad.TotalTBPTasaPropuestaMonedaLocal != 0)
facilidad.TasaPropuestaMonedaLocal = facilidad.TotalTBPTasaPropuestaMonedaLocal - facilidad.TBPPropuestaMonedaLocal;
if (facilidad.TotalPRTasaPropuestaDolares != null && facilidad.TotalPRTasaPropuestaDolares != 0)
facilidad.TasaPropuestaDolares = facilidad.TotalPRTasaPropuestaDolares - facilidad.TRPropuestaDolares;
facilidad.UsuarioModificado = string.Empty;
InsertarActualizarOfertaFacilidades(facilidad, false);
}
}
else if (Solicitante.Cliente.IdTipoTramite == EnumTipoTramite.CambioCondiciones)
{
if (facilidad.Secuencia != 0)
{
#region si el total Cambio
if ((facilidad.TBPPropuestaMonedaLocal + facilidad.TasaPropuestaMonedaLocal) != (facilidad.TasaActualMonedaLocal + facilidad.TBPActualMonedaLocal))
{
if (TasaBasePasiva > 0)
{
facilidad.TBPPropuestaMonedaLocal = TasaBasePasiva;
facilidad.TBPActualMonedaLocal = facilidad.TBPActualMonedaLocal != null && facilidad.TBPActualMonedaLocal != 0 ? TasaBasePasiva : 0;
}
if (facilidad.TotalTBPTasaPropuestaMonedaLocal != null && facilidad.TotalTBPTasaPropuestaMonedaLocal != 0)
facilidad.TasaPropuestaMonedaLocal = facilidad.TotalTBPTasaPropuestaMonedaLocal - facilidad.TBPPropuestaMonedaLocal;
facilidad.UsuarioModificado = string.Empty;
InsertarActualizarOfertaFacilidades(facilidad, false);
}
if ((facilidad.TRPropuestaDolares + facilidad.TasaPropuestaDolares) != (facilidad.PRActualDolares + facilidad.TasaActualDolares))
{
if (TasaBasePrime > 0)
{
facilidad.TRPropuestaDolares = TasaBasePrime;
facilidad.PRActualDolares = facilidad.PRActualDolares != null && facilidad.PRActualDolares != 0 ? TasaBasePrime : 0;
}
if (facilidad.TotalPRTasaPropuestaDolares != null && facilidad.TotalPRTasaPropuestaDolares != 0)
facilidad.TasaPropuestaDolares = facilidad.TotalPRTasaPropuestaDolares - facilidad.TRPropuestaDolares;
facilidad.UsuarioModificado = string.Empty;
InsertarActualizarOfertaFacilidades(facilidad, false);
}
#endregion
#region si el total es igual
if ((facilidad.TBPPropuestaMonedaLocal + facilidad.TasaPropuestaMonedaLocal) == (facilidad.TasaActualMonedaLocal + facilidad.TBPActualMonedaLocal))
{
if (TasaBasePasiva > 0)
{
facilidad.TBPPropuestaMonedaLocal = TasaBasePasiva;
facilidad.TBPActualMonedaLocal = facilidad.TBPActualMonedaLocal != null && facilidad.TBPActualMonedaLocal != 0 ? TasaBasePasiva : 0;
}
if (facilidad.TotalTBPTasaPropuestaMonedaLocal != null && facilidad.TotalTBPTasaPropuestaMonedaLocal != 0)
facilidad.TotalTBPTasaPropuestaMonedaLocal = facilidad.TasaPropuestaMonedaLocal + facilidad.TBPPropuestaMonedaLocal;
facilidad.UsuarioModificado = string.Empty;
InsertarActualizarOfertaFacilidades(facilidad, false);
}
if ((facilidad.TRPropuestaDolares + facilidad.TasaPropuestaDolares) == (facilidad.PRActualDolares + facilidad.TasaActualDolares))
{
if (TasaBasePrime > 0)
{
facilidad.TRPropuestaDolares = TasaBasePrime;
facilidad.PRActualDolares = facilidad.PRActualDolares != null && facilidad.PRActualDolares != 0 ? TasaBasePrime : 0;
}
if (facilidad.TotalPRTasaPropuestaDolares != null && facilidad.TotalPRTasaPropuestaDolares != 0)
facilidad.TotalPRTasaPropuestaDolares = facilidad.TasaPropuestaDolares + facilidad.TRPropuestaDolares;
facilidad.UsuarioModificado = string.Empty;
InsertarActualizarOfertaFacilidades(facilidad, false);
}
#endregion
}
}
}
}
}
}
catch (DbEntityValidationException ex1)
{
logs.Error(ex1);
}
catch (Exception ex)
{
logs.Error(ex);
}
finally
{
}
return respuesta;
}
public List<OfertaFacilidades> ObtenerFacilidadesOfertaSolicitud(int IdTipoFacilidad, string CodCaratula)
{
List<OfertaFacilidades> Respuesta = new List<OfertaFacilidades>();
try
{
int IdSolicitudAsociado = new CaratulaCreditoDAL().ObtenerIdSolicitudConCodCaratula(CodCaratula);
using (CreditoContex Conn = new CreditoContex())
{
if (IdSolicitudAsociado != 0)
Respuesta = Conn.OfertaFacilidades.Where(x => x.IdTipoFacilidad == IdTipoFacilidad && x.Eslinea == true && x.IdSolicitud == IdSolicitudAsociado).Include(x => x.OfertaFacilidadesGarantias).ToList();
}
}
catch (Exception ex)
{
logs.Error(ex);
}
return Respuesta;
}
private bool EvaluarCondicionEspecial(Oferta model, int IdTipoFacilidad)
{
bool resp = true;
try
{
if (IdTipoFacilidad.In(EnumTipoFacilidad.Descuento_Facturas_Privado, EnumTipoFacilidad.Descuento_Facturas_Publico))
{
if (model.TipoSeleccion != null && model.Process.Equals("Credito"))
{
using (CreditoContex Contexto = new CreditoContex())
{
var ConfOferta = (from B in Contexto.HojaSeleccion
join A in Contexto.MatrizOferta
on new
{
IdCriterioSeleccion = (B == null || B.IdCriterioSeleccion == null) ? 0 : B.IdCriterioSeleccion,
IdTipoSeleccion = model.TipoSeleccion.IdTipoSeleccion
}
equals new
{
IdCriterioSeleccion = (A == null || A.IdCriterioSeleccion == null ? 0 : A.IdCriterioSeleccion),
IdTipoSeleccion = (A == null || A.IdTipoSeleccion == null ? 0 : A.IdTipoSeleccion)
}
into ps
from A in ps.DefaultIfEmpty()
where B.IdSolicitud == model.IdSolicitud
select new
{
IdTipoFacilidad = A == null || A.IdTipoFacilidad == null ? 0 : A.IdTipoFacilidad,
ValorCriterio = B.ValorCriterio,
Porcentaje = A == null || A.Porcentaje == null ? 0 : A.Porcentaje / 100,
IdCriterioSeleccion = B == null || B.IdCriterioSeleccion == null ? 0 : B.IdCriterioSeleccion,
IdMoneda = (B == null || !(B.IdMoneda.HasValue)) ? 0 : B.IdMoneda.Value,
}).ToList();
if (ConfOferta != null && ConfOferta.Count() > 0)
{
var CriterioCuotaObreroPatronal = ConfOferta.Where(x => x.IdCriterioSeleccion == 21).FirstOrDefault();
if (CriterioCuotaObreroPatronal != null && !string.IsNullOrEmpty(CriterioCuotaObreroPatronal.ValorCriterio) && CriterioCuotaObreroPatronal.ValorCriterio.Trim() != "Al d<>a")
resp = false;
}
}
}
}
}
catch (Exception ex)
{
logs.Error(ex);
}
return resp;
}
/// <summary>
///
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public BaseJson InsertaActualizarOfertaSolicitud(Oferta model)
{
BaseJson ValorRetorno = new BaseJson();
ClienteFacilidadesDal Conn = new ClienteFacilidadesDal();
List<ClienteFacilidades> FacilidadesCliente = new List<ClienteFacilidades>();
ClienteFacilidades FacilidadCliente = new ClienteFacilidades();
List<OfertaFacilidades> ListaOfertaFacilidades = new List<OfertaFacilidades>();
List<OfertaOperaciones> ListaOfertaOperaciones = new List<OfertaOperaciones>();
try
{
ValorRetorno.CodigoRespuesta = TipoCodigoRespuesta.EXITOSO.ToString();
model = InsertarActualizarOferta(model);
#region OfertaFacilidades
foreach (OfertaFacilidades Facilidad in model.OfertaFacilidades)
{
Facilidad.IdSolicitud = model.IdSolicitud;
Facilidad.Detalle = Facilidad.Eslinea == true ? model.DetalleLinea : Facilidad.Detalle;
ListaOfertaFacilidades.Add(InsertarActualizarOfertaFacilidades(Facilidad, true));
}
model.OfertaFacilidades = ListaOfertaFacilidades;
#endregion
#region OfertaOperaciones
foreach (OfertaOperaciones Operacion in model.OfertaOperaciones)
{
Operacion.IdSolicitud = model.IdSolicitud;
ListaOfertaOperaciones.Add(InsertarActualizarOfertaOperaciones(Operacion));
}
model.OfertaOperaciones = ListaOfertaOperaciones;
#endregion
if (ValorRetorno.CodigoRespuesta == TipoCodigoRespuesta.EXITOSO.ToString())
{
foreach (OfertaFacilidades Facilidad in model.OfertaFacilidades)
{
FacilidadCliente = new ClienteFacilidades();
FacilidadCliente.CopyValueProperties(Facilidad);
FacilidadCliente.DecFormaPagoPropuesto = Facilidad.FormasPagos != null ? Facilidad.FormasPagos.Descripcion : "";
FacilidadesCliente.Add(FacilidadCliente);
}
Conn.InsertarActualizar(FacilidadesCliente, model.IdSolicitud);
}
}
catch (DbEntityValidationException ex1)
{
logs.Error(ex1);
ValorRetorno.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString();
}
catch (Exception ex)
{
logs.Error(ex);
ValorRetorno.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString();
}
finally
{
}
return ValorRetorno;
}
private Oferta InsertarActualizarOferta(Oferta model)
{
Moneda modelMoneda = null;
Ejecutivo modelEjecutivo = null;
TipoSeleccion modelTipoSeleccion = null;
TipoCategoria modelTipoCategoria = null;
ICollection<OfertaFacilidades> ListaOfertaFacilidades = null;
ICollection<OfertaOperaciones> ListaOfertaOperaciones = null;
Solicitud ModelSolicitud = null;
Oferta ModeloActual = null;
try
{
using (CreditoContex Contexto = new CreditoContex())
{
ModeloActual = (from t in Contexto.Oferta
.Include(e => e.TipoSeleccion)
.Include(e => e.TipoCategoria)
.Include(e => e.Ejecutivo)
.Include(e => e.OfertaFacilidades)
.Where(t => t.IdSolicitud == model.IdSolicitud)
select t).FirstOrDefault();
modelMoneda = model.Moneda;
modelEjecutivo = model.Ejecutivo;
modelTipoSeleccion = model.TipoSeleccion;
modelTipoCategoria = model.TipoCategoria;
ListaOfertaFacilidades = model.OfertaFacilidades;
ListaOfertaOperaciones = model.OfertaOperaciones;
ModelSolicitud = model.Solicitud;
model.Moneda = null;
model.Ejecutivo = null;
model.TipoSeleccion = null;
model.TipoCategoria = null;
model.OfertaFacilidades = null;
model.OfertaOperaciones = null;
model.Solicitud = null;
if (ModeloActual == null)
{
#region Oferta
model.FechaCreacion = DateTime.Now;
Contexto.Oferta.Add(model);
Contexto.SaveChanges();
#endregion
}
else
{
#region Oferta
model.FechaModificacion = DateTime.Now;
model.UsuarioModificado = model.UsuarioCreador;
model.FechaCreacion = ModeloActual.FechaCreacion;
model.UsuarioCreador = ModeloActual.UsuarioCreador;
Contexto.Entry(ModeloActual).State = System.Data.Entity.EntityState.Detached;
Contexto.Oferta.Attach(model);
Contexto.Entry(model).State = System.Data.Entity.EntityState.Modified;
#endregion
}
Contexto.SaveChanges();
}
}
catch (DbEntityValidationException ex1)
{
logs.Error(ex1);
throw ex1;
}
catch (Exception ex)
{
logs.Error(ex);
throw ex;
}
finally
{
model.Moneda = modelMoneda;
model.Ejecutivo = modelEjecutivo;
model.TipoSeleccion = modelTipoSeleccion;
model.TipoCategoria = modelTipoCategoria;
model.OfertaFacilidades = ListaOfertaFacilidades;
model.OfertaOperaciones = ListaOfertaOperaciones;
model.Solicitud = ModelSolicitud;
}
return model;
}
public OfertaFacilidades InsertarActualizarOfertaFacilidades(OfertaFacilidades model, bool ComisionesGarantias)
{
Moneda ItemMoneda = null;
FormasPagos ItemFormasPagos = null;
TipoFacilidad ItemTipoFacilidad = null;
OfertaFacilidades FacilidadActual = null;
VerificacionFacturasContratosOrdenes ItemVerificacionFacturasContratosOrdenes = null;
ICollection<OfertaFacilidadesGarantias> ListaOfertaFacilidadesGarantias = null;
ICollection<OfertaFacilidadesComisiones> ListaOfertaFacilidadesComisiones = null;
ICollection<FormalizacionTipoFacilidades> ListaFormalizacionTipoFacilidades = null;
OfertaFacilidadesGarantias GarantiaActual = new OfertaFacilidadesGarantias();
OfertaFacilidadesComisiones ComisionActual = new OfertaFacilidadesComisiones();
try
{
ItemMoneda = model.Moneda;
ItemFormasPagos = model.FormasPagos;
ItemTipoFacilidad = model.TipoFacilidad;
ItemVerificacionFacturasContratosOrdenes = model.VerificacionFacturasContratosOrdenes;
ListaOfertaFacilidadesGarantias = model.OfertaFacilidadesGarantias;
ListaOfertaFacilidadesComisiones = model.OfertaFacilidadesComisiones;
ListaFormalizacionTipoFacilidades = model.FormalizacionTipoFacilidades;
model.Oferta = null;
model.Moneda = null;
model.FormasPagos = null;
model.TipoFacilidad = null;
model.OfertaFacilidadesGarantias = null;
model.OfertaFacilidadesComisiones = null;
model.FormalizacionTipoFacilidades = null;
model.VerificacionFacturasContratosOrdenes = null;
#region OfertaFacilidades
using (CreditoContex Contexto = new CreditoContex())
{
FacilidadActual = Contexto.OfertaFacilidades.Where(e => e.IdSolicitud == model.IdSolicitud && e.IdTipoFacilidad == model.IdTipoFacilidad && e.Secuencia == model.Secuencia).FirstOrDefault();
if (null != FacilidadActual)
{
model.FechaModificacion = DateTime.Now;
model.UsuarioModificado = model.UsuarioCreador;
model.FechaCreacion = FacilidadActual.FechaCreacion;
model.UsuarioCreador = FacilidadActual.UsuarioCreador;
Contexto.Entry(FacilidadActual).State = System.Data.Entity.EntityState.Detached;
Contexto.OfertaFacilidades.Attach(model);
Contexto.Entry(model).State = System.Data.Entity.EntityState.Modified;
}
else
{
model.FechaCreacion = DateTime.Now;
Contexto.OfertaFacilidades.Add(model);
}
Contexto.SaveChanges();
}
#endregion
#region Comisiones y Garantias
model.OfertaFacilidadesGarantias = ListaOfertaFacilidadesGarantias;
model.OfertaFacilidadesComisiones = ListaOfertaFacilidadesComisiones;
if (ComisionesGarantias == true)
{
using (CreditoContex Contexto = new CreditoContex())
{
using (var dbContextTransaction = Contexto.Database.BeginTransaction())
{
try
{
int? Next_idComision = 0;
///Recorrer cada comis<69>n por facilidad para guardar o actualizar
///
#region comis<EFBFBD>n por facilidad
OfertaFacilidades DescripcionFacilidad = new OfertaFacilidadesDAL().ObtenerFacilidad(model);
if (model.OfertaFacilidadesComisiones != null && model.OfertaFacilidadesComisiones.Count > 0)
{
List<OfertaFacilidadesComisiones> listacomisiones = Contexto.OfertaFacilidadesComisiones.Where(x => x.IdSolicitud == model.IdSolicitud && x.IdTipoFacilidad == model.IdTipoFacilidad && x.Secuencia == model.Secuencia).ToList();
#region BitacoraComisiones
foreach (OfertaFacilidadesComisiones comision in listacomisiones)
{
BitacoraComisiones BitacoraComisioneseliminar = new BitacoraComisiones();
BitacoraComisioneseliminar.IdSolicitud = model.IdSolicitud;
BitacoraComisioneseliminar.Detalle = string.Format("Contexto.OfertaFacilidadesComisiones.Remove: IdSolicitud: {0} IdTipoFacilidad: {1} Secuencia: {2} IdComision: {3} EsPropuesta: {4} DetalleComision: {5} UsuarioCreador: {6} FechaCreacion: {7} UsuarioModificado: {8} FechaModificacion: {9} Process: {10} Step: {11} Incident: {12}",
comision.IdSolicitud.ToString(), comision.IdTipoFacilidad.ToString(), comision.Secuencia.ToString(), comision.IdComision.ToString(), comision.EsPropuesta != null ? comision.EsPropuesta.ToString() : " ", comision.DetalleComision, comision.UsuarioCreador, comision.FechaCreacion != null ? comision.FechaCreacion.ToString() : " ",
comision.UsuarioModificado, comision.FechaModificacion != null ? comision.FechaModificacion.ToString() : " ", comision.Process, comision.Step, comision.FechaModificacion != null ? comision.Incident.ToString() : " ");
BitacoraComisioneseliminar.Usuario = !string.IsNullOrEmpty(model.UsuarioModificado) ? model.UsuarioModificado : model.UsuarioCreador;
BitacoraComisioneseliminar.Fecha = DateTime.Now;
Contexto.BitacoraComisiones.Add(BitacoraComisioneseliminar);
}
#endregion
Contexto.OfertaFacilidadesComisiones.RemoveRange(listacomisiones);
Contexto.SaveChanges();
foreach (OfertaFacilidadesComisiones Comision in model.OfertaFacilidadesComisiones)
{
Comision.OfertaFacilidades = null;
if (Comision.EsPropuesta != null)
{
if (Next_idComision == null || Next_idComision == 0)
Next_idComision = Contexto.OfertaFacilidadesComisiones.Where(x => x.IdSolicitud == model.IdSolicitud && x.IdTipoFacilidad == model.IdTipoFacilidad && x.Secuencia == model.Secuencia).Max(t => (int?)t.IdComision);
Next_idComision = (Next_idComision == null) ? 1 : Next_idComision.Value + 1;
Comision.IdComision = Next_idComision.Value;
Comision.Secuencia = model.Secuencia;
Comision.FechaCreacion = DateTime.Now;
Contexto.OfertaFacilidadesComisiones.Add(Comision);
#region BitacoraComisionesinsertar
BitacoraComisiones BitacoraComisionesinsertar = new BitacoraComisiones();
BitacoraComisionesinsertar.IdSolicitud = model.IdSolicitud;
BitacoraComisionesinsertar.Detalle = string.Format("Contexto.OfertaFacilidadesComisiones.Add: IdSolicitud: {0} IdTipoFacilidad: {1} Secuencia: {2} IdComision: {3} EsPropuesta: {4} DetalleComision: {5} UsuarioCreador: {6} FechaCreacion: {7} UsuarioModificado: {8} FechaModificacion: {9} Process: {10} Step: {11} Incident: {12}",
Comision.IdSolicitud.ToString(), Comision.IdTipoFacilidad.ToString(), Comision.Secuencia.ToString(), Comision.IdComision.ToString(), Comision.EsPropuesta != null ? Comision.EsPropuesta.ToString() : " ", Comision.DetalleComision, Comision.UsuarioCreador, Comision.FechaCreacion != null ? Comision.FechaCreacion.ToString() : " ",
Comision.UsuarioModificado, Comision.FechaModificacion != null ? Comision.FechaModificacion.ToString() : " ", Comision.Process, Comision.Step, Comision.FechaModificacion != null ? Comision.Incident.ToString() : " ");
BitacoraComisionesinsertar.Usuario = !string.IsNullOrEmpty(model.UsuarioModificado) ? model.UsuarioModificado : model.UsuarioCreador;
BitacoraComisionesinsertar.Fecha = DateTime.Now;
Contexto.BitacoraComisiones.Add(BitacoraComisionesinsertar);
#endregion
}
else
{
if (model.Step == "AP_Enviar_Aprobacion" || model.Step == "AN_Rev_Doc_Clasificar" || model.Step == "AP_Corre_Caratula_Adjuntar_Doc" || model.Step == "AN_Preanalisis" || model.Step == "AP_Vali_CondicionesConCliente")
{
new HistoricoCaratulaDAL().InsertarActualizar(new HistoricoCaratula()
{
Descripcion = string.Format("Oferta Facilidades Comisiones Registro Eliminado TipoFacilidad: {0} Comisi<73>n: {1}: ", DescripcionFacilidad.TipoFacilidad.Descripcion, Comision.DetalleComision),
Etapa = Comision.Step,
Fecha = DateTime.Now,
IdSolicitud = model.IdSolicitud,
NombreTabla = "[Corporativo].[OfertaFacilidadesComisiones]",
Usuario = Comision.UsuarioModificado,
Name = Comision.UsuarioCreador
});
}
}
}
}
#endregion
///Recorrer cada Garantias por facilidad para guardar o actualizar
#region Garantias por facilidad
int? Next_idGarantia = 0;
if (model.OfertaFacilidadesGarantias != null && model.OfertaFacilidadesGarantias.Count > 0)
{
List<OfertaFacilidadesGarantias> listagarantias = Contexto.OfertaFacilidadesGarantias.Where(x => x.IdSolicitud == model.IdSolicitud && x.IdTipoFacilidad == model.IdTipoFacilidad && x.Secuencia == model.Secuencia).ToList();
#region BitacoraGarantias
foreach (OfertaFacilidadesGarantias garantias in listagarantias)
{
BitacoraGarantias BitacoraGarantiasEliminar = new BitacoraGarantias();
BitacoraGarantiasEliminar.IdSolicitud = model.IdSolicitud;
BitacoraGarantiasEliminar.Detalle = string.Format("Contexto.OfertaFacilidadesGarantias.Remove IdSolicitud: {0} IdTipoFacilidad: {1} Secuencia: {2} IdGarantia: {3} EsPropuesta: {4} TipoGarantia: {5} DescTipoGarantia: {6} DetalleGarantia: {7} NumeroGarantiaSAP: {8} UsuarioCreador: {9} FechaCreacion: {10} UsuarioModificado: {11} FechaModificacion: {12} Process: {13} Step: {14} Incident: {15}",
garantias.IdSolicitud.ToString(), garantias.IdTipoFacilidad.ToString(), garantias.IdTipoFacilidad.ToString(), garantias.IdGarantia.ToString(), garantias.EsPropuesta != null ? garantias.EsPropuesta.ToString() : " ", garantias.TipoGarantia != null ? garantias.TipoGarantia.ToString() : "", garantias.DescTipoGarantia, garantias.DetalleGarantia, garantias.NumeroGarantiaSAP,
garantias.UsuarioCreador, garantias.FechaCreacion != null ? garantias.FechaCreacion.ToString() : " ", garantias.UsuarioModificado, garantias.FechaModificacion != null ? garantias.FechaModificacion.ToString() : " ", garantias.Process, garantias.Step, garantias.Incident != null ? garantias.Incident.ToString() : " ");
BitacoraGarantiasEliminar.Usuario = !string.IsNullOrEmpty(model.UsuarioModificado) ? model.UsuarioModificado : model.UsuarioCreador;
BitacoraGarantiasEliminar.Fecha = DateTime.Now;
Contexto.BitacoraGarantias.Add(BitacoraGarantiasEliminar);
}
#endregion
Contexto.OfertaFacilidadesGarantias.RemoveRange(listagarantias);
Contexto.SaveChanges();
foreach (OfertaFacilidadesGarantias garantia in model.OfertaFacilidadesGarantias)
{
garantia.OfertaFacilidades = null;
if (garantia.EsPropuesta != null)
{
if (Next_idGarantia == null || Next_idGarantia == 0)
Next_idGarantia = Contexto.OfertaFacilidadesGarantias.Where(x => x.IdSolicitud == model.IdSolicitud && x.IdTipoFacilidad == model.IdTipoFacilidad && x.Secuencia == model.Secuencia).Max(t => (int?)t.IdGarantia);
Next_idGarantia = (Next_idGarantia == null) ? 1 : Next_idGarantia.Value + 1;
garantia.IdGarantia = Next_idGarantia.Value;
garantia.Secuencia = model.Secuencia;
garantia.FechaCreacion = DateTime.Now;
Contexto.OfertaFacilidadesGarantias.Add(garantia);
BitacoraGarantias BitacoraGarantiasGuardar = new BitacoraGarantias();
BitacoraGarantiasGuardar.IdSolicitud = model.IdSolicitud;
BitacoraGarantiasGuardar.Detalle = string.Format("Contexto.OfertaFacilidadesGarantias.add IdSolicitud: {0} IdTipoFacilidad: {1} Secuencia: {2} IdGarantia: {3} EsPropuesta: {4} TipoGarantia: {5} DescTipoGarantia: {6} DetalleGarantia: {7} NumeroGarantiaSAP: {8} UsuarioCreador: {9} FechaCreacion: {10} UsuarioModificado: {11} FechaModificacion: {12} Process: {13} Step: {14} Incident: {15}",
garantia.IdSolicitud.ToString(), garantia.IdTipoFacilidad.ToString(), garantia.IdTipoFacilidad.ToString(), garantia.IdGarantia.ToString(), garantia.EsPropuesta != null ? garantia.EsPropuesta.ToString() : " ", garantia.TipoGarantia != null ? garantia.TipoGarantia.ToString() : "", garantia.DescTipoGarantia, garantia.DetalleGarantia, garantia.NumeroGarantiaSAP,
garantia.UsuarioCreador, garantia.FechaCreacion != null ? garantia.FechaCreacion.ToString() : " ", garantia.UsuarioModificado, garantia.FechaModificacion != null ? garantia.FechaModificacion.ToString() : " ", garantia.Process, garantia.Step, garantia.Incident != null ? garantia.Incident.ToString() : " ");
BitacoraGarantiasGuardar.Usuario = !string.IsNullOrEmpty(model.UsuarioModificado) ? model.UsuarioModificado : model.UsuarioCreador;
BitacoraGarantiasGuardar.Fecha = DateTime.Now;
Contexto.BitacoraGarantias.Add(BitacoraGarantiasGuardar);
}
else
{
if (model.Step == "AP_Enviar_Aprobacion" || model.Step == "AN_Rev_Doc_Clasificar" || model.Step == "AP_Corre_Caratula_Adjuntar_Doc" || model.Step == "AN_Preanalisis" || model.Step == "AP_Vali_CondicionesConCliente")
{
new HistoricoCaratulaDAL().InsertarActualizar(new HistoricoCaratula()
{
Descripcion = string.Format("Oferta Facilidades Garantias Registro Eliminado TipoFacilidad: {0} Comisi<73>n: {1}: ", DescripcionFacilidad.TipoFacilidad.Descripcion, garantia.DetalleGarantia),
Etapa = garantia.Step,
Fecha = DateTime.Now,
IdSolicitud = model.IdSolicitud,
NombreTabla = "[Corporativo].[OfertaFacilidadesGarantias]",
Usuario = garantia.UsuarioModificado,
Name = garantia.UsuarioCreador
});
}
}
}
}
#endregion
Contexto.SaveChanges();
dbContextTransaction.Commit();
}
catch (Exception ex)
{
dbContextTransaction.Rollback();
logs.Error(ex);
}
}
}
}
#endregion
}
catch (DbEntityValidationException ex1)
{
logs.Error(ex1);
throw ex1;
}
catch (Exception ex)
{
logs.Error(ex);
throw ex;
}
finally
{
model.Moneda = ItemMoneda;
model.FormasPagos = ItemFormasPagos;
model.TipoFacilidad = ItemTipoFacilidad;
model.VerificacionFacturasContratosOrdenes = ItemVerificacionFacturasContratosOrdenes;
model.FormalizacionTipoFacilidades = ListaFormalizacionTipoFacilidades;
}
return model;
}
private OfertaOperaciones InsertarActualizarOfertaOperaciones(OfertaOperaciones model)
{
Moneda ItemMoneda = null;
FormasPagos ItemFormasPagos = null;
OfertaOperaciones OperaciondActual = null;
ICollection<OfertaOperacionesGarantias> ListaOfertaOperacionesGarantias = null;
ICollection<OfertaOperacionesComisiones> ListaOfertaOperacionesComisiones = null;
OfertaOperacionesGarantias OpercionGarantiaActual = new OfertaOperacionesGarantias();
OfertaOperacionesComisiones OpercionComisionActual = new OfertaOperacionesComisiones();
try
{
ItemMoneda = model.Moneda;
ItemFormasPagos = model.FormasPagos;
ListaOfertaOperacionesGarantias = model.OfertaOperacionesGarantias;
ListaOfertaOperacionesComisiones = model.OfertaOperacionesComisiones;
model.Oferta = null;
model.Moneda = null;
model.FormasPagos = null;
model.OfertaOperacionesGarantias = null;
model.OfertaOperacionesComisiones = null;
#region OfertaOperaciones
using (CreditoContex Contexto = new CreditoContex())
{
OperaciondActual = Contexto.OfertaOperaciones.Where(e => e.IdSolicitud == model.IdSolicitud && e.Operacion == model.Operacion).FirstOrDefault();
if (null != OperaciondActual)
{
model.FechaModificacion = DateTime.Now;
model.UsuarioModificado = model.UsuarioCreador;
model.FechaCreacion = OperaciondActual.FechaCreacion;
model.UsuarioCreador = OperaciondActual.UsuarioCreador;
Contexto.Entry(OperaciondActual).State = System.Data.Entity.EntityState.Detached;
Contexto.OfertaOperaciones.Attach(model);
Contexto.Entry(model).State = System.Data.Entity.EntityState.Modified;
}
else
{
model.FechaCreacion = DateTime.Now;
Contexto.OfertaOperaciones.Add(model);
}
Contexto.SaveChanges();
}
#endregion
#region Comisiones y Garantias
model.OfertaOperacionesGarantias = ListaOfertaOperacionesGarantias;
model.OfertaOperacionesComisiones = ListaOfertaOperacionesComisiones;
using (CreditoContex Contexto = new CreditoContex())
{
using (var dbContextTransaction = Contexto.Database.BeginTransaction())
{
try
{
#region comis<EFBFBD>n por Operacion
///Recorrer cada comis<69>n por operaci<63>n para guardar o actualizar
///
if (model.OfertaOperacionesComisiones != null && model.OfertaOperacionesComisiones.Count > 0)
{
List<OfertaOperacionesComisiones> listacomisiones = Contexto.OfertaOperacionesComisiones.Where(x => x.IdSolicitud == model.IdSolicitud && x.Operacion == model.Operacion).ToList();
#region BitacoraComisiones
foreach (OfertaOperacionesComisiones comision in listacomisiones)
{
BitacoraComisiones BitacoraComisioneseliminar = new BitacoraComisiones();
BitacoraComisioneseliminar.IdSolicitud = model.IdSolicitud;
BitacoraComisioneseliminar.Detalle = string.Format("Contexto.OfertaOperacionesComisiones.Remove: Operacion: {0} IdComision: {1} EsPropuesta: {2} DetalleComision: {3} UsuarioCreador: {4} FechaCreacion: {5} UsuarioModificado: {6} FechaModificacion: {7}",
comision.Operacion,
comision.IdComision.ToString(),
comision.EsPropuesta != null ? comision.EsPropuesta.ToString() : " ",
comision.DetalleComision,
comision.UsuarioCreador,
comision.FechaCreacion != null ? comision.FechaCreacion.ToString() : " ",
comision.UsuarioModificado,
comision.FechaModificacion != null ? comision.FechaModificacion.ToString() : " ");
BitacoraComisioneseliminar.Usuario = !string.IsNullOrEmpty(model.UsuarioModificado) ? model.UsuarioModificado : model.UsuarioCreador;
BitacoraComisioneseliminar.Fecha = DateTime.Now;
Contexto.BitacoraComisiones.Add(BitacoraComisioneseliminar);
}
#endregion
Contexto.OfertaOperacionesComisiones.RemoveRange(listacomisiones);
Contexto.SaveChanges();
int? Next_idComision = 0;
foreach (OfertaOperacionesComisiones ComisionOperacion in model.OfertaOperacionesComisiones)
{
ComisionOperacion.OfertaOperaciones = null;
if (ComisionOperacion.EsPropuesta != null)
{
if (Next_idComision == null || Next_idComision == 0)
Next_idComision = Contexto.OfertaOperacionesComisiones.Where(x => x.IdSolicitud == model.IdSolicitud && x.Operacion == model.Operacion).Max(t => (int?)t.IdComision);
Next_idComision = (Next_idComision == null) ? 1 : Next_idComision.Value + 1;
ComisionOperacion.IdComision = Next_idComision.Value;
ComisionOperacion.FechaCreacion = DateTime.Now;
Contexto.OfertaOperacionesComisiones.Add(ComisionOperacion);
#region BitacoraComisionesinsertar
BitacoraComisiones BitacoraComisionesinsertar = new BitacoraComisiones();
BitacoraComisionesinsertar.IdSolicitud = model.IdSolicitud;
BitacoraComisionesinsertar.Detalle = string.Format("Contexto.OfertaOperacionesComisiones.Add: Operacion: {0} IdComision: {1} EsPropuesta: {2} DetalleComision: {3} UsuarioCreador: {4} FechaCreacion: {5} UsuarioModificado: {6} FechaModificacion: {7}",
ComisionOperacion.Operacion,
ComisionOperacion.IdComision.ToString(),
ComisionOperacion.EsPropuesta != null ? ComisionOperacion.EsPropuesta.ToString() : "",
ComisionOperacion.DetalleComision, ComisionOperacion.UsuarioCreador,
ComisionOperacion.FechaCreacion != null ? ComisionOperacion.FechaCreacion.ToString() : "",
ComisionOperacion.UsuarioModificado,
ComisionOperacion.FechaModificacion != null ? ComisionOperacion.FechaModificacion.ToString() : "");
BitacoraComisionesinsertar.Usuario = !string.IsNullOrEmpty(model.UsuarioModificado) ? model.UsuarioModificado : model.UsuarioCreador;
BitacoraComisionesinsertar.Fecha = DateTime.Now;
Contexto.BitacoraComisiones.Add(BitacoraComisionesinsertar);
#endregion
}
else
{
if (model.Step == "AP_Enviar_Aprobacion" || model.Step == "AN_Rev_Doc_Clasificar" || model.Step == "AP_Corre_Caratula_Adjuntar_Doc" || model.Step == "AN_Preanalisis" || model.Step == "AP_Vali_CondicionesConCliente")
{
new HistoricoCaratulaDAL().InsertarActualizar(new HistoricoCaratula()
{
Descripcion = string.Format("Operaciones Facilidades Comisiones Registro Eliminado Operacion: {0} Comisi<73>n: {1}: ", ComisionOperacion.Operacion, ComisionOperacion.DetalleComision),
Etapa = model.Step,
Fecha = DateTime.Now,
IdSolicitud = model.IdSolicitud,
NombreTabla = "[Corporativo].[OfertaOperacionesComisiones]",
Usuario = ComisionOperacion.UsuarioModificado,
Name = ComisionOperacion.UsuarioCreador
});
}
}
}
}
#endregion
#region Garantias por Operacion
///Recorrer cada Garantias por operacion para guardar o actualizar
///
if (model.OfertaOperacionesGarantias != null && model.OfertaOperacionesGarantias.Count > 0)
{
int? Next_idGarantia = 0;
List<OfertaOperacionesGarantias> listagarantias = Contexto.OfertaOperacionesGarantias.Where(x => x.IdSolicitud == model.IdSolicitud && x.Operacion == model.Operacion).ToList();
#region BitacoraGarantias
foreach (OfertaOperacionesGarantias garantias in listagarantias)
{
BitacoraGarantias BitacoraGarantiasEliminar = new BitacoraGarantias();
BitacoraGarantiasEliminar.IdSolicitud = model.IdSolicitud;
BitacoraGarantiasEliminar.Detalle = string.Format("Contexto.OfertaOperacionesGarantias.Remove Operacion: {0} IdGarantia: {1} EsPropuesta: {2} TipoGarantia: {3} DescTipoGarantia: {4} DetalleGarantia: {5} UsuarioCreador: {6} FechaCreacion: {7} UsuarioModificado: {8} FechaModificacion: {9}",
garantias.Operacion.ToString(),
garantias.IdGarantia.ToString(),
garantias.EsPropuesta != null ? garantias.EsPropuesta.ToString() : " ",
garantias.TipoGarantia != null ? garantias.TipoGarantia.ToString() : "",
garantias.DescTipoGarantia,
garantias.DetalleGarantia,
garantias.UsuarioCreador,
garantias.FechaCreacion != null ? garantias.FechaCreacion.ToString() : " ",
garantias.UsuarioModificado,
garantias.FechaModificacion != null ? garantias.FechaModificacion.ToString() : " ");
BitacoraGarantiasEliminar.Usuario = !string.IsNullOrEmpty(model.UsuarioModificado) ? model.UsuarioModificado : model.UsuarioCreador;
BitacoraGarantiasEliminar.Fecha = DateTime.Now;
Contexto.BitacoraGarantias.Add(BitacoraGarantiasEliminar);
}
#endregion
Contexto.OfertaOperacionesGarantias.RemoveRange(listagarantias);
Contexto.SaveChanges();
foreach (OfertaOperacionesGarantias Operaciongarantia in model.OfertaOperacionesGarantias)
{
Operaciongarantia.OfertaOperaciones = null;
if (Operaciongarantia.EsPropuesta != null && Operaciongarantia.TipoGarantia != null && !string.IsNullOrEmpty(Operaciongarantia.DescTipoGarantia) && !string.IsNullOrEmpty(Operaciongarantia.DetalleGarantia))
{
if (Next_idGarantia == null || Next_idGarantia == 0)
Next_idGarantia = Contexto.OfertaOperacionesGarantias.Where(x => x.IdSolicitud == model.IdSolicitud && x.Operacion == model.Operacion).Max(t => (int?)t.IdGarantia);
Next_idGarantia = (Next_idGarantia == null) ? 1 : Next_idGarantia.Value + 1;
Operaciongarantia.IdGarantia = Next_idGarantia.Value;
Operaciongarantia.FechaCreacion = DateTime.Now;
Contexto.OfertaOperacionesGarantias.Add(Operaciongarantia);
BitacoraGarantias BitacoraGarantiasGuardar = new BitacoraGarantias();
BitacoraGarantiasGuardar.IdSolicitud = model.IdSolicitud;
BitacoraGarantiasGuardar.Detalle = string.Format("Contexto.OfertaOperacionesGarantias.Add Operacion: {0} IdGarantia: {1} EsPropuesta: {2} TipoGarantia: {3} DescTipoGarantia: {4} DetalleGarantia: {5} UsuarioCreador: {6} FechaCreacion: {7} UsuarioModificado: {8} FechaModificacion: {9}",
Operaciongarantia.Operacion.ToString(),
Operaciongarantia.IdGarantia.ToString(),
Operaciongarantia.EsPropuesta != null ? Operaciongarantia.EsPropuesta.ToString() : " ",
Operaciongarantia.TipoGarantia != null ? Operaciongarantia.TipoGarantia.ToString() : "",
Operaciongarantia.DescTipoGarantia,
Operaciongarantia.DetalleGarantia,
Operaciongarantia.UsuarioCreador,
Operaciongarantia.FechaCreacion != null ? Operaciongarantia.FechaCreacion.ToString() : " ",
Operaciongarantia.UsuarioModificado,
Operaciongarantia.FechaModificacion != null ? Operaciongarantia.FechaModificacion.ToString() : " ");
BitacoraGarantiasGuardar.Usuario = !string.IsNullOrEmpty(model.UsuarioModificado) ? model.UsuarioModificado : model.UsuarioCreador;
BitacoraGarantiasGuardar.Fecha = DateTime.Now;
Contexto.BitacoraGarantias.Add(BitacoraGarantiasGuardar);
}
else if (Operaciongarantia.EsPropuesta == null && Operaciongarantia.TipoGarantia != null && !string.IsNullOrEmpty(Operaciongarantia.DescTipoGarantia) && !string.IsNullOrEmpty(Operaciongarantia.DetalleGarantia))
{
if (model.Step == "AP_Enviar_Aprobacion" || model.Step == "AN_Rev_Doc_Clasificar" || model.Step == "AP_Corre_Caratula_Adjuntar_Doc" || model.Step == "AN_Preanalisis" || model.Step == "AP_Vali_CondicionesConCliente")
{
new HistoricoCaratulaDAL().InsertarActualizar(new HistoricoCaratula()
{
Descripcion = string.Format("Operaciones Facilidades Garantias Registro Eliminado Operacion: {0} Comisi<73>n: {1}: ", Operaciongarantia.Operacion, Operaciongarantia.DetalleGarantia),
Etapa = model.Step,
Fecha = DateTime.Now,
IdSolicitud = model.IdSolicitud,
NombreTabla = "[Corporativo].[OfertaOperacionesGarantias]",
Usuario = Operaciongarantia.UsuarioModificado,
Name = Operaciongarantia.UsuarioCreador
});
}
}
}
}
#endregion
Contexto.SaveChanges();
dbContextTransaction.Commit();
}
catch (Exception ex)
{
dbContextTransaction.Rollback();
logs.Error(ex);
}
}
}
#endregion
}
catch (DbEntityValidationException ex1)
{
logs.Error(ex1);
throw ex1;
}
catch (Exception ex)
{
logs.Error(ex);
throw ex;
}
finally
{
model.Moneda = ItemMoneda;
model.FormasPagos = ItemFormasPagos;
}
return model;
}
public BaseJson InsertaActualizarOfertaSolicitud(int IdSolicitud, int IdCategoria)
{
BaseJson respuesta = new BaseJson();
Oferta oferta = new Oferta();
try
{
using (CreditoContex db = new CreditoContex())
{
oferta = db.Oferta.Where(x => x.IdSolicitud == IdSolicitud).FirstOrDefault();
if (oferta == null)
{
oferta = new Oferta
{
IdSolicitud = IdSolicitud,
IdTipoCategoria = IdCategoria
};
db.Oferta.Add(oferta);
db.SaveChanges();
respuesta.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString();
}
}
}
catch (Exception ex)
{
logs.Error(ex);
respuesta.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString();
throw ex;
}
return respuesta;
}
/// <summary>
///
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public BaseJson EliminarFacilidadesOfertaSolicitud(Oferta model)
{
OfertaFacilidades FacilidadActual = new OfertaFacilidades();
OfertaOperaciones OperaciondActual = new OfertaOperaciones();
BaseJson ValorRetorno = new BaseJson();
try
{
ValorRetorno.CodigoRespuesta = TipoCodigoRespuesta.EXITOSO.ToString();
using (CreditoContex Contexto = new CreditoContex())
{
foreach (OfertaFacilidades Facilidad in model.OfertaFacilidades)
{
OfertaFacilidades DescripcionFacilidad = new OfertaFacilidadesDAL().ObtenerFacilidad(Facilidad);
FacilidadActual = Contexto.OfertaFacilidades
.Where(q => q.IdSolicitud == Facilidad.IdSolicitud && q.IdTipoFacilidad == Facilidad.IdTipoFacilidad && q.Secuencia == Facilidad.Secuencia)
.Include(w => w.OfertaFacilidadesComisiones)
.Include(w => w.OfertaFacilidadesGarantias)
.Include(w => w.VerificacionFacturasContratosOrdenes)
.Include(w => w.VerificacionFacturasContratosOrdenes.Contacto)
.Include(w => w.VerificacionFacturasContratosOrdenes.FacturasContratosOrdenes)
.Include(w => w.FormalizacionTipoFacilidades)
.FirstOrDefault();
if (FacilidadActual != null)
{
Contexto.OfertaFacilidades.Remove(FacilidadActual);
if (model.Step == "AP_Enviar_Aprobacion" || model.Step == "AN_Rev_Doc_Clasificar" || model.Step == "AP_Corre_Caratula_Adjuntar_Doc" || model.Step == "AN_Preanalisis" || model.Step == "AP_Vali_CondicionesConCliente")
{
new HistoricoCaratulaDAL().InsertarActualizar(new HistoricoCaratula()
{
Descripcion = string.Format("Oferta Facilidades Registro Eliminado TipoFacilidad: {0}", DescripcionFacilidad.TipoFacilidad.Descripcion),
Etapa = model.Step,
Fecha = DateTime.Now,
IdSolicitud = model.IdSolicitud,
NombreTabla = "[Corporativo].[OfertaFacilidades]",
Usuario = model.UsuarioModificado,
Name = model.UsuarioCreador
});
}
}
}
foreach (OfertaOperaciones Operacion in model.OfertaOperaciones)
{
OperaciondActual = Contexto.OfertaOperaciones
.Where(e => e.IdSolicitud == Operacion.IdSolicitud && e.Operacion == Operacion.Operacion)
.Include(w => w.OfertaOperacionesComisiones)
.Include(w => w.OfertaOperacionesGarantias)
.FirstOrDefault();
if (OperaciondActual != null)
{
Contexto.OfertaOperaciones.Remove(OperaciondActual);
if (model.Step == "AP_Enviar_Aprobacion" || model.Step == "AN_Rev_Doc_Clasificar" || model.Step == "AP_Corre_Caratula_Adjuntar_Doc" || model.Step == "AN_Preanalisis" || model.Step == "AP_Vali_CondicionesConCliente")
{
new HistoricoCaratulaDAL().InsertarActualizar(new HistoricoCaratula()
{
Descripcion = string.Format("Registro Eliminado Numero de operaci<63>n : {0}", Operacion.Operacion),
Etapa = model.Step,
Fecha = DateTime.Now,
IdSolicitud = model.IdSolicitud,
NombreTabla = "[Corporativo].[OfertaOperaciones]",
Usuario = model.UsuarioModificado,
Name = model.UsuarioCreador
});
}
}
}
Contexto.SaveChanges();
}
}
catch (DbEntityValidationException ex1)
{
logs.Error(ex1);
ValorRetorno.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString();
}
catch (Exception ex)
{
logs.Error(ex);
ValorRetorno.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString();
}
finally
{
FacilidadActual = null;
OperaciondActual = null;
}
return ValorRetorno;
}
/// <summary>
///
/// </summary>
/// <param name="IdSolicitud"></param>
/// <returns></returns>
private TipoSeleccion EvaluarTipoOferta(int IdSolicitud)
{
TipoSeleccion TipoOferta = null;
try
{
using (CreditoContex Contexto = new CreditoContex())
{
#region Evaluacion si hay m<EFBFBD>s de 2 Criterios de Seleccion de Tipo FMO
var ListadoCantidad = (from LineaCriterio in Contexto.HojaSeleccion
where LineaCriterio.IdSolicitud == IdSolicitud
group LineaCriterio by LineaCriterio.IdTipoSeleccion into grupo
select new
{
IdTipoSeleccion = grupo.Key,
Cantidad = grupo.Count()
});
if ((ListadoCantidad != null) && (ListadoCantidad.Count() > 0) && (ListadoCantidad.Where(x => x.IdTipoSeleccion == EnumTipoSeleccion.FMO).Any()) && (ListadoCantidad.Where(x => x.IdTipoSeleccion == EnumTipoSeleccion.FMO).Select(x => x.Cantidad).FirstOrDefault() > 2))
{
TipoOferta = Contexto.TipoSeleccion.Where(x => x.IdTipoSeleccion == EnumTipoSeleccion.FMO).FirstOrDefault();
}
#endregion
#region Evaluacion si el criterio de CIC es igual a 2 o 3
List<HojaSeleccion> ListaHojaSeleccion = new HojaSeleccionDAL().ObtenerValorCriteriosSolicitud(new HojaSeleccion() { IdSolicitud = IdSolicitud });
HojaSeleccion modelCriterioCIC = ListaHojaSeleccion.Where(x => x.IdCriterioSeleccion == EnumCriterioSeleccion.Nivel_CIC_Deudor).FirstOrDefault();
int nNivelCICDeudor = 0;
if (!string.IsNullOrEmpty(modelCriterioCIC.ValorCriterio))
int.TryParse(modelCriterioCIC.ValorCriterio, out nNivelCICDeudor);
if (nNivelCICDeudor.In(2, 3))
{
TipoOferta = Contexto.TipoSeleccion.Where(x => x.IdTipoSeleccion == EnumTipoSeleccion.FMO).FirstOrDefault();
}
#endregion
if (TipoOferta == null)
{
var Listado = (from LineaCriterio in Contexto.HojaSeleccion
where LineaCriterio.IdSolicitud == IdSolicitud
group LineaCriterio by LineaCriterio.IdTipoSeleccion into grupo
select new
{
IdTipoSeleccion = grupo.Key,
Cantidad = grupo.Sum(e => e.Peso)
});
if (Listado != null)
{
List<int> ll = (from j in Listado
where j.Cantidad == Listado.Max(r => r.Cantidad)
select new { j.IdTipoSeleccion }).Select(p => p.IdTipoSeleccion.Value).ToList();
TipoOferta = (from a in Contexto.TipoSeleccion
where ll.Contains(a.IdTipoSeleccion)
select a
).OrderByDescending(q => q.Orden).FirstOrDefault();
}
else
TipoOferta = null;
}
}
}
catch (Exception ex)
{
logs.Error(ex);
}
finally
{
}
return TipoOferta;
}
public BaseJson CopiarOfertaCaratulaCreditoParaDesembolso(Oferta model)
{
DesembolsoDatosGenerales Desembolso = new DesembolsoDatosGenerales();
CaratulaCredito CaratulaActual = new CaratulaCredito();
CaratulaCredito NuevaCaratula = new CaratulaCredito();
Oferta OfertaActual = new Oferta();
Oferta NuevaOferta = new Oferta();
OfertaFacilidades FacilidadActual = new OfertaFacilidades();
OfertaFacilidades NuevaFacilidad = new OfertaFacilidades();
BaseJson ValorRetorno = new BaseJson();
try
{
ValorRetorno.CodigoRespuesta = TipoCodigoRespuesta.EXITOSO.ToString();
using (CreditoContex Conn = new CreditoContex())
{
Desembolso = Conn.DesembolsoDatosGenerales.Where(q => q.IdSolicitud == model.IdSolicitud).FirstOrDefault();
if (Desembolso != null)
{
CaratulaActual = Conn.CaratulaCredito
.Include(e => e.CaratulaCreditoCondicionesEspeciales)
.Include(e => e.CaratulaCreditoExcepcionesPolitica)
.Where(e => e.CodigoCaratula == Desembolso.NroCaratulaSublimite && e.Process == "Credito").FirstOrDefault();
if (CaratulaActual != null)
{
////
OfertaActual = (from ofer in Conn.Oferta
join fac in Conn.OfertaFacilidades on ofer.IdSolicitud equals fac.IdSolicitud
where ofer.IdSolicitud == CaratulaActual.IdSolicitud && fac.IdTipoFacilidad == Desembolso.IdTipoFacilidad && fac.Eslinea == true
select ofer).FirstOrDefault();
if (OfertaActual != null)
{
Conn.Entry(OfertaActual).State = System.Data.Entity.EntityState.Detached;
NuevaOferta = OfertaActual.UpdateProperties(w => { w.IdSolicitud = model.IdSolicitud;
w.Process = model.Process;
w.UsuarioCreador = model.UsuarioCreador;
w.Step = model.Step;
w.Incident = model.Incident;
w.UsuarioCreador = model.UsuarioCreador;
w.Step = model.Step;
w.Incident = model.Incident;
w.FechaVencimientoActualLinea = w.FechaVencimientoLinea;
w.MontoActualEspecifico = w.MontoPropuestoEspecifico;
w.MontoActualLinea = w.MontoPropuestoLinea;
w.PlazoActualLinea = w.PlazoLinea;
return w;
});
FacilidadActual = Conn.OfertaFacilidades
.Include(e => e.OfertaFacilidadesComisiones)
.Include(e => e.OfertaFacilidadesGarantias)
.Include(e => e.FormasPagos)
.Where(fac => fac.IdSolicitud == CaratulaActual.IdSolicitud
&& fac.IdTipoFacilidad == Desembolso.IdTipoFacilidad
&& fac.Eslinea == true).FirstOrDefault();
NuevaFacilidad.IdSolicitud = model.IdSolicitud;
NuevaFacilidad.OfertaFacilidadesComisiones = new HashSet<OfertaFacilidadesComisiones>();
int maxIdComision = FacilidadActual.OfertaFacilidadesComisiones.Where(x => x.EsPropuesta == true).Max(x => x.IdComision);
foreach (OfertaFacilidadesComisiones Comision in FacilidadActual.OfertaFacilidadesComisiones.Where(x=> x.EsPropuesta==true).ToList())
{
maxIdComision++;
Conn.Entry(Comision).State = System.Data.Entity.EntityState.Detached;
//Actual
//NuevaFacilidad.OfertaFacilidadesComisiones.Add(Comision.UpdateProperties(w => { w.IdSolicitud = model.IdSolicitud; w.Process = model.Process; w.UsuarioCreador = model.UsuarioCreador; w.Step = model.Step; w.Incident = model.Incident; w.EsPropuesta = false; return w; }));
NuevaFacilidad.OfertaFacilidadesComisiones.Add(new OfertaFacilidadesComisiones()
{
DetalleComision = Comision.DetalleComision,
EsPropuesta = false,
FechaCreacion = Comision.FechaCreacion,
Secuencia = Comision.Secuencia,
IdComision = Comision.IdComision,
FechaModificacion = null,
IdTipoFacilidad = Comision.IdTipoFacilidad,
IdSolicitud = model.IdSolicitud,
Incident = model.Incident,
Process = model.Process,
Step = model.Step,
UsuarioCreador = model.UsuarioCreador
});
//Propuesto
//NuevaFacilidad.OfertaFacilidadesComisiones.Add(Comision.UpdateProperties(w => { w.IdSolicitud = model.IdSolicitud; w.Process = model.Process; w.UsuarioCreador = model.UsuarioCreador; w.Step = model.Step; w.Incident = model.Incident; w.IdComision = maxIdComision; return w; }));
NuevaFacilidad.OfertaFacilidadesComisiones.Add(new OfertaFacilidadesComisiones()
{
DetalleComision = Comision.DetalleComision,
EsPropuesta = true,
FechaCreacion = Comision.FechaCreacion,
Secuencia = Comision.Secuencia,
IdComision = maxIdComision,
FechaModificacion = null,
IdTipoFacilidad = Comision.IdTipoFacilidad,
IdSolicitud = model.IdSolicitud,
Incident = model.Incident,
Process = model.Process,
Step = model.Step,
UsuarioCreador = model.UsuarioCreador
});
}
NuevaFacilidad.OfertaFacilidadesGarantias = new HashSet<OfertaFacilidadesGarantias>();
int maxIdGarantia = FacilidadActual.OfertaFacilidadesGarantias.Where(x => x.EsPropuesta == true).Max(x => x.IdGarantia);
foreach (OfertaFacilidadesGarantias garantia in FacilidadActual.OfertaFacilidadesGarantias.Where(x=> x.EsPropuesta==true).ToList())
{
maxIdGarantia++;
Conn.Entry(garantia).State = System.Data.Entity.EntityState.Detached;
//Actual
//NuevaFacilidad.OfertaFacilidadesGarantias.Add(garantia.UpdateProperties(w => { w.IdSolicitud = model.IdSolicitud; w.Process = model.Process; w.UsuarioCreador = model.UsuarioCreador; w.Step = model.Step; w.Incident = model.Incident; w.EsPropuesta = false; return w; }));
NuevaFacilidad.OfertaFacilidadesGarantias.Add(new OfertaFacilidadesGarantias()
{
DescTipoGarantia = garantia.DescTipoGarantia,
DetalleGarantia = garantia.DetalleGarantia,
EsPropuesta = false,
FechaCreacion = garantia.FechaCreacion,
Secuencia = garantia.Secuencia,
IdGarantia = garantia.IdGarantia,
FechaModificacion = null,
IdTipoFacilidad = garantia.IdTipoFacilidad,
IdSolicitud = model.IdSolicitud,
Incident = model.Incident,
Process = model.Process,
Step = model.Step,
UsuarioCreador = model.UsuarioCreador
});
//Propuesto
//NuevaFacilidad.OfertaFacilidadesGarantias.Add(garantia.UpdateProperties(w => { w.IdSolicitud = model.IdSolicitud; w.Process = model.Process; w.UsuarioCreador = model.UsuarioCreador; w.Step = model.Step; w.Incident = model.Incident; w.IdGarantia = maxIdGarantia; return w; }));
NuevaFacilidad.OfertaFacilidadesGarantias.Add(new OfertaFacilidadesGarantias()
{
DescTipoGarantia = garantia.DescTipoGarantia,
DetalleGarantia = garantia.DetalleGarantia,
EsPropuesta = true,
FechaCreacion = garantia.FechaCreacion,
Secuencia = garantia.Secuencia,
IdGarantia = maxIdGarantia,
FechaModificacion = null,
IdTipoFacilidad = garantia.IdTipoFacilidad,
IdSolicitud = model.IdSolicitud,
Incident = model.Incident,
Process = model.Process,
Step = model.Step,
UsuarioCreador = model.UsuarioCreador
});
}
Conn.Entry(FacilidadActual).State = System.Data.Entity.EntityState.Detached;
FacilidadActual.IdSolicitud = model.IdSolicitud;
FacilidadActual.MontoActual = FacilidadActual.MontoPropuesto;
FacilidadActual.FechaVencimientoActual = FacilidadActual.FechaVencimiento;
FacilidadActual.SubLimiteActual = FacilidadActual.SubLimitePropuesto;
FacilidadActual.PlazoMaximoActual = FacilidadActual.PlazoMaximoPropuesto;
FacilidadActual.FormaPagoActual = FacilidadActual.FormasPagos != null ? FacilidadActual.FormasPagos.Descripcion : string.Empty;
FacilidadActual.PlazoMaximoActual = FacilidadActual.PlazoMaximoPropuesto;
//Tasas de Interes
FacilidadActual.TasaActualMonedaLocal = FacilidadActual.TasaPropuestaMonedaLocal;
FacilidadActual.TasaActualDolares = FacilidadActual.TasaPropuestaDolares;
FacilidadActual.TBPActualMonedaLocal = FacilidadActual.TBPPropuestaMonedaLocal;
FacilidadActual.PRActualDolares = FacilidadActual.TRPropuestaDolares;
FacilidadActual.OfertaFacilidadesComisiones = NuevaFacilidad.OfertaFacilidadesComisiones;
FacilidadActual.OfertaFacilidadesGarantias = NuevaFacilidad.OfertaFacilidadesGarantias;
FacilidadActual.FormasPagos = NuevaFacilidad.FormasPagos;
NuevaOferta.OfertaFacilidades = new HashSet<OfertaFacilidades>();
NuevaOferta.OfertaFacilidades.Add(FacilidadActual);
////
NuevaCaratula.CaratulaCreditoCondicionesEspeciales = new HashSet<CaratulaCreditoCondicionesEspeciales>();
foreach (CaratulaCreditoCondicionesEspeciales Condicion in CaratulaActual.CaratulaCreditoCondicionesEspeciales.ToList())
{
Conn.Entry(Condicion).State = System.Data.Entity.EntityState.Detached;
NuevaCaratula.CaratulaCreditoCondicionesEspeciales.Add(Condicion.UpdateProperties(w => { w.IdSolicitud = model.IdSolicitud; w.Process = model.Process; w.UsuarioCreador = model.UsuarioCreador; w.Step = model.Step; w.Incident = model.Incident; return w; }));
}
NuevaCaratula.CaratulaCreditoExcepcionesPolitica = new HashSet<CaratulaCreditoExcepcionesPolitica>();
foreach (CaratulaCreditoExcepcionesPolitica Politica in CaratulaActual.CaratulaCreditoExcepcionesPolitica.ToList())
{
Conn.Entry(Politica).State = System.Data.Entity.EntityState.Detached;
NuevaCaratula.CaratulaCreditoExcepcionesPolitica.Add(Politica.UpdateProperties(w => { w.IdSolicitud = model.IdSolicitud; w.Process = model.Process; w.UsuarioCreador = model.UsuarioCreador; w.Step = model.Step; w.Incident = model.Incident; return w; }));
}
Conn.Entry(CaratulaActual).State = System.Data.Entity.EntityState.Detached;
CaratulaActual.CaratulaCreditoCondicionesEspeciales = NuevaCaratula.CaratulaCreditoCondicionesEspeciales;
CaratulaActual.CaratulaCreditoExcepcionesPolitica = NuevaCaratula.CaratulaCreditoExcepcionesPolitica;
NuevaCaratula = CaratulaActual
.UpdateProperties(w =>
{
w.IdSolicitud = model.IdSolicitud;
w.CodigoCaratula = null;
w.CodigoComite = null;
w.FechaAprobacion = null;
w.IdEstadoCaratula = null;
w.Process = model.Process;
w.UsuarioCreador = model.UsuarioCreador;
w.Step = model.Step;
w.Incident = model.Incident;
return w;
});
Conn.CaratulaCredito.Add(NuevaCaratula);
Conn.Oferta.Add(NuevaOferta);
Conn.SaveChanges();
}
else
{
ValorRetorno.CodigoRespuesta = TipoCodigoRespuesta.ADVERTENCIA.ToString();
ValorRetorno.DescripcionRespuesta = "No existen datos de oferta para el c<>digo de car<61>tula de la solicitud de Desembolso.";
}
}
else
{
ValorRetorno.CodigoRespuesta = TipoCodigoRespuesta.ADVERTENCIA.ToString();
ValorRetorno.DescripcionRespuesta = "No existen datos de ca<63>rtula para el c<>digo de car<61>tula de la solicitud de Desembolso.";
}
}
else
{
ValorRetorno.CodigoRespuesta = TipoCodigoRespuesta.ADVERTENCIA.ToString();
ValorRetorno.DescripcionRespuesta = "No existen datos para la solicitud de Desembolso.";
}
}
}
catch (DbUnexpectedValidationException ex2)
{
logs.Error(ex2);
ValorRetorno.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString();
}
catch (DbEntityValidationException ex1)
{
logs.Error(ex1);
ValorRetorno.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString();
}
catch (Exception ex)
{
logs.Error(ex);
ValorRetorno.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString();
}
finally
{
Desembolso = null;
NuevaCaratula = null;
CaratulaActual = null;
OfertaActual = null;
NuevaOferta = null;
FacilidadActual = null;
NuevaFacilidad = null;
}
return ValorRetorno;
}
public int? ObtenerSolicitudUltimaCaratulaFormalizada(int IdSolicitud, bool FiltraConLinea, int IdTipoCaratula, int? IdTipoTramite = null)
{
int? resp = null;
try
{
using (CreditoContex Conn = new CreditoContex())
{
#region Obtiene el cliente de la solicitud
Cliente ClientePrincipal = Conn.Solicitante
.Where(x => x.IdSolicitud == IdSolicitud && x.EsPrincipal == true)
.Include(x => x.Cliente)
.Select(x => x.Cliente)
.FirstOrDefault();
#endregion
#region Obtiene la lista de solicitudes del cliente con car<EFBFBD>tula permanente
List<int> ListaNumeroSolicitud = Conn.Solicitante
.Include(x => x.Cliente)
.Include(x => x.Solicitud)
.Include(x => x.Solicitud.CaratulaCredito)
.Where(x => x.Cliente.NumeroIdentificacion == ClientePrincipal.NumeroIdentificacion
&& x.EsPrincipal == true
&& x.Solicitud.CaratulaCredito.IdTipoCaratula == IdTipoCaratula
&& (IdTipoTramite == null || x.Cliente.IdTipoTramite == IdTipoTramite.Value))
.Select(x => x.IdSolicitud)
.ToList();
#endregion
#region Obtiene el # de Solicitud donde la Linea haya sido Formalizada
if (ListaNumeroSolicitud != null && ListaNumeroSolicitud.Count > 0)
resp = Conn.OfertaFacilidades
.Where(x => ListaNumeroSolicitud.Contains(x.IdSolicitud) && x.EstaFormalizada == true && x.FechaFormalizacion != null && (FiltraConLinea == false || x.Eslinea == true))
.OrderByDescending(x => x.FechaFormalizacion)
.Select(x => x.IdSolicitud)
.FirstOrDefault();
//if (ListaNumeroSolicitud != null && ListaNumeroSolicitud.Count > 0)
// resp = Conn.OfertaFacilidades
// .Where(x => ListaNumeroSolicitud.Contains(x.IdSolicitud) && x.EstaFormalizada == true && (FiltraConLinea == false || x.Eslinea == true))
// .OrderByDescending(x => x.IdSolicitud)
// .Select(x => x.IdSolicitud)
// .FirstOrDefault();
#endregion
}
}
catch (DbEntityValidationException ex1)
{
resp = null;
logs.Error(ex1);
}
catch (Exception ex)
{
resp = null;
logs.Error(ex);
}
finally
{
}
return resp;
}
public BaseJson InsertarActualizarOfertaFacilidadesGarantias(OfertaFacilidadesGarantias model)
{
OfertaFacilidadesGarantias GarantiaActual = new OfertaFacilidadesGarantias();
BaseJson resp = new BaseJson() { CodigoRespuesta = TipoCodigoRespuesta.EXITOSO.ToString() };
try
{
model.OfertaFacilidades = null;
#region OfertaFacilidadesGarantias
using (CreditoContex Contexto = new CreditoContex())
{
#region Garantias por facilidad
model.OfertaFacilidades = null;
GarantiaActual = Contexto.OfertaFacilidadesGarantias.Where(e => e.IdSolicitud == model.IdSolicitud && e.IdTipoFacilidad == model.IdTipoFacilidad && e.Secuencia == model.Secuencia && e.IdGarantia == model.IdGarantia).FirstOrDefault();
if (GarantiaActual != null)
{
model.Secuencia = model.Secuencia;
model.FechaModificacion = DateTime.Now;
model.UsuarioModificado = model.UsuarioCreador;
model.FechaCreacion = GarantiaActual.FechaCreacion;
model.UsuarioCreador = GarantiaActual.UsuarioCreador;
Contexto.Entry(GarantiaActual).State = System.Data.Entity.EntityState.Detached;
Contexto.OfertaFacilidadesGarantias.Attach(model);
Contexto.Entry(model).State = System.Data.Entity.EntityState.Modified;
}
else
{
model.FechaCreacion = DateTime.Now;
Contexto.OfertaFacilidadesGarantias.Add(model);
}
#endregion
Contexto.SaveChanges();
}
#endregion
}
catch (DbEntityValidationException ex1)
{
logs.Error(ex1);
resp.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString();
resp.DescripcionRespuesta = ex1.Message;
}
catch (Exception ex)
{
logs.Error(ex);
resp.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString();
resp.DescripcionRespuesta = ex.Message;
}
finally
{
}
return resp;
}
}
}