Exferia/Exferia_KairosPro/Exferia_KairosPRO/2_Datos/USR_Trazabilidad_Datos.cs

137 lines
7.4 KiB
C#

using Exferia_Aplicacion.General;
using Exferia_KairosPRO_EF;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using static Exferia_Aplicacion.General.Enumerados;
namespace Exferia_KairosPRO._2_Datos
{
public class USR_Trazabilidad_Datos
{
public static void Grabar_Trazabilidad(Type _typ_tipoObjeto, object _obj_modeloViejo, object _obj_modeloNuevo, Enumerados.G_ENUM_TIPOACCION _enum_tipo, KairosProEntities _context)
{
try
{
DateTime dt_fechaModificacion = DateTime.Now;
//Obtenemos el tipo de objeto
Type typ_tipoObjeto = _typ_tipoObjeto;
IList<PropertyInfo> lst_prop_obj_modeloNuevo = new List<PropertyInfo>(typ_tipoObjeto.GetProperties().Where(n => n.GetMethod.IsVirtual == false));
IList<PropertyInfo> lst_prop_obj_modeloViejo = null;
if (_enum_tipo != G_ENUM_TIPOACCION.INT_ELIMINAR)
{
//Listamos las propiedades de los modelos viejo y nuevo filtrando las propiedades relacionales de otras tablas(...)
if (_enum_tipo == G_ENUM_TIPOACCION.INT_MODIFICAR)
{
lst_prop_obj_modeloViejo = new List<PropertyInfo>(typ_tipoObjeto.GetProperties().Where(n => n.GetMethod.IsVirtual == false));
}
//Recorremos por propiedades
for (int i = 0; i < lst_prop_obj_modeloNuevo.Count(); i++)
{
string str_valorNuevo = lst_prop_obj_modeloNuevo[i].GetValue(_obj_modeloNuevo, null) != null ? lst_prop_obj_modeloNuevo[i].GetValue(_obj_modeloNuevo, null).ToString() : "";
string str_valorViejo = "";
//Guardamos en string los valores viejo y nuevo
if (_enum_tipo == G_ENUM_TIPOACCION.INT_MODIFICAR)
{
str_valorViejo = lst_prop_obj_modeloViejo[i].GetValue(_obj_modeloViejo, null) != null ? lst_prop_obj_modeloViejo[i].GetValue(_obj_modeloViejo, null).ToString() : "";
}
//(Si no es modificacion y no está vacio) o (Es modificacion y los campos son distintos) lo grabamos
if ((_enum_tipo != G_ENUM_TIPOACCION.INT_MODIFICAR && !string.IsNullOrEmpty(str_valorNuevo)) || !str_valorViejo.Equals(str_valorNuevo))
{
//Guardamos un registro de trazabilidad
USR_Trazabilidad mdl_USR_Trazabilidad = new USR_Trazabilidad();
mdl_USR_Trazabilidad.idUsuario = Variables.G_MDL_USUARIOVALIDADO_MODELO.id;
mdl_USR_Trazabilidad.codigoCliente = Variables.G_LNG_IDCLIENTE_LICENCIAVALIDADO;
mdl_USR_Trazabilidad.campo = lst_prop_obj_modeloNuevo[i].Name;
mdl_USR_Trazabilidad.tabla = typ_tipoObjeto.Name;
mdl_USR_Trazabilidad.tipoAccion = (int)_enum_tipo;
//Si el idModificado es long lo parseamos, si no lo guardamos en un campo string.
long lng_idModificado;
if (long.TryParse(lst_prop_obj_modeloNuevo[0].GetValue(_obj_modeloNuevo).ToString(), out lng_idModificado))
{
mdl_USR_Trazabilidad.clave_Modificado = lng_idModificado; //el primer field de los modelos siempre es id
}
else
{
mdl_USR_Trazabilidad.clave_Modificado_Texto = lst_prop_obj_modeloNuevo[0].GetValue(_obj_modeloNuevo).ToString();
}
mdl_USR_Trazabilidad.fechaHora = dt_fechaModificacion;
if (_enum_tipo == G_ENUM_TIPOACCION.INT_MODIFICAR)
{
mdl_USR_Trazabilidad.textoViejo = lst_prop_obj_modeloViejo[i].GetValue(_obj_modeloViejo, null) != null ? lst_prop_obj_modeloViejo[i].GetValue(_obj_modeloViejo, null).ToString() : "";
}
else
{
mdl_USR_Trazabilidad.textoViejo = "";
}
mdl_USR_Trazabilidad.textoNuevo = lst_prop_obj_modeloNuevo[i].GetValue(_obj_modeloNuevo, null) != null ? lst_prop_obj_modeloNuevo[i].GetValue(_obj_modeloNuevo, null).ToString() : null;
Grabar_Trazabilidad_Final(mdl_USR_Trazabilidad, typ_tipoObjeto.Name, _context);
}
}
}
else // Si es eliminación solo se crea un registro indicando la tabla y el id eliminado
{
//Guardamos un registro de trazabilidad
USR_Trazabilidad mdl_USR_Trazabilidad = new USR_Trazabilidad();
mdl_USR_Trazabilidad.idUsuario = Variables.G_MDL_USUARIOVALIDADO_MODELO.id;
mdl_USR_Trazabilidad.codigoCliente = Variables.G_LNG_IDCLIENTE_LICENCIAVALIDADO;
mdl_USR_Trazabilidad.campo = "";
mdl_USR_Trazabilidad.tabla = typ_tipoObjeto.Name;
mdl_USR_Trazabilidad.tipoAccion = (int)_enum_tipo;
//Si el idModificado es long lo parseamos, si no lo guardamos en un campo string.
long lng_idModificado;
if (long.TryParse(lst_prop_obj_modeloNuevo[0].GetValue(_obj_modeloNuevo).ToString(), out lng_idModificado))
{
mdl_USR_Trazabilidad.clave_Modificado = lng_idModificado; //el primer field de los modelos siempre es id
}
else
{
mdl_USR_Trazabilidad.clave_Modificado_Texto = lst_prop_obj_modeloNuevo[0].GetValue(_obj_modeloNuevo).ToString();
}
mdl_USR_Trazabilidad.fechaHora = dt_fechaModificacion;
mdl_USR_Trazabilidad.textoViejo = "";
mdl_USR_Trazabilidad.textoNuevo = "";
Grabar_Trazabilidad_Final(mdl_USR_Trazabilidad, typ_tipoObjeto.Name, _context);
}
}
catch (Exception ex)
{
Control_Errores.Errores_Log("", ex, nameof(USR_Trazabilidad_Datos) + "/" + nameof(Grabar_Trazabilidad));
}
}
private static void Grabar_Trazabilidad_Final(USR_Trazabilidad _mdl_USR_Trazabilidad, string _str_ModeloNombre, KairosProEntities _context)
{
// Se comprueba que se haya cargado correctamente el modelo de trazabilidad.
if (!string.IsNullOrEmpty(_mdl_USR_Trazabilidad.tabla))
{
try
{
_context.USR_Trazabilidad.Add(_mdl_USR_Trazabilidad);
_context.SaveChanges();
}
catch (Exception ex)
{
Control_Errores.Errores_Log("", ex, nameof(USR_Trazabilidad_Datos) + "/" + nameof(Grabar_Trazabilidad_Final));
}
}
else
{
Control_Errores.Errores_Log("", null, nameof(USR_Trazabilidad_Datos) + "/" + nameof(Grabar_Trazabilidad_Final));
}
}
}
}