GoogleMapsConfigManager.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.ComponentModel;
6 using sage.ew.interficies;
7 using System.Xml.Linq;
8 using System.Data;
9 using System.Drawing;
10 using sage.ew.db;
11 using sage.ew.listados.Clases;
12 using System.Drawing.Design;
13 using System.Windows.Forms.Design;
14 using System.Windows.Forms;
15 using sage.ew.formul.Forms;
16 using System.Reflection;
17 using sage.ew.global;
18 using sage.ew.functions;
19 using System.Globalization;
20 
21 namespace sage.ew.formul.Clases
22 {
27  {
28 
29  private Dictionary<String, GoogleMapsConfig> _oListConfig = new Dictionary<String, GoogleMapsConfig>();
30 
38  {
39  GoogleMapsConfig loConfig;
40  String lcCodigo = toColCP._GetCodigoParent();
41 
42  if (_oListConfig.ContainsKey(lcCodigo))
43  {
44  loConfig = _oListConfig[lcCodigo];
45  }
46  else
47  {
48  loConfig = new GoogleMapsConfig(toColCP, toColPoblacion);
49  _oListConfig.Add(lcCodigo, loConfig);
50  }
51 
52  return loConfig;
53  }
54 
59  public void _Load(Dictionary<string, ColumnDefinition> toListColumns)
60  {
61 
62  _oListConfig.Clear();
63 
64  var loGroups = toListColumns.Values.Where(f=>f._TipoCampo == GoogleMapsConfig.TipoCampo.CodigoPostal).GroupBy(d => d._GoogleMapsConfig._Codigo);
65 
66  foreach(var loGroup in loGroups)
67  {
68  String lcKey = loGroup.Key;
69 
70  if (!String.IsNullOrEmpty(loGroup.Key))
71  {
72  String lcKeyCP = loGroup.Key.Substring(0, lcKey.IndexOf("@@"));
73  String lcKeyPoblacion = loGroup.Key.Substring(lcKey.IndexOf("@@") + 2);
74 
75  ColumnDefinition loColCp = toListColumns[lcKeyCP];
76  ColumnDefinition loColPoblacion;
77 
79  {
80  loColPoblacion = loColCp._GoogleMapsConfig._ColumnPoblacion;
81  }
82  else if (!String.IsNullOrEmpty(loColCp._GoogleMapsConfig._Codigo) && toListColumns.ContainsKey(loColCp._GoogleMapsConfig._Codigo.Substring(loColCp._GoogleMapsConfig._Codigo.IndexOf("@@") + 2)))
83  {
84  loColPoblacion = toListColumns[loColCp._GoogleMapsConfig._Codigo.Substring(loColCp._GoogleMapsConfig._Codigo.IndexOf("@@") + 2)];
85  }
86  else if (!String.IsNullOrEmpty(loColCp._GoogleMapsConfig._Codigo))
87  {
88  loColPoblacion = toListColumns.Values.Where(f => f._TipoCampo == GoogleMapsConfig.TipoCampo.Poblacion && f._GoogleMapsConfig._Codigo.StartsWith(loColCp._Codigo)).First();
89  }
90  else
91  {
92  loColPoblacion = toListColumns.Values.Where(f => f._TipoCampo == GoogleMapsConfig.TipoCampo.Poblacion).First();
93  }
94 
95  if (loColPoblacion is ColumnDefinition)
96  {
97  GoogleMapsConfig loConfig = _AddConfig(loColCp, loColPoblacion);
98 
99  List<ColumnDefinition> loConfigColumns = (from loCol in toListColumns.Values
100  where loCol._GoogleMapsConfig._Codigo == loConfig._Codigo
101  select loCol).ToList();
102  if (loConfigColumns.Count > 0)
103  {
104  loConfig._Columns.Clear();
105  foreach (ColumnDefinition loCol in loConfigColumns)
106  {
107  loConfig._Activo = loCol._GoogleMapsConfig._Activo;
108  foreach (KeyValuePair<String, GoogleMapsConfig.GoogleMapsConfigColums> loKeyPairValue in loCol._GoogleMapsConfig._Columns)
109  {
110  GoogleMapsConfig.GoogleMapsConfigColums loGoogleMapsConfigColums = loKeyPairValue.Value;
111 
112  if ((loGoogleMapsConfigColums._Codigo == "contador" || toListColumns.ContainsKey(loGoogleMapsConfigColums._Codigo)) && toListColumns.ContainsKey(loGoogleMapsConfigColums._CodigoCP) && toListColumns.ContainsKey(loGoogleMapsConfigColums._CodigoPoblacion))
113  {
114  if (!loConfig._Columns.ContainsKey(loGoogleMapsConfigColums._Codigo)) loConfig._Columns.Add(loGoogleMapsConfigColums._Codigo, loGoogleMapsConfigColums);
115  }
116  }
117  loCol._GoogleMapsConfig = loConfig;
118  }
119  }
120  else
121  {
122  loColCp._GoogleMapsConfig = loConfig;
123  loColPoblacion._GoogleMapsConfig = loConfig;
124  }
125 
126  if (toListColumns.ContainsKey(loColCp._GetCodigoParent()))
127  {
128  ColumnDefinition loParent = toListColumns[loColCp._GetCodigoParent()];
129  if (loParent._TipoCampo == GoogleMapsConfig.TipoCampo.CodigoPostal) loParent._GoogleMapsConfig = loConfig;
130  }
131 
132  //Buscamos campo población por si se ha seleccionada el del registro y el del CP
133  List<ColumnDefinition> loColumPoblacion = toListColumns.Values.Where(f => f._TipoCampo == GoogleMapsConfig.TipoCampo.Poblacion && f._GetCodigoParent() == loColCp._GetCodigoParent()).ToList();
134 
135  if (loColumPoblacion.Count > 0)
136  {
137  ColumnDefinition loCol = loColumPoblacion.First();
138  loConfig._ColumnPoblacionRel = loCol;
139  loCol._GoogleMapsConfig = loConfig;
140  }
141  }
142  }
143  }
144  }
145 
150  public void _RemoveColumn(ColumnDefinition toColumn)
151  {
152  foreach(GoogleMapsConfig loConfig in _oListConfig.Values)
153  {
154  if(loConfig._Columns.ContainsKey(toColumn._Codigo)) loConfig._Columns.Remove(toColumn._Codigo);
155  }
156  }
157 
162  public void _SetColumn(ColumnDefinition toColumn)
163  {
164  if (toColumn is ColumnDefinition && toColumn._IsNumeric)
165  {
166  foreach (GoogleMapsConfig loConfig in _oListConfig.Values)
167  {
168  if (!loConfig._Columns.ContainsKey(toColumn._Codigo))
169  {
170  GoogleMapsConfig.GoogleMapsConfigColums loGoogleMapsConfigColums = new GoogleMapsConfig.GoogleMapsConfigColums(true, toColumn._Titulo);
171  loGoogleMapsConfigColums._ColumnDefinition = toColumn;
172  loGoogleMapsConfigColums._CodigoCP = loConfig._ColumnCP._Codigo;
173  loGoogleMapsConfigColums._CodigoPoblacion = loConfig._ColumnPoblacion._Codigo;
174 
175  loConfig._Columns.Add(toColumn._Codigo, loGoogleMapsConfigColums);
176  }
177  }
178  }
179  }
180 
185  {
186 
187  }
188  }
189 
193  public class GoogleMapsConfig
194  {
198  public enum TipoCampo
199  {
203  NoPermite = 0,
207  CodigoPostal = 1,
211  Poblacion = 2
212  }
213  private String _cCodigo;
214  private String _cErrorMessage;
215  private Boolean _bGoogleMaps = false;
216  private Dictionary<String, GoogleMapsConfigColums> _oColumns = new Dictionary<String, GoogleMapsConfigColums>();
217  private ColumnDefinition _oColumnCP;
218  private ColumnDefinition _oColumnPoblacion;
219  private ColumnDefinition _oColumnPoblacionRel;
220 
224  public Boolean _IsConfigured
225  {
226  get
227  {
228  return _oColumnCP is ColumnDefinition && _oColumnPoblacion is ColumnDefinition;
229  }
230  }
231 
235  public ColumnDefinition _ColumnCP
236  {
237  get
238  {
239  return _oColumnCP;
240  }
241  set
242  {
243  _oColumnCP = value;
244  }
245  }
246 
250  public ColumnDefinition _ColumnPoblacion
251  {
252  get
253  {
254  return _oColumnPoblacion;
255  }
256  set
257  {
258  _oColumnPoblacion = value;
259  }
260  }
261 
265  public ColumnDefinition _ColumnPoblacionRel
266  {
267  get
268  {
269  return _oColumnPoblacionRel;
270  }
271  set
272  {
273  _oColumnPoblacionRel = value;
274  }
275  }
279  public String _Codigo
280  {
281  get
282  {
283  if (_ColumnCP is ColumnDefinition && _ColumnPoblacion is ColumnDefinition)
284  {
285  _cCodigo = String.Format("{0}@@{1}", _ColumnCP._Codigo, _ColumnPoblacion._Codigo);
286  }
287  return _cCodigo;
288  }
289  }
290 
294  public Boolean _Activo
295  {
296  get
297  {
298  return _bGoogleMaps;
299  }
300  set
301  {
302  _bGoogleMaps = value;
303  }
304  }
305 
309  public Dictionary<String, GoogleMapsConfigColums> _Columns
310  {
311  get
312  {
313  return _oColumns;
314  }
315  set
316  {
317  _oColumns = value;
318 
319  if (_IsConfigured)
320  {
321  foreach (GoogleMapsConfigColums loCol in _oColumns.Values)
322  {
323  loCol._CodigoCP = _oColumnCP._Codigo;
324  loCol._CodigoPoblacion = _oColumnPoblacion._Codigo;
325  }
326  }
327  }
328  }
329 
334  {
335  private Boolean _bActivo = false;
336  private String _cTitulo = "";
337  private String _cCodigo = "contador";
338  private String _cCodigoCP = "";
339  private String _cCodigoPoblacion = "";
340  private String _cCampo = "";
341  private ColumnDefinition _oColDefinition;
342 
346  public String _Codigo
347  {
348  get
349  {
350  return _cCodigo;
351  }
352  }
353 
357  public String _Campo
358  {
359  get
360  {
361  return _cCampo;
362  }
363  }
364 
368  public String _CodigoCP
369  {
370  get
371  {
372  return _cCodigoCP;
373  }
374  internal set
375  {
376  _cCodigoCP = value;
377  }
378  }
379 
383  public String _CodigoPoblacion
384  {
385  get
386  {
387  return _cCodigoPoblacion;
388  }
389  internal set
390  {
391  _cCodigoPoblacion = value;
392  }
393 
394  }
395 
399  public ColumnDefinition _ColumnDefinition
400  {
401  get
402  {
403  return _oColDefinition;
404  }
405  set
406  {
407  _oColDefinition = value;
408  if (value is ColumnDefinition)
409  {
410  _cCodigo = _oColDefinition._Codigo;
411  _cCampo = _oColDefinition._Titulo;
412  if (String.IsNullOrEmpty(_cTitulo)) _cTitulo = _oColDefinition._Titulo;
413  }
414  }
415  }
416 
417 
421  public Boolean _Activo
422  {
423  get
424  {
425  return _bActivo;
426  }
427  set
428  {
429  _bActivo = value;
430  }
431  }
432 
433 
437  public String _Titulo
438  {
439  get
440  {
441  return _cTitulo;
442  }
443  set
444  {
445  _cTitulo = value;
446  }
447  }
448 
453  public XElement _ToXElement()
454  {
455  XElement loElement;
456  List<XElement> loList = new List<XElement>();
457  List<XElement> loPath = new List<XElement>();
458 
459  loList.Add(new XElement("Codigo", _Codigo));
460  loList.Add(new XElement("Activo", _Activo ? Boolean.TrueString : Boolean.FalseString));
461  loList.Add(new XElement("Titulo", _Titulo));
462  loList.Add(new XElement("CodigoCP", _cCodigoCP));
463  loList.Add(new XElement("CodigoPoblacion", _cCodigoPoblacion));
464  loList.Add(new XElement("Campo", _cCampo));
465 
466  loElement = new XElement("GoogleMapsColumn", loList.ToArray());
467 
468 
469  return loElement;
470  }
471 
477  public GoogleMapsConfigColums(Boolean tlActivo, String tcTitulo)
478  {
479  _cTitulo = String.Format("Distribución por {0}", tcTitulo.ToLower());
480  _bActivo = tlActivo;
481  }
482 
487  public GoogleMapsConfigColums(Boolean tlActivo)
488  {
489  _bActivo = tlActivo;
490  }
491 
496  public GoogleMapsConfigColums(XElement toElement)
497  {
498  _bActivo = Convert.ToBoolean(toElement.Element("Activo").Value);
499  _cTitulo = Convert.ToString(toElement.Element("Titulo").Value);
500  _cCodigo = Convert.ToString(toElement.Element("Codigo").Value);
501  _cCodigoCP = Convert.ToString(toElement.Element("CodigoCP").Value);
502  _cCampo = Convert.ToString(toElement.Element("Campo").Value);
503  _cCodigoPoblacion = Convert.ToString(toElement.Element("CodigoPoblacion").Value);
504  }
505  }
506 
507 
512  public XElement _ToXElement()
513  {
514  XElement loElement;
515  List<XElement> loList = new List<XElement>();
516 
517  loList.Add(new XElement("Activo", _bGoogleMaps ? Boolean.TrueString : Boolean.FalseString));
518  loList.Add(new XElement("Codigo", _Codigo));
519 
520  foreach (GoogleMapsConfigColums loColum in _Columns.Values)
521  {
522  loList.Add(loColum._ToXElement());
523  }
524 
525  loElement = new XElement("GoogleMapsConfig", loList.ToArray());
526 
527  return loElement;
528  }
529 
534  public List<GoogleMapsConfigColums> _ActiveColumns
535  {
536  get
537  {
538  List<GoogleMapsConfigColums> loList = (from loCol in _Columns.Values
539  where loCol._Activo
540  select loCol).ToList();
541  return loList;
542  }
543  }
544 
548  public string _ErrorMessage
549  {
550  get
551  {
552  return _cErrorMessage;
553  }
554  set
555  {
556  _cErrorMessage = value;
557  }
558  }
559 
564  public bool _IsValid()
565  {
566  _ErrorMessage = "";
567 
568  if (_ActiveColumns.Count() == 0)
569  {
570  _ErrorMessage = "Debe seleccionar al menos una columna";
571  }
572  else if(_ActiveColumns.Where(f => String.IsNullOrEmpty(f._Titulo) || String.IsNullOrWhiteSpace(f._Titulo) ).Count() > 0)
573  {
574  _ErrorMessage = "Debe especificar el título";
575  }
576 
577  return String.IsNullOrEmpty(_ErrorMessage);
578  }
579 
584  {
585  }
586 
593  {
594  _oColumnCP = toCp;
595  _oColumnPoblacion = toPoblacion;
596 
597  GoogleMapsConfig.GoogleMapsConfigColums loColumConfig = new GoogleMapsConfig.GoogleMapsConfigColums(true, "localización");
598 
599  loColumConfig._CodigoCP = _oColumnCP._Codigo;
600  loColumConfig._CodigoPoblacion = _oColumnPoblacion._Codigo;
601 
602  _oColumns.Add("contador", loColumConfig);
603  }
604 
609  public GoogleMapsConfig(Boolean tlActivo)
610  {
611  _bGoogleMaps = tlActivo;
612  }
613 
618  public GoogleMapsConfig(XElement toElement)
619  {
620  _bGoogleMaps = Convert.ToBoolean(toElement.Element("Activo").Value);
621  _cCodigo = toElement.Element("Codigo").Value;
622 
623  foreach (XElement loElement in toElement.Elements("GoogleMapsColumn"))
624  {
625  GoogleMapsConfigColums loConfig = new GoogleMapsConfigColums(loElement);
626 
627  _oColumns.Add(loConfig._Codigo, loConfig);
628  }
629  }
630  }
631 
632 }
Clase para gestionar las columnas de naveción a Google mapas
Clase para la gestión de la configuración de GoogleMaps
GoogleMapsConfig _AddConfig(ColumnDefinition toColCP, ColumnDefinition toColPoblacion)
Añade una configuración para un CP y Población
bool _IsValid()
Indica si hay alguna columna seleccionada
Clase para la configuración de google maps de una columna
TipoCampo
Enum para saber el tipo de campo
ColumnDefinition _ColumnPoblacionRel
Columna población relacionada ( en caso de haber población en el nivel superior)
Dictionary< String, GoogleMapsConfigColums > _Columns
Columnas
GoogleMapsConfig.TipoCampo _TipoCampo
Enum tipo de campo
GoogleMapsConfigColums(Boolean tlActivo, String tcTitulo)
Constructor
GoogleMapsConfig _GoogleMapsConfig
Propiedad GoogleMaps para property grid
ColumnDefinition _ColumnPoblacion
Columna población
Boolean _IsNumeric
Indica si la columna es numerica
GoogleMapsConfig(ColumnDefinition toCp, ColumnDefinition toPoblacion)
Constructor
Boolean _Activo
Indica si activa la navegación de google maps
String _GetCodigoParent()
Obtiene el código de la ruta anterior
Clase para la definición de columnas personalizadas
GoogleMapsConfig(XElement toElement)
Constructor
void _RemoveColumn(ColumnDefinition toColumn)
Elimina una columna de las configuraciones
ColumnDefinition _ColumnCP
Columna código postal
String _Codigo
Código de la configuración
override String _Titulo
Título de la columna
void _SetColumn(ColumnDefinition toColumn)
Añade una columna en todas las configuraciónes
XElement _ToXElement()
Devuelve un XElement con los parámetros de la configuración de Google Maps
XElement _ToXElement()
Devuelve un XElement con los parámetros de la columna
void _Load(Dictionary< string, ColumnDefinition > toListColumns)
A partir de las columnas definidas, carga la configuración de GoogleMaps
GoogleMapsConfig(Boolean tlActivo)
Constructor