RgpdConfig.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.IO;
5 using sage.ew.db;
6 using System.Data;
7 using sage.ew.interficies;
8 using sage.addons.rgpd.Negocio;
9 using sage.ew.functions.Clases;
10 using Sage.ES.S50.Addons;
11 
12 namespace sage.addons.rgpd
13 {
14  internal enum eTipoPlantilla
15  {
16  [TipoPlantillaInfo("Solicitud de consentimiento", RgpdConfig.PLANTILLA_RECOGIDA_DATOS, "PLDATOS")]
17  RecogidaDatos = 0,
18  [TipoPlantillaInfo("Notificación de usuario", RgpdConfig.PLANTILLA_ACCESO, "PLACCESO")]
19  Acceso = 1,
20  [TipoPlantillaInfo("Emisión de fichero de portabilidad", RgpdConfig.PLANTILLA_PORTABILIDAD, "PLPORTA")]
21  Portabilidad = 2,
22  [TipoPlantillaInfo("Confirmación de solicitud de supresión", RgpdConfig.PLANTILLA_SUPRESION, "PLSUPRE")]
23  Supresion = 3
24  }
25 
29  public static class RgpdConfig
30  {
31  #region Constantes de configuración
32 
36  private const string DIRECTORIO_DOCUMENTOS = @"modulos\rgpd\Documentos";
37 
41  private const int LONGITUD_PREFIJO_ENTIDADES = 6;
42 
46  internal const string PLANTILLA_RECOGIDA_DATOS = "RGPD01";
47  internal const string PLANTILLA_ACCESO = "RGPD02";
48  internal const string PLANTILLA_PORTABILIDAD = "RGPD03";
49  internal const string PLANTILLA_SUPRESION = "RGPD04";
50 
51  internal const string LITERAL_SOLICITUD_CONSENTIMIENTO = "SolicitudConsentimiento";
52  internal const string LITERAL_RECEPCION_CONSENTIMIENTO = "RecepcionConsentimiento";
53  internal const string LITERAL_SOLICITUD_SUPRESION = "SolicitudSupresion";
54  internal const string LITERAL_SOLICITUD_BLOQUEO = "SolicitudBloqueo";
55  internal const string LITERAL_SOLICITUD_PORTABILIDAD = "SolicitudPortabilidad";
56  internal const string LITERAL_DATOS_PORTABILIDAD = "DatosPortabilidad";
57  internal const string LITERAL_SOLICITUD_ACCESO = "SolicitudAcceso";
58  internal const string LITERAL_DERECHO_ACCESO = "DerechoAcceso";
59  internal const string LITERAL_EMISION_PORTABILIDAD = "EmisionPortabilidad";
60 
61  internal const string ENTIDAD_CLIENTE = "00000001";
62  internal const string ENTIDAD_CLIENTEPOTENCIAL = "00000002";
63 
64  #endregion Constantes de configuración
65 
69  public static string _RutaDocumentos
70  {
71  get
72  {
73  string lcRutaServidor = Convert.ToString(sage.ew.global.EW_GLOBAL._GetVariable("wc_iniservidor", @"C:\eurowinsprb\std\ew800serv")).TrimEnd();
74  string lcRutaDocumentos = Path.Combine(lcRutaServidor, DIRECTORIO_DOCUMENTOS);
75  return lcRutaDocumentos;
76  }
77  }
78 
82  public static int _LongitudPrefijoEntidad
83  {
84  get { return LONGITUD_PREFIJO_ENTIDADES; }
85  }
86 
90  public static int _IdCarpetaConsentimiento
91  {
92  get
93  {
94  if (_DiccionarioCarpetas.ContainsKey(20))
95  return _DiccionarioCarpetas[20];
96  else
97  return 0;
98  }
99  }
100 
104  public static int _IdCarpetaSupresion
105  {
106  get
107  {
108  if (_DiccionarioCarpetas.ContainsKey(30))
109  return _DiccionarioCarpetas[30];
110  else
111  return 0;
112  }
113  }
114 
118  public static int _IdCarpetaAcceso
119  {
120  get
121  {
122  if (_DiccionarioCarpetas.ContainsKey(40))
123  return _DiccionarioCarpetas[40];
124  else
125  return 0;
126  }
127  }
128 
129 
133  internal static Dictionary<int, int> _DiccionarioCarpetas
134  {
135  get
136  {
137  if (diccionarioCarpetas == null)
138  garantizarCarpetasDeTrabajoRgpd(getGestdocOperationProvider());
139  return RgpdConfig.diccionarioCarpetas;
140  }
141  set { RgpdConfig.diccionarioCarpetas = value; }
142  }
143  private static Dictionary<int, int> diccionarioCarpetas = null;
144 
145  //Task 132566 => Optimización. La configuración puede variar en el tiemp pero no durante la ejecución. Se hace static pq sino se dispara cada new de Entidad
149  internal static DataTable _TablaTrazaRgpd
150  {
151  get
152  {
153  if (dtTrazaRgpd == null)
154  dtTrazaRgpd = crearTablaTrazaRgpd();
155  return dtTrazaRgpd;
156  }
157  set { dtTrazaRgpd = value; }
158  }
159  private static DataTable dtTrazaRgpd = null;
160 
161  //Task 132566 => Optimización. La configuración puede variar en el tiemp pero no durante la ejecución
166  private static DataTable crearTablaTrazaRgpd()
167  {
168  string lcSql = "Select id, nombre, propiedad, grupo " +
169  "From " + DB.SQLDatabase("RGPD", "Trazargpd");
170 
171  DataTable dtTrazargpd = new DataTable();
172 
173  DB.SQLExec(lcSql, ref dtTrazargpd);
174 
175  return dtTrazargpd;
176  }
177 
182  internal static IRgpdGestdocOperationProvider getGestdocOperationProvider()
183  {
184  //TODO: Revisar para obtener los addons filtrados
185  //Recuperar instancia del módulo del RGPD
186  IEnumerable<object> loModuloGestDoc = AddonsController
187  .Instance
189  .GetAddons()
190  .Values
191  .Where(loModulo => loModulo is IRgpdGestdocOperationProvider);
192 
193  if (loModuloGestDoc.Any())
194  {
195  return loModuloGestDoc.First() as IRgpdGestdocOperationProvider;
196  }
197  else
198  {
199  ew.functions.FUNCTIONS._MessageBox("El addon de gestión documental no está instalado. " + Environment.NewLine
200  + "Debe instalarlo para poder gestionar los ficheros relativos al RGPD.",
201  "Falta addon gestión documental", System.Windows.Forms.MessageBoxButtons.OK,
202  System.Windows.Forms.MessageBoxIcon.Error, System.Windows.Forms.MessageBoxDefaultButton.Button1);
203  return null;
204  }
205 
206  //La gestión documental ahora es obligatoria. No hay que instanciar la clase propia
207  //return new RgpdFileManager(); //Sino ha encontrado gestión documental devuelvo la implementación propia de gestión de ficheros
208  }
209 
214  internal static void garantizarCarpetasDeTrabajoRgpd(IRgpdGestdocOperationProvider toModulo)
215  {
216  // Bug 166252 - Si es nulo no hacer nada, petaba en el método 'Update()' desde el proceso de actualización
217  if (toModulo == null)
218  return;
219 
220  GestorCarpetas loGestorCarpetas = new GestorCarpetas(toModulo);
221  loGestorCarpetas._GarantizarCarpetasRgpd();
222 
223  //Actualizo el directorio global
224  diccionarioCarpetas = loGestorCarpetas._ToDictionary();
225  }
226 
227 
228  internal static void crearRegistrosParaGestionAccesos()
229  {
230  string lcSql = string.Empty;
231 
232  lcSql = "insert into " + DB.SQLDatabase("GESTION", "MODULOS") + " (NOMBRE, DESCRIPCIO, EXE) " +
233  " SELECT DATOS.PANTALLA, DATOS.NOMBRE, DATOS.EXE "+
234  "FROM ( " +
235  "SELECT pantalla, nombre, 'RGPD' as EXE " +
236  " FROM " + DB.SQLDatabase("RGPD", "MANTES") +
237  " UNION " +
238  "SELECT Cast(pantalla as char(" + DB.SQLAnchuraCampo("RGPD", "MANTES", "PANTALLA") + ")), nombre, 'RGPD' as EXE " +
239  "FROM " + DB.SQLDatabase("RGPD", "LISTADOS") +
240  ") AS DATOS " +
241  " WHERE DATOS.PANTALLA NOT IN (SELECT NOMBRE FROM " + DB.SQLDatabase("GESTION", "MODULOS") + ") ";
242 
243  DB.SQLExec(lcSql);
244  }
245 
246 
254  internal static string _HtmlFromTrataInfo(DataTable tdtDatos, bool tlIncluirPlazoConservacion=false)
255  {
256  if (tdtDatos.Rows.Count == 0)
257  return "";
258 
259  System.Web.UI.HtmlControls.HtmlTable tableHtml;
260 
261  string htmlcategoria = "", htmltotal = "";
262 
263  string lcColorCabeceras = System.Drawing.ColorTranslator.ToHtml(System.Drawing.Color.WhiteSmoke);
264 
265  // El DataTable entrante tiene la siguiente estructura: (codcateg, desc_categ, codtrata, desc_trata, plazo_trata) y llega ordenado por codcate,codtrata
266 
267  int lnIndiceFila = 0;
268  int lnIndiceTabla = 0;
269  string lcCategoria = "";
270 
271  while (lnIndiceFila < tdtDatos.Rows.Count)
272  {
273  lcCategoria = Convert.ToString(tdtDatos.Rows[lnIndiceFila]["codcateg"]).Trim();
274 
275  // Creo la tabla HTML para la categoría.
276  //
277  if (!tlIncluirPlazoConservacion)
278  tableHtml = crearTablaHtmlCategoriaCabecSimple("Categoría de información: " + Convert.ToString(tdtDatos.Rows[lnIndiceFila]["desc_categ"]).Trim(), System.Drawing.ColorTranslator.ToHtml(System.Drawing.Color.WhiteSmoke), 800, -1);
279  else
280  tableHtml = crearTablaHtmlCategoriaCabecDoble("Categoría de información: " + Convert.ToString(tdtDatos.Rows[lnIndiceFila]["desc_categ"]).Trim(), "Plazo conservación (años)", System.Drawing.ColorTranslator.ToHtml(System.Drawing.Color.WhiteSmoke), 800);
281 
282  // Iteramos por todos los diferentes trataiemtos de información que existen en la categoria y los vamos añadiendo como filas de la tabla HTML.
283  while (lnIndiceFila < tdtDatos.Rows.Count && Convert.ToString(tdtDatos.Rows[lnIndiceFila]["codcateg"]) == lcCategoria)
284  {
285  if (!tlIncluirPlazoConservacion)
286  anadirFilaHtml(tableHtml, 1, Convert.ToString(tdtDatos.Rows[lnIndiceFila]["desc_trata"]).Trim());
287  else
288  anadirFilaHtml(tableHtml, 2, Convert.ToString(tdtDatos.Rows[lnIndiceFila]["desc_trata"]).Trim(), Convert.ToString(tdtDatos.Rows[lnIndiceFila]["plazo_trata"]).Trim(),"","Center");
289 
290  lnIndiceFila++;
291  }
292 
293  // Obtengo el código HTML de la tabla y lo añado a la variable en que voy acumulando todos las tablas HTML detectadas.
294  //
295  using (var sw = new StringWriter())
296  {
297  tableHtml.RenderControl(new System.Web.UI.HtmlTextWriter(sw));
298  htmlcategoria = sw.ToString();
299  htmltotal += (lnIndiceTabla != 0 ? "<br><br>" : "") + htmlcategoria;
300  }
301  lnIndiceTabla++;
302  }
303 
304  return htmltotal;
305  }
306 
307 
308 
309 
321  internal static string _HtmlFromCamposTrataInfo(DataTable tdtCamposEntidad, string tcCodigoEntidad)
322  {
323  if (tdtCamposEntidad.Rows.Count == 0)
324  return "";
325 
326 
327  // Definicion de variables
328  //
329  System.Web.UI.HtmlControls.HtmlTable tableHtml;
330  string htmlcategoria = "", htmltotal = "", lcCategoria = "", lcNombreBd = "", lcNombreTabla = "", lcDescTabla = "", lcCampoFiltro = "";
331  string lcColorCabecerasCategoria = System.Drawing.ColorTranslator.ToHtml(System.Drawing.Color.LightGray);
332 
333  bool llProcesarTabla = false;
334  int lnIndiceFila = 0, lnIndiceTabla = 0;
335 
336 
337  // Construcción de las tablas HTML, una tabla por cada categoria de información, el DataTable entrante está ordenado por (codcateg, basedatos, tabla, nombre).
338  // Cada tabla HTML contendrá información de todas las tablas de datos de una determinada categoría.
339  //
340  while (lnIndiceFila < tdtCamposEntidad.Rows.Count)
341  {
342  lcCategoria = Convert.ToString(tdtCamposEntidad.Rows[lnIndiceFila]["codcateg"]).Trim();
343 
344  // Creo la tabla HTML de la categoria y le pongo como cabecera el nombre de la categoria.
345  //
346  tableHtml = crearTablaHtmlCategoriaCabecSimple("Categoría de información: " + Convert.ToString(tdtCamposEntidad.Rows[lnIndiceFila]["desc_categ"]).Trim(), lcColorCabecerasCategoria, 800, 2);
347 
348 
349  // Iteramos para todos los registros de la categoria, iremos detectando cada una de las tablas de datos que se especifican y las iremos añadiendo a la tabla HTML
350  // de la categoría.
351  //
352  while (lnIndiceFila < tdtCamposEntidad.Rows.Count && Convert.ToString(tdtCamposEntidad.Rows[lnIndiceFila]["codcateg"]).Trim() == lcCategoria)
353  {
354  lcNombreBd = Convert.ToString(tdtCamposEntidad.Rows[lnIndiceFila]["basedatos"]).Trim();
355  lcNombreTabla = Convert.ToString(tdtCamposEntidad.Rows[lnIndiceFila]["tabla"]).Trim();
356  lcDescTabla = Convert.ToString(tdtCamposEntidad.Rows[lnIndiceFila]["desc_tabla"]).Trim();
357  lcCampoFiltro = Convert.ToString(tdtCamposEntidad.Rows[lnIndiceFila]["campoins"]).Trim();
358 
359  llProcesarTabla = !string.IsNullOrWhiteSpace(lcCampoFiltro);
360  DataTable ldtDatosTabla = new DataTable();
361 
362  if (llProcesarTabla)
363  {
364  // Hacemos la consulta sobre la tabla aplicando el filtro especificado para quedarme con el/los registros de información de la entidad que se guardan en la tabla.
365  DB.SQLExec("select * from " + DB.SQLDatabase(lcNombreBd, lcNombreTabla) + " where " + lcCampoFiltro + " = " + DB.SQLString(tcCodigoEntidad), ref ldtDatosTabla);
366 
367  // Si no hay datos en la tabla que consultamo no hemos de hacer nada con esta tabla, pasamos a la siguiente.
368  llProcesarTabla = ldtDatosTabla.Rows.Count > 0;
369  }
370 
371  if (llProcesarTabla)
372  {
373  // Añadimos la información de todos los registros de la tabla de datos a la tabla HTML
374  anadirCamposDatosEntidadHtml(tableHtml, tdtCamposEntidad, ldtDatosTabla, ref lnIndiceFila, lcCategoria, lcNombreBd, lcNombreTabla, lcDescTabla);
375  }
376  else
377  {
378  // Iteramos para todos los registros de la categoria, base datos y tabla para ignorarlos pues no se ha de procesar esta tabla.
379  while (lnIndiceFila < tdtCamposEntidad.Rows.Count && Convert.ToString(tdtCamposEntidad.Rows[lnIndiceFila]["codcateg"]) == lcCategoria && Convert.ToString(tdtCamposEntidad.Rows[lnIndiceFila]["basedatos"]).Trim() == lcNombreBd && Convert.ToString(tdtCamposEntidad.Rows[lnIndiceFila]["tabla"]).Trim() == lcNombreTabla)
380  lnIndiceFila++;
381  }
382  // Paso a procesar la siguiente tabla de la categoria, o si ya no hay más tablas para la categoria, paso a procesar la siguiente categoria.
383  }
384 
385 
386 
387  // Obtengo todo el código HTML de la tabla y lo añado a la variable en que voy acumulando todos las tablas HTML detectadas.
388  //
389  using (var sw = new StringWriter())
390  {
391  tableHtml.RenderControl(new System.Web.UI.HtmlTextWriter(sw));
392  htmlcategoria = sw.ToString();
393  htmltotal += (lnIndiceTabla != 0 ? "<br><br>" : "") + htmlcategoria; // Si se quiere que entre las tablas haya menoss espacio substituir en esta linea "<p>&nbsp;</p>" por "<p></p>"
394  }
395  lnIndiceTabla++;
396  }
397 
398  return htmltotal;
399  }
400 
401 
413  private static void anadirCamposDatosEntidadHtml(System.Web.UI.HtmlControls.HtmlTable tableHtml, DataTable tdtCamposEntidad, DataTable tdtDatosEntidad, ref int tnIndiceFila, string tcCategoria, string tcNombreBd, string tcNombreTabla, string tcDescTabla)
414  {
415  bool llCabeceraTablaAdd = false, llCambioRegistro=true;
416  string lcDescCampo="", lcNombreCampo="", lcValorCampo="", lcFuncionValor="";
417  int lnIndiceFila = 0;
418  string lcColorCabecerasTablasDatos = System.Drawing.ColorTranslator.ToHtml(System.Drawing.Color.WhiteSmoke);
419 
420  // Iteramos para todos los registros obtenidos (p.e. tablas tipo ENV_CLI, CONTLF_CLI, pueden tener más de un registro, deben mostrarse todos ellos.)
421  foreach (DataRow loRowDatosTabla in tdtDatosEntidad.Rows)
422  {
423  lnIndiceFila = tnIndiceFila;
424  llCambioRegistro = true;
425 
426  // Iteramos para todos los registros de la categoria y vamos añadiendo filas a la tabla donde cada fila tendrá un nombre de campo y un valor.
427  while (lnIndiceFila < tdtCamposEntidad.Rows.Count && Convert.ToString(tdtCamposEntidad.Rows[lnIndiceFila]["codcateg"]).Trim() == tcCategoria && Convert.ToString(tdtCamposEntidad.Rows[lnIndiceFila]["basedatos"]).Trim() == tcNombreBd && Convert.ToString(tdtCamposEntidad.Rows[lnIndiceFila]["tabla"]).Trim() == tcNombreTabla)
428  {
429  lcDescCampo = Convert.ToString(tdtCamposEntidad.Rows[lnIndiceFila]["desc_campo"]).Trim();
430  lcNombreCampo = Convert.ToString(tdtCamposEntidad.Rows[lnIndiceFila]["campo"]).Trim();
431  lcFuncionValor = Convert.ToString(tdtCamposEntidad.Rows[lnIndiceFila]["valorfunc"]).Trim();
432 
433  lcValorCampo = obtenerValorColumnaDataRow(loRowDatosTabla, lcNombreCampo, lcFuncionValor) ;
434 
435  // Solo añado registro en la tabla HTML si hay algo a mostrar.
436  if (!string.IsNullOrWhiteSpace(lcValorCampo))
437  {
438  if (!llCabeceraTablaAdd)
439  {
440  // Añado cabecera con el nombre de la tabla.
441  anadirCabeceraHtmlSimple(tableHtml, !string.IsNullOrWhiteSpace(tcDescTabla) ? tcDescTabla : tcNombreTabla, 2, lcColorCabecerasTablasDatos);
442 
443  // Añado cabecera con los titulos de las columnas para los campos informativos.
444  anadirCabeceraHtmlDoble(tableHtml, "Información", "Valor", 33, 64, lcColorCabecerasTablasDatos);
445  llCabeceraTablaAdd = true;
446  llCambioRegistro = false;
447  }
448 
449  // Si estamos procesando más de un registro separo los registros visualmente añadiendo una linea en blanco.
450  if (llCabeceraTablaAdd && llCambioRegistro)
451  {
452  anadirFilaHtml(tableHtml, 2, " ", " ");
453  llCambioRegistro = false;
454  }
455 
456  anadirFilaHtml(tableHtml, 2, lcDescCampo, lcValorCampo);
457  }
458 
459  lnIndiceFila++;
460  }
461  }
462 
463  tnIndiceFila = lnIndiceFila;
464  }
465 
466 
475  private static System.Web.UI.HtmlControls.HtmlTable crearTablaHtmlCategoriaCabecSimple(string tcTituloCabecera, string tcColorCabecera, int tnAnchoPixels, int tnColSpan)
476  {
477  System.Web.UI.HtmlControls.HtmlTable tableHtml = new System.Web.UI.HtmlControls.HtmlTable();
478  tableHtml.Border = 1; // Si no se quiere que aparezcan las celdas con bordes poner .Border=0 y aparecerá visualmente casi como texto plano.
479  tableHtml.CellPadding = 5;
480  tableHtml.CellSpacing = 0; // Si se ponde CellSpacing > 0 el borde de las celadas queda como de doble trazo.
481  tableHtml.Width = tnAnchoPixels.ToString().Trim();
482 
483  // Añadir cabecera de categoria
484  anadirCabeceraHtmlSimple(tableHtml, tcTituloCabecera, tnColSpan, tcColorCabecera);
485 
486  return tableHtml;
487  }
488 
489 
498  private static System.Web.UI.HtmlControls.HtmlTable crearTablaHtmlCategoriaCabecDoble(string tcTituloCabecera1, string tcTituloCabecera2, string tcColorCabecera, int tnAnchoPixels)
499  {
500  System.Web.UI.HtmlControls.HtmlTable tableHtml = new System.Web.UI.HtmlControls.HtmlTable();
501  tableHtml.Border = 1; // Si no se quiere que aparezcan las celdas con bordes poner .Border=0 y aparecerá visualmente casi como texto plano.
502  tableHtml.CellPadding = 5;
503  tableHtml.CellSpacing = 0; // Si se ponde CellSpacing > 0 el borde de las celadas queda como de doble trazo.
504  tableHtml.Width = tnAnchoPixels.ToString().Trim();
505 
506  // Añadir cabecera de categoria
507  anadirCabeceraHtmlDoble(tableHtml, tcTituloCabecera1, tcTituloCabecera2, 70, 30, tcColorCabecera);
508 
509  return tableHtml;
510  }
511 
512 
520  private static void anadirCabeceraHtmlSimple(System.Web.UI.HtmlControls.HtmlTable tableHtml, string tcTituloCabecera, int tnColSpan, string tcColorHtml="")
521  {
522  System.Web.UI.HtmlControls.HtmlTableRow headerTabla = new System.Web.UI.HtmlControls.HtmlTableRow();
523  System.Web.UI.HtmlControls.HtmlTableCell cell = new System.Web.UI.HtmlControls.HtmlTableCell("th");
524 
525  cell.InnerText = tcTituloCabecera;
526 
527  if (tnColSpan != -1)
528  cell.ColSpan = tnColSpan;
529 
530  if (string.IsNullOrWhiteSpace(tcColorHtml))
531  tcColorHtml = System.Drawing.ColorTranslator.ToHtml(System.Drawing.Color.WhiteSmoke);
532  cell.BgColor = tcColorHtml;
533 
534  headerTabla.Cells.Add(cell);
535 
536  tableHtml.Rows.Add(headerTabla);
537  }
538 
539 
549  private static void anadirCabeceraHtmlDoble(System.Web.UI.HtmlControls.HtmlTable tableHtml, string tcTituloCabeceraCol1, string tcTituloCabeceraCol2, int tnPrcAnchoCol1, int tnPrcAnchoCol2, string tcColorHtml = "")
550  {
551  System.Web.UI.HtmlControls.HtmlTableRow headerTabla = new System.Web.UI.HtmlControls.HtmlTableRow();
552 
553  System.Web.UI.HtmlControls.HtmlTableCell cellCol1 = new System.Web.UI.HtmlControls.HtmlTableCell("th");
554  cellCol1.InnerText = tcTituloCabeceraCol1;
555  if (string.IsNullOrWhiteSpace(tcColorHtml))
556  tcColorHtml = System.Drawing.ColorTranslator.ToHtml(System.Drawing.Color.WhiteSmoke);
557  cellCol1.BgColor = tcColorHtml;
558  cellCol1.Width = tnPrcAnchoCol1.ToString().Trim() + "%";
559 
560  System.Web.UI.HtmlControls.HtmlTableCell cellCol2 = new System.Web.UI.HtmlControls.HtmlTableCell("th");
561  cellCol2.InnerText = tcTituloCabeceraCol2;
562  if (string.IsNullOrWhiteSpace(tcColorHtml))
563  tcColorHtml = System.Drawing.ColorTranslator.ToHtml(System.Drawing.Color.WhiteSmoke);
564  cellCol2.BgColor = tcColorHtml;
565  cellCol2.Width = tnPrcAnchoCol2.ToString().Trim()+"%";
566 
567  headerTabla.Cells.Add(cellCol1);
568  headerTabla.Cells.Add(cellCol2);
569 
570  tableHtml.Rows.Add(headerTabla);
571  }
572 
573 
583  private static void anadirFilaHtml(System.Web.UI.HtmlControls.HtmlTable tableHtml, int tnNumCols, string tcCampoCol1, string tcCampoCol2="", string tcAlignCol1="", string tcAlignCol2="")
584  {
585  if (tnNumCols <= 0)
586  return;
587 
588  System.Web.UI.HtmlControls.HtmlTableRow row = new System.Web.UI.HtmlControls.HtmlTableRow();
589 
590  if (tnNumCols > 0)
591  {
592  System.Web.UI.HtmlControls.HtmlTableCell cellCol1 = new System.Web.UI.HtmlControls.HtmlTableCell();
593 
594  if (!string.IsNullOrWhiteSpace(tcCampoCol1))
595  cellCol1.InnerText = tcCampoCol1;
596  else
597  cellCol1.InnerHtml = "&nbsp;";
598 
599  if (!string.IsNullOrWhiteSpace(tcAlignCol1))
600  cellCol1.Align = tcAlignCol1;
601 
602  row.Cells.Add(cellCol1);
603  }
604 
605  if (tnNumCols > 1)
606  {
607  System.Web.UI.HtmlControls.HtmlTableCell cellCol2 = new System.Web.UI.HtmlControls.HtmlTableCell();
608  if (!string.IsNullOrWhiteSpace(tcCampoCol2))
609  cellCol2.InnerText = tcCampoCol2;
610  else
611  cellCol2.InnerHtml = "&nbsp;";
612 
613  if (!string.IsNullOrWhiteSpace(tcAlignCol2))
614  cellCol2.Align = tcAlignCol2;
615 
616  row.Cells.Add(cellCol2);
617 
618  }
619 
620  tableHtml.Rows.Add(row);
621  }
622 
623 
631  private static string obtenerValorColumnaDataRow(DataRow toRow, string tcCampoObtener, string tcFuncionValor)
632  {
633  string lcValor = "";
634  object txValor = toRow[tcCampoObtener];
635 
636  // Obtenemos el tipo del parámetro que nos han pasado
637  string lcTipo = txValor.GetType().ToString().Trim().ToLower();
638 
639  switch (lcTipo)
640  {
641  case "system.boolean":
642  if ((bool)txValor == true)
643  lcValor = "Si";
644  else
645  lcValor = "No";
646 
647  break;
648 
649  case "system.datetime":
650  DateTime ltFecha = (DateTime)txValor;
651  lcValor = ltFecha.Day.ToString().Trim() + "/" + ltFecha.Month.ToString().Trim() + "/" + ltFecha.Year.ToString().Trim();
652 
653  // Comprobar si es un campo DateTime
654  if ((ltFecha.Hour != 0) || (ltFecha.Minute != 0) || (ltFecha.Second != 0))
655  lcValor = lcValor + " " + ltFecha.Hour.ToString().Trim() + ":" + ltFecha.Minute.ToString().Trim() + ":" + ltFecha.Second.ToString().Trim();
656 
657  break;
658 
659  case "system.decimal":
660  case "system.double":
661  case "system.int16":
662  case "system.int32":
663  case "system.int64":
664  case "system.uint16":
665  case "system.uint32":
666  case "system.uint64":
667  lcValor = txValor.ToString().Replace(",", ".").Trim();
668  break;
669 
670  case "system.string":
671  lcValor = txValor.ToString().Trim();
672  lcValor = lcValor.Replace("'", "''");
673 
674  break;
675 
676  default:
677  break;
678  }
679 
680  // Si tenemos función valor declarada, obtenemos el campo que nos digan de la tabla que nos digan, viene en el formato p.e.: COMUNES,PAISES,CODIGO,NOMBRE
681  if (!string.IsNullOrWhiteSpace(tcFuncionValor))
682  {
683  string[] laParamFuncionValor = tcFuncionValor.Trim().Split(',');
684  if (laParamFuncionValor.Count() == 4)
685  {
686  try
687  {
688  object lxCampoFuncValor = DB.SQLValor(laParamFuncionValor[1], laParamFuncionValor[2], lcValor, laParamFuncionValor[3], laParamFuncionValor[0]);
689  lcValor = Convert.ToString(lxCampoFuncValor);
690  lcValor = lcValor.Trim();
691  }
692  catch
693  {
694 
695  }
696  }
697  }
698 
699  return lcValor;
700  }
701 
702  }
703 }
static AddonsController Instance
Instancia al objeto singleton Addons
Argumentos para los eventos lanzados por el addons en caso de error
Clase EW_GLOBAL para gestionar las variables públicas de Eurowin, variables de empresa, variables de anchuras de campo, variables de mascaras, etc.
Definition: EW_GLOBAL.cs:46
IAddonsManager AddonsManager
Gestor de Addons
Interficie de operaciones requeridas por el Addon de RGPD al Addon de GESTDOC
Dictionary< string, object > GetAddons()
Devuelve los addons cargados