ColumnDefinition.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 using sage.ew.reports;
22 using Sage.ES.S50.Addons;
23 using sage.ew.objetos;
24 
25 namespace sage.ew.formul.Clases
26 {
27 
31  [DefaultPropertyAttribute("_Titulo")]
32  public class ColumnDefinition
33  : ColumnDefinitionBase, ICustomTypeDescriptor
34  {
35  #region variables
36 
37  private String _cTituloOriginal = "";
38  private String _cTituloNavegacion = "";
39  private String _cMante = "";
40  private String _cType = "";
41  private Int32 _nWidth = 100;
42  private Int32 _nUserWidth = 100;
43  private Int32 _nPosicion;
44  private Int32 _nTipoCampo = 0;
45  private Boolean _lIncluirSageReports = true;
46  private Boolean _lIncluirCSV = true;
47  private Boolean _lPermitirNavegacion = false;
48  private Boolean _bVisible = true;
49  private Boolean _bInmobilizada = false;
50  private Boolean _bIncluirComunicados = true;
51  private Boolean _bOculta = false;
52  private Accion _oAccion;
53  private Color _oColorLetra = Color.Black;
54  private Color _oColorFondo = Color.White;
55  private TipoMascara _oMascara = TipoMascara.GrandTotal;
56  private Dictionary<String, ColumnDefinition> _oColumnsList;
57  private GoogleMapsConfig _oGoogleMapsConfig;
58  private DefinicionValores _oDefinicionValores;
59  private List<IListadoComunicado> _oComunicados = new List<IListadoComunicado>();
60 
61  private static List<Type> _oTypesComunicados;
62 
63  #endregion variables
64 
65  #region propiedades
66 
70  public enum TipoMascara
71  {
75  [Description("Ninguna")]
76  Ninguna,
80  [Description("Porcentaje")]
81  Porcentaje,
85  [Description("Total")]
86  Total,
90  [Description("Gran total")]
91  GrandTotal,
95  [Description("Peso")]
96  Peso,
100  [Description("Unidades")]
101  Unidades,
105  [Description("Cajas")]
106  Cajas,
110  [Description("Precio/Coste")]
111  PrecioCoste
112  }
113 
117  public enum Accion
118  {
122  [Description("Ninguna")]
123  Ninguna,
127  [Description("Contador")]
128  Contador,
132  [Description("Media")]
133  Media,
137  [Description("Mínimo")]
138  Minimo,
142  [Description("Máximo")]
143  Maximo,
147  [Description("Suma")]
148  Suma,
149  }
150 
154  public enum Activo
155  {
159  [Description("Sí")]
160  Si = 1,
164  [Description("No")]
165  No = 0
166  }
167 
168 
169  private static List<Type> _TypesComunicados
170  {
171  get
172  {
173  if ( _oTypesComunicados == null)
174  {
175 
176  _oTypesComunicados = Assembly.GetAssembly(typeof(ListadoComunicadoBase))?.GetTypes().Where(f => typeof(IListadoComunicado).IsAssignableFrom(f) && !f.IsAbstract).ToList();
177 
178  foreach (IModulo loModulo in AddonsController.Instance.AddonsManager.GetAddons().Values)
179  {
180  if (loModulo._Assembly is Assembly)
181  {
182  try
183  {
184  _oTypesComunicados.AddRange(loModulo._Assembly.GetTypes().Where(f => typeof(IListadoComunicado).IsAssignableFrom(f) && !f.IsAbstract).ToList());
185  }
186  catch (Exception loEx)
187  {
188  DB.Registrar_Error(loEx);
189  }
190  }
191  }
192  }
193 
194  return _oTypesComunicados;
195  }
196  }
197 
201  [Browsable(false)]
202  public bool _ColumnAdded
203  {
204  get
205  {
206  return _DefEntidad is ColumnDefEntidad;
207  }
208  }
209 
213  [Browsable(false)]
214  public Boolean _Oculta
215  {
216  get
217  {
218  return _bOculta;
219  }
220  set
221  {
222  _bOculta = value;
223 
224  if (value)
225  {
226  _IncluirSageReports = ColumnDefinition.Activo.No;
227  _Visible = false;
228  }
229  }
230  }
231 
235  [Browsable(false)]
236  public List<IListadoComunicado> _Comunicados
237  {
238  get
239  {
240  return _oComunicados;
241  }
242  }
243 
247  [ComunicadoAttribute, CategoryAttribute("Propiedades de la columna"), DisplayName("Comunicados"), Description("Incluir los comunicados de la columna al listado"), DefaultValueAttribute(1)]
248  [Editor(typeof(EnumEditor), typeof(UITypeEditor))]
249  [TypeConverter(typeof(EnumConverter<Activo>))]
250  public Activo _IncluirComunicados
251  {
252  get
253  {
254  return _bIncluirComunicados ? Activo.Si : Activo.No;
255  }
256  set
257  {
258  _bIncluirComunicados = (value == Activo.Si);
259  }
260  }
261 
265  [Browsable(false)]
266  public Boolean _Inmobilizada
267  {
268  get
269  {
270  return _bInmobilizada;
271  }
272  set
273  {
274  _bInmobilizada = value;
275  }
276  }
277 
281  [CategoryAttribute("Propiedades de la columna"), DisplayName("Título"), Description("Título de la columna")]
282  [RefreshProperties(RefreshProperties.All)]
283  public override String _Titulo
284  {
285  get
286  {
287  return base._Titulo;
288  }
289  set
290  {
291  _cTituloOriginal = value;
292  if (value.Length > 0)
293  {
294  if (value.Substring(0, 1) == "*")
295  {
296  value = value.Substring(1).ToUpper();
297  }
298  else if (value.Substring(0, 1) == "@")
299  {
300  value = value.Substring(1);
301  }
302  else
303  {
304  value = FUNCTIONS._Proper(value);
305  }
306  }
307  base._Titulo = value;
308  }
309  }
310 
314  [CategoryAttribute("Propiedades de la columna"), DisplayName("Tamaño"), Description("Tamaño de la columna"), DefaultValueAttribute(100)]
315  [RefreshProperties(RefreshProperties.All)]
316  public Int32 _Width
317  {
318  get
319  {
320  return _nWidth;
321  }
322  set
323  {
324  _nWidth = value;
325  }
326  }
327 
331  [Browsable(false)]
332  public Int32 _UserWidth
333  {
334  get
335  {
336  return _nUserWidth;
337  }
338  set
339  {
340  _nUserWidth = value;
341  }
342  }
343 
344 
348  [NumericAttribute, CategoryAttribute("Propiedades de la columna"), DisplayName("Máscara"), Description("Máscara"), DefaultValueAttribute(3)]
349  [RefreshProperties(RefreshProperties.All)]
350  [Editor(typeof(EnumEditor), typeof(UITypeEditor))]
351  [TypeConverter(typeof(EnumConverter<TipoMascara>))]
352  public TipoMascara _Mascara
353  {
354  get
355  {
356  return _IsNumeric ? _oMascara : TipoMascara.Ninguna;
357  }
358  set
359  {
360  _oMascara = value;
361  }
362  }
363 
367  [Browsable(false)]
368  public override List<ColumnDefEntidad> _ListPath
369  {
370  get
371  {
372  return base._ListPath;
373  }
374  set
375  {
376  base._ListPath = value;
377  _ActualizarComunicados();
378 
379  }
380  }
381 
385  [NumericAttribute, CategoryAttribute("Propiedades de la columna"), DisplayName("Totalizar"), Description("Acción a realizar"), DefaultValueAttribute(0)]
386  [RefreshProperties(RefreshProperties.All)]
387  [Editor(typeof(EnumEditor), typeof(UITypeEditor))]
388  [TypeConverter(typeof(EnumConverter<Accion>))]
389  public Accion _Accion
390  {
391  get
392  {
393  return _oAccion;
394  }
395  set
396  {
397  _oAccion = value;
398  }
399  }
400 
404  [EnumerationDefinitionAttribute, CategoryAttribute("Propiedades de la columna"), DisplayName("Valores"), Description("Valores de la columna"), DefaultValueAttribute(0)]
405  [RefreshProperties(RefreshProperties.All)]
406  [Editor(typeof(ValuesEditor), typeof(UITypeEditor))]
407  [TypeConverter(typeof(EmptyConverter))]
408  public DefinicionValores _DefinicionValores
409  {
410  get
411  {
412  if (_oDefinicionValores == null) _oDefinicionValores = new EmptyDefinition(this);
413  return _oDefinicionValores;
414  }
415  set
416  {
417  _oDefinicionValores = value;
418  }
419  }
420 
421 
425  [Browsable(false)]
426  public Listados._Operacion_Calculo _OperacionCalculo
427  {
428  get
429  {
430  switch (_oAccion)
431  {
432  case Accion.Suma:
433  return Listados._Operacion_Calculo.Suma;
434  case Accion.Media:
435  return Listados._Operacion_Calculo.Avg;
436  case Accion.Minimo:
437  return Listados._Operacion_Calculo.Min;
438  case Accion.Maximo:
439  return Listados._Operacion_Calculo.Max;
440  case Accion.Contador:
441  return Listados._Operacion_Calculo.Count;
442  default:
443  return Listados._Operacion_Calculo.Count;
444  }
445  }
446  }
447 
451  [ManteAttribute, CategoryAttribute("Navegación"), DisplayName("Permitir"), Description("Permitir la navegabilidad"), DefaultValueAttribute(0)]
452  [RefreshProperties(RefreshProperties.All)]
453  [Editor(typeof(EnumEditor), typeof(UITypeEditor))]
454  [TypeConverter(typeof(EnumConverter<Activo>))]
455  public Activo _PermitirNavegacion
456  {
457  get
458  {
459  return _lPermitirNavegacion ? Activo.Si : Activo.No;
460  }
461  set
462  {
463  _lPermitirNavegacion = (value == Activo.Si);
464  _SetReadOnlyProperty("_TituloNavegacion", !_lPermitirNavegacion);
465  }
466  }
467 
471  [CategoryAttribute("Sage Reports"), DisplayName("Añadir"), Description("Si se establece el valor a \"Sí\", al editar un report la columna se añadirá automáticamente al documento"), DefaultValueAttribute(1)]
472  [RefreshProperties(RefreshProperties.All)]
473  [Editor(typeof(EnumEditor), typeof(UITypeEditor))]
474  [TypeConverter(typeof(EnumConverter<Activo>))]
475  public Activo _IncluirSageReports
476  {
477  get
478  {
479  return _lIncluirSageReports ? Activo.Si : Activo.No;
480  }
481  set
482  {
483  _lIncluirSageReports = (value == Activo.Si);
484  }
485  }
486 
490  [CategoryAttribute("Sage Reports"), DisplayName("Fichero CSV"), Description("Si se establece el valor a \"Sí\", el campo se incluirá en la exportación a CSV aunque no este definido en el report"), DefaultValueAttribute(1)]
491  [RefreshProperties(RefreshProperties.All)]
492  [Editor(typeof(EnumEditor), typeof(UITypeEditor))]
493  [TypeConverter(typeof(EnumConverter<Activo>))]
494  public Activo _IncluirExportacionCSV
495  {
496  get
497  {
498  return _lIncluirCSV ? Activo.Si : Activo.No;
499  }
500  set
501  {
502  _lIncluirCSV = (value == Activo.Si);
503  }
504  }
505 
509  [Browsable(false)]
510  public Boolean _PermiteNavegacion
511  {
512  get
513  {
514  return _lPermitirNavegacion;
515  }
516  }
517 
521  [Browsable(false)]
522  public Boolean _PermiteGoogleMaps
523  {
524  get
525  {
526  return _NTipoCampo > 0;
527  }
528  }
529 
533  [Browsable(false)]
534  public Boolean _IncluidoSageReports
535  {
536  get
537  {
538  return _lIncluirSageReports;
539  }
540  }
541 
545  [Browsable(false)]
546  public Boolean _IncluidoCSV
547  {
548  get
549  {
550  return _lIncluirCSV;
551  }
552  }
553 
557  [Browsable(false)]
558  public Boolean _ColorsChanged
559  {
560  get
561  {
562  return _oColorFondo.ToArgb() != Color.White.ToArgb() || _ColorLetra.ToArgb() != Color.Black.ToArgb();
563  }
564  }
565 
569  [ManteAttribute, CategoryAttribute("Navegación"), DisplayName("Título"), Description("Título del botón de navegación")]
570  [RefreshProperties(RefreshProperties.All)]
571  [ReadOnly(false)]
572  public String _TituloNavegacion
573  {
574  get
575  {
576  return _cTituloNavegacion;
577  }
578  set
579  {
580  _cTituloNavegacion = value;
581  }
582  }
583 
587  [Editor(typeof(PosicionEditor), typeof(UITypeEditor))]
588  [CategoryAttribute("Posición"), DisplayName("Posición"), Description("Posición de la columna ")]
589  [RefreshProperties(RefreshProperties.All)]
590  [TypeConverter(typeof(EmptyConverter))]
591  public Int32 _Posicion
592  {
593  get
594  {
595  return _nPosicion;
596  }
597  set
598  {
599  _nPosicion = value;
600  }
601  }
602 
606  [Browsable(false)]
607  public String _Mante
608  {
609  get
610  {
611  return _cMante;
612  }
613  set
614  {
615  _cMante = value;
616  }
617  }
618 
622  [CategoryAttribute("Diseño"), DisplayName("Color de fondo"), Description("Color de fondo"), DefaultValue(typeof(Color), "White")]
623  [RefreshProperties(RefreshProperties.All)]
624  public Color _ColorFondo
625  {
626  get
627  {
628  return _oColorFondo;
629  }
630  set
631  {
632  _oColorFondo = value;
633  }
634  }
635 
639  [CategoryAttribute("Diseño"), DisplayName("Color de la letra"), Description("Colorde la letra"), DefaultValue(typeof(Color), "Black")]
640  [RefreshProperties(RefreshProperties.All)]
641  public Color _ColorLetra
642  {
643  get
644  {
645  return _oColorLetra;
646  }
647  set
648  {
649  _oColorLetra = value;
650  _DefinicionValores._DefaultColor = _oColorLetra;
651  }
652  }
653 
657  [GoogleMapsAttribute, CategoryAttribute("Google maps"), DisplayName("Presentar"), Description("Permitir la navegación a google maps"), DefaultValueAttribute(0)]
658  [RefreshProperties(RefreshProperties.All)]
659  [Editor(typeof(EnumEditor), typeof(UITypeEditor))]
660  [TypeConverter(typeof(EnumConverter<Activo>))]
661  public Activo _GoogleMaps
662  {
663  get
664  {
665  return _GoogleMapsConfig._Activo ? Activo.Si : Activo.No;
666  }
667  set
668  {
669  _GoogleMapsConfig._Activo = value == Activo.Si;
670  _SetReadOnlyProperty("_GoogleMapsConfig", !_GoogleMapsConfig._Activo);
671  }
672  }
673 
677  [GoogleMapsAttribute, CategoryAttribute("Google maps"), DisplayName("Columnas"), Description("Selecciona las columnas de navegación a google maps")]
678  [RefreshProperties(RefreshProperties.All)]
679  [Editor(typeof(GoogleMapsEditor), typeof(UITypeEditor))]
680  [ReadOnly(false)]
681  [TypeConverter(typeof(EmptyConverter))]
682  public GoogleMapsConfig _GoogleMapsConfig
683  {
684  get
685  {
686  if (_oGoogleMapsConfig == null) _oGoogleMapsConfig = new GoogleMapsConfig();
687 
688  return _oGoogleMapsConfig;
689  }
690  set
691  {
692  _oGoogleMapsConfig = value;
693  }
694  }
695 
699  [Browsable(false)]
700  public GoogleMapsConfig.TipoCampo _TipoCampo
701  {
702  get
703  {
704  return (GoogleMapsConfig.TipoCampo)_NTipoCampo;
705  }
706  set
707  {
708  _NTipoCampo = Convert.ToInt32(value);
709  }
710  }
711 
715  [Browsable(false)]
716  public Int32 _NTipoCampo
717  {
718  get
719  {
720  return _nTipoCampo;
721  }
722  set
723  {
724  _nTipoCampo = value;
725  }
726  }
727 
731  [Browsable(false)]
732  public Boolean _IsNumeric
733  {
734  get
735  {
736  return _Type == "numerico";
737  }
738  }
739 
743  [Browsable(false)]
744  public Boolean _IsMemo
745  {
746  get
747  {
748  return _Type == "memo";
749  }
750  }
751 
755  [Browsable(false)]
756  public Boolean _IsBoolean
757  {
758  get
759  {
760  return _Type == "logico";
761  }
762  }
763 
764  private String _Type
765  {
766  get
767  {
768  if (String.IsNullOrEmpty(_cType) && _DefEntidad is IDefEntidad)
769  {
770  _cType = DB.SQLTipoCampo(_DefEntidad._DB, _DefEntidad._Tabla, _DefEntidad._Campo);
771 
772  if (_cType == "caracter")
773  {
774  String lcTipoTmp = DB._TablesInformationSchema(_DefEntidad._DB, _DefEntidad._Tabla)._TipoCampo(_DefEntidad._Campo);
775  if (lcTipoTmp == "text" || lcTipoTmp == "ntext") _cType = "memo";
776  }
777  }
778 
779  return _cType;
780  }
781  }
782 
786  [Browsable(false)]
787  public Boolean _IsDate
788  {
789  get
790  {
791  if (String.IsNullOrEmpty(_cType) && _DefEntidad is IDefEntidad) _cType = DB.SQLTipoCampo(_DefEntidad._DB, _DefEntidad._Tabla, _DefEntidad._Campo);
792 
793  return _cType == "fecha";
794  }
795  }
796 
800  [Browsable(false)]
801  public Dictionary<String, ColumnDefinition> _ColumnsList
802  {
803  get
804  {
805  return _oColumnsList;
806  }
807  set
808  {
809  _oColumnsList = value;
810  }
811  }
812 
816  [Browsable(false)]
817  public Boolean _Visible
818  {
819  get
820  {
821  return _bVisible;
822  }
823  set
824  {
825  _bVisible = value;
826  }
827  }
828 
832  [Browsable(false)]
833  public String _Entidad
834  {
835  get
836  {
837  return _GetCodigo(_ListPath, 1);
838  }
839  }
840 
847  public static String _GetCodigo(List<ColumnDefEntidad> loList, Int32 lnPosMax)
848  {
849  if (lnPosMax < 0) lnPosMax = 0;
850  if (loList.Count < lnPosMax) lnPosMax = loList.Count;
851 
852  List<String> loCodigos = (from loDef in loList.GetRange(0, lnPosMax)
853  select loDef._Codigo).ToList();
854 
855 
856  return loCodigos.Count > 0 ? loCodigos.Aggregate((a, b) => a + "_" + b) : "";
857  }
858 
859  #endregion propiedades
860 
861  private void _SetReadOnlyProperty(string tcPropertyName, bool tlValue)
862  {
863  PropertyDescriptor propDescr = TypeDescriptor.GetProperties(this.GetType())[tcPropertyName];
864  ReadOnlyAttribute attr = propDescr.Attributes[typeof(ReadOnlyAttribute)] as ReadOnlyAttribute;
865 
866  if (attr != null)
867  {
868  FieldInfo aField = attr.GetType().GetField("isReadOnly", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
869  aField.SetValue(attr, tlValue);
870  }
871  }
872 
877  {
878  _SetReadOnlyProperty("_GoogleMapsConfig", !_GoogleMapsConfig._Activo);
879  _SetReadOnlyProperty("_TituloNavegacion", !_lPermitirNavegacion);
880  }
881 
886  public String _GetMascara()
887  {
888  String lcMascara = "";
889 
890  if (_IsNumeric)
891  {
892  switch (_Mascara)
893  {
894  case TipoMascara.Porcentaje:
895  lcMascara = Convert.ToString(EW_GLOBAL._GetMascaraNet(KeyDiccionarioMascara.wc_tpc));
896  break;
897  case TipoMascara.Total:
898  lcMascara = Convert.ToString(EW_GLOBAL._GetMascaraNet(KeyDiccionarioMascara.wc_total));
899  break;
900  case TipoMascara.GrandTotal:
901  lcMascara = Convert.ToString(EW_GLOBAL._GetMascaraNet(KeyDiccionarioMascara.wc_grantotal));
902  break;
903  case TipoMascara.Peso:
904  lcMascara = Convert.ToString(EW_GLOBAL._GetMascaraNet(KeyDiccionarioMascara.wc_mascarapeso));
905  break;
906  case TipoMascara.Unidades:
907  lcMascara = Convert.ToString(EW_GLOBAL._GetMascaraNet(KeyDiccionarioMascara.wc_unidades));
908  break;
909  case TipoMascara.Cajas:
910  lcMascara = Convert.ToString(EW_GLOBAL._GetMascaraNet(KeyDiccionarioMascara.wc_mascaracajas));
911  break;
912  case TipoMascara.PrecioCoste:
913  lcMascara = Convert.ToString(EW_GLOBAL._GetMascaraNet(KeyDiccionarioMascara.wc_precioven));
914  break;
915  }
916  }
917  else if (_IsDate)
918  {
919  lcMascara = "dd/MM/yyyy";
920  }
921  return lcMascara;
922  }
923 
928  public String _GetCodigoParent()
929  {
930  return _ListPath.Count - 1 > 0 ? _GetCodigo(_ListPath, _ListPath.Count - 1) : _Codigo;
931  }
932 
933  private DefinicionValores _GetDefinicionValores(String tcValores)
934  {
935  DefinicionValores loDef = null;
936 
937  if(_IsBoolean)
938  {
939  loDef = new BooleanDefinition(this);
940  }
941  else if(_IsNumeric && !String.IsNullOrEmpty(tcValores))
942  {
943  loDef = new NumericDefinition(this, tcValores);
944  }
945  else
946  {
947  loDef = new EmptyDefinition(this);
948  }
949 
950  return loDef;
951  }
952 
953  private DefinicionValores _GetDefinicionValores(XElement toValores)
954  {
955  DefinicionValores loDef = null;
956 
957  if (_IsBoolean)
958  {
959  if(toValores is XElement)
960  {
961  loDef = new BooleanDefinition(this, toValores);
962  }
963  else
964  {
965  loDef = new BooleanDefinition(this);
966  }
967  }
968  else if (_IsNumeric && toValores is XElement)
969  {
970  loDef = new NumericDefinition(this, toValores);
971  }
972  else
973  {
974  loDef = new EmptyDefinition(this);
975  }
976 
977  return loDef;
978  }
979 
985  public String _ToSQLColumnName(String tcAlias)
986  {
987  String lcCampoParseado;
988 
989  if (!String.IsNullOrEmpty(tcAlias) && !tcAlias.Trim().EndsWith(".")) tcAlias = String.Format("{0}.", tcAlias.Trim());
990  lcCampoParseado = String.Format("{0}{1}", tcAlias, _DefEntidad._Campo);
991 
992  if (_DefinicionValores._Count > 0)
993  {
994  lcCampoParseado = _DefinicionValores._ToSQL(lcCampoParseado);
995  }
996  else if(_IsMemo)
997  {
998  lcCampoParseado = $"CAST({lcCampoParseado} as varchar(254))";
999  }
1000  else if(_DefEntidad._Campo == "FECHABAJA" && _DefEntidad._Tabla == "ARTICULO")
1001  {
1002  lcCampoParseado = DB.SQLIif($"{tcAlias}BAJA = 1", $"{tcAlias}FECHABAJA", "NULL");
1003  }
1004 
1005  return $"{lcCampoParseado} as '{_Codigo}'";
1006 
1007 
1008  }
1009 
1010  #region constructor
1011 
1016  : base()
1017  {
1018  }
1019 
1024  public ColumnDefinition(String tcTitulo)
1025  : base(tcTitulo)
1026  {
1027 
1028  }
1029 
1033  public ColumnDefinition(DataRow toRow, Boolean tlInicial = false)
1034  : base(toRow, tlInicial)
1035  {
1036  _Mante = Convert.ToString(toRow["MANTE"]).Trim();
1037  _NTipoCampo = Convert.ToInt32(toRow["GOOGLE"]);
1038 
1039  _oDefinicionValores = _GetDefinicionValores(Convert.ToString(toRow["VALORES"]).Trim());
1040  _oComunicados = _GetComunicados(Convert.ToString(toRow["COMUNICADOS"]).Trim());
1041 
1042  //Asignamos el nombre de la columna añadida
1043  _ActualizarComunicados();
1044 
1045  }
1046 
1047  private List<IListadoComunicado> _GetComunicados(string tcComunicados)
1048  {
1049  List<string> loClasses;
1050  List<IListadoComunicado> loComunidados = new List<IListadoComunicado>();
1051 
1052  if (!string.IsNullOrEmpty(tcComunicados))
1053  {
1054  loClasses = tcComunicados.Split(new char[] { ',', ';' }).ToList();
1055  loComunidados = _GetComunicadosByType(loClasses);
1056  }
1057 
1058  return loComunidados;
1059  }
1060 
1066  public static List<IListadoComunicado> _GetComunicadosByType(List<string> toClasses = null)
1067  {
1068  dynamic loObjeto;
1069  List<Type> loTypes;
1070  List<IListadoComunicado> loComunidados = new List<IListadoComunicado>();
1071 
1072  loTypes = (toClasses == null || toClasses.Count == 0) ? _TypesComunicados : _TypesComunicados.Where(f => toClasses.Contains(f.FullName, new StringComparerToLower())).ToList();
1073 
1074  loTypes.ForEach(f =>
1075  {
1076  try
1077  {
1078  loObjeto = Activator.CreateInstance(f);
1079  if (loObjeto is IListadoComunicado) loComunidados.Add(loObjeto);
1080  }
1081  catch (Exception ex)
1082  {
1083  DB.Registrar_Error(ex);
1084  }
1085  });
1086 
1087  return loComunidados;
1088  }
1089 
1090 
1091  private void _ActualizarComunicados()
1092  {
1093  _oComunicados.ForEach(f => f._KeyCampoListado = _Codigo);
1094  }
1095 
1100  public ColumnDefinition(XElement toElement)
1101  {
1102  TipoMascara loMask;
1103  Accion loAccion;
1104  bool lInmo = false;
1105 
1106  _Nombre = toElement.Element("Nombre").Value;
1107  _Titulo = toElement.Element("Caption") != null ? toElement.Element("Caption").Value : _Nombre;
1108  _Width = Convert.ToInt32(toElement.Element("Ancho").Value);
1109  _UserWidth = toElement.Element("AnchoVisible") is XElement ? Convert.ToInt32(toElement.Element("AnchoVisible").Value) : _Width;
1110  _Posicion = Convert.ToInt32(toElement.Element("DisplayIndex").Value);
1111  _Visible = toElement.Element("Visible") is XElement ? Convert.ToBoolean(toElement.Element("Visible").Value) : true;
1112  _Inmobilizada = toElement.Element("Inmobilizada") is XElement && Boolean.TryParse(toElement.Element("Inmobilizada").Value, out lInmo) ? lInmo : false;
1113 
1114  _ColorFondo = toElement.Element("BackColor") is XElement ? _ToColor(toElement.Element("BackColor").Value, Color.White) : Color.White;
1115  _ColorLetra = toElement.Element("ForeColor") is XElement ? _ToColor(toElement.Element("ForeColor").Value, Color.Black) : Color.Black;
1116 
1117  _PermitirNavegacion = toElement.Element("PermitirNavegacion") is XElement && Boolean.TryParse(toElement.Element("PermitirNavegacion").Value, out lInmo) ? lInmo ? Activo.Si : Activo.No : Activo.No;
1118  _TituloNavegacion = toElement.Element("TituloNavegacion") is XElement ? toElement.Element("TituloNavegacion").Value : String.Empty;
1119  _Mante = toElement.Element("Mante") is XElement ? toElement.Element("Mante").Value : String.Empty;
1120 
1121  _IncluirSageReports = toElement.Element("IncluirSageReports") is XElement && Boolean.TryParse(toElement.Element("IncluirSageReports").Value, out lInmo) ? lInmo ? Activo.Si : Activo.No : Activo.Si;
1122  _IncluirExportacionCSV = toElement.Element("IncluirExportacionCSV") is XElement && Boolean.TryParse(toElement.Element("IncluirExportacionCSV").Value, out lInmo) ? lInmo ? Activo.Si : Activo.No : Activo.Si;
1123 
1124  _oMascara = toElement.Element("Mascara") is XElement && Enum.TryParse<TipoMascara>(toElement.Element("Mascara").Value, out loMask) ? loMask : TipoMascara.Ninguna;
1125  _oAccion = toElement.Element("Totalizar") is XElement && Enum.TryParse<Accion>(toElement.Element("Totalizar").Value, out loAccion) ? loAccion : Accion.Ninguna;
1126 
1127  _NTipoCampo = toElement.Element("TipoCampo") is XElement ? Convert.ToInt32(toElement.Element("TipoCampo").Value) : 0;
1128 
1129  _bOculta = toElement.Element("Oculta") is XElement && Boolean.TryParse(toElement.Element("Oculta").Value, out lInmo) ? lInmo : false;
1130 
1131  _DefinicionEntidades.Clear();
1132  if (toElement.Element("Path") is XElement)
1133  {
1134  XElement loElement = toElement.Element("Path");
1135 
1136  foreach (XElement loDef in loElement.Elements("Def"))
1137  {
1138  ColumnDefEntidad loDefEntidad = new ColumnDefEntidad(loDef.Element("Codigo").Value, loDef.Element("Campo").Value, loDef.Element("Tabla").Value, loDef.Element("Relacion").Value, loDef.Element("DB").Value);
1139 
1140  if (loDef.Elements("DataRel").Count() > 0)
1141  {
1142  XElement loDefRel = loDef.Element("DataRel");
1143  loDefEntidad._DataFieldRelation = new ColumnDefEntidad("", loDefRel.Element("Campo").Value, loDefRel.Element("Tabla").Value, "", loDefRel.Element("DB").Value);
1144  }
1145 
1146  if(loDef.Element("CampoRel") is XElement) loDefEntidad._CampoRel = Convert.ToInt32(loDef.Element("CampoRel").Value);
1147 
1148  _oListDefEntidad.Add(loDefEntidad);
1149  _oDefEntidad = loDefEntidad;
1150  }
1151  }
1152 
1153  if (toElement.Element("GoogleMapsConfig") is XElement)
1154  {
1155  _GoogleMapsConfig = new GoogleMapsConfig(toElement.Element("GoogleMapsConfig"));
1156  }
1157 
1158  _oDefinicionValores = _GetDefinicionValores(toElement.Element("ValoresDefinidos") is XElement ? toElement.Element("ValoresDefinidos") : null);
1159 
1160  XElement loComunicados;
1161 
1162  loComunicados = toElement.Element("Comunicados");
1163 
1164  if(loComunicados is XElement)
1165  {
1166  _IncluirComunicados = loComunicados.Element("Incluir") is XElement && Boolean.TryParse(loComunicados.Element("Incluir").Value, out lInmo) ? lInmo ? Activo.Si : Activo.No : Activo.No;
1167  _oComunicados = _GetComunicados(loComunicados.Element("Clases") is XElement ? loComunicados.Element("Clases").Value : null);
1168 
1169  //Asignamos el nombre de la columna añadida
1170  _ActualizarComunicados();
1171  }
1172  }
1173 
1178  public ColumnDefinition(DataColumn toElement)
1179  {
1180  _Nombre = toElement.ColumnName;
1181  _Titulo = toElement.Caption;
1182 
1183  if (toElement.ExtendedProperties.ContainsKey("Width")) _Width = Convert.ToInt32(toElement.ExtendedProperties["Width"]);
1184  if (toElement.ExtendedProperties.ContainsKey("NoSeleccionada")) _Visible = !Convert.ToBoolean(toElement.ExtendedProperties["NoSeleccionada"]);
1185  }
1186 
1187  #endregion constructor
1188 
1189  private Color _ToColor(String tcColor, Color toColorDefecte)
1190  {
1191  Int32 lnColorInt = 0;
1192  Color loColor = toColorDefecte;
1193 
1194  if (!String.IsNullOrEmpty(tcColor) && Int32.TryParse(tcColor, out lnColorInt))
1195  {
1196  loColor = Color.FromArgb(lnColorInt);
1197  }
1198  return loColor;
1199  }
1200 
1205  public XElement _ToXElement()
1206  {
1207  XElement loElement;
1208  List<XElement> loList = new List<XElement>();
1209  List<XElement> loPath = new List<XElement>();
1210  List<XElement> loValores = new List<XElement>();
1211 
1212  loList.Add(new XElement("Nombre", _Nombre));
1213  loList.Add(new XElement("Ancho", _Width));
1214  loList.Add(new XElement("AnchoVisible", _UserWidth));
1215  loList.Add(new XElement("Visible", _Visible));
1216  loList.Add(new XElement("DisplayIndex", _Posicion));
1217  loList.Add(new XElement("Caption", _cTituloOriginal));
1218  loList.Add(new XElement("Inmobilizada", _Inmobilizada ? Boolean.TrueString : Boolean.FalseString));
1219  loList.Add(new XElement("BackColor", _ColorFondo.ToArgb()));
1220  loList.Add(new XElement("ForeColor", _ColorLetra.ToArgb()));
1221  loList.Add(new XElement("IncluirSageReports", _IncluidoSageReports ? Boolean.TrueString : Boolean.FalseString));
1222  loList.Add(new XElement("IncluirExportacionCSV", _IncluidoCSV ? Boolean.TrueString : Boolean.FalseString));
1223  loList.Add(new XElement("PermitirNavegacion", _PermiteNavegacion ? Boolean.TrueString : Boolean.FalseString));
1224  loList.Add(new XElement("TituloNavegacion", _TituloNavegacion ));
1225  loList.Add(new XElement("Mante", _Mante));
1226  loList.Add(new XElement("Mascara", Convert.ToInt32(_Mascara)));
1227  loList.Add(new XElement("Totalizar", Convert.ToInt32(_Accion)));
1228  loList.Add(new XElement("TipoCampo", _NTipoCampo));
1229  loList.Add(new XElement("Oculta", _Oculta));
1230  loList.Add(new XElement("Comunicados", new XElement("Incluir", _bIncluirComunicados ? Boolean.TrueString : Boolean.FalseString), new XElement("Clases", _Comunicados.Count > 0 ? string.Join(",", _Comunicados.Select(f => f.GetType().ToString())) : "")));
1231 
1232  if (_ListPath.Count > 0)
1233  {
1234  foreach (ColumnDefEntidad loDef in _ListPath)
1235  {
1236  loPath.Add(new XElement("Def", new XElement("Codigo", loDef._Codigo), new XElement("DB", loDef._DB), new XElement("Tabla", loDef._Tabla), new XElement("Campo", loDef._Campo), new XElement("Relacion", loDef._Relacion), new XElement("CampoRel", loDef._CampoRel), new XElement("DataRel", new XElement("DB", loDef._DataFieldRelation._DB), new XElement("Tabla", loDef._DataFieldRelation._Tabla), new XElement("Campo", loDef._DataFieldRelation._Campo))));
1237  }
1238  loList.Add(new XElement("Path", loPath.ToArray()));
1239  }
1240 
1241  if(_GoogleMapsConfig._Activo) loList.Add(_GoogleMapsConfig._ToXElement());
1242 
1243  if ((_IsBoolean || _IsNumeric) && _DefinicionValores is DefinicionValores) loList.Add(((DefinicionValores)_DefinicionValores)._ToXElement());
1244 
1245  loElement = new XElement("Columna", loList.ToArray());
1246 
1247  return loElement;
1248  }
1249 
1255  public static List<ColumnDefinition> _ValidaCondicion(List<ColumnDefinition> toColumns)
1256  {
1257  if (toColumns == null)
1258  return null;
1259 
1260  string lcSQL;
1261  List<string> loIds;
1262  List<DataRow> loRows;
1263  ColumnDefinition loCol;
1264  DataTable loDt = new DataTable();
1265 
1266  loIds = toColumns.Where(f => f._ColumnAdded).Select(f => $"(ca.campo = '{f._DefEntidad._Campo}' AND ta.BASEDATOS = '{f._DefEntidad._DB}' AND ta.TABLA = '{f._DefEntidad._Tabla}') ").ToList();
1267 
1268  if (loIds.Count > 0)
1269  {
1270  lcSQL = $@"SELECT ca.CAMPO,ta.BASEDATOS, ta.TABLA, ca.CONDICION FROM {DB.SQLDatabase("COMUNES", "CAMPOS")} ca " +
1271  $@"INNER JOIN { DB.SQLDatabase("COMUNES", "TABLAS")} ta ON ca.IDTABLA = ta.ID " +
1272  $@"WHERE CONDICION <> '' AND ({string.Join(" OR ", loIds)})";
1273 
1274  if (DB.SQLExec(lcSQL, ref loDt) && loDt.Rows.Count > 0)
1275  {
1276  loRows = (from loRow in loDt.AsEnumerable()
1277  where !_ValidateCondition(Convert.ToString(loRow["CONDICION"]))
1278  select loRow).ToList();
1279 
1280  loRows.ForEach(loRow =>
1281  {
1282  loCol = toColumns.Where(f => f._ColumnAdded && f._DefEntidad._Campo.Trim() == Convert.ToString(loRow["CAMPO"]).Trim() && f._DefEntidad._DB.Trim() == Convert.ToString(loRow["BASEDATOS"]).Trim() && f._DefEntidad._Tabla.Trim() == Convert.ToString(loRow["TABLA"]).Trim()).FirstOrDefault();
1283  if (loCol is ColumnDefinition) toColumns.Remove(loCol);
1284  });
1285 
1286  }
1287  }
1288 
1289  return toColumns;
1290  }
1291 
1292  private static bool _ValidateCondition(string tcCondition)
1293  {
1294  tcCondition = tcCondition.Trim();
1295 
1296  return (string.IsNullOrEmpty(tcCondition) || (!string.IsNullOrEmpty(tcCondition) && Menu50._EvaluarCondicion(tcCondition))) ? true : false;
1297  }
1298 
1299  #region "TypeDescriptor Implementation"
1300 
1305  public String GetClassName()
1306  {
1307  return TypeDescriptor.GetClassName(this, true);
1308  }
1309 
1314  public AttributeCollection GetAttributes()
1315  {
1316  return TypeDescriptor.GetAttributes(this, true);
1317  }
1318 
1323  public String GetComponentName()
1324  {
1325  return TypeDescriptor.GetComponentName(this, true);
1326  }
1327 
1332  public TypeConverter GetConverter()
1333  {
1334  return TypeDescriptor.GetConverter(this, true);
1335  }
1336 
1341  public EventDescriptor GetDefaultEvent()
1342  {
1343  return TypeDescriptor.GetDefaultEvent(this, true);
1344  }
1345 
1350  public PropertyDescriptor GetDefaultProperty()
1351  {
1352  return TypeDescriptor.GetDefaultProperty(this, true);
1353  }
1354 
1360  public object GetEditor(Type editorBaseType)
1361  {
1362  return TypeDescriptor.GetEditor(this, editorBaseType, true);
1363  }
1364 
1370  public EventDescriptorCollection GetEvents(Attribute[] attributes)
1371  {
1372  return TypeDescriptor.GetEvents(this, attributes, true);
1373  }
1374 
1379  public EventDescriptorCollection GetEvents()
1380  {
1381  return TypeDescriptor.GetEvents(this, true);
1382  }
1383 
1389  public PropertyDescriptorCollection GetProperties(Attribute[] attributes)
1390  {
1391  List<PropertyDescriptor> fullList = new List<PropertyDescriptor>();
1392 
1393  //gets the base properties (omits custom properties)
1394  PropertyDescriptorCollection defaultProperties = TypeDescriptor.GetProperties(this, attributes, true);
1395 
1396  foreach (PropertyDescriptor prop in defaultProperties)
1397  {
1398  if (prop.Attributes.OfType<NumericAttribute>().Count() > 0)
1399  {
1400  if (_IsNumeric && _DefinicionValores._Count == 0) fullList.Add(prop);
1401  }
1402  else if(prop.Attributes.OfType<EnumerationDefinitionAttribute>().Count() > 0)
1403  {
1404  if ((_IsNumeric || _IsBoolean) && _DefinicionValores._Count > 0) fullList.Add(prop);
1405  }
1406  else if (prop.Attributes.OfType<ManteAttribute>().Count() > 0)
1407  {
1408  if (!String.IsNullOrEmpty(_Mante)) fullList.Add(prop);
1409  }
1410  else if (prop.Attributes.OfType<GoogleMapsAttribute>().Count() > 0)
1411  {
1412  if (_PermiteGoogleMaps) fullList.Add(prop);
1413  }
1414  else if (prop.Attributes.OfType<ComunicadoAttribute>().Count() > 0)
1415  {
1416  if (Convert.ToBoolean(EW_GLOBAL._GetVariable("WL_COMUNICADOS")) && _Comunicados.Count > 0) fullList.Add(prop);
1417  }
1418  else
1419  {
1420  fullList.Add(prop);
1421  }
1422  }
1423 
1424  return new PropertyDescriptorCollection(fullList.ToArray());
1425  }
1426 
1431  public PropertyDescriptorCollection GetProperties()
1432  {
1433 
1434  return TypeDescriptor.GetProperties(this, true);
1435 
1436  }
1437 
1443  public object GetPropertyOwner(PropertyDescriptor pd)
1444  {
1445  return this;
1446  }
1447  #endregion
1448  }
1449 
1450  #region attributtes
1451 
1455  public class NumericAttribute : Attribute
1456  {
1457 
1458  }
1459 
1463  public class ComunicadoAttribute : Attribute
1464  {
1465 
1466  }
1467 
1471  public class ManteAttribute : Attribute
1472  {
1473 
1474  }
1475 
1479  public class GoogleMapsAttribute : Attribute
1480  {
1481 
1482  }
1483 
1487  public class BooleanAttribute : Attribute
1488  {
1489 
1490  }
1491 
1495  public class EnumerationDefinitionAttribute : Attribute
1496  {
1497 
1498  }
1499 
1500  #endregion attributtes
1501 
1506  {
1507  private String _cCodigo;
1508  private String _cTablaId;
1509  private ColumnDefEntidad _oDataFieldRelation = null;
1510 
1511  private Int32 _nCampoRel = 0;
1512  private ColumnDefEntidad _oColumnRel = null;
1513 
1517  [Browsable(false)]
1518  public Int32 _CampoRel
1519  {
1520  get
1521  {
1522  return _nCampoRel;
1523  }
1524  set
1525  {
1526  if (_nCampoRel != value)
1527  {
1528  _nCampoRel = value;
1529  _oColumnRel = null;
1530  }
1531  }
1532  }
1533 
1534 
1538  public ColumnDefEntidad _ColumnRel
1539  {
1540  get
1541  {
1542  if (_oColumnRel == null && _nCampoRel > 0)
1543  {
1544  DataTable loDt = ColumnDefinition._GetColumns(String.Format("ca.IDCAMPO = {0}", _nCampoRel), Convert.ToInt32(_Relacion));
1545  if (loDt.Rows.Count > 0) _oColumnRel = new ColumnDefEntidad(loDt.Rows[0], false);
1546  }
1547  return _oColumnRel;
1548  }
1549  }
1550 
1554  public String _Codigo
1555  {
1556  get
1557  {
1558  return _cCodigo;
1559  }
1560  set
1561  {
1562  _cCodigo = value;
1563  }
1564  }
1565 
1569  public String _TablaId
1570  {
1571  get
1572  {
1573  return _cTablaId;
1574  }
1575  set
1576  {
1577  _cTablaId = value;
1578  }
1579  }
1580 
1584  public ColumnDefEntidad _DataFieldRelation
1585  {
1586  get
1587  {
1588  if (_oDataFieldRelation == null) _oDataFieldRelation = new ColumnDefEntidad();
1589  return _oDataFieldRelation;
1590  }
1591  set
1592  {
1593  _oDataFieldRelation = value;
1594  }
1595  }
1596 
1601  : base()
1602  {
1603  }
1604 
1610  public ColumnDefEntidad(DataRow toRow, Boolean tlInicial = false)
1611  : base()
1612  {
1613  String tcTitulo = Convert.ToString(toRow["NOMBRE"]).Trim();
1614  String tcIdMante = Convert.ToString(toRow[tlInicial ? "ID" : "IDMANTE"]);
1615  String tcIdTabla = Convert.ToString(toRow["ID"]);
1616  String lcCodigo = Convert.ToString(toRow["IDCAMPO"]).Trim();
1617  String lcCampo = Convert.ToString(toRow["CAMPO"]).Trim();
1618  String lcMante = Convert.ToString(toRow["MANTE"]).Trim().ToLower();
1619  Int32 lnIdCampoRel = Convert.ToInt32(toRow["IDCAMPOR"]);
1620 
1621  lcCodigo = String.IsNullOrWhiteSpace(lcMante) ? String.Format("{0}", lcCampo).ToLower() : String.Format("{0}_{1}", lcMante, lcCampo).ToLower();
1622 
1623  ColumnDefEntidad loDefEntidadRel = new ColumnDefEntidad() { _DB = Convert.ToString(toRow["BASEDATOS_REL"]).Trim(), _Tabla = Convert.ToString(toRow["TABLA_REL"]).Trim(), _Campo = Convert.ToString(toRow["CAMPO_REL"]).Trim(), _Empresa = false };
1624 
1625  _Codigo = lcCodigo;
1626  _DB = Convert.ToString(toRow["BASEDATOS"]).Trim();
1627  _TablaId = tcIdTabla;
1628  _Tabla = Convert.ToString(toRow["TABLA"]).Trim();
1629  _Campo = lcCampo;
1630  _Relacion = tcIdMante;
1631  _Empresa = false;
1632  _DataFieldRelation = loDefEntidadRel;
1633  _CampoRel = lnIdCampoRel;
1634 
1635 
1636  }
1637 
1647  public ColumnDefEntidad(string tcCodigo, string tcCampo, string tcTabla, string tcRelacion, string tcDb = "GESTION", bool tlEmpresa = false)
1648  : base(tcCampo, tcTabla, tcRelacion, tcDb, tlEmpresa)
1649  {
1650  _cCodigo = tcCodigo;
1651  }
1652  }
1653 
1657  public class GoogleMapsEditor : UITypeEditor
1658  {
1664  public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
1665  {
1666  ReadOnlyAttribute attr = context.PropertyDescriptor.Attributes[typeof(ReadOnlyAttribute)] as ReadOnlyAttribute;
1667  return attr.IsReadOnly ? UITypeEditorEditStyle.None : UITypeEditorEditStyle.Modal;
1668  }
1669 
1677  public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
1678  {
1679  IWindowsFormsEditorService svc = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService;
1680  ReadOnlyAttribute attr = context.PropertyDescriptor.Attributes[typeof(ReadOnlyAttribute)] as ReadOnlyAttribute;
1681 
1682  if (svc != null && !attr.IsReadOnly)
1683  {
1684  ColumnDefinition loDef = (ColumnDefinition)context.Instance;
1685 
1687 
1688  loForm._ColumnsList = loDef._ColumnsList;
1689  loForm._GoogleMapsColumns = (GoogleMapsConfig)value;
1690  loForm._ShowDialog();
1691 
1692  if (DialogResult.OK == loForm.DialogResult)
1693  {
1694  loDef._GoogleMapsConfig._Columns = loForm._GoogleMapsColumns._Columns;
1695  }
1696  }
1697 
1698  return value;
1699  }
1700  }
1701 
1705  public class PosicionEditor : UITypeEditor
1706  {
1712  public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
1713  {
1714  return UITypeEditorEditStyle.Modal;
1715  }
1716 
1724  public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
1725  {
1726  IWindowsFormsEditorService svc = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService;
1727 
1728  if (svc != null)
1729  {
1730  ColumnDefinition loDef = (ColumnDefinition)context.Instance;
1731 
1733 
1734  loForm._ColumnsList = loDef._ColumnsList;
1735  loForm._ShowDialog();
1736 
1737  if (DialogResult.OK == loForm.DialogResult)
1738  {
1739  loDef._ColumnsList = loForm._ColumnsList;
1740  }
1741  }
1742 
1743  return value;
1744  }
1745  }
1746 
1747 
1751  public class ValuesEditor : UITypeEditor
1752  {
1758  public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
1759  {
1760  return UITypeEditorEditStyle.Modal;
1761  }
1762 
1770  public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
1771  {
1772  IWindowsFormsEditorService svc = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService;
1773 
1774  if (svc != null)
1775  {
1776  ColumnDefinition loDef = (ColumnDefinition)context.Instance;
1777 
1779 
1780  loForm._ColumnName = loDef._Titulo;
1781  loForm._DefinicionValores = loDef._DefinicionValores;
1782  loForm._ShowDialog();
1783 
1784  if (DialogResult.OK == loForm.DialogResult)
1785  {
1786  loDef._DefinicionValores = loForm._DefinicionValores;
1787  }
1788  }
1789 
1790  return value;
1791  }
1792  }
1793 
1797  public class EnumEditor : UITypeEditor
1798  {
1799  private IWindowsFormsEditorService _editorService;
1800  private bool _cancel;
1801 
1807  public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
1808  {
1809  return UITypeEditorEditStyle.DropDown;
1810  }
1811 
1819  public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
1820  {
1821  ListBox loListBox;
1822 
1823  _editorService = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
1824 
1825  loListBox = _GetListBox();
1826 
1827  Type enumType = value.GetType();
1828  if (enumType.IsEnum)
1829  {
1830  foreach (FieldInfo fi in _GetFields(context, enumType))
1831  {
1832  EnumItem item = new EnumItem();
1833  item.Value = fi.GetValue(null);
1834 
1835  object[] atts = fi.GetCustomAttributes(typeof(DescriptionAttribute), true);
1836  if (atts != null && atts.Length > 0)
1837  {
1838  item.Name = ((DescriptionAttribute)atts[0]).Description;
1839  }
1840  else
1841  {
1842  item.Name = fi.Name;
1843  }
1844 
1845  int index = loListBox.Items.Add(item);
1846 
1847  if (fi.Name == value.ToString())
1848  {
1849  loListBox.SetSelected(index, true);
1850  }
1851  }
1852  }
1853  else
1854  {
1855  throw new InvalidOperationException();
1856  }
1857 
1858  loListBox.Height = Convert.ToInt32(loListBox.Items.Count * (loListBox.ItemHeight + 5));
1859 
1860  _cancel = false; ;
1861  _editorService.DropDownControl(loListBox);
1862  if (_cancel || loListBox.SelectedIndices.Count == 0)
1863  return value;
1864 
1865  return ((EnumItem)loListBox.SelectedItem).Value;
1866  }
1867 
1868  private ListBox _GetListBox()
1869  {
1870  ListBox loListBox = new ListBox();
1871 
1872  loListBox.DisplayMember = "Name";
1873  loListBox.IntegralHeight = true;
1874  loListBox.SelectionMode = SelectionMode.One;
1875  loListBox.MouseClick += OnListBoxMouseClick;
1876  loListBox.KeyDown += OnListBoxKeyDown;
1877  loListBox.PreviewKeyDown += OnListBoxPreviewKeyDown;
1878  loListBox.BorderStyle = BorderStyle.None;
1879 
1880  return _ConfigureListBox(loListBox);
1881  }
1882 
1888  protected virtual ListBox _ConfigureListBox(ListBox toListBox)
1889  {
1890  return toListBox;
1891  }
1892 
1899  protected virtual IEnumerable<FieldInfo> _GetFields(ITypeDescriptorContext context, Type toEnumType)
1900  {
1901  return toEnumType.GetFields(BindingFlags.Public | BindingFlags.Static);
1902  }
1903 
1904  private class EnumItem
1905  {
1906  public object Value { get; set; }
1907  public string Name { get; set; }
1908  }
1909 
1910  private void OnListBoxPreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
1911  {
1912  if (e.KeyCode == Keys.Escape)
1913  {
1914  _cancel = true;
1915  _editorService.CloseDropDown();
1916  }
1917  }
1918 
1919  private void OnListBoxMouseClick(object sender, MouseEventArgs e)
1920  {
1921  int index = ((ListBox)sender).IndexFromPoint(e.Location);
1922  if (index >= 0)
1923  {
1924  _editorService.CloseDropDown();
1925  }
1926  }
1927 
1928  private void OnListBoxKeyDown(object sender, KeyEventArgs e)
1929  {
1930  if (e.KeyCode == Keys.Enter)
1931  {
1932  _editorService.CloseDropDown();
1933  }
1934  }
1935  }
1936 
1940  public class EmptyConverter: TypeConverter
1941  {
1950  public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
1951  {
1952  return String.Empty ;
1953  }
1954  }
1955 
1960  public class EnumConverter<TEnum> : TypeConverter where TEnum : struct
1961  {
1968  public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
1969  {
1970  return sourceType == typeof(string) || base.CanConvertFrom(context, sourceType);
1971  }
1972 
1980  public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
1981  {
1982  string svalue = string.Format(culture, "{0}", value);
1983  TEnum e;
1984  if (Enum.TryParse(svalue, out e))
1985  return e;
1986 
1987  foreach (FieldInfo fi in typeof(TEnum).GetFields(BindingFlags.Public | BindingFlags.Static))
1988  {
1989  object[] atts = fi.GetCustomAttributes(typeof(DescriptionAttribute), true);
1990  if (atts != null && atts.Length > 0)
1991  {
1992  if (string.Compare(((DescriptionAttribute)atts[0]).Description, svalue, StringComparison.OrdinalIgnoreCase) == 0)
1993  return fi.GetValue(null);
1994  }
1995  }
1996 
1997  return base.ConvertFrom(context, culture, value);
1998  }
1999 
2006  public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
2007  {
2008  return destinationType == typeof(string) || base.CanConvertTo(context, destinationType);
2009  }
2010 
2019  public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
2020  {
2021  if (destinationType == typeof(string))
2022  {
2023  string svalue = string.Format(culture, "{0}", value);
2024  foreach (FieldInfo fi in typeof(TEnum).GetFields(BindingFlags.Public | BindingFlags.Static))
2025  {
2026  object[] atts = fi.GetCustomAttributes(typeof(DescriptionAttribute), true);
2027  if (atts != null && atts.Length > 0)
2028  {
2029  if (string.Compare(fi.Name, svalue, StringComparison.OrdinalIgnoreCase) == 0)
2030  return ((DescriptionAttribute)atts[0]).Description;
2031  }
2032  }
2033  }
2034  return base.ConvertTo(context, culture, value, destinationType);
2035  }
2036  }
2037 
2038  #region ValuesDefinition
2039 
2043  public class EmptyDefinition
2045  {
2049  public override List<DefinicionValor> _Values
2050  {
2051  get
2052  {
2053  return new List<DefinicionValor>();
2054  }
2055  }
2056 
2061  public EmptyDefinition(ColumnDefinition toColumnDefinition)
2062  : base(toColumnDefinition)
2063  {
2064  }
2065  }
2066 
2070  public class BooleanDefinition
2072  {
2073  private String _cDefaultDefinicionValorTrue = "Sí";
2074  private String _cDefaultDefinicionValorFalse = "No";
2075 
2080  public BooleanDefinition(ColumnDefinition toColumnDefinition)
2081  : base(toColumnDefinition)
2082  {
2083  _SetValue(true, _cDefaultDefinicionValorTrue, "Verdadero");
2084  _SetValue(false, _cDefaultDefinicionValorFalse, "Falso");
2085  }
2086 
2092  public override String _ToSQL(String tcFieldName)
2093  {
2094  Dictionary<String, String> loDic = new Dictionary<string, string>();
2095 
2096  loDic.Add(DB.SQLTrue(), DB.SQLString(_GetValue(true)));
2097  loDic.Add(DB.SQLFalse(), DB.SQLString(_GetValue(false)));
2098 
2099  return DB.SQLCase(tcFieldName, loDic, "''");
2100  }
2101 
2107  public BooleanDefinition(ColumnDefinition toColumnDefinition, XElement toValores)
2108  :base(toColumnDefinition, toValores)
2109  {
2110  _SetKeyDescription(true, "Verdadero");
2111  _SetKeyDescription(false, "Falso");
2112  }
2113  }
2114 
2118  public class NumericDefinition
2120  {
2126  public NumericDefinition(ColumnDefinition toColumnDefinition, String tcValores)
2127  :base(toColumnDefinition)
2128  {
2129  _SetValores(tcValores);
2130  }
2131 
2137  public NumericDefinition(ColumnDefinition toColumnDefinition, XElement toValores)
2138  : base(toColumnDefinition, toValores)
2139  {
2140  _ComprobarValores();
2141  }
2142 
2143  private void _ComprobarValores()
2144  {
2145  String lcSql;
2146  DataTable loDt = new DataTable();
2147 
2148  lcSql = String.Format("SELECT c.VALORES FROM {0} c INNER JOIN {1} t ON t.ID = c.IDTABLA WHERE c.CAMPO = '{2}' AND t.TABLA = '{3}' AND t.BASEDATOS = '{4}' ", DB.SQLDatabase("COMUNES", "CAMPOS"), DB.SQLDatabase("COMUNES", "TABLAS"), _ColumDefinition._DefEntidad._Campo, _ColumDefinition._DefEntidad._Tabla, _ColumDefinition._DefEntidad._DB);
2149 
2150  if(DB.SQLExec(lcSql , ref loDt) && loDt.Rows.Count > 0)
2151  {
2152  List<DefinicionValor> loDefTmp;
2153  List<DefinicionValor> loTmp = _Values.Where(f=>f._ColorChanged()).ToList();
2154 
2155  _SetValores(Convert.ToString(loDt.Rows[0]["VALORES"]));
2156 
2157  foreach(DefinicionValor loDef in loTmp)
2158  {
2159  loDefTmp = _Values.Where(f => f._Key == loDef._Key).ToList();
2160  if (loDefTmp.Count > 0) loDefTmp.First()._Color = loDef._Color;
2161  }
2162  }
2163  }
2164 
2165  private void _SetValores(String tcValores)
2166  {
2167  String[] loValores;
2168  String lcKey, lcValue, lcValorTmp;
2169 
2170  _Values.Clear();
2171 
2172  try
2173  {
2174  if (!String.IsNullOrEmpty(tcValores.Trim()))
2175  {
2176  loValores = tcValores.Split(',');
2177 
2178  foreach (String lcValor in loValores)
2179  {
2180  lcValorTmp = lcValor.Trim();
2181  lcKey = lcValorTmp.Substring(0, lcValorTmp.IndexOf(' '));
2182  lcValue = lcValorTmp.Trim().Substring(lcValorTmp.IndexOf(' ') + 1);
2183 
2184  _SetValue(lcKey, lcValue);
2185  }
2186  }
2187  }
2188  catch
2189  {
2190  _Values.Clear();
2191  }
2192  }
2193  }
2194 
2198  public abstract class DefinicionValores
2199  {
2200  private ColumnDefinition _oColumnDefinition;
2201  private List<DefinicionValor> _oValues = new List<DefinicionValor>();
2202  private Color _oDefaultColor = Color.Black;
2203 
2207  public Color _DefaultColor
2208  {
2209  get
2210  {
2211  return _oDefaultColor;
2212  }
2213  internal set
2214  {
2215  _oDefaultColor = value;
2216 
2217  foreach(DefinicionValor loDefinicionValor in _Values)
2218  {
2219  loDefinicionValor._DefaultColor = _oDefaultColor;
2220  }
2221  }
2222  }
2223 
2227  public String _ColumnName
2228  {
2229  get
2230  {
2231  return _oColumnDefinition._Codigo;
2232  }
2233  }
2234 
2238  protected ColumnDefinition _ColumDefinition
2239  {
2240  get
2241  {
2242  return _oColumnDefinition;
2243  }
2244  }
2245 
2249  public Int32 _Count
2250  {
2251  get
2252  {
2253  return _oValues.Count;
2254  }
2255  }
2256 
2260  public virtual List<DefinicionValor> _Values
2261  {
2262  get
2263  {
2264  return _oValues;
2265  }
2266  set
2267  {
2268  _oValues = value;
2269  }
2270  }
2271 
2272 
2273 
2281  public void _SetValue(Object toKey, Object toValue, Color toColor, String tcKeyDescription = "")
2282  {
2283  String lcKey;
2284 
2285  lcKey = toKey.ToString().Trim();
2286  DefinicionValor loValue = _oValues.Find(f => f._Key == lcKey);
2287 
2288  if (loValue is DefinicionValor)
2289  {
2290  loValue._Value = toValue.ToString();
2291  loValue._Color = toColor;
2292  loValue._DefaultColor = _oColumnDefinition._ColorLetra;
2293  loValue._KeyDescription = tcKeyDescription;
2294  }
2295  else
2296  {
2297  _oValues.Add(new DefinicionValor(lcKey, toValue.ToString()) { _Color = toColor, _KeyDescription = tcKeyDescription, _DefaultColor = _oColumnDefinition._ColorLetra });
2298  }
2299  }
2300 
2306  public void _SetValue(Object toKey, Object toValue)
2307  {
2308  _SetValue(toKey, toValue, _DefaultColor);
2309  }
2310 
2317  public void _SetValue(Object toKey, Object toValue, String tcKeyDescription)
2318  {
2319  _SetValue(toKey, toValue, _DefaultColor, tcKeyDescription);
2320  }
2321 
2327  public String _GetValue(Object toKey)
2328  {
2329  String lcKey;
2330 
2331  lcKey = toKey.ToString();
2332  DefinicionValor loValue = _oValues.Find(f => f._Key == lcKey);
2333 
2334  if (loValue is DefinicionValor) lcKey = loValue._Value;
2335 
2336  return lcKey;
2337  }
2338 
2344  protected void _SetKeyDescription(Object toKey, String tcDescription)
2345  {
2346  String lcKey;
2347 
2348  lcKey = toKey.ToString();
2349  DefinicionValor loValue = _oValues.Find(f => f._Key == lcKey);
2350 
2351  if (loValue is DefinicionValor) loValue._KeyDescription = tcDescription;
2352  }
2353 
2359  public virtual String _ToSQL(String tcFieldName)
2360  {
2361  return DB.SQLCase(tcFieldName, _oValues.ToDictionary(a => a._Key, a => DB.SQLString(a._Value)), "''");
2362  }
2363 
2369  private Color _ToColor(String tcColor)
2370  {
2371  Int32 lnColorInt = 0;
2372  Color loColor = Color.Black;
2373 
2374  if (!String.IsNullOrEmpty(tcColor) && Int32.TryParse(tcColor, out lnColorInt))
2375  {
2376  loColor = Color.FromArgb(lnColorInt);
2377  }
2378  return loColor;
2379  }
2380 
2385  public XElement _ToXElement()
2386  {
2387  List<XElement> loLisXElements = new List<XElement>();
2388 
2389  loLisXElements = (from loValue in _Values
2390  select new XElement("ValorDefinido", new XElement[] { new XElement("Key", loValue._Key), new XElement("Value", loValue._Value), new XElement("Color", loValue._Color.ToArgb()) })).ToList();
2391 
2392  return new XElement("ValoresDefinidos", loLisXElements);
2393 
2394  }
2395 
2400  private DefinicionValores(DefinicionValores toSageReportsValuesDefinition)
2401  {
2402  _Values = toSageReportsValuesDefinition._Values;
2403  }
2404 
2410  public DefinicionValores(ColumnDefinition toColumnDefinition, XElement toElement)
2411  :this(toColumnDefinition)
2412  {
2413  if (toElement.Name == "ValoresDefinidos")
2414  {
2415  foreach (XElement loe in toElement.Elements())
2416  {
2417  if (loe.Element("Key") is XElement && loe.Element("Value") is XElement)
2418  {
2419  _SetValue(loe.Element("Key").Value.ToString(), loe.Element("Value").Value.ToString(), _ToColor(loe.Element("Color").Value.ToString()));
2420  }
2421  }
2422  }
2423  }
2424 
2428  public DefinicionValores(ColumnDefinition toColumnDefinition)
2429  {
2430  _oColumnDefinition = toColumnDefinition;
2431  _oDefaultColor = toColumnDefinition._ColorLetra;
2432  }
2433 
2437  public class DefinicionValor
2438  {
2439  private String _cKey;
2440  private String _cKeyDescription;
2441  private String _cValue;
2442  private Color _oColor;
2443  private Color _oDefaultColor = Color.Black;
2444 
2448  internal Color _DefaultColor
2449  {
2450  set
2451  {
2452  if (!_ColorChanged()) _oColor = value;
2453  _oDefaultColor = value;
2454  }
2455  }
2456 
2460  public String _KeyDescription
2461  {
2462  get
2463  {
2464  return String.IsNullOrEmpty(_cKeyDescription) ? _Key : _cKeyDescription;
2465  }
2466  set
2467  {
2468  _cKeyDescription = value.Trim();
2469  }
2470  }
2471 
2475  public String _Key
2476  {
2477  get
2478  {
2479  return _cKey;
2480  }
2481  set
2482  {
2483  _cKey = value.Trim();
2484  }
2485  }
2486 
2490  public String _Value
2491  {
2492  get
2493  {
2494  return _cValue;
2495  }
2496  set
2497  {
2498  _cValue = value;
2499  }
2500  }
2501 
2505  public Color _Color
2506  {
2507  get
2508  {
2509  return _oColor;
2510  }
2511  set
2512  {
2513  _oColor = value;
2514  }
2515  }
2516 
2521  public Boolean _ColorChanged()
2522  {
2523  return _oColor.ToArgb() != _oDefaultColor.ToArgb();
2524  }
2525 
2529  public DefinicionValor(String tcKey, String tcValue)
2530  : this()
2531  {
2532  _Key = tcKey;
2533  _Value = tcValue;
2534  }
2535 
2540  {
2541  _oColor = _oDefaultColor;
2542  }
2543  }
2544 
2545  }
2546 
2547 
2548  #endregion ValuesDefinition
2549 
2554  : IEqualityComparer<string>
2555  {
2562  public bool Equals(string x, string y)
2563  {
2564  return x.ToLower() == y.ToLower();
2565  }
2566 
2572  public int GetHashCode(string obj)
2573  {
2574  return obj.GetHashCode();
2575  }
2576  }
2577 }
BooleanDefinition(ColumnDefinition toColumnDefinition, XElement toValores)
Constructor
override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
Edita el valor del objeto especificado utilizando el estilo del editor indicado por el método "GetEdi...
PE-93426 Interficie para los módulos de la aplicación
Definition: IModulo.cs:22
ColumnDefinition(XElement toElement)
Constructor
Clase para gestionar las columnas de naveción a Google mapas
Dictionary< String, ColumnDefinition > _ColumnsList
Lista de columnas
XElement _ToXElement()
Devuelve un XElement con los parámetros de la columna
DefinicionValores _DefinicionValores
Tamaño de la columna
DefinicionValor(String tcKey, String tcValue)
Constructor
String _ToSQLColumnName(String tcAlias)
Devuelve la columna para la consulta de SQL
AttributeCollection GetAttributes()
GetAttributes
TipoCampo
Enum para saber el tipo de campo
static List< IListadoComunicado > _GetComunicadosByType(List< string > toClasses=null)
Obtener los comunicados, a partir deun listado de clases o todos los que se encuentren en la aplicaci...
Assembly _Assembly
Contendra el Assembly del addon
Definition: IModulo.cs:89
static AddonsController Instance
Instancia al objeto singleton Addons
EventDescriptor GetDefaultEvent()
GetDefaultEvent
Dictionary< String, GoogleMapsConfigColums > _Columns
Columnas
XElement _ToXElement()
Constuye el XElement
ColumnDefEntidad(string tcCodigo, string tcCampo, string tcTabla, string tcRelacion, string tcDb="GESTION", bool tlEmpresa=false)
Constructor
override String _ToSQL(String tcFieldName)
Override _ToSQL
Clase parcial para listados, en esta definición se especificarán los métodos comunes para las demás c...
Definition: _clsListados.cs:61
string _Relacion
Campo relacionado con la relación actual
Definition: DefEntidad.cs:60
Argumentos para los eventos lanzados por el addons en caso de error
Editor de de la posicíon de la columna
virtual ListBox _ConfigureListBox(ListBox toListBox)
Configurar ListBox
Interfície para la gestión de comunicados desde los listados
DefinicionValores(ColumnDefinition toColumnDefinition)
Constructor
string _DB
Base de datos de la relación (GESTION, COMUNES, ETC)
Definition: DefEntidad.cs:40
Dictionary< String, ColumnDefinition > _ColumnsList
Lista de columnas
void _SetValue(Object toKey, Object toValue)
Establece el valor
void _SetValue(Object toKey, Object toValue, Color toColor, String tcKeyDescription="")
Establece el valor
int GetHashCode(string obj)
Devuelve un código hash para el objeto especificado.
virtual List< DefinicionValor > _Values
Listado de valores
KeyDiccionarioMascara
Clave para diccionario de máscaras
Editor de de los valores para las columnas
PropertyDescriptor GetDefaultProperty()
GetDefaultProperty
Clase para la enumeración de los valores de tipo lógico y númericos
GoogleMapsConfig _GoogleMapsConfig
Propiedad GoogleMaps para property grid
Atributo para indicar las propiedades condicionadas a los campos logicos
PropertyDescriptorCollection GetProperties()
GetProperties
static bool _EvaluarCondicion(string tcCondicion)
PE-96028: En caso que tengamos una condición en un registro de la tabla de menús, lo que haremos es e...
Definition: Menu50.cs:2165
NumericDefinition(ColumnDefinition toColumnDefinition, String tcValores)
Constructor
override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
GetEditStyle: Obtiene el estilo de edición asociado a este editor.
Clase para definifirn la definición de entidad
ColumnDefinition(DataRow toRow, Boolean tlInicial=false)
Constructor
Clase para la deficnición de los valores de un campo númerico
BooleanDefinition(ColumnDefinition toColumnDefinition)
Constructor
static String _GetCodigo(List< ColumnDefEntidad > loList, Int32 lnPosMax)
Obtiene el codigo a partir de la ruta
String _GetValue(Object toKey)
Obtiene el valor
Entidad de relación (Columnas adicionales en listados)
Definition: DefEntidad.cs:14
object GetEditor(Type editorBaseType)
GetEditor
void _SetValue(Object toKey, Object toValue, String tcKeyDescription)
Establece el valor
_Operacion_Calculo
Enumeración de las operaciones de cálculo disponibles para __Totalizar
Atributo para indicar las propiedades condicionadas al tipo numerico de la columna ...
ColumnDefinition(String tcTitulo)
Constructor
String _GetMascara()
Obtine la mascara segun el tipo especificado
Clase base para la gestión de comunicados
NumericDefinition(ColumnDefinition toColumnDefinition, XElement toValores)
Constructor
ColumnDefEntidad _DataFieldRelation
Datos para crear la relación
override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
GetEditStyle Obtiene el estilo de edición asociado a este editor.
String _GetCodigoParent()
Obtiene el código de la ruta anterior
override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
CanConvertTo
string _Tabla
Tabla de la relación
Definition: DefEntidad.cs:70
Atributo para indicar las propiedades condicionadas al tipo numerico de la columna ...
virtual String _ToSQL(String tcFieldName)
Paresea los valores según el valor para SQL
Clase para la definición de columnas personalizadas
TypeConverter GetConverter()
GetConverter
Dictionary< String, ColumnDefinition > _ColumnsList
Listado de columnas original
Atributo para indicar las propiedades condicionadas a la navegación de google maps ...
PropertyDescriptorCollection GetProperties(Attribute[] attributes)
GetProperties
IAddonsManager AddonsManager
Gestor de Addons
Atributo para indicar las propiedades condicionadas a los campos logicos
EventDescriptorCollection GetEvents(Attribute[] attributes)
GetEvents
string _Campo
Campo de la relación
Definition: DefEntidad.cs:30
ColumnDefinition(DataColumn toElement)
Constructor
override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
GetEditStyle: Obtiene el estilo de edición asociado a este editor.
String GetComponentName()
GetComponentName
static List< ColumnDefinition > _ValidaCondicion(List< ColumnDefinition > toColumns)
Valida la condición
object GetPropertyOwner(PropertyDescriptor pd)
GetPropertyOwner
Clase para la definición de los valores de un campo lógico
Boolean _ColorChanged()
Indica si ha cambiado el color por defecto
override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
Edita el valor del objeto especificado utilizando el estilo del editor indicado por el método "GetEdi...
override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
ConvertFrom
Calse base para la definición de columnas
PE-95295: Control basado en IElemento para integrar el menú de Sage 50 en el escritorio ...
Definition: Menu50.cs:38
override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
Edita el valor del objeto especificado utilizando el estilo del editor indicado por el método "GetEdi...
override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
ConvertTo
void _ResetSpecialProperties()
Reestablece los valores readonly para las propiedades segun sus valores
Compara dos cadenas pasandolas a minusculas
override String _Titulo
Título de la columna
override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
GetEditStyle: Obtiene el estilo de edición asociado a este editor.
override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
ConvertTo
override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
CanConvertFrom
ColumnDefEntidad(DataRow toRow, Boolean tlInicial=false)
Constructor
virtual IEnumerable< FieldInfo > _GetFields(ITypeDescriptorContext context, Type toEnumType)
override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
Edita el valor del objeto especificado utilizando el estilo del editor indicado por el método "GetEdi...
DefinicionValores(ColumnDefinition toColumnDefinition, XElement toElement)
Constructor
Interficie que define una entidad de relación (Columnas adicionales en listados)
Definition: IDefEntidad.cs:12
Editor de las columnas para SageReports
void _SetKeyDescription(Object toKey, String tcDescription)
Establece la descripción para una key
EmptyDefinition(ColumnDefinition toColumnDefinition)
Constructor
Defincion para la definición de una columna sin valores
Dictionary< string, object > GetAddons()
Devuelve los addons cargados
Atributo para indicar las propiedades condicionadas al comunicado de la columna
Int32 _CampoRel
Campo relacionado para la clave
EventDescriptorCollection GetEvents()
GetEvents
static DataTable _GetColumns(String tcFiltro, Int32 tnTablaId=0)
Devuelve los registros ascociados