RgpdFileExportManager.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Data;
6 using sage.ew.interficies;
7 using sage.ew.db;
8 using sage.ew.global;
9 using System.IO;
10 using System.Windows.Forms;
11 using sage.ew.functions.Clases;
12 using Sage.ES.S50.Addons;
13 
14 namespace sage.addons.rgpd
15 {
16  internal static class RgpdFileExportManager
17  {
21  internal static IRgpdFileExportOperations _GeneradorFicherosExportacion
22  {
23  get
24  {
25  if(_oGeneradorFicherosExportacion == null)
26  _oGeneradorFicherosExportacion = new RgpdFileExportToCSV();
27  return _oGeneradorFicherosExportacion;
28  }
29  set { _oGeneradorFicherosExportacion = value; }
30  }
31  private static IRgpdFileExportOperations _oGeneradorFicherosExportacion = null;
32 
36  public static string _RutaFicheroGenerado
37  {
38  get { return _cRutaFicheroGenerado; }
39  private set { _cRutaFicheroGenerado = value; }
40  }
41  private static string _cRutaFicheroGenerado = string.Empty;
42 
47  public static bool _Exportar(IRgpdInstanciaEntidad toOrigen, bool tlSolicitarRuta = true)
48  {
49  bool llResultadoExportacion = false;
50  _cRutaFicheroGenerado = "";
51 
52  DataTable ldtDatos = obtenerDatosExportacion(toOrigen);
53 
54  if (_GeneradorFicherosExportacion != null && _GeneradorFicherosExportacion._Exportar(ldtDatos, tlSolicitarRuta))
55  {
56  llResultadoExportacion = true;
57  _cRutaFicheroGenerado = _GeneradorFicherosExportacion._RutaFicheroGenerado;
58  }
59 
60  return llResultadoExportacion;
61  }
62 
67  private static DataTable obtenerDatosExportacion(IRgpdInstanciaEntidad toOrigen)
68  {
69  //string lcSql = "SELECT * FROM ";
70  DataTable ldtResultados = new DataTable();
71 
72  //Obtener los campos de entidad_d asociados al origen
73  var camposSensibles = obtenerCamposSensiblesDeLaEntidad(toOrigen._CodigoEntidad);
74 
75  //Por cada campo recuperado realizar un query filtrado por instancia
76  if (camposSensibles.Any())
77  {
78  StringBuilder sbSql = new StringBuilder();
79  //Bug 131627 => Se modifica el query para que use un UNION ALL en vez de UNION para no suprimir resultados
80  camposSensibles.ToList().ForEach(loCampo => sbSql.Append(queryCampoSensible(loCampo, toOrigen._CodigoInstancia) + (camposSensibles.Last() == loCampo ? "" : " UNION ALL ")));
81  string lcQuerysConcatenados = sbSql.ToString();
82 
83  DB.SQLExec(lcQuerysConcatenados, ref ldtResultados);
84  }
85  return ldtResultados;
86  }
87 
94  private static string queryCampoSensible(IRgpdCampoSensible toCampo, string tcCodigoInstania)
95  {
96  string lcSql = String.Empty;
97 
98  lcSql = "SELECT '" + toCampo._Nombre + "' AS DESCRIPCIONCAMPO, CAST(" + toCampo._Campo + " as nvarchar) COLLATE " + DB._ServerColation() + " AS VALORCAMPO " +
99  " FROM " + DB.SQLDatabase(toCampo._BaseDeDatos, toCampo._Tabla) +
100  " WHERE " + toCampo._CampoInstancia + " = " + DB.SQLString(tcCodigoInstania.TrimEnd());
101 
102  return lcSql;
103  }
104 
110  private static IEnumerable<IRgpdCampoSensible> obtenerCamposSensiblesDeLaEntidad(string tcCodigoEntidad)
111  {
112  string lcSql = "SELECT CODENT, BBDD, TABLA, CAMPO, NOMBRE, CODTRATA, CODCATEG, PORTABLE, CAMPOINS FROM " + DB.SQLDatabase("RGPD", "ENTIDAD_D") +
113  " WHERE CODENT = " + DB.SQLString(tcCodigoEntidad.TrimEnd()) +
114  " AND PORTABLE = 1 " +
115  " AND CAMPOINS != '' ";
116  DataTable ldtResultados = new DataTable();
117  List<IRgpdCampoSensible> listaCampos = new List<IRgpdCampoSensible>();
118 
119  //Recupero los datos de ENTIDAD_D
120  if (DB.SQLExec(lcSql, ref ldtResultados) && ldtResultados.Rows.Count > 0)
121  {
122  ldtResultados.AsEnumerable().Cast<DataRow>().ToList().ForEach(loEle => listaCampos.Add(new CampoSensible(loEle)));
123  }
124 
125  //TODO: Mejorar control excepción para Mayoristas que tiene registros pero puede no estar instalado
126  object loObjeto = AddonsController.Instance.AddonsManager.GetAddon("MAYORIST");
127 
128  if (loObjeto == null)
129  listaCampos = listaCampos
130  .Where(loEle => loEle._BaseDeDatos != "MAYORIST")
131  .ToList();
132 
133  return listaCampos;
134  }
135  }
136 }
static AddonsController Instance
Instancia al objeto singleton Addons
Argumentos para los eventos lanzados por el addons en caso de error
string _CampoInstancia
Campo que contiene el código de instancia concreto
Definition: IRgpd.cs:98
object GetAddon(int numaddon)
Obtiene el addon por numero
string _Campo
Campo de la tabla
Definition: IRgpd.cs:78
Interfície de un campo sensible
Definition: IRgpd.cs:61
IAddonsManager AddonsManager
Gestor de Addons
string _BaseDeDatos
Base de datos
Definition: IRgpd.cs:70
string _Tabla
Tabla de la base de datos
Definition: IRgpd.cs:74