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

503 lines
19 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using Ultimus.Utilitarios;
using ULA.Cathay.CreditoModel.Credito;
using ULA.Cathay.CreditoModel.Entidades;
using System.Data.Entity;
using System.Data.Entity.Validation;
using ULA.Cathay.CreditoModel.DAL.History;
using ULA.Cathay.CreditoModel.History;
namespace ULA.Cathay.CreditoModel.DAL.Credito
{
public class DatosGeneralesFormalizacionDAL
{
UltimusLogs logs = new UltimusLogs("DatosGeneralesFormalizacionDAL");
/// <summary>
/// Obtiene la información de la tabla Global.DatosGeneralesFormalizacion para la solicitud específica.
/// </summary>
/// <param name="IdSolicitud">Número de la solicitud</param>
/// <returns></returns>
public DatosGeneralesFormalizacion Obtener(int? IdSolicitud, int Incidente)
{
DatosGeneralesFormalizacion model = null;
try
{
using (CreditoContex db = new CreditoContex())
{
model = db.DatosGeneralesFormalizacion
.Include(c => c.AreaResponsable)
.Include(c => c.Abogados)
.Include(c => c.CorredoraSeguros)
.Include(c => c.Sucursal)
.Include("FormalizacionTipoFacilidades.OfertaFacilidades.TipoFacilidad")
.Include("FormalizacionTipoFacilidades.OfertaFacilidades.OfertaFacilidadesGarantias")
.Include("FormalizacionTipoFacilidades.OfertaFacilidades.VerificacionFacturasContratosOrdenes")
.Include(c => c.FormaliacionInformacionAdicional.FormasPagos)
.Include(c => c.FormaliacionInformacionAdicional.FormaDesembolso)
.Include(c => c.FormaliacionInformacionAdicional.CertificadosMandato)
.Include(c => c.FormaDesembolso)
.Include(c => c.TipoHojaPendiente)
.Where(c => (!IdSolicitud.HasValue || c.IdSolicitud == IdSolicitud)
&& c.Incident == Incidente).FirstOrDefault();
}
}
catch (Exception ex)
{
logs.Error(ex);
throw ex;
}
return model;
}
public DatosGeneralesFormalizacion ObtenerDatosGenerales(int? IdSolicitud, int Incidente)
{
DatosGeneralesFormalizacion model = null;
try
{
using (CreditoContex db = new CreditoContex())
{
model = db.DatosGeneralesFormalizacion.Where(c => (!IdSolicitud.HasValue || c.IdSolicitud == IdSolicitud)
&& c.Incident == Incidente).FirstOrDefault();
}
}
catch (Exception ex)
{
logs.Error(ex);
throw ex;
}
return model;
}
/// <summary>
/// Registra(insertando o actualizando) en la tabla Global.DatosGeneralesFormalizacion la información enviada por parámetro.
/// </summary>
/// <param name="model">Objeto de la clase DatosGeneralesFormalizacion cargado con la informacion a ser registrada en la BD</param>
/// <returns>Objeto de la clase DatosGeneralesFormalizacionJSON actualizado con la informacion de los indices y data que se registró en la BD</returns>
public DatosGeneralesFormalizacion InsertarActualizar(DatosGeneralesFormalizacion model)
{
DatosGeneralesFormalizacion _modeloActual = null;
FormaliacionInformacionAdicional _modelFormaliacionInformacionAdicional = null;
try
{
using (CreditoContex Conn = new CreditoContex())
{
_modeloActual = Conn.DatosGeneralesFormalizacion.AsNoTracking().Where(q => q.IdSolicitud == model.IdSolicitud && q.Incident == model.Incident).FirstOrDefault();
#region AddDataToModel
switch (model.Step)
{
case EnumEtapas.FR_Ela_Hoja_Pendien:
case EnumEtapas.DE_Ela_Hoja_Pendientes:
var task = new history_taskDAL().Obtener(model.Incident);
if (task == null)
task = new List<history_task>();
if (task.Exists(x => x.type != "TaskCompleted" && (x.step_label == EnumEtapas.FR_Ela_Hoja_Pendien || x.step_label == EnumEtapas.DE_Ela_Hoja_Pendientes)) && model.ConsecutivoExcepcion == null)
model.ConsecutivoExcepcion = ObtenerConsecutivoExcepcion();
break;
case EnumEtapas.FR_Crear_Expediente:
if (model.Crear_Exp_FechaInicio == null)
model.Crear_Exp_FechaInicio = DateTime.Now;
break;
default:
break;
}
if ((model.IdProceso == 0))
model.IdProceso = this.ObtenerIdProceso(model.Procesos);
#endregion
#region Save
_modelFormaliacionInformacionAdicional = model.FormaliacionInformacionAdicional;
model.ClearVirtualProperties();
if (_modeloActual == null)
{
model.FechaCrearLineaSAP = DateTime.Now;
Conn.DatosGeneralesFormalizacion.Add(model);
}
else
{
Conn.DatosGeneralesFormalizacion.Attach(model);
switch (model.Step)
{
case EnumEtapas.FR_Recibir_Consolidar_Doc:
Conn.Entry(model).Property(x => x.RequiereHojaPendientes).IsModified = true;
Conn.Entry(model).Property(x => x.DocumentacionCompleta).IsModified = true;
Conn.Entry(model).Property(x => x.DetallePendiente).IsModified = true;
Conn.Entry(model).Property(x => x.SolicitaCambiCondiciones).IsModified = true;
Conn.Entry(model).Property(x => x.IdTipoHojaPendiente).IsModified = true;
break;
default:
Conn.Entry<DatosGeneralesFormalizacion>(model).State = System.Data.Entity.EntityState.Modified;
break;
}
}
Conn.SaveChanges();
#endregion
}
}
catch (DbEntityValidationException ex)
{
logs.Error(ex);
throw ex;
}
catch (Exception ex)
{
logs.Error(ex);
throw ex;
}
finally
{
_modeloActual = null;
model.FormaliacionInformacionAdicional = _modelFormaliacionInformacionAdicional;
}
return model;
}
private int? ObtenerConsecutivoExcepcion()
{
int? Next_id;
int idActual;
int nReturn = 0;
try
{
using (CreditoContex Conn = new CreditoContex())
{
Next_id = Conn.DatosGeneralesFormalizacion.Max(t => (int?)t.ConsecutivoExcepcion);
idActual = (Next_id == null) ? 0 : Convert.ToInt32(Next_id);
nReturn = (idActual + 1);
}
}
catch (DbEntityValidationException ex)
{
logs.Error(ex);
throw ex;
}
catch (Exception ex)
{
logs.Error(ex);
throw ex;
}
return nReturn;
}
private int ObtenerIdProceso(Procesos model)
{
int IdprocesoResult = 0;
ProcesosDAL ProcesosDAL = new ProcesosDAL();
try
{
IdprocesoResult = ProcesosDAL.ObtenerIdProceso(model);
}
catch (Exception ex)
{
logs.Error(ex);
throw ex;
}
return IdprocesoResult;
}
public FormalizacionTipoFacilidades InsertarActualizar_Facilidad(FormalizacionTipoFacilidades facilidad)
{
try
{
using (CreditoContex db = new CreditoContex())
{
facilidad.OfertaFacilidades = null;
facilidad.DatosGeneralesFormalizacion = null;
if ((facilidad.IdProceso == null || facilidad.IdProceso == 0))
facilidad.IdProceso = this.ObtenerIdProceso(facilidad.Procesos);
if (db.FormalizacionTipoFacilidades.Where(c => c.IdSolicitud == facilidad.IdSolicitud
&& c.Incident == facilidad.Incident && c.IdProceso == facilidad.IdProceso && c.IdTipoFacilidad == facilidad.IdTipoFacilidad
&& c.IdSecuenciaFacilidad == facilidad.IdSecuenciaFacilidad).Any())
{
db.Entry<FormalizacionTipoFacilidades>(facilidad).State = EntityState.Modified;
}
else
{
db.FormalizacionTipoFacilidades.Add(facilidad);
}
db.SaveChanges();
}
}
catch (DbEntityValidationException ex)
{
logs.Error(ex);
throw ex;
}
catch (Exception ex)
{
logs.Error(ex);
throw ex;
}
return facilidad;
}
public List<DatosGeneralesFormalizacion> Obtener_TramitesFormalizacion(int IdSolicitud)
{
List<DatosGeneralesFormalizacion> model = new List<DatosGeneralesFormalizacion>();
try
{
using (CreditoContex db = new CreditoContex())
{
model = db.DatosGeneralesFormalizacion
.Include(c => c.AreaResponsable)
.Include(c => c.Abogados)
.Include(c => c.CorredoraSeguros)
.Include(c => c.Sucursal)
.Include(c => c.FormalizacionTipoFacilidades)
.Include(c => c.FormalizacionCondicionesGenerales)
.Include(c => c.FormalizacionCondicionesVarias)
.Where(c => c.IdSolicitud == IdSolicitud).ToList();
}
}
catch (DbEntityValidationException ex)
{
logs.Error(ex);
throw ex;
}
catch (Exception ex)
{
logs.Error(ex);
throw ex;
}
return model;
}
public DatosGeneralesFormalizacion Obtener_CondicionesGenerales(DatosGeneralesFormalizacion model)
{
try
{
using (CreditoContex db = new CreditoContex())
{
model.FormalizacionCondicionesGenerales = db.FormalizacionCondicionesGenerales
.Where(c => c.IdSolicitud == model.IdSolicitud && model.Incident == c.Incident).ToList();
}
}
catch (DbEntityValidationException ex)
{
logs.Error(ex);
throw ex;
}
catch (Exception ex)
{
logs.Error(ex);
throw ex;
}
return model;
}
public DatosGeneralesFormalizacion Obtener_CondicionesVarias(DatosGeneralesFormalizacion model)
{
try
{
using (CreditoContex db = new CreditoContex())
{
model.FormalizacionCondicionesVarias = db.FormalizacionCondicionesVarias
.Where(c => c.IdSolicitud == model.IdSolicitud && model.Incident == c.Incident).ToList();
}
}
catch (DbEntityValidationException ex)
{
logs.Error(ex);
throw ex;
}
catch (Exception ex)
{
logs.Error(ex);
throw ex;
}
return model;
}
public DatosGeneralesFormalizacion InsertarRemueve_CondicionesGenerales(DatosGeneralesFormalizacion model)
{
try
{
using (CreditoContex db = new CreditoContex())
{
var lista_actual = db.FormalizacionCondicionesGenerales.AsNoTracking().Where(c => c.IdSolicitud == model.IdSolicitud &&
model.Incident == c.Incident).ToList();
//inserta
if (model != null && model.FormalizacionCondicionesGenerales != null && model.FormalizacionCondicionesGenerales.Count > 0)
{
foreach (var item in model.FormalizacionCondicionesGenerales)
{
if (lista_actual == null || !lista_actual.Any(c => c.IdCondicion == item.IdCondicion && c.IdSolicitud == model.IdSolicitud && model.Incident == c.Incident))
{
item.IdProceso = model.IdProceso;
item.Fecha = DateTime.Now;
db.FormalizacionCondicionesGenerales.Add(item);
}
db.SaveChanges();
}
}
//remueve
if (lista_actual != null && lista_actual.Count > 0)
{
foreach (var item in lista_actual)
{
if (model.FormalizacionCondicionesGenerales == null || model.FormalizacionCondicionesGenerales.Count == 0
|| !model.FormalizacionCondicionesGenerales.Any(c => c.IdCondicion == item.IdCondicion && c.IdSolicitud == model.IdSolicitud &&
model.Incident == c.Incident))
{
db.FormalizacionCondicionesGenerales.Attach(item);
db.FormalizacionCondicionesGenerales.Remove(item);
}
db.SaveChanges();
}
}
}
}
catch (DbEntityValidationException ex)
{
logs.Error(ex);
throw ex;
}
catch (Exception ex)
{
logs.Error(ex);
throw ex;
}
return model;
}
public DatosGeneralesFormalizacion InsertarRemueve_CondicionesVarias(DatosGeneralesFormalizacion model)
{
try
{
using (CreditoContex db = new CreditoContex())
{
var lista_actual = db.FormalizacionCondicionesVarias.AsNoTracking().Where(c => c.IdSolicitud == model.IdSolicitud &&
model.Incident == c.Incident).ToList();
//inserta
if (model != null && model.FormalizacionCondicionesVarias != null && model.FormalizacionCondicionesVarias.Count > 0)
{
foreach (var item in model.FormalizacionCondicionesVarias)
{
if (lista_actual == null || !lista_actual.Any(c => c.IdCondicion == item.IdCondicion && c.IdSolicitud == model.IdSolicitud && model.Incident == c.Incident))
{
item.IdProceso = model.IdProceso;
item.Fecha = DateTime.Now;
db.FormalizacionCondicionesVarias.Add(item);
}
db.SaveChanges();
}
}
//remueve
if (lista_actual != null && lista_actual.Count > 0)
{
foreach (var item in lista_actual)
{
if (model.FormalizacionCondicionesVarias == null || model.FormalizacionCondicionesVarias.Count == 0
|| !model.FormalizacionCondicionesVarias.Any(c => c.IdCondicion == item.IdCondicion && c.IdSolicitud == model.IdSolicitud &&
model.Incident == c.Incident))
{
db.FormalizacionCondicionesVarias.Attach(item);
db.FormalizacionCondicionesVarias.Remove(item);
}
db.SaveChanges();
}
}
}
}
catch (DbEntityValidationException ex)
{
logs.Error(ex);
throw ex;
}
catch (Exception ex)
{
logs.Error(ex);
throw ex;
}
return model;
}
public FormaliacionInformacionAdicional InsertarActualizar_InfoAdicional(FormaliacionInformacionAdicional model)
{
FormaliacionInformacionAdicional _modeloActual;
try
{
using (CreditoContex Conn = new CreditoContex())
{
_modeloActual = Conn.FormaliacionInformacionAdicional.AsNoTracking().Where(q => q.IdSolicitud == model.IdSolicitud && q.Incident == model.Incident).FirstOrDefault();
if (_modeloActual == null)
{
Conn.FormaliacionInformacionAdicional.Add(model);
}
else
{
Conn.FormaliacionInformacionAdicional.Attach(model);
Conn.Entry<FormaliacionInformacionAdicional>(model).State = System.Data.Entity.EntityState.Modified;
}
Conn.SaveChanges();
}
}
catch (DbEntityValidationException ex)
{
logs.Error(ex);
throw ex;
}
catch (Exception ex)
{
logs.Error(ex);
throw ex;
}
finally
{
_modeloActual = null;
}
return model;
}
}
}