RgpdFileExportToCSV.cs
1 using System;
2 using System.Linq;
3 using System.Text;
4 using System.Windows.Forms;
5 using System.IO;
6 using sage.ew.db;
7 using System.Data;
8 
9 namespace sage.addons.rgpd
10 {
14  internal class RgpdFileExportToCSV : IRgpdFileExportOperations
15  {
19  private const string DELIMITADOR = ";";
20 
21  private StringBuilder _oCsv = null;
22 
26  public string _RutaFicheroGenerado
27  {
28  get { return _cRutaFicheroGenerado; }
29  set { _cRutaFicheroGenerado = value; }
30  }
31  string _cRutaFicheroGenerado = string.Empty;
32 
39  bool IRgpdFileExportOperations._Exportar(DataTable tdtDatos, bool tlPreguntarRuta)
40  {
41  if (tdtDatos == null || tdtDatos.Rows.Count == 0) //Si no hay datos termino
42  return false;
43 
44  if (tlPreguntarRuta)
45  {
46  //Obtengo nombre y ruta para el fichero destino
47  if (!preguntarDondeCrearElFichero())
48  return false;
49  }
50  else
51  {
52  obtenerRutaTemporalParaGenerarElFichero();
53  }
54 
55  _oCsv = new StringBuilder();
56 
57  tdtDatos.AsEnumerable().Cast<DataRow>().ToList().ForEach(loRow => adjuntarAlCsvLosDatosDeLaFila(loRow));
58 
59  grabarFicheroConLasLineasDeDatosObtenidas(_oCsv.ToString());
60 
61  return true;
62  }
63 
68  private void adjuntarAlCsvLosDatosDeLaFila(DataRow toRow)
69  {
70  var campo = Convert.ToString(toRow["DESCRIPCIONCAMPO"]).TrimEnd();
71  var valor = Convert.ToString(toRow["VALORCAMPO"]).TrimEnd();
72  if (String.IsNullOrWhiteSpace(valor)) //Bug 131627 => Si el valor esta en blanco lo omito
73  return;
74  var newLine = string.Format("{0}{1}{2}", campo, DELIMITADOR, valor);
75  _oCsv.AppendLine(newLine);
76  }
77 
82  private void grabarFicheroConLasLineasDeDatosObtenidas(string tcCsv)
83  {
84  try
85  {
86  File.WriteAllText(_cRutaFicheroGenerado, tcCsv, Encoding.UTF8);
87  }
88  catch (Exception loEx)
89  {
90  DB.Registrar_Error(loEx);
91  }
92  }
93 
97  private void obtenerRutaTemporalParaGenerarElFichero()
98  {
99  try
100  {
101  //Obtener ruta temporal
102  _cRutaFicheroGenerado = Path.ChangeExtension(Path.GetTempFileName(), "csv");
103  }
104  catch (Exception loEx)
105  {
106  DB.Registrar_Error(loEx);
107  }
108  }
109 
114  private bool preguntarDondeCrearElFichero()
115  {
116  _cRutaFicheroGenerado = String.Empty;
117  SaveFileDialog loForm = new SaveFileDialog();
118  loForm.Filter = "CSV (delimitado por comas)|*.csv";
119  loForm.Title = "Guardar fichero CSV";
120  loForm.ShowDialog();
121  if (loForm.FileName != "")
122  {
123  _cRutaFicheroGenerado = loForm.FileName;
124  return true;
125  }
126  else
127  return false;
128  }
129  }
130 }