ewtxtcodlabel.cs
1 # region Usings
2 using System;
3 using System.Collections.Generic;
4 using System.ComponentModel;
5 using System.Drawing;
6 using System.Data;
7 using System.Windows.Forms;
8 using System.IO;
9 using System.Reflection;
10 using System.Linq;
11 using sage.ew.botones;
12 using sage.ew.db;
13 using sage.ew.global;
14 using sage.ew.objetos;
15 using sage.ew.formul;
16 using sage.ew.docsven;
17 using sage.ew.cliente;
18 using sage.ew.usuario;
19 using sage.ew.functions;
20 using sage.ew.docscompra;
22 using sage.ew.interficies;
23 using sage.ew.formul.Forms;
24 using sage.ew.contabilidad;
25 using System.Text.RegularExpressions;
27 using sage.ew.enumerations;
28 using System.Runtime.InteropServices;
29 using sage.ew.ewbase.Clases;
30 using SBWinCrypt;
31 
32 #endregion Usings
33 
34 namespace sage.ew.txtbox.UserControls
35 {
39  public class TxtCodLabelInfo
40  {
41  #region Propiedades
42 
46  public object _Sender { get; private set; }
47 
51  public string _Valor { get; private set; }
52 
53  #endregion Propiedades
54 
55  #region Constructores
56 
60  public TxtCodLabelInfo() { }
61 
67  public TxtCodLabelInfo(object toSender, string tcValor)
68  {
69  _Sender = toSender;
70  _Valor = tcValor;
71  }
72 
73  #endregion Constructores
74  }
75 
81  public partial class ewtxtcodlabel : UserControl, IObservable<TxtCodLabelInfo>, IObserver<TxtCodLabelInfo>, IObjetoSuscripcionEventos, IObjetoRefresh, IConfigUserOption
82  {
83  //PE-105547 Se implementa un mecanismo para la "comunicación desacoplada" entre controles mediante el patrón del Observador
84  //Cuando se produce una asignación de la propiedad _Codigo el control informa a los N suscriptores
85 
86  //Region para implementar las funciones del comportamiento de control observable
87  #region IObservable
88 
92  List<IObserver<TxtCodLabelInfo>> _lisObservadores = new List<IObserver<TxtCodLabelInfo>>();
93 
99  public IDisposable Subscribe(IObserver<TxtCodLabelInfo> toObservador)
100  {
101  if (!_lisObservadores.Contains(toObservador))
102  {
103  _lisObservadores.Add(toObservador);
104  }
105  return _lisObservadores as IDisposable;
106  }
107 
112  public void UnSubscribe(IObserver<TxtCodLabelInfo> toObservador)
113  {
114  if (_lisObservadores.Contains(toObservador))
115  {
116  _lisObservadores.Remove(toObservador);
117  }
118  }
119 
120  #endregion IObservable
121 
122  //Region para implementar las funciones del comportamiento de observador
123  #region IObserver
124 
128  public virtual void OnCompleted()
129  {
130  //La implementación debe realizarse en la clase derivada
131  }
132 
137  public virtual void OnError(Exception error)
138  {
139  //La implementación debe realizarse en la clase derivada
140  }
141 
146  public virtual void OnNext(TxtCodLabelInfo toObrseved)
147  {
148  //La implementación debe realizarse en la clase derivada
149  }
150 
151  #endregion IObserver
152 
153  //FPE-105547
154 
155  #region INTERFAZ IConfigUserOption
156 
160  public event EventHandler OnConfigUserValueChanged;
161 
165  public bool _EsOpcionalConfigUser { get; set; } = false;
166 
170  public bool _UsuarioPermiteConfigUser { get; set; } = false;
171 
175  public string _DescripcionOpcional { get; set; }
176 
180  public bool _PermitirConfigUser
181  {
182  get { return _lPermitirConfigUser; }
183  set { _lPermitirConfigUser = value; }
184  }
185  private bool _lPermitirConfigUser = true;
186 
190  public string _DescripcionError
191  {
192  get { return _cDescripcionError; }
193  set { _cDescripcionError = value; }
194  }
195  private string _cDescripcionError = "";
196 
202  public bool _EditMode
203  {
204  get { return _lEditMode; }
205  set
206  {
207  _lEditMode = value;
208 
209  //if (_EditMode)
210  //{
211  // System.Drawing.Rectangle obounds = ClientRectangle;
212  // System.Drawing.Rectangle ibounds = ClientRectangle;
213  // obounds.Inflate(10, 3);
214  // ibounds.Inflate(-3, -3);
215 
216  // ControlPaint.DrawSelectionFrame(this.CreateGraphics(), true, obounds, ibounds, Color.Transparent);
217  //}
218  }
219  }
220  private bool _lEditMode = false;
221 
226  public object _GetValueUserOption()
227  {
228  return this._Codigo;
229  }
230 
235  public void _SetValueUserOption(object toValor)
236  {
237  if (toValor is string)
238  {
239  this._Codigo = Convert.ToString(toValor);
240  this.__SetBindingPropertyValue(this._Codigo);
241  }
242  }
243 
244  private const int WM_NCPAINT = 0x85;
249  protected override void WndProc(ref Message m)
250  {
251  base.WndProc(ref m);
252 
253  if (m.Msg == WM_NCPAINT && _EditMode)
254  {
255  int lnOffsetY = (this.Top < 4 || this.Left < 4 ? -2 : 2);
256  this.__DrawBottomLine(true, 0, lnOffsetY);
257  }
258  }
259 
260  #endregion INTERFAZ IConfigUserOption
261 
262 
263  #region PROPIEDADES
264 
265 
269  private bool plDebug = (System.Diagnostics.Process.GetCurrentProcess().ProcessName == "devenv");
270 
274  private int _nUltimoRegistro = 0;
275 
279  private int _nRegistrosCarga = 0;
280 
284  protected internal bool _Desactivar_Evento_Codigo_Cambiado = false;
285 
289  private bool _Desactivar_Evento_Codigo_Cambiado_OnCreated = false;
290 
294  private DataTable _dtVisual = new DataTable();
295 
299  private bool _lRedimensionInterna = false;
300 
301  // PARTE 87680. Aplicar estilos
302  private bool _lAplicarEstilos = true;
303 
307  private bool _Desactivar_Evento_Validated = false;
308 
312  [DefaultValue(false)]
313  public bool _DataAnnotationValidation { set; get; }
317  [
318  Category("Varios_Apariencia"),
319  DefaultValue(true),
320  Description("Aplicar estilos visuales al control."),
321  DisplayName("Aplicar estilos")
322  ]
323  public bool _AplicarEstilos
324  {
325  get
326  {
327  return _lAplicarEstilos;
328  }
329  set
330  {
331  _lAplicarEstilos = value;
332 
333  this.btMante._PropiedadesDeEstilos._AplicarEstilos = _lAplicarEstilos;
334  this.btBrowser._PropiedadesDeEstilos._AplicarEstilos = _lAplicarEstilos;
335  this.ewtextbox._PropiedadesDeEstilos._AplicarEstilos = _lAplicarEstilos; // PE-93710. Descomentar para que se tenga en cuenta también
336  this.ewcombobox._PropiedadesDeEstilos._AplicarEstilos = _lAplicarEstilos;
337  this.ewlabel._PropiedadesDeEstilos._AplicarEstilos = _lAplicarEstilos;
338  this.ewgrid._AplicarEstilos = _lAplicarEstilos;
339  }
340  }
341  // FPARTE 87680. Aplicar estilos
342 
343  //PE-98223 => En gráficas se clona un control activo (verde) que aplica color por reflexión (dado que no sabe que control es), al realizar la misma operación por elementos editables hay
344  //controles internos que no reciben el color
348  public override Color BackColor
349  {
350  get
351  {
352  return base.BackColor;
353  }
354  set
355  {
356  base.BackColor = value;
357  ewFlowLayoutPanel1.BackColor = value;
358  btMante.BackColor = value;
359  }
360  }
361 
362  // PE-75827. Nova funció per a habilitar/deshabilitar tots els controls
363  private bool _bReadOnly = false;
367  [
368  Category("Varios"),
369  DefaultValue(false),
370  Description("Bloquea/desbloquea todos los controles")
371  ]
372  public bool _ReadOnly
373  {
374  get
375  {
376  return _bReadOnly;
377  }
378  set
379  {
380  // PE-80965. Antes había if (_bReadOnly != value) no permitiendo cambiar los valores de los controles si eran diferentes de _bReadOnly _bReadOnly = value;
381 
382  // PE-81127M, se habian dejado esta linea de aqui debajo pegada al final del comentario anterior y no se actualiba nunca el valor de _ReadOnly !!
383  _bReadOnly = value;
384  _SetReadOnly();
385  }
386  }
387 
391  [Browsable(false)]
392  public virtual string _Guid => string.Empty;
393 
394  private FormBase _oFormBase = null;
395 
399  protected FormBase _FormBase
400  {
401  get
402  {
403  if(_oFormBase == null) _oFormBase = FindForm() as FormBase;
404  return _oFormBase;
405  }
406  }
407 
408  private void _SetReadOnly()
409  {
410  if (Created)
411  {
412  this.ewtextbox.ReadOnly = _bReadOnly;
413  // this.ewgrid.ReadOnly = _bReadOnly; PE-80662. Se comenta esta línea, ya que no existe ningún caso en que podamos escribir en un grid.
414  this.ewcombobox.Enabled = !_bReadOnly;
415  this.btBrowser.Enabled = !_bReadOnly;
416 
417  // PE-83952. Siempre podemos accceder al mantenimiento - PARTE 94041. En edicion de perfiles ahora desactivamos el mantenimiento
418  if (EW_GLOBAL._EdicionPerfiles)
419  {
420  this.btMante.Enabled = false;
421  }
422  }
423  }
424 
425  private bool _lConsultar_Usuario_Seleccion_Multiple = true;
429  [
430  Category("Varios"),
431  DefaultValue(false),
432  Description("Obtiene o establece si debe constultar al usuario en caso de códigos repetidos (pe. CODPOS => 25617 Varios municipios")
433  ]
434  public bool _Consultar_Usuario_Seleccion_Multiple
435  {
436  get { return _lConsultar_Usuario_Seleccion_Multiple; }
437  set
438  {
439  _lConsultar_Usuario_Seleccion_Multiple = value;
440  }
441  }
442 
443  private Boolean _bPermitirFiltroAutomatico = true;
447  [Category("Varios"), DefaultValue(false), Description("Obtiene o establece si debe permitir el filtrado de texto parcial al abrir el brownser")]
448  public Boolean _PermitirFiltradoAutomaticoTextoParcial
449  {
450  get
451  {
452  return _bPermitirFiltroAutomatico;
453  }
454  set
455  {
456  _bPermitirFiltroAutomatico = value;
457  }
458  }
459 
460 
461  //PE-92458 Propago la propiedad del BtMante
466  [
467  Category("Varios"),
468  DefaultValue(true),
469  Description("Obtiene o establece si se debe cargar primer registro de mantenimientos para códigos no informados."),
470  DisplayName("Cargar primer registro")
471  ]
472  public bool _Autoload_Mante_FirstValue
473  {
474  get { return btMante._Autoload; }
475  set { btMante._Autoload = value; }
476  }
477  //FPE-92458
478 
479  // PE-92757
480  private string _cOpcEsp = "";
484  [
485  Category("Varios"),
486  DefaultValue(""),
487  Description("Bloquea el control si el usuario no tiene permiso para la opción especial indicada."),
488  ]
489  public string _OpcEsp
490  {
491  get { return _cOpcEsp; }
492  set
493  {
494  _cOpcEsp = value;
495  }
496  }
500  public bool _DesactivarRespuestasAutomaticas
501  {
502  get { return _lDesactivarRespuestasAutomaticas; }
503  set { _lDesactivarRespuestasAutomaticas = value; }
504  }
505  private bool _lDesactivarRespuestasAutomaticas = false;
506 
507  // PARTE 103197
515  [DefaultValue("")]
516  public char _CaracterAncho
517  {
518  get { return _cCaracterAncho; }
519  set
520  {
521  _cCaracterAncho = value;
522  _Ancho_TextBox(); // No sería necesario, pasa muchas veces por el método "_Ancho_TextBox". Si alguien optimiza algún día el código del "ewtxtCodlabel" podría llegar a fallar
523  }
524  }
525 
526  char _cCaracterAncho = ' ';
527  // FPARTE 103197
528 
532  public void _Focus()
533  {
534  this.ewtextbox.Select();
535  this.ewtextbox.Focus();
536  }
537 
542  {
543  return this.ewtextbox;
544  }
545 
551  {
552  return this.ewlabel;
553  }
554 
558  public void _SetFirstCellValue()
559  {
560  if (this.ewgrid != null && this.ewgrid.Rows.Count > 0 && this.ewgrid.Rows[0].Cells.Count > 0 && !String.IsNullOrWhiteSpace(Convert.ToString(this.ewgrid.Rows[0].Cells[0].Tag))) this._Codigo = Convert.ToString(this.ewgrid.Rows[0].Cells[0].Tag);
561  }
562 
563  //PE-88499
564 
568  [
569  Category("Varios Ew"),
570  DefaultValue(""),
571  Description("Obtiene o establece un mensaje de error en el control."),
572  Browsable(false)
573  ]
574  protected string _ErrorProviderText
575  {
576  get { return _cErrorProvider; }
577  set
578  {
579  if (this._oErrorProvider != null)
580  {
581  _cErrorProvider = value;
582  this._oErrorProvider.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.NeverBlink;
583 
584  // PE-92786
585  // Obtener si ya hay algun error y concatenarlo
586  string lcError = "";
587  if (!string.IsNullOrWhiteSpace(value))
588  {
589  lcError = this._oErrorProvider.GetError(this);
590  lcError += (!string.IsNullOrWhiteSpace(lcError) ? Environment.NewLine : string.Empty) + value;
591  }
592 
593  //Si el txtcodlabel está en un mantenimiento, mostramos el error a la izquierda de todo el txtcodlabel
594 
595  Form loForm = this.FindForm();
596 
597  if (loForm != null)
598  {
599  string lcForm = loForm.GetType().BaseType.Name.ToLower().Trim();
600  if (lcForm == "formmante")
601  this._oErrorProvider.SetError(this, lcError);
602  else
603  this._oErrorProvider.SetError(this.ewlabel, lcError);
604  // FI PE-92786
605 
606  this._oErrorProvider.SetIconAlignment(this, ErrorIconAlignment.MiddleLeft);
607  }
608  }
609  }
610  }
611  private string _cErrorProvider = "";
612 
616  [
617  Category("Varios Ew"),
618  DefaultValue(null),
619  Description("Obtiene o establece un control de tipo ewErrorProvider."),
620  Browsable(false)
621  ]
622  protected ewErrorProvider _ErrorProvider
623  {
624  get { return _oErrorProvider; }
625  set { _oErrorProvider = value; }
626  }
627  private ewErrorProvider _oErrorProvider = null;
628 
632  private bool _lMostrar_Mensaje = true;
636  public bool _Mostrar_Mensaje
637  {
638  get { return _lMostrar_Mensaje; }
639  set { _lMostrar_Mensaje = value; }
640  }
641 
642 
646  [
647  Category("Varios"),
648  DefaultValue(false),
649  Description("Propiedad para indicar si queremos mostrar el botón de información o no")
650  ]
651  public bool _Mostrar_Info
652  {
653  get { return _lMostrar_Info; }
654  set {
655  _lMostrar_Info = value;
656  _Definir_Estilo_Visual();
657  }
658  }
659  private bool _lMostrar_Info = false;
660 
661 
665  private TextoInformacion _oTextoInformacionBtInfo = null;
666 
667 
671  [
672  Category("Varios"),
673  DefaultValue(""),
674  Description("Propiedad para indicar el título que se va a mostrar en la información a visualizar al hacer click en el botón de Información")
675  ]
676  public string _BtInfoTitulo
677  {
678  get { return _cBtInfoTitulo; }
679  set {
680  _cBtInfoTitulo = value;
681 
682  if (_oTextoInformacionBtInfo == null)
683  {
684  _oTextoInformacionBtInfo = new TextoInformacion();
685  btInfo._TextoInformacion = _oTextoInformacionBtInfo;
686  }
687 
688  _oTextoInformacionBtInfo._Titulo = value;
689  }
690  }
691  private string _cBtInfoTitulo = "";
692 
693 
697  [
698  Category("Varios"),
699  DefaultValue(null),
700  Description("Propiedad para indicar los párrafos de texto que se van a mostrar en la información a visualizar al hacer click en el botón de Información")
701  ]
702 
703  public List<string> _BtInfoParrafos
704  {
705  get { return _lstBtInfoParrafos; }
706  set {
707  _lstBtInfoParrafos = value;
708  if (_oTextoInformacionBtInfo == null)
709  {
710  _oTextoInformacionBtInfo = new TextoInformacion();
711  btInfo._TextoInformacion = _oTextoInformacionBtInfo;
712  }
713 
714  _oTextoInformacionBtInfo._TextoParrafos = value;
715  }
716  }
717  private List<string> _lstBtInfoParrafos = null;
718 
719 
720 
724  [
725  Category("Varios"),
726  DefaultValue(""),
727  Description("Tooltip del botón de información")
728  ]
729  public string _TooltipInfo
730  {
731  get
732  {
733  return _cTooltipInfo;
734  }
735  set
736  {
737  _cTooltipInfo = value;
738  if (toolTipTxtCodLabel != null)
739  toolTipTxtCodLabel.SetToolTip(this.btInfo._btInfo, value);
740  this.btInfo._btInfo._Tooltip = value;
741  }
742  }
743  private string _cTooltipInfo = "";
744 
745 
746  private List<ewbutton> _oBotonesAdicionales = new List<ewbutton>();
747 
751  [Browsable(false)]
752  public List<ewbutton> _BotonesAdicionales
753  {
754  get
755  {
756  return _oBotonesAdicionales;
757  }
758  }
759 
760  private Boolean _bMostrarBotonesAdicionales = false;
761 
765  [
766  Category("Varios"),
767  DefaultValue(typeof(Boolean), "false"),
768  Description("Indica si se tienen que mostrar los botones adicionales")
769  ]
770  public Boolean _MostrarBotonesAdicionales
771  {
772  get
773  {
774  return _bMostrarBotonesAdicionales;
775  }
776  set
777  {
778  _bMostrarBotonesAdicionales = value;
779  }
780  }
781 
785  public virtual int _MinDrawSize
786  {
787  get
788  {
789  int lnMinSize = 0;
790 
791  if (this._Mostrar_Mante) lnMinSize = btMante.Location.X + btMante.Width;
792  else
793  {
794  if (this._Mostrar_Browser) lnMinSize = btBrowser.Location.X + btBrowser.Width;
795  else //Sin mante ni browser...
796  {
797  lnMinSize = ewtextbox.Location.X + ewtextbox.Width;
798  }
799  }
800 
801  // PE-92815. Ahora los botones están dentro de un FlowLayoutPanel
802  lnMinSize += ewFlowLayoutPanel1.Location.X;
803 
804  return (lnMinSize > PreferredSize.Width ? lnMinSize : PreferredSize.Width);
805  }
806  }
807 
811  [
812  Category("Varios"),
813  Description("Retorna el botón")
814  ]
815  public btBrowser _btBrowser
816  {
817  get
818  {
819  return this.btBrowser;
820  }
821  }
822 
826  [
827  Category("Varios"),
828  Description("Retorna el botón")
829  ]
830  public btMante _btMante
831  {
832  get
833  {
834  return this.btMante;
835  }
836  }
837 
838  private bool _lTactil = false;
842  [
843  Category("Varios"),
844  DefaultValue(false),
845  Description("Utilizar el control de forma tactil")
846  ]
847  public bool _Tactil
848  {
849  get { return _lTactil; }
850  set
851  {
852  _lTactil = value;
853  this.ewtextbox._Tactil = value;
854  }
855  }
856 
857  private string _cCodigo = "";
861  [
862  Category("Varios"),
863  DefaultValue(""),
864  Description("Código seleccionado por el usuario")
865  ]
866  public string _Codigo
867  {
868  get
869  {
870  return !Created ? _cCodigoTmp : _cCodigo;
871  }
872  set
873  {
874  if (!Created)
875  {
876  _cCodigoTmp = value;
877  }
878  else
879  {
880  //if (value != null) value = value.Trim();
881  //if (_cCodigo != null) _cCodigo = _cCodigo.Trim(); //PE-80006 Verifico que no sea null antes de hacer el trim()
882 
883  // PE-84279 La correcció (sin número de parte documentado) para suprimir el Trim() quitó colateralmente el control de Null
884  // y volvia a dar excepciones. Se añade lógica para mantener el control de valores null antes del trim
885  bool llModificado;
886  if ((_cCodigo != null && value == null) || (_cCodigo == null && value != null)) //Si uno es null y el otro no => esta modificado seguro y no se puede aplicar el Trim()
887  llModificado = true;
888  else
889  if (_cCodigo == null && value == null) llModificado = false; //Los dos son NULL
890  else llModificado = (_cCodigo.Trim() != value.Trim());
891  // FPE-84279
892 
893  if (llModificado)
894  {
895  bool lbOk = true;
896 
897  //PE-95047 : Tractem els codis de tipus numéric
898  if (value == "-1")
899  value = "";
900 
901  // PE-97944. Vaciamos la descripción de código
902  _cDescripcionCodigo = String.Empty;
903 
904  if (!string.IsNullOrWhiteSpace(value))
905  {
906  // Desencadenem l'event before per si s'ha de cancelar el canvi de codi.
907  LanzarEvento_Codigo_Cambiado_Before_Extended(value, ref lbOk); //Task 105418 Lanzo el evento ampliado
908  if (lbOk) LanzarEvento_Codigo_Cambiado_Before(ref lbOk);
909 
910  // En cas de tipus estandar, controlar si s'ha introduït un codi que no existeix
911  if ((lbOk) && (_Tipo_Visual == _Tipos_Visuales.Estandar || _Tipo_Visual == _Tipos_Visuales.Hibrido)) // 78438
912  {
913  lbOk = _Existe_Codigo(ref value);
914  //Lanzo evento con el resultado de la validación
915  LanzarEvento_Codigo_Cambiado_Validated(lbOk);
916  }
917  }
918  else
919  {
920  //PE-102074: Reseteo la propiedad
921  if (!_DataAnnotationValidation)
922  {
923  this._ErrorProviderText = "";
924  }
925  //FI PE-102074
926 
927  if (_Control_Valor_Vacio && _cCodigo != null)
928  {
929  lbOk = false;
930  }
931  }
932 
933  #region Restaurar Valor
934 
935  if (!lbOk)
936  {
937  // Restauramos el valor anterior
938  switch (_Tipo_Visual)
939  {
940  case _Tipos_Visuales.Estandar:
941  case _Tipos_Visuales.Hibrido:
942  ewtextbox.Text = _cCodigo;
943  break;
944 
945  case _Tipos_Visuales.Combo:
946  ewcombobox.SelectedValue = _cCodigo;
947  break;
948 
949  case _Tipos_Visuales.Grid:
950  DataGridViewCell dgCelda = null;
951  int lnRowIndex;
952 
953  if (_Obtener_Celda_Codigo(_cCodigo, ref dgCelda, out lnRowIndex))
954  {
955  if (dgCelda.RowIndex == -1 && lnRowIndex != -1)
956  {
957  dgCelda = ewgrid.Rows[lnRowIndex].Cells[dgCelda.ColumnIndex];
958  }
959  else
960  {
961  ewgrid.CurrentCell = dgCelda;
962  }
963  }
964  break;
965 
966  default:
967  break;
968  }
969 
970  return;
971  }
972 
973  #endregion Restaurar Valor
974 
975  }
976 
977  _cCodigo = value;
978  //PE-105547 Notifico la asignación de valor a los observadores
979  _lisObservadores.ForEach(loEle => loEle.OnNext(new TxtCodLabelInfo(this, value)));
980 
981  if (llModificado)
982  {
983 
984  //PE-85083 Vaciamos la descripción de código
985  //_cDescripcionCodigo = String.Empty;
986 
987  switch (_Tipo_Visual)
988  {
989  case _Tipos_Visuales.Estandar:
990  case _Tipos_Visuales.Hibrido:
991  ewtextbox.Text = _cCodigo;
992  _Refrescar_Descripcion();
993  break;
994 
995  case _Tipos_Visuales.Combo:
996  // PE-80992 (Tirar atrás la corrección del parte PE-75531 que evitava realizar la asignación cuando el código estaba vacío )
997  if (_cCodigo != null)
998  {
999  // PE-77209 Es disparen events cíclics, el canvi de SelectedValue implica un canvi de SelectedIndex que implica una assignació de _Codigo que ens torna a portar aquí
1000  _Desactivar_Evento_Codigo_Cambiado = true;
1001  ewcombobox.SelectedValue = _cCodigo;
1002  _Desactivar_Evento_Codigo_Cambiado = false;
1003  // FI PE-77209
1004  }
1005  break;
1006 
1007  case _Tipos_Visuales.Grid:
1008  DataGridViewCell dgCelda = null;
1009  int lnRowIndex;
1010 
1011  // PE-75427. Desactivar el evento al cambiar el código ya que al cambiar la celda actual implícitamente se cambiaria otra vez el código
1012  // y no queremos que se cambie en estos casos internos. Ya lo hemo cambiado nosotros internamente.
1013 
1014  // PE-80992 (Tirar atrás la corrección del parte PE-78325 que evitava realizar la asignación cuando el código estaba vacío)
1015  if (_cCodigo != null)
1016  {
1017  this._Desactivar_Evento_Codigo_Cambiado = true;
1018 
1019  // PE-80992. En caso de valor vacío, dejamos el grid sin celda seleccionada
1020  if (_cCodigo.Trim() == "")
1021  this._Quitar_Seleccion_Grid();
1022  else
1023  {
1024  if (_Obtener_Celda_Codigo(_cCodigo, ref dgCelda, out lnRowIndex))
1025  {
1026  try
1027  {
1028  ewgrid.CurrentCell = dgCelda;
1029  ewgrid.CurrentCell = ewgrid.Rows[lnRowIndex].Cells[dgCelda.ColumnIndex];
1030  }
1031  catch
1032  {
1033  ewgrid.CurrentCell = null;
1034  ewgrid.CurrentCell = ewgrid.Rows[lnRowIndex].Cells[dgCelda.ColumnIndex];
1035  }
1036  }
1037  else
1038  ewgrid.CurrentCell = null; // PE-68671
1039  }
1040  this._Desactivar_Evento_Codigo_Cambiado = false; // PE-75427
1041  }
1042  break;
1043 
1044  default:
1045  break;
1046  }
1047 
1048  // Evento para que se pueda realizar acciones una vez cambiado el código desde fuera
1049  Codigo_Cambiado();
1050  }
1051  }
1052  }
1053  }
1054 
1055  private void Codigo_Cambiado()
1056  {
1057  try
1058  {
1059  if (!_Desactivar_Evento_Codigo_Cambiado && !_Desactivar_Evento_Codigo_Cambiado_OnCreated)
1060  {
1061  if (_Codigo_Cambiado != null) _Codigo_Cambiado();
1062  //Añadimos la llamada al evento para la configuración de usuarios
1063  OnConfigUserValueChanged?.Invoke(this, new EventArgs());
1064  }
1065  else
1066  {
1067  //Lanzamos el evento complementario al código cambiado => Esta pensado para actualizaciones de valor cruzadas,
1068  //como en los filtros DesdeHasta, el control modificado sepa que se le ha cambiado el valor y pueda actualizar
1069  //su UI como en los filtros de fecha
1070  if (_Codigo_Actualizado != null)
1071  {
1072  _Codigo_Actualizado();
1073  }
1074  }
1075  }
1076  catch (Exception loEx)
1077  {
1078  DB.Registrar_Error(loEx);
1079  }
1080  }
1081 
1085  private String _cDescripcionCodigo = String.Empty;
1086 
1090  public virtual String _DescripcionCodigo
1091  {
1092  get
1093  {
1094  if (_Browser_Datatable_Personalizado is DataTable)
1095  {
1096  _cDescripcionCodigo = _Refrescar_Descripcion_Datatable_Personalizado();
1097  }
1098  else
1099  {
1100  if (String.IsNullOrEmpty(_cDescripcionCodigo) && (_Codigo != null && !String.IsNullOrEmpty(_Codigo.Trim())))
1101  {
1102  // PE-97944. Obtener la descripción del código en caso necesario teniendo en cuenta las condiciones.
1103  if (string.IsNullOrWhiteSpace(_Codigo))
1104  return "";
1105 
1106  DataTable ldtConsulta = new DataTable();
1107  string lcSql = "SELECT " + _Concepto + " " +
1108  "FROM " + DB.SQLDatabase(_Database, _Tabla) + " " +
1109  "WHERE " + _Clave + " = " + DB.SQLString(_Codigo);
1110 
1111  if (!string.IsNullOrWhiteSpace(_Browser_Condicion))
1112  lcSql = lcSql + " AND " + _Browser_Condicion;
1113 
1114  DB.SQLExec(lcSql, ref ldtConsulta);
1115  if (ldtConsulta.Rows.Count > 0)
1116  _cDescripcionCodigo = ldtConsulta.Rows[0][_Concepto].ToString();
1117  // FI PE-97944
1118 
1119  }
1120  }
1121 
1122  return _cDescripcionCodigo;
1123  }
1124  }
1125 
1126  private Dictionary<string, object> _oCodigosDiccionario;
1130  [
1131  Browsable(false),
1132  DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
1133  ]
1134  public Dictionary<string, object> _CodigosDiccionario
1135  {
1136  get { return _oCodigosDiccionario; }
1137  set { _oCodigosDiccionario = value; }
1138  }
1139 
1140  private char _cRelleno = ' ';
1144  [
1145  Category("Varios"),
1146  Description("Carácter de relleno"),
1147  DefaultValue(' ')
1148  ]
1149  public char _Relleno
1150  {
1151  get { return _cRelleno; }
1152  set { _cRelleno = value; }
1153  }
1154 
1155  private string _cClave = "";
1159  [
1160  Category("Varios"),
1161  DefaultValue(""),
1162  Description("Nombre de la clave para obtener el valor")
1163  ]
1164  public string _Clave
1165  {
1166  get { return _cClave; }
1167  set { _cClave = value; }
1168  }
1169 
1170  private int _nLen = 0;
1174  [
1175  DefaultValue(0), // PE-69803. Establecer un valor por defecto para que no se guarde el valor asignado a la propiedad del objeto en IniitilizeComponent del objeto destino
1176  Description("Longitud a la que se expandirá el punto.Solo indicar si no es un valor dinámico. Por ejemplo si fuera wn_digitos NO asignar valor aquí.")
1177  ]
1178  public int _Len
1179  {
1180  get { return _nLen; }
1181  set
1182  {
1183  _nLen = value;
1184  _Definir_Estilo_Visual();
1185  }
1186  }
1187 
1188  private string _cConcepto = "nombre";
1192  [
1193  Category("Varios"),
1194  DefaultValue(typeof(string), "nombre"),
1195  Description("Campo utilizado para obtener la descripción que se pondrá en el label. Por defecto será 'nombre'.")
1196  ]
1197  public string _Concepto
1198  {
1199  get { return _cConcepto; }
1200  set { _cConcepto = value; }
1201  }
1202 
1203 
1204  // PE-84936
1205  private string _cMultiCampos = "";
1214  [
1215  Category("Varios"),
1216  DefaultValue(typeof(string), ""),
1217  Description("Campo utilizado para indicar los distintos campos que se concatenaran para formar el campo final de concepto.")
1218  ]
1219  public string _MultiCampos
1220  {
1221  get { return _cMultiCampos; }
1222  set { _cMultiCampos = value; }
1223  }
1224  // FI PE-84936
1225 
1226 
1227  // PE-84621
1228  private string _cCampoBackColor = "";
1232  [
1233  Category("Varios"),
1234  DefaultValue(typeof(string), ""),
1235  Description("Campo utilizado para obtener el color de fondo a mostrar en la celda (Únicamente disponible en tipo cuadrícula)")
1236  ]
1237  public string _CampoBackColor
1238  {
1239  get { return _cCampoBackColor; }
1240  set { _cCampoBackColor = value; }
1241  }
1242 
1243  private string _cCampoForeColor = "";
1247  [
1248  Category("Varios"),
1249  DefaultValue(typeof(string), ""),
1250  Description("Campo utilizado para obtener el color de la fuente a mostrar en la celda (Únicamente disponible en tipo cuadrícula)")
1251  ]
1252  public string _CampoForeColor
1253  {
1254  get { return _cCampoForeColor; }
1255  set { _cCampoForeColor = value; }
1256  }
1257 
1258  private string _cCampoFont = "";
1262  [
1263  Category("Varios"),
1264  DefaultValue(typeof(string), ""),
1265  Description("Campo utilizado para obtener la fuente a mostrar en la celda (Únicamente disponible en tipo cuadrícula)")
1266  ]
1267  public string _CampoFont
1268  {
1269  get { return _cCampoFont; }
1270  set { _cCampoFont = value; }
1271  }
1272 
1273  private string _cCampoVisible = "";
1277  [
1278  Category("Varios"),
1279  DefaultValue(typeof(string), ""),
1280  Description("Campo utilizado para saber si la celda actual estará visible o no (Únicamente disponible en tipo cuadrícula)")
1281  ]
1282  public string _CampoVisible
1283  {
1284  get { return _cCampoVisible; }
1285  set { _cCampoVisible = value; }
1286  }
1287  // FI PE-84621
1288 
1289  private string _cImagen = "";
1293  [
1294  Category("Varios"),
1295  DefaultValue(typeof(string), ""),
1296  Description("Campo utilizado para obtener la ruta de la imagen asociada")
1297  ]
1298  public string _Imagen
1299  {
1300  get { return _cImagen; }
1301  set { _cImagen = value; }
1302  }
1303 
1304  private bool _lImagen_y_Texto = false;
1308  [
1309  Category("Varios"),
1310  DefaultValue(false),
1311  Description("Para indicar si queremos ver imagen y texto a la vez")
1312  ]
1313  public bool _Imagen_y_Texto
1314  {
1315  get { return _lImagen_y_Texto; }
1316  set { _lImagen_y_Texto = value; }
1317  }
1318 
1319  private bool _lExpandir = false;
1323  [
1324  Category("Varios"),
1325  DefaultValue(false),
1326  Description("Determinará si hay que sustituir el . por el carácter definido en la propiedad _Relleno")
1327  ]
1328  public bool _Expandir
1329  {
1330  get { return _lExpandir; }
1331  set { _lExpandir = value; }
1332  }
1333 
1338  [
1339  Category("Varios"),
1340  DefaultValue(typeof(string), ""),
1341  Description("Para indicar un inicio de código. Sólo se tendrá en cuenta en caso de tener la propiedad _Expandir a True")
1342  ]
1343  public string _InicioCodigo
1344  {
1345  get { return _cInicioCodigo; }
1346  set { _cInicioCodigo = value; }
1347  }
1348  private string _cInicioCodigo = "";
1349 
1350 
1351  private string _cDatabase = "";
1355  [
1356  Category("Varios"),
1357  DefaultValue(typeof(string), ""),
1358  Description("Base de datos a la que pertenece la tabla")
1359  ]
1360  public string _Database
1361  {
1362  get { return _cDatabase; }
1363  set { _cDatabase = value; }
1364  }
1365 
1366  private string _cTabla = "";
1370  [
1371  Category("Varios"),
1372  DefaultValue(typeof(string), ""),
1373  Description("Nombre de la tabla que se utilizará para obtener la descripción")
1374  ]
1375  public string _Tabla
1376  {
1377  get { return _cTabla; }
1378  set { _cTabla = value; }
1379  }
1380 
1381  private string _cNombre = "";
1385  [
1386  Category("Varios"),
1387  DefaultValue(typeof(string), ""),
1388  Description("Nombre del campo que se utilizará para poner en la descripción")
1389  ]
1390  public string _Nombre
1391  {
1392  get { return _cNombre; }
1393  set { _cNombre = value; }
1394  }
1395 
1396  private string _cMante = "";
1400  [
1401  Category("Varios"),
1402  DefaultValue(typeof(string), ""),
1403  Description("Nombre de la pantalla de Eurowin que se utilizará como mantenimiento")
1404  ]
1405  public string _Mante
1406  {
1407  get { return _cMante; }
1408  set
1409  {
1410  // Task 142633
1411  //
1412  int lnAsesorContable = Convert.ToInt32(EW_GLOBAL._GetVariable("wn_AsesorContable"));
1413 
1414  if ((value.ToUpper() == "CLIENTES" || value.ToUpper() == "PROVEEDOR") && (EW_GLOBAL._Solucion < 2 || lnAsesorContable > 0))
1415  {
1416  // Task-132956. Para 'solo conta' o Sage50 Asesor Contable, convertimos cliente o proveedor en cuenta Task 142633
1417  _cMante = "CUENTAS";
1418  }
1419  else
1420  {
1421  _cMante = value;
1422  }
1423 
1424  btMante._NombreManteNet = _cMante;
1425 
1426  if (_btBrowser != null)
1427  {
1428  _btBrowser.NombreMantenimiento = _cMante.ToUpper();
1429  }
1430  }
1431  }
1432 
1433  // PARTE 94327
1434  private string _cSQL_Personalizado = "";
1438  [
1439  Category("Varios"),
1440  DefaultValue(typeof(string), ""),
1441  Description("Consulta SQL personalizada. Importante: El estilo visual de el txtCodlabel debde de ser en formato 'Estandard'")
1442  ]
1443  public string _SQL_Personalizado
1444  {
1445  get { return _cSQL_Personalizado; }
1446  set
1447  {
1448  _cSQL_Personalizado = value;
1449  }
1450  }
1451  // FPARTE 94327
1452 
1453  private string _cBrowser_Clave = "";
1457  [
1458  Category("Varios"),
1459  DefaultValue(typeof(string), ""),
1460  Description("Campo clave para la consulta")
1461  ]
1462  public string _Browser_Clave
1463  {
1464  get { return _cBrowser_Clave; }
1465  set
1466  {
1467  value = value.ToUpper(); //CCR 173391 => Designers tienen copia de los campos y pueden diferir de las nuevas definiciones del propio control
1468  _cBrowser_Clave = value;
1469  _Definir_Browser(); //PE79522
1470  }
1471  }
1472 
1473  private string _cBrowser_ClavePrimaria = "";
1477  [
1478  Category("Varios"),
1479  DefaultValue(typeof(string), ""),
1480  Description("Campo clave para la consulta, si está rellena prevalece sobre _Browser_Clave para pasar el código de la clave a los mantes")
1481  ]
1482  public string _Browser_ClavePrimaria
1483  {
1484  get { return _cBrowser_ClavePrimaria; }
1485  set
1486  {
1487  value = value.ToUpper(); //CCR 173391 => Designers tienen copia de los campos y pueden diferir de las nuevas definiciones del propio control
1488  _cBrowser_ClavePrimaria = value;
1489  _Definir_Browser(); //PE79522
1490  }
1491  }
1492 
1493  private string _cBrowser_Campo_Predet = "";
1497  [
1498  Category("Varios"),
1499  DefaultValue(typeof(string), ""),
1500  Description("Campo predeterminado de la consulta")
1501  ]
1502  public string _Browser_Campo_Predet
1503  {
1504  get { return _cBrowser_Campo_Predet; }
1505  set
1506  {
1507  _cBrowser_Campo_Predet = value;
1508  _Definir_Browser(); //PE79522
1509  }
1510  }
1511 
1512  private string _cBrowser_Campos = "";
1516  [
1517  Category("Varios"),
1518  DefaultValue(typeof(string), ""),
1519  Description("Campos de la consulta SQL que se presentarán en el browser")
1520  ]
1521  public string _Browser_Campos
1522  {
1523  get { return _cBrowser_Campos; }
1524  set
1525  {
1526  _cBrowser_Campos = value;
1527  _Definir_Browser(); //PE79522
1528  }
1529  }
1530 
1531  private string _cBrowser_Condicion = "";
1535  [
1536  Category("Varios"),
1537  DefaultValue(typeof(string), ""),
1538  Description("Condición que se utilizará en la consulta SQL")
1539  ]
1540  public string _Browser_Condicion
1541  {
1542  get { return _cBrowser_Condicion; }
1543  set
1544  {
1545  bool ValueChanged = (_cBrowser_Condicion != value); //Task 105473
1546 
1547  _cBrowser_Condicion = value;
1548  _Definir_Browser(); //PE79522
1549 
1550  if (ValueChanged)
1551  OnBrowserCondicionChanged();
1552  }
1553  }
1554 
1555  //Task 105473
1559  virtual internal void OnBrowserCondicionChanged()
1560  {
1561 
1562  }
1563 
1564  // 83201
1565  private string _cBrowser_Distinct = "";
1569  [
1570  Category("Varios"),
1571  DefaultValue(typeof(string), ""),
1572  Description("Indica si se utilizará el DISTINCT en la consulta SQL")
1573  ]
1574 
1575  public string _Browser_Distinct
1576  {
1577  get { return _cBrowser_Distinct; }
1578  set
1579  {
1580  _cBrowser_Distinct = value;
1581  _Definir_Browser();
1582  }
1583  }
1584  // fi 83201
1585 
1586 
1587  private string _cBrowser_Database = "";
1591  [
1592  Category("Varios"),
1593  DefaultValue(typeof(string), ""),
1594  Description("Nombre de la base de datos a la que pertenece la tabla")
1595  ]
1596  public string _Browser_Database
1597  {
1598  get { return _cBrowser_Database; }
1599  set
1600  {
1601  _cBrowser_Database = value;
1602  _Definir_Browser(); //PE79522
1603  }
1604  }
1605 
1606  private string _cBrowser_Tabla = "";
1610  [
1611  Category("Varios"),
1612  DefaultValue(typeof(string), ""),
1613  Description("Nombre de la tabla a la que se hace referencia en la consulta SQL")
1614  ]
1615  public string _Browser_Tabla
1616  {
1617  get { return _cBrowser_Tabla; }
1618  set
1619  {
1620  // Task 142633
1621  //
1622  int lnAsesorContable = Convert.ToInt32(EW_GLOBAL._GetVariable("wn_AsesorContable"));
1623 
1624  if ((value.ToUpper() == "CLIENTES" || value.ToUpper() == "PROVEEDOR") && (EW_GLOBAL._Solucion < 2 || lnAsesorContable > 0))
1625  {
1626  // Task-132956. Para 'Solo Conta' o 'Asesor Contable' convertimos cliente o proveedor en cuenta
1627  _cBrowser_Tabla = "CUENTAS";
1628  }
1629  else
1630  {
1631  _cBrowser_Tabla = value;
1632  }
1633 
1634  _Definir_Browser(); //PE79522
1635  }
1636  }
1637 
1638  private string _cBrowser_Titulos_Campos = "";
1642  [
1643  Category("Varios"),
1644  DefaultValue(typeof(string), ""),
1645  Description("Descripción separada por comas de los títulos de los campos en el browser")
1646  ]
1647  public string _Browser_Titulos_Campos
1648  {
1649  get { return _cBrowser_Titulos_Campos; }
1650  set
1651  {
1652  _cBrowser_Titulos_Campos = value;
1653  _Definir_Browser(); //PE79522
1654  }
1655  }
1656 
1657  private string _cBrowser_Titulo = "";
1661  [
1662  Category("Varios"),
1663  DefaultValue(typeof(string), ""),
1664  Description("Título principal para el browser")
1665  ]
1666  public string _Browser_Titulo
1667  {
1668  get { return _cBrowser_Titulo; }
1669  set
1670  {
1671  //PE-105307 : Al cambiar la visibilidad se llama a OnVisibleChanged y con un txtcodlabel con consulta personalizada
1672  //llama a _Reload_propiedades que a la vez llama a _Cargar_Propiedades que reasigna el valor de _Browser_Titulo, con lo que
1673  //volvia a refrescar el control y volvia a llamar a OnVisibleChanged ... recursividad y formulario colgado ...
1674  if (_cBrowser_Titulo != value)
1675  {
1676  _cBrowser_Titulo = value;
1677  _Definir_Browser(); //PE79522
1678  _Definir_Estilo_Visual(); // PE-80134
1679  _Refresh(); // PE-80134
1680  }
1681  }
1682  }
1683 
1687  [
1688  Bindable(false),
1689  Category("Varios"),
1690  DefaultValue(0),
1691  DisplayName("Extensiones visibles"),
1692  Description("Muestra el panel de extensiones en el browser."),
1693  Localizable(false),
1694  Browsable(true)
1695  ]
1696  public eUsarExtensionesBrowser _Browser_Usar_Extensiones //Bug 178547 => Propagar la opción de no mostrar extensiones hasta los filtros
1697  {
1698  get { return _eBrowser_Usar_Extensiones; }
1699  set
1700  {
1701  _eBrowser_Usar_Extensiones = value;
1702  _Definir_Browser();
1703  }
1704  }
1705  private eUsarExtensionesBrowser _eBrowser_Usar_Extensiones = eUsarExtensionesBrowser.Default;
1706 
1707  // PARTE 94327
1708  private bool _lPresentar_Browser_Titulo = true;
1712  [
1713  Category("Varios"),
1714  DefaultValue(true),
1715  Description("Presentar el browser para el Título")
1716  ]
1717  public bool _Presentar_Browser_Titulo
1718  {
1719  get { return _lPresentar_Browser_Titulo; }
1720  set
1721  {
1722  _lPresentar_Browser_Titulo = value;
1723  }
1724  }
1725  // FPARTE 94327
1726 
1727  private DataTable dtBrowser_Datatable_Personalizado = null;
1731  [
1732  Category("Varios"),
1733  DefaultValue(typeof(DataTable), null),
1734  Description("Datatable personalizado a mostrar como Browser (no accede a BBDD)")
1735  ]
1736  public DataTable _Browser_Datatable_Personalizado
1737  {
1738  get { return dtBrowser_Datatable_Personalizado; }
1739  set
1740  {
1741  dtBrowser_Datatable_Personalizado = value;
1742  //if (dtBrowser_Datatable_Personalizado != null)
1743  btBrowser._DatatablePersonalizado = dtBrowser_Datatable_Personalizado;
1744  }
1745  }
1746 
1747  // PE-95408 Propiedad para poder indicar una consulta Sql que se ejecutará en el browser
1748  private string _cBrowser_ConsultaPersonalizada = "";
1752  [
1753  Category("Varios"),
1754  DefaultValue(typeof(string), ""),
1755  Description("Consulta Sql personalizada a mostrar como Browser")
1756  ]
1757  public string _Browser_ConsultaPersonalizada
1758  {
1759  get { return _cBrowser_ConsultaPersonalizada; }
1760  set
1761  {
1762  _cBrowser_ConsultaPersonalizada = value;
1763  // btBrowser._ConsultaPersonalizada = _cBrowser_ConsultaPersonalizada;
1764  }
1765  }
1766 
1767 
1768  private string _cMensaje_No_Existe = "El código introducido no existe.";
1772  [
1773  Category("Varios"),
1774  DefaultValue(typeof(string), "El código introducido no existe."),
1775  Description("Descripción del mensaje de error que se mostrará cuando el código introducido no exista")
1776  ]
1777  public string _Mensaje_No_Existe
1778  {
1779  get { return _cMensaje_No_Existe; }
1780  set { _cMensaje_No_Existe = value; }
1781  }
1782 
1783  private String _cMensajeNoSePuedeCrear = "El código no es válido.";
1787  [Browsable(false)]
1788  public string _MensajeNoSePuedeCrear
1789  {
1790  get { return _cMensajeNoSePuedeCrear; }
1791  set { _cMensajeNoSePuedeCrear = value; }
1792  }
1793 
1794  private int _nGrid_Columnas = 2;
1798  [
1799  Category("Varios"),
1800  DefaultValue(2),
1801  Description("Número de columnas que tendrá el grid")
1802  ]
1803  public int _Grid_Columnas
1804  {
1805  get
1806  {
1807  return _nGrid_Columnas;
1808  }
1809  set
1810  {
1811  if (value > 0)
1812  {
1813  bool llModificado = (_nGrid_Columnas != value);
1814 
1815  _nGrid_Columnas = value;
1816 
1817  if (llModificado)
1818  {
1819  _Refresh();
1820  _Definir_Estilo_Visual();
1821  }
1822  }
1823  }
1824  }
1825 
1826  private ewgrid.ewGridScrollBars _eewGridScrollBars = ewgrid.ewGridScrollBars.Normal;
1830  [
1831  Bindable(false),
1832  Category("Varios"),
1833  DefaultValue(typeof(ewgrid.ewGridScrollBars), "Normal"),
1834  //DisplayName("ScrollBarsType"),
1835  Description("Tipo de barras de desplazamiento."),
1836  Localizable(false),
1837  Browsable(true)
1838  ]
1839  public ewgrid.ewGridScrollBars _ewGridScrollBars
1840  {
1841  get { return ewgrid._ewGridScrollBars; }
1842  set
1843  {
1844  ewgrid._ewGridScrollBars = value;
1845  _Definir_Estilo_Visual();
1846  }
1847  }
1848 
1849  private int _nAlto_Filas = 80;
1853  [
1854  Category("Varios"),
1855  DefaultValue(80),
1856  Description("Alto de las filas del grid")
1857  ]
1858  public int _Alto_Filas
1859  {
1860  get { return _nAlto_Filas; }
1861  set
1862  {
1863  if (value > 0) //PE-84980 Si es un valor válido para una altura
1864  {
1865  bool llModificado = (_nAlto_Filas != value);
1866 
1867  _nAlto_Filas = value;
1868 
1869  if (llModificado)
1870  {
1871  _Refresh();
1872  _Definir_Estilo_Visual();
1873  }
1874  }
1875  }
1876  }
1877 
1881  [
1882  Category("Varios"),
1883  Description("Ancho del desplegable de ewComboBox cuando el txtcodlabel adopta forma de Combo")
1884  ]
1885  public int _Ancho_Despleg_Combo
1886  {
1887  get { return this.ewcombobox.DropDownWidth; }
1888  //PE-84980 controlo negativos
1889  set { this.ewcombobox.DropDownWidth = value > 0 ? value : this.ewcombobox.DropDownWidth; }
1890  }
1891 
1895  [
1896  Category("Varios"),
1897  Description("Ancho del de ewComboBox cuando el txtcodlabel adopta forma de Combo")
1898  ]
1899  public int _AnchoCombo
1900  {
1901  get
1902  {
1903  return _nAnchoCombo > 0 ? _nAnchoCombo : 0;
1904  }
1905  set
1906  {
1907  _nAnchoCombo = value > 0 ? value : 0;
1908  }
1909  }
1910 
1911  private int _nAnchoCombo = 0;
1912 
1916  [
1917  Category("Varios"),
1918  Description("Alto del desplegable de ewComboBox cuando el txtcodlabel adopta forma de Combo")
1919  ]
1920  public int _Alto_Despleg_Combo
1921  {
1922  get { return this.ewcombobox.DropDownHeight; }
1923  //PE-84980 controlo negativos
1924  set { this.ewcombobox.DropDownHeight = value > 0 ? value : this.ewcombobox.DropDownHeight; }
1925  }
1926 
1927  private DataTable _dtDataTable = null;
1931  /*[
1932  Category("Varios"),
1933  Description("Objeto DataTable dónde podremos indicar un orígen de datos (DataTable) para el combo o grid")
1934  ]*/
1935  [
1936  Browsable(false),
1937  DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
1938  ]
1939  public DataTable _DataTable
1940  {
1941  get { return _dtDataTable; }
1942  set { _dtDataTable = value; }
1943  }
1944 
1945  private bool _lMostrar_Mante = true;
1949  [
1950  Category("Varios"),
1951  DefaultValue(true),
1952  Description("Propiedad para indicar si queremos mostrar el botón del matenimiento o no")
1953  ]
1954  public bool _Mostrar_Mante
1955  {
1956  get { return _lMostrar_Mante; }
1957  set
1958  {
1959  _lMostrar_Mante = value;
1960  _Definir_Estilo_Visual(); // PE-92855
1961  }
1962  }
1963 
1964  private bool _lMostrar_Brownser = true;
1968  [
1969  Category("Varios"),
1970  DefaultValue(true),
1971  Description("Propiedad para indicar si queremos mostrar el botón del brownser o no")
1972  ]
1973  public bool _Mostrar_Browser
1974  {
1975  get { return _lMostrar_Brownser; }
1976  set
1977  {
1978  _lMostrar_Brownser = value;
1979  _Definir_Estilo_Visual(); // PE-92855
1980  }
1981  }
1982 
1983  private bool _lModo_Diseño = false;
1987  [
1988  Category("Varios"),
1989  DefaultValue(false),
1990  Description("Propiedad para indicar si queremos utilizar el control en modo diseño (sin cargar datos)")
1991  ]
1992  public bool _Modo_Diseño
1993  {
1994  get { return _lModo_Diseño; }
1995  set { _lModo_Diseño = value; }
1996  }
1997 
1998  private _Tipos_Visuales _cTipo_Visual = _Tipos_Visuales.Estandar;
2006  [
2007  Category("Varios"),
2008  Description("Nos indicará el aspecto visual del objeto")
2009  ]
2010  public _Tipos_Visuales _Tipo_Visual
2011  {
2012  get
2013  {
2014  return _cTipo_Visual;
2015  }
2016  set
2017  {
2018  bool llModificado = (_cTipo_Visual != value);
2019 
2020  _cTipo_Visual = value;
2021 
2022  if (llModificado && Created)
2023  {
2024  // _RegistrosCargados = false; // PE-79251
2025  _Refresh();
2026  _Definir_Estilo_Visual();
2027  }
2028  }
2029  }
2030 
2031 
2035  [
2036  Category("Varios"),
2037  Description("Fuente a utilizar en cualquier texto dentro del txtcodlabel")
2038  ]
2039  public Font _Font
2040  {
2041  get { return this._oFont; }
2042  set
2043  {
2044  if (value is Font && value != null)
2045  {
2046  this._oFont = value;
2047  this._Definir_Estilo_Visual();
2048  }
2049  }
2050  }
2051  private Font _oFont = new Font("Segoe UI", 9.75f);
2052 
2053  //PE-98524 TxtBox cortados con Segoe
2057  public override Font Font
2058  {
2059  get { return base.Font; }
2060  set
2061  {
2062  //Al recibir una fuente la almacenamos en nuestro objeto fuente para evitar diferencias entre Font y _Font
2063  //El objeto _Font se utiliza internamente para la construcción de los objetos y la propiedad Font es asignable desde fuera => Hay que ligarlas
2064  _Font = base.Font = value;
2065  }
2066  }
2067 
2071  [
2072  Category("Varios"),
2073  Description("Definición de los posibles tipos visuales de la clase txtcodlabel")
2074  ]
2075  public enum _Tipos_Visuales
2076  {
2080  Estandar,
2084  Combo,
2088  Grid,
2092  Hibrido
2093  }
2094 
2098  [
2099  Category("Varios"),
2100  DefaultValue(false),
2101  Description("Propiedad para poder añadir un registro vacío en el tipo Combo")
2102  ]
2103  public virtual bool _Valor_Vacio
2104  {
2105  get { return _lValor_Vacio; }
2106  set { _lValor_Vacio = value; }
2107  }
2108  private bool _lValor_Vacio = false;
2109 
2110  //Task 105515
2114  [
2115  Category("Varios"),
2116  DefaultValue(""),
2117  Description("Propiedad con el texto a usar para poder añadir un registro vacío en el tipo Combo")
2118  ]
2119  public virtual string LiteralValorVacio
2120  {
2121  get { return _cLiteralValorVacio; }
2122  set { _cLiteralValorVacio = value; }
2123  }
2124  private string _cLiteralValorVacio = "";
2125 
2129  [
2130  Category("Varios"),
2131  DefaultValue(-1),
2132  Description("Propiedad con la posicion a usar para poder añadir un registro vacío en el tipo Combo")
2133  ]
2134  public virtual int IndiceValorVacio
2135  {
2136  get { return _nIndiceValorVacio; }
2137  set { _nIndiceValorVacio = value; }
2138  }
2139  private int _nIndiceValorVacio = -1;
2140 
2144  [
2145  Category("Varios"),
2146  DefaultValue(false),
2147  Description("Propiedad para esconcer el label de la descripción del txtcodlabel (PE-79609)")
2148  ]
2149  public bool _Esconder_Label
2150  {
2151  get { return _lEsconder_Label; }
2152  set
2153  {
2154  _lEsconder_Label = value;
2155  this.ewlabel.Visible = !_lEsconder_Label;
2156  }
2157  }
2158  private bool _lEsconder_Label = false;
2159 
2160 
2165  [
2166  Category("Varios"),
2167  DefaultValue(false),
2168  Description("Cargará todos los registros de una vez y solo una vez")
2169  ]
2170  public bool _CargarTodosRegistros = false;
2171  private bool _RegistrosCargados = false;
2172 
2176  [
2177  Category("Varios"),
2178  DefaultValue(true),
2179  Description("Propiedad que servirá para que sólo se consulten los datos y formen los grids con datos una vez. (PE-79835)")
2180  ]
2181  public bool _PrimeraVez = true;
2182 
2186  [
2187  Category("Varios"),
2188  DefaultValue(false),
2189  Description("Propiedad que determina si se dispara un evento '_Codigo_Cambiado_Before' cuando _codigo se establece a ''")
2190  ]
2191  public bool _Control_Valor_Vacio
2192  {
2193  get { return _lControl_Valor_Vacio; }
2194  set { _lControl_Valor_Vacio = value; }
2195  }
2196  private bool _lControl_Valor_Vacio = false;
2197 
2201  [
2202  Category("Varios"),
2203  Description("Propiedad que establecera si se debe validar de forma automática el código introducido por el usuario")
2204  ]
2205  public bool _Validar_Codigo = true;
2206 
2207 
2208  private Boolean _bCrearManteSiCodigoNoExiste = !Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_hera"));
2209 
2213  [
2214  Category("Varios"),
2215  Description("Propiedad que establecerá si se debe preguntar si desea crear el mantenimiento")
2216  ]
2217  public Boolean _CrearManteSiCodigoNoExiste
2218  {
2219  get
2220  {
2221  return _bCrearManteSiCodigoNoExiste;
2222  }
2223  set
2224  {
2225  _bCrearManteSiCodigoNoExiste = value;
2226  }
2227  }
2228 
2229  private string _cTooltipBrowser = "";
2233  [
2234  Category("Varios"),
2235  DefaultValue(""),
2236  Description("Tooltip del botón browser")
2237  ]
2238  protected string _TooltipBrowser
2239  {
2240  get
2241  {
2242  return _cTooltipBrowser;
2243  }
2244  set
2245  {
2246 
2247  _cTooltipBrowser = FUNCTIONS._MontaToolTipBrownser(value, btBrowser._AbrirConTeclaF4);
2248 
2249  if (toolTipTxtCodLabel != null) toolTipTxtCodLabel.SetToolTip(this.btBrowser, _cTooltipBrowser);
2250  this.btBrowser._Tooltip = _cTooltipBrowser;
2251  }
2252  }
2253 
2254  private string _cTooltipMante = "";
2258  [
2259  Category("Varios"),
2260  DefaultValue(""),
2261  Description("Tooltip del botón de mantenimiento")
2262  ]
2263  protected string _TooltipMante
2264  {
2265  get { return _cTooltipMante; }
2266  set
2267  {
2268  _cTooltipMante = value;
2269  if (toolTipTxtCodLabel != null) toolTipTxtCodLabel.SetToolTip(this.btMante, value);
2270  this.btMante._Tooltip = value;
2271  }
2272  }
2273 
2279  public void _SetToolTips(string tcTooltipBrowser = "", string tcTooltipMante = "")
2280  {
2281  if (!string.IsNullOrWhiteSpace(tcTooltipBrowser)) _TooltipBrowser = tcTooltipBrowser;
2282  else _TooltipBrowser = _cTooltipBrowser;
2283 
2284  if (!string.IsNullOrWhiteSpace(tcTooltipMante)) _TooltipMante = tcTooltipMante;
2285  else _TooltipMante = _cTooltipMante;
2286  }
2287 
2288  //PE-84279
2289  private int _nMultiSelectIndex = -1; //Indice de la tabla seleccionado
2290  private DataTable _dtMultiSelectTable = new DataTable(); //Tabla origen
2291 
2295  protected bool _lCodigosDiccionarioBrowser = false; // 90706
2296  //FPE-84279
2297 
2298 
2299 
2306  [
2307  Browsable(false)
2308  ]
2309  public List<string> _ListaTodosCodigos
2310  {
2311  get { return this._oCodeList; }
2312  set
2313  {
2314  List<string> llTmp = value;
2315  llTmp.Sort(); //ordenem
2316  this._oCodeList = llTmp;
2317  }
2318  }
2319  private List<string> _oCodeList = new List<string>(); //PE-88396 Se cambia la inicialización del objeto (de null a lista vacia) ya que daba error
2320  //al utilizar reflection y petaba todos los mantenimientos que utilizan un TxtCodlabel...
2321 
2325  private DateTime _GridLastLoading;
2326 
2330  private int _GridFirstVisibleRow;
2331 
2335  private ScrollBars _GridScrollBars;
2336 
2340  private bool _lGridScrollVisible = true;
2341 
2342  //PE-101446
2346  private bool _lSage50 = Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_sage50"));
2347 
2351  [
2352  Category("Varios"),
2353  DefaultValue(true),
2354  Description("Mostrar menú contextual cuando existe más de un registro con el mismo código")
2355  ]
2356  public bool _MostrarMenuContextual = true;
2357 
2361  public string _Browser_Alias = "";
2362 
2363  private bool _lTrim_Codigo_Seleccionado = true;
2368  [
2369  Category("Varios"),
2370  DefaultValue(true),
2371  Description("Propiedad para indicar si queremos aplicar Trim a los códigos seleccionados en la multiselección en los ewtxtcodlabel de los listados")
2372  ]
2373  public bool _Trim_Codigo_Seleccionado
2374  {
2375  get { return _lTrim_Codigo_Seleccionado; }
2376  set
2377  {
2378  _lTrim_Codigo_Seleccionado = value;
2379  }
2380  }
2381 
2385  public Dictionary<string, int> _ColumnasMultiLine
2386  {
2387  get
2388  {
2389  if (_btBrowser != null)
2390  {
2391  if (_btBrowser._ColumnasMultiLine == null)
2392  {
2393  _btBrowser._ColumnasMultiLine = new Dictionary<string, int>();
2394  }
2395 
2396  return _btBrowser._ColumnasMultiLine;
2397  }
2398  else
2399  {
2400  return null; // no tiene creado el _btBrowser
2401  }
2402  }
2403  set
2404  {
2405  if (_btBrowser != null)
2406  {
2407  _btBrowser._ColumnasMultiLine = value;
2408  }
2409  }
2410  }
2411 
2412  #endregion PROPIEDADES
2413 
2414 
2415  #region EVENTOS
2416 
2421  public delegate void Delegar_Browser_Before(ref bool tlOk);
2422 
2427  public delegate void Delegar_Browser_After(bool tlAceptar);
2428 
2433  public delegate void Delegar_Mante_Before(ref bool tlOk);
2434 
2438  public delegate void Delegar_Mante_After();
2439 
2443  public delegate void Delegar_Codigo_Cambiado();
2444 
2448  public delegate void Delegar_Codigo_Actualizado();
2449 
2453  public delegate void Delegar_Codigo_Cambiado_Before(ref bool tlOk);
2454 
2458  public delegate void Delegar_Codigo_Cambiado_Before_Extended(object sender, string tcValorCandidato, ref bool tlOk);
2459 
2465  public delegate String Delegar_Refrescar_Descripcion_Personalizada(String tcDescripcion);
2466 
2470  public delegate void Delegar_Click_Celda();
2471 
2475  public delegate void Delegar_Click_Combo_Grid();
2476 
2480  public delegate void Delegar_Click_Combo_Grid_Up();
2481 
2485  public delegate void Delegar_Click_Combo_DropDown(bool tbCombo_Desplegado);
2486 
2492  public delegate void Delegar_CodigoDiccionario_Establecido();
2498  public delegate Boolean DelegarValidacionCrearCodigo(String tcCodigo);
2502  public event Delegar_Browser_Before _Browser_Click_Before;
2503 
2507  public event Delegar_Browser_After _Browser_Click_After;
2508 
2512  public event Delegar_Mante_Before _Mante_Click_Before;
2513 
2517  public event Delegar_Mante_After _Mante_Click_After;
2518 
2522  public event Delegar_Codigo_Cambiado _Codigo_Cambiado;
2523 
2530  public event Delegar_Codigo_Actualizado _Codigo_Actualizado;
2531 
2535  public event Delegar_Refrescar_Descripcion_Personalizada _Refrescar_Descripcion_Personalizada;
2536 
2540  public event Delegar_Codigo_Cambiado_Before _Codigo_Cambiado_Before;
2541 
2545  public event Delegar_Codigo_Cambiado_Before_Extended _Codigo_Cambiado_Before_Extended;
2546 
2550  public event Delegar_Click_Celda _Click_Celda;
2551 
2555  public event Delegar_Click_Combo_Grid _Click_Combo_Grid;
2556 
2560  public event Delegar_Click_Combo_Grid_Up _Click_Combo_Grid_Up;
2561 
2565  public event Delegar_Click_Combo_DropDown _Click_Combo_DropDown;
2566 
2572  public event Delegar_CodigoDiccionario_Establecido _CodigoDiccionario_Establecido;
2573 
2578  {
2579  if (_CodigoDiccionario_Establecido != null) _CodigoDiccionario_Establecido();
2580  }
2581 
2582  //Task 105418
2588  public void LanzarEvento_Codigo_Cambiado_Before_Extended(string tcValorCandidato, ref bool tlOk)
2589  {
2590  if (_Codigo_Cambiado_Before_Extended != null && !_Desactivar_Evento_Codigo_Cambiado_OnCreated)
2591  {
2592  _Codigo_Cambiado_Before_Extended(this, tcValorCandidato, ref tlOk);
2593  }
2594  }
2595 
2600  protected void LanzarEvento_Codigo_Cambiado_Before(ref bool tlOk)
2601  {
2602  if (_Codigo_Cambiado_Before != null && !_Desactivar_Evento_Codigo_Cambiado_OnCreated)
2603  {
2604  _Codigo_Cambiado_Before(ref tlOk);
2605  }
2606  }
2607 
2608  #region Evento de validacion
2609 
2610  //PE-92472 Se crea un evento con el resutlado de la evaluación del método
2611 
2615  public delegate void Delegar_Codigo_Cambiado_ValidationResult(object sender, bool tlOk);
2619  public event Delegar_Codigo_Cambiado_ValidationResult _Codigo_Cambiado_Validated;
2623  public event DelegarValidacionCrearCodigo _ValidacionCrearCodigo;
2624 
2628  protected void LanzarEvento_Codigo_Cambiado_Validated(bool tlResultadoValidacion)
2629  {
2630  if (_Codigo_Cambiado_Validated != null && !_Desactivar_Evento_Codigo_Cambiado_OnCreated)
2631  {
2632  _Codigo_Cambiado_Validated(this, tlResultadoValidacion);
2633  }
2634  }
2635  //FPE-92472
2636 
2637  #endregion Evento de validacion
2638 
2639  #endregion EVENTOS
2640 
2641 
2642  #region CONSTRUCTOR
2643  public ewtxtcodlabel()
2647  {
2648  InitializeComponent();
2649 
2650  this.ewcombobox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
2651 
2652  if (_lSage50 && !DesignMode && EW_GLOBAL._EsEjecutable) //PE-101446
2653  {
2654  FUNCTIONS._Cambiar_Font(this, "Segoe UI");
2655  }
2656 
2657  // Carga de las propiedades según el tipo de txtCodLabel utilizado. Se redefine en cada objeto (txtArticulo, txtFamilia, ...)
2658  if (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_designmode", true)) == false) // PARTE 92404. De esta forma no nos guardará el valor de las propiedades en el "Designer" de los formularios
2659  {
2660  Cargar_Propiedades();
2661  }
2662  // PE-77566. Vaciamos el texto actual del label
2663  ewlabel.Text = "";
2664 
2665  // PE-93758. Optimización para la carga con dlls dinámicas
2668  this.btMante._Click_After += new botones.btMante._Click_After_Handler(_RefreshAfterClickMante); //Bug 104299
2669  this.btMante._ShowDialog = true;
2670  // FI PE-93758
2671 
2672  //PE-92458 Los mantes sin código no han de cargar el primer registro
2673  _Autoload_Mante_FirstValue = false;
2674 
2675  }
2676 
2677  private void Cargar_Propiedades()
2678  {
2679  _Cargar_Propiedades();
2680  }
2681 
2685  protected override void OnCreateControl()
2686  {
2687  ewcombobox.SelectedIndexChanged -= new EventHandler(ewcombobox_SelectedIndexChanged);
2688 
2689  _Definir_Browser(); //PE79522
2690  _Definir_Estilo_Visual(); // PE-80134
2691  _Refresh();
2692  _SetReadOnly();
2693 
2694  if (!String.IsNullOrEmpty(_cCodigoTmp))
2695  {
2696  _Desactivar_Evento_Codigo_Cambiado_OnCreated = true;
2697 
2698  _cCodigo = "";
2699  _Codigo = _cCodigoTmp;
2700  _cCodigoTmp = "";
2701 
2702  _Desactivar_Evento_Codigo_Cambiado_OnCreated = false;
2703  }
2704 
2705  base.OnCreateControl();
2706 
2707  }
2708 
2713  private void _RefreshAfterClickMante()
2714  {
2715  String lcCodigo;
2716 
2717  if (this._Tipo_Visual == _Tipos_Visuales.Combo)
2718  {
2719  lcCodigo = _Codigo;
2720 
2721  _PrimeraVez = true;
2722  _Refresh();
2723 
2724  _Codigo = lcCodigo;
2725  }
2726  else if (this._Tipo_Visual == _Tipos_Visuales.Estandar)
2727  {
2728  Boolean lbMostrarTmp = _lMostrar_Mensaje;
2729  lcCodigo = _Codigo;
2730 
2731  _lMostrar_Mensaje = false;
2732 
2733  if (!_Existe_Codigo(ref lcCodigo, true))
2734  {
2735  _Codigo = "";
2736  }
2737  _lMostrar_Mensaje = lbMostrarTmp;
2738  }
2739  }
2740 
2741  #endregion CONSTRUCTOR
2742 
2743 
2744  #region EVENTOS PRIVADOS
2745 
2751  private void ewtxtcodlabel_Load(object sender, EventArgs e)
2752  {
2753  try
2754  {
2755  //PE-77982 La suscripción a ventos se hace por método para poder ser invocada y controlada por FRMGESTIONPERFIL
2756  //PE-83394 ...si no estamos en modo diseño
2757  if (!DesignMode)
2758  _Suscripcion_Eventos();
2759 
2760  // Cargar datos en el objeto correspondiente según la propiedad _Tipo_Visual
2761  _Refresh();
2762 
2763  // Definición del estilo visual según la propiedad _Tipo_Visual
2764  _Definir_Estilo_Visual();
2765  }
2766  catch (Exception loEx)
2767  {
2768  DB.Registrar_Error(loEx);
2769  }
2770  }
2771 
2772 
2786  private void ewtextbox_Enter(object sender, EventArgs e)
2787  {
2788  ewtextbox loObjetoTextBox = (ewtextbox)sender;
2789 
2790  // Si estem en un txtcodlabel standar (txtbox,brow,mant,label) i el camp de texte està buit
2791  if (this._Tipo_Visual == _Tipos_Visuales.Estandar && this._Len > 0)
2792  {
2793  if (string.IsNullOrWhiteSpace(loObjetoTextBox.Text))
2794  {
2795  if (loObjetoTextBox.Text.Length < this._Len) loObjetoTextBox.Text = new string(' ', this._Len);
2796  }
2797  else //PE-94160 Si entramos en un txtbox con datos seleccionamos solo los espacios no blancos
2798  {
2799  loObjetoTextBox.Select(0, 0); //Mando el cursor a la posición 0
2800  loObjetoTextBox.Select(0, ewtextbox.Text.TrimEnd().Length);
2801  }
2802  }
2803  }
2804 
2805  //PE-84279
2811  private void Evento_Codigo_Elegido(object sender, EventArgs e)
2812  {
2813  //Aplantillo el sender
2814  ToolStripMenuItem loSubContextMenuStrip = (ToolStripMenuItem)sender;
2815  //Recupero los datos. Siempre ejecuto ya que me pueden haber cambiado parámetros de filtro.
2816  _nMultiSelectIndex = Convert.ToInt32(loSubContextMenuStrip.Name);
2817 
2818  Establecer_valor_diccionario(_nMultiSelectIndex);
2819  }
2820 
2821  private void Establecer_valor_diccionario(int tnIndiceSeleccionado)
2822  {
2823  string[] lcClaus = _Browser_Clave.Split(',');
2824  if (lcClaus.Length == 0)
2825  // Si no hi ha camps clau, retornem null
2826  return;
2827 
2828  // Inicialitzem el diccionari
2829  _CodigosDiccionario = new Dictionary<string, object>();
2830 
2831  if (_dtMultiSelectTable.Rows[tnIndiceSeleccionado] != null)
2832  {
2833  for (int lnClau = 0; lnClau < lcClaus.Length; lnClau++)
2834  {
2835  string lcNomCamp = lcClaus[lnClau].Trim().ToUpper(); //CCR 173391 (origen en CCR 171546 causado por CCR 170443)
2836  _CodigosDiccionario.Add(lcClaus[lnClau], _dtMultiSelectTable.DefaultView[tnIndiceSeleccionado][lcNomCamp]);
2837  }
2838  }
2839 
2840  //Reinicio variables
2841  _nMultiSelectIndex = -1;
2842  _dtMultiSelectTable = new DataTable();
2843 
2844  //Lanzo evento de que se ha elegido un código y esta cargado en _CodigosDiccionario
2845  _Evento_CodigoDiccionario_Establecido();
2846  }
2847  //FPE-84279
2848 
2854  //public void ewtextbox_Validated(object sender, EventArgs e)
2855  //{
2856  // // Controlar el carácter de relleno
2857  // //string lcTexto = ewtextbox.Text.Trim();
2858  // string lcTexto = ewtextbox.Text; //PE-84816 Un trim altera el valor que se asigna al salir
2859 
2860  // if (this.Llenar_Codigo(_Tabla) && !string.IsNullOrWhiteSpace(lcTexto) && (!_Expandir) && !string.IsNullOrWhiteSpace(_Relleno.ToString()))
2861  // {
2862  // if (lcTexto.Contains(".")) lcTexto = lcTexto.Replace(".", ""); //Si no expande y ponemos el . rellena el campo pero no quita el punto
2863 
2864  // lcTexto = lcTexto.Trim().PadLeft(_Len, _Relleno); //PE-84816 Ahora hago el trim() ya que voy a rellenar
2865  // if (lcTexto != ewtextbox.Text)
2866  // ewtextbox.Text = lcTexto;
2867  // }
2868 
2869  // // Controlar si está configurada la propiedad _Expandir
2870  // int lnAncho = lcTexto.Trim().Length - 1; //PE-84816 Mido sin espacios
2871  // if (_Expandir && lnAncho <= _Len)
2872  // {
2873  // //Miramos si hay más de un punto
2874  // System.Text.RegularExpressions.Regex loRegex = new System.Text.RegularExpressions.Regex("\\.");
2875  // if (lcTexto.IndexOf('.') != lcTexto.LastIndexOf('.'))
2876  // {
2877  // lcTexto = loRegex.Replace(lcTexto, "", _Len, lcTexto.IndexOf('.') + 1);
2878  // lnAncho = lcTexto.Trim().Length - 1;
2879  // }
2880 
2881  // // PE-81114
2882  // if ((lcTexto.IndexOf('.') <= 0) && (!string.IsNullOrWhiteSpace(_InicioCodigo)) && (lnAncho >= 0) && ((lnAncho + _InicioCodigo.Length + 1) <= _Len))
2883  // {
2884  // lcTexto = String.Format("{0}{1}{2}", _InicioCodigo, lcTexto.StartsWith(".") ? "" : ".", lcTexto.Trim()); //PE-84816 Ahora hago el trim() ya que voy a operar con el valor
2885  // lnAncho = lcTexto.Length - 1;
2886  // }
2887  // // FI PE-81114
2888 
2889  // if (lcTexto.Contains(".")) //PE-84816 Si tengo el caracter de expansion lo reemplazo, sino no
2890  // ewtextbox.Text = lcTexto.Trim().Replace(".", new string(_Relleno, _Len - lnAncho));
2891  // }
2892 
2893  // // Establecemos el código introducido en la propiedad pertinente
2894  // _Codigo = Convert.ToString(ewtextbox.Text);
2895  //}
2896 
2902  public void ewtextbox_Validated(object sender, EventArgs e)
2903  {
2904  String lcCodigo = "";
2905  Boolean lbClickBrowser = false;
2906 
2907  if (!_ReadOnly)
2908  {
2909  lbClickBrowser = _ActivarCondicionAutomatica(ref lcCodigo) && (this.btBrowser is btBrowser && this.btBrowser.Visible && this.btBrowser.Focused);
2910 
2911  if (!_Desactivar_Evento_Validated && !lbClickBrowser)
2912  {
2913  lcCodigo = ewtextbox.Text;
2914  if (_ExpandirTexto(ref lcCodigo)) ewtextbox.Text = lcCodigo;
2915 
2916  // Establecemos el código introducido en la propiedad pertinente
2917  _Codigo = Convert.ToString(ewtextbox.Text);
2918  }
2919  else if (lbClickBrowser)
2920  {
2922  this.btBrowser._CondicionAutomatica = lcCodigo;
2923  }
2924  }
2925  else
2926  {
2927  ewtextbox.Text = _Codigo;
2928  }
2929  }
2930 
2936  protected virtual Boolean _ExpandirTexto(ref String tcTexto)
2937  {
2938  if (this.Llenar_Codigo(_Tabla) && !string.IsNullOrWhiteSpace(tcTexto) && (!_Expandir) && (!string.IsNullOrWhiteSpace(_Relleno.ToString())))
2939  {
2940  //if (tcTexto.Contains(".")) tcTexto = tcTexto.Replace(".", ""); //Si no expande y ponemos el . rellena el campo pero no quita el punto
2941 
2942  tcTexto = tcTexto.Trim().PadLeft(_Len, _Relleno); //PE-84816 Ahora hago el trim() ya que voy a rellenar
2943  return true;
2944  }
2945 
2946  // Controlar si está configurada la propiedad _Expandir
2947  int lnAncho = tcTexto.Trim().Length - 1; //PE-84816 Mido sin espacios
2948 
2949  if (_Expandir && lnAncho <= _Len)
2950  {
2951  //Miramos si hay más de un punto
2952  Regex loRegex = new Regex("\\.");
2953  if (tcTexto.IndexOf('.') != tcTexto.LastIndexOf('.'))
2954  {
2955  tcTexto = loRegex.Replace(tcTexto, "", _Len, tcTexto.IndexOf('.') + 1);
2956  lnAncho = tcTexto.Trim().Length - 1;
2957  }
2958 
2959  // PE-81114
2960  if ((tcTexto.IndexOf('.') <= 0) && (!string.IsNullOrWhiteSpace(_InicioCodigo)) && (lnAncho >= 0) && ((lnAncho + _InicioCodigo.Length + 1) <= _Len))
2961  {
2962  tcTexto = String.Format("{0}{1}{2}", _InicioCodigo, tcTexto.StartsWith(".") ? "" : ".", tcTexto.Trim()); //PE-84816 Ahora hago el trim() ya que voy a operar con el valor
2963  lnAncho = tcTexto.Length - 1;
2964  }
2965  // FI PE-81114
2966 
2967  //PE-84816 Si tengo el caracter de expansion lo reemplazo, sino no
2968  if (tcTexto.Contains("."))
2969  {
2970  tcTexto = tcTexto.Trim().Replace(".", new string(_Relleno, _Len - lnAncho));
2971  return true;
2972  }
2973  }
2974 
2975  return false;
2976  }
2977 
2978  private void ewgrid_CellMouseDown(object sender, EventArgs e)
2979  {
2980  if (_Click_Combo_Grid != null)
2981  _Click_Combo_Grid();
2982  }
2983 
2984  private void ewgrid_CellMouseUp(object sender, EventArgs e)
2985  {
2986  if (_Click_Combo_Grid_Up != null)
2987  _Click_Combo_Grid_Up();
2988  }
2989 
2990 
2991  //private void
2992 
2998  private void ewgrid_SelectionChanged(object sender, EventArgs e)
2999  {
3000  try
3001  {
3002  if (_Desactivar_Evento_Codigo_Cambiado)
3003  return;
3004 
3005  if (ewgrid.CurrentRow == null)
3006  return;
3007 
3008  if (ewgrid.CurrentCell.Tag == null)
3009  return;
3010 
3011  // Obtener codigo actual
3012  _Codigo = ewgrid.CurrentCell.Tag.ToString();
3013 
3014  // Ejecución del evento click_after del browser del txtcodlabel
3015  if (_Browser_Click_After != null)
3016  _Browser_Click_After(true);
3017  }
3018  catch (Exception loEx)
3019  {
3020  DB.Registrar_Error(loEx);
3021  }
3022  }
3023 
3024 
3030  private void ewgrid_CellClick(object sender, DataGridViewCellEventArgs e)
3031  {
3032  try
3033  {
3034  if (ewgrid.CurrentRow == null)
3035  return;
3036 
3037 
3038 
3039  //PE-79732 Si clica la cabecera peta
3040  if (e.RowIndex < 0)
3041  {
3042  ewgrid.Columns[e.ColumnIndex].SortMode = DataGridViewColumnSortMode.NotSortable;
3043  return;
3044  }
3045 
3046  // PE-78325 Si esta vacio peta al seleccionar
3047  if (ewgrid.CurrentCell.Tag != null)
3048  {
3049  _Codigo = ewgrid.CurrentCell.Tag.ToString();
3050  }
3051  else
3052  {
3053  _Codigo = String.Empty;
3054  }
3055 
3056  // Ejecución del evento _Click_Celda
3057  if (_Click_Celda != null)
3058  _Click_Celda();
3059  }
3060  catch (Exception loEx)
3061  {
3062  DB.Registrar_Error(loEx);
3063  }
3064  }
3065 
3071  private void ewgrid_Scroll(object sender, ScrollEventArgs e)
3072  {
3073  if (e.Type == ScrollEventType.SmallIncrement || e.Type == ScrollEventType.LargeIncrement)
3074  {
3075  if (e.NewValue >= this.ewgrid.Rows.Count - GetDisplayedRowsCount())
3076  {
3077  //prevent loading from autoscroll.
3078  TimeSpan ts = DateTime.Now - _GridLastLoading;
3079  if (ts.TotalMilliseconds > 100)
3080  {
3081  this._GridFirstVisibleRow = e.NewValue;
3082  this._Cargar_Mas_Registros();
3083  }
3084  else
3085  {
3086  this.ewgrid.FirstDisplayedScrollingRowIndex = e.OldValue;
3087  }
3088  }
3089  }
3090 
3091  /*if (e.ScrollOrientation == ScrollOrientation.VerticalScroll)
3092  _Cargar_Mas_Registros();*/
3093  }
3094 
3098  private void HideScrollBars()
3099  {
3100  //Guardem la data de la carrega de registres
3101  this._GridLastLoading = DateTime.Now;
3102  //Guardem l'ScrollBAr de la grid
3103  if (_lGridScrollVisible) //PE-91627 Si esta visible me guardo los valores. Sino se perdia el valor orinal
3104  {
3105  this._GridScrollBars = this.ewgrid.ScrollBars;
3106  this._eewGridScrollBars = this.ewgrid._ewGridScrollBars; // PE-91847
3107  }
3108  // Obtener el siguiente tramo de registros a añadir
3109  int lnRegistrosAñadir = _nRegistrosCarga;
3110  lnRegistrosAñadir = lnRegistrosAñadir + _nUltimoRegistro;
3111  if (_dtVisual.Rows.Count >= lnRegistrosAñadir)
3112  {
3113  //Amaguem l'scroll
3114  this.ewgrid.ScrollBars = ScrollBars.None;
3115 
3116  if (this._eewGridScrollBars == ewgrid.ewGridScrollBars.Grande || this._eewGridScrollBars == ewgrid.ewGridScrollBars.Mediana)
3117  this._ewGridScrollBars = ewgrid.ewGridScrollBars.Ninguna; // PE-91847
3118 
3119  _lGridScrollVisible = false; //PE-91627
3120  }
3121  }
3122 
3126  private void ShowScrollBars()
3127  {
3128  //Mostrem l'scroll, PE-91847. Adaptar para barras táctiles
3129  if (this._eewGridScrollBars == ewgrid.ewGridScrollBars.Normal)
3130  {
3131  this.ewgrid.ScrollBars = this._GridScrollBars;
3132  //Desplasem la grid a la posició correcta
3133  this.ewgrid.FirstDisplayedScrollingRowIndex = this._GridFirstVisibleRow;
3134  }
3135  else
3136  {
3137  _ewGridScrollBars = this._eewGridScrollBars;
3138 
3139  }
3140 
3141  _lGridScrollVisible = true; //PE-91627
3142  }
3143 
3148  private int GetDisplayedRowsCount()
3149  {
3150  double loTmp1 = this.ewgrid.Rows[this.ewgrid.FirstDisplayedScrollingRowIndex].Height;
3151  double loTmp2 = this.ewgrid.Height;
3152  double loTmp3 = loTmp2 / loTmp1;
3153  return Convert.ToInt32(Math.Ceiling(loTmp3));
3154  }
3155 
3161  private void ewcombobox_SelectedIndexChanged(object sender, EventArgs e)
3162  {
3163  //PE-84616 Se registran muchos errores en el Log de que este evento da NullReferenceException, se controla antes de operar
3164  if (sender is ewcombobox && ewcombobox != null)
3165  {
3166  try
3167  {
3168  // PE-78589
3169  if (!string.IsNullOrWhiteSpace(ewcombobox.ValueMember))
3170  {
3171  // PE-84202
3172  if (ewcombobox.SelectedValue != null)
3173  {
3174  //Bug 114019 Me desactivo para evitar doble notificación al asignar por la pública
3175  ewcombobox.SelectedIndexChanged -= new EventHandler(ewcombobox_SelectedIndexChanged);
3176  _Codigo = ewcombobox.SelectedValue.ToString();
3177  ewcombobox.SelectedIndexChanged += new EventHandler(ewcombobox_SelectedIndexChanged);
3178  }
3179  else
3180  {
3181  if (_dtVisual.Columns[_Clave].DataType == typeof(int))
3182  _Codigo = "0";
3183  }
3184  // FI PE-84202
3185  }
3186 
3187  // Ejecución del evento click_after del browser del txtcodlabel
3188  if (_Browser_Click_After != null)
3189  _Browser_Click_After(true);
3190  }
3191  catch (Exception loEx)
3192  {
3193  DB.Registrar_Error(loEx);
3194  }
3195  }
3196  }
3197 
3204  protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
3205  {
3206  bool lbAbrirTeclaF4;
3207 
3208  lbAbrirTeclaF4 = (keyData == Keys.Oemplus || keyData == Keys.Add) && btBrowser._ValidarAbrirConTeclaF4();
3209 
3210  // Browser
3211  if (!_ReadOnly && (keyData == Keys.F4 || lbAbrirTeclaF4))
3212  {
3213  String lcTextoCondicionAtomatica = String.Empty;
3214  btBrowser._CondicionAutomaticaActiva = _ActivarCondicionAutomatica(ref lcTextoCondicionAtomatica);
3215  btBrowser._CondicionAutomatica = lcTextoCondicionAtomatica;
3216 
3217 
3218  _Desactivar_Evento_Validated = true;
3219  btBrowser.PerformClick();
3220  _Desactivar_Evento_Validated = false;
3221 
3222  if(lbAbrirTeclaF4) return true;
3223  }
3224 
3225  // Mantenimiento
3226  if (_Mostrar_Mante && keyData == Keys.F5)
3227  {
3228  btMante.PerformClick();
3229  }
3230 
3231  return base.ProcessCmdKey(ref msg, keyData);
3232  }
3233 
3239  protected virtual bool _ActivarCondicionAutomatica(ref string tcTexto)
3240  {
3241  return _ActivarCondicionAutomatica(ref tcTexto, _Len);
3242  }
3243 
3250  protected bool _ActivarCondicionAutomatica(ref String tcTexto, int tnLen)
3251  {
3252  string lcCodigo = string.Empty;
3253 
3254  if (_Browser_Datatable_Personalizado is DataTable) _Browser_Datatable_Personalizado.DefaultView.RowFilter = "";
3255 
3256  if (_PermitirFiltradoAutomaticoTextoParcial)
3257  {
3258  lcCodigo = _Relleno == ((char)32) ? ewtextbox.Text.TrimStart() : ewtextbox.Text.Trim();
3259  tcTexto = (!string.IsNullOrEmpty(lcCodigo) && lcCodigo.Length < tnLen && !lcCodigo.Contains(".")) ? lcCodigo.Trim() : string.Empty;
3260  }
3261 
3262  return !string.IsNullOrEmpty(tcTexto);
3263  }
3264 
3270  private void ewtextbox_KeyUp(object sender, KeyEventArgs e)
3271  {
3272 
3273  if (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_hera")) && (e.KeyCode == Keys.Back || e.KeyCode == Keys.Delete))
3274  {
3275  int lnPosCursor = this.ewtextbox.SelectionStart; //Me guardo la posición
3276  this.ewtextbox.Text = this.ewtextbox.Text.TrimEnd();
3277  this.ewtextbox.Select(lnPosCursor, 0); //Lo dejo donde estaba
3278  e.Handled = false;
3279  }
3280 
3281  }
3282 
3288  void ewtextbox_PreviewKeyDown(object sender, System.Windows.Forms.PreviewKeyDownEventArgs e)
3289  {
3290  //Se deba el caso de que los textos pueden estar llenos de espacios y al hacer Ctrl+V con algo de longitud máxima no lo pegava pq no cabia
3291  //comentado con Joan y capturamos el Ctrl+V
3292  if (e.KeyCode == Keys.V && e.Control)
3293  {
3294  ewtextbox.SelectionStart = 0;
3295  ewtextbox.Select(0, ewtextbox.Text.Length);
3296  }
3297  }
3298 
3303  private void btBrowser_base_Click_Before(ref bool tlOk)
3304  {
3305  if (_Tipo_Visual == _Tipos_Visuales.Hibrido)
3306  {
3307  string lcCodigo = _Browser_Hibrido();
3308 
3309  if (!string.IsNullOrWhiteSpace(lcCodigo))
3310  _Codigo = lcCodigo;
3311 
3312  tlOk = false;
3313  }
3314 
3315  // Ejecución del evento click_before del browser del txtcodlabel
3316  if (tlOk)
3317  {
3318  if (_Browser_Click_Before != null)
3319  _Browser_Click_Before(ref tlOk);
3320  }
3321  }
3322 
3327  private void btBrowser_base_Click_After(bool tlAceptar)
3328  {
3329  if (tlAceptar)
3330  {
3331  // PE-84497
3332  // Obtenemos el código seleccionado, tener en cuenta que si se devuelve el diccionario con los distintos códigos de las claves
3333  // no se actualiza automáticamente el valor _Codigo, hay que capturar manualmente el evento _Browser_Click_After()
3334  // para escojer los valores deseado del diccionario
3335  if (!string.IsNullOrWhiteSpace(btBrowser._Codigo))
3336  {
3337  if (btBrowser._Codigo.Length > this._Len)
3338  {
3339  _Codigo = btBrowser._Codigo.Substring(0, this._Len); //PE-89875 Si es mas largo de lo que espero recorto
3340  }
3341  else
3342  {
3343  //Actualizamos el valor ya que puede ser que este parcial (busquedas F4) y si el valor del codigo no cambia no refresca el txtbox
3344  ewtextbox.Text = btBrowser._Codigo;
3345  if (_Codigo != btBrowser._Codigo) _Codigo = btBrowser._Codigo;
3346  }
3347  }
3348  else
3349  {
3350  _CodigosDiccionario = btBrowser._CodigosDiccionario;
3351  _Esconder_Label = true;
3352  //PE-84279 Lanzo evento de que tengo un código cargado en _CodigosDiccionario
3353  _lCodigosDiccionarioBrowser = true; //Me guardo el código seleccionado para detectar cambios
3354  _Evento_CodigoDiccionario_Establecido();
3355  //FPE-84279
3356 
3357  //Actualizamos el valor ya que puede ser que este parcial (busquedas F4) y si el valor del codigo no cambia no refresca el txtbox
3358  ewtextbox.Text = _Codigo;
3359 
3360  }
3361 
3362  // FI PE-84497
3363  }
3364 
3365  // Ejecución del evento click_after del browser del txtcodlabel
3366  if ((tlAceptar) && (_Browser_Click_After != null))
3367  _Browser_Click_After(tlAceptar);
3368 
3369  // Devolver foco al objeto correspondiente
3370  switch (_Tipo_Visual)
3371  {
3372  case _Tipos_Visuales.Estandar:
3373  case _Tipos_Visuales.Hibrido:
3374  this._setTxtBoxFocus();
3375  break;
3376 
3377  case _Tipos_Visuales.Combo:
3378  ewcombobox.Focus();
3379  break;
3380 
3381  case _Tipos_Visuales.Grid:
3382  break;
3383 
3384  default:
3385  break;
3386  }
3387  }
3388 
3392  public virtual void _setTxtBoxFocus()
3393  {
3394  ewtextbox.Focus();
3395 
3396  //PE-86214 Marco como seleccionado solo los caracteres existentes => en Hera el codigo va seguido de espacios en blanco que
3397  //no se tiene en cuenta a la hora de medir el tamaño del control por lo que la selección de todo el código ocultaba parte del
3398  //mismo
3399  if (!string.IsNullOrWhiteSpace(ewtextbox.Text))
3400  {
3401  ewtextbox.Select(0, 0); //Mando el cursor a la posición 0
3402  ewtextbox.Select(0, ewtextbox.Text.TrimEnd().Length);
3403  }
3404  //FPE-86214
3405  }
3406 
3407 
3412  private void btMante_base_Click_Before(ref bool tlOk)
3413  {
3414  PasarFoco();
3415 
3416  // Ejecución del evento click_before del mante del txtcodlabel
3417  if (tlOk)
3418  {
3419  // Establecemos las propiedades del botón de mantenimiento para la navegación
3420  btMante._Form = _cMante;
3421  btMante._Codigo = _cCodigo;
3422 
3423  if (_Mante_Click_Before != null)
3424  _Mante_Click_Before(ref tlOk);
3425  }
3426  }
3427 
3432  private void PasarFoco()
3433  {
3434  if (_ReadOnly) // PARTE 83952. Podemos tener el txtCodlabel de solo lectura, pero podemos ir al mantenimiento. No me interesa que pase el foco, estamos en modo solo lectura
3435  return;
3436 
3437  // Devolver foco al objeto correspondiente
3438  switch (_Tipo_Visual)
3439  {
3440  case _Tipos_Visuales.Estandar:
3441  case _Tipos_Visuales.Hibrido:
3442  ewtextbox.Focus();
3443  break;
3444 
3445  case _Tipos_Visuales.Combo:
3446  ewcombobox.Focus();
3447  break;
3448 
3449  case _Tipos_Visuales.Grid:
3450  break;
3451 
3452  default:
3453  break;
3454  }
3455  }
3456 
3460  private void btMante_base_Click_After()
3461  {
3462  // Ejecución del evento click_after del mante del txtcodlabel
3463  if (_Mante_Click_After != null)
3464  _Mante_Click_After();
3465 
3466  switch (_Tipo_Visual)
3467  {
3468  case _Tipos_Visuales.Estandar:
3469  case _Tipos_Visuales.Hibrido:
3470  this._Refrescar_Descripcion();
3471  break;
3472 
3473  default:
3474  break;
3475  }
3476  }
3477 
3483  private void ewtxtcodlabel_Resize(object sender, EventArgs e)
3484  {
3485  if (!_lRedimensionInterna) // PE-79609
3486  _Definir_Estilo_Visual();
3487  }
3488 
3489 
3494  private string _Browser_Hibrido()
3495  {
3496  string[] lcTitutlos;
3497  string lcCodigo = "";
3498 
3499  DataTable dtSel = new DataTable();
3500 
3501  // Obtenemos los datos a mostrar en el formulario de selección
3502  string lcSql = "select " + _Browser_Distinct + _Clave + "," + _Concepto + " from " + DB.SQLDatabase(_Browser_Database, _Browser_Tabla); // 83201
3503 
3504  if (!string.IsNullOrWhiteSpace(_Browser_Condicion))
3505  lcSql = lcSql + " where " + _Browser_Condicion;
3506 
3507  bool llOk = DB.SQLExec(lcSql, ref dtSel);
3508 
3509  // Mostrar formulario de selección
3510  if (llOk && dtSel.Rows.Count > 0)
3511  {
3512  formul.Forms.Seleccionar frmSel = new formul.Forms.Seleccionar();
3513  frmSel._TipoFormulario = _TiposFormulario.Tactil;
3514  frmSel._Imagen_Aceptar = true;
3515  frmSel._Imagen_Cancelar = true;
3516  frmSel._DataTable = dtSel;
3517  frmSel._Titulo = _Browser_Titulo;
3518  frmSel.Height = 700;
3519 
3520  // Asignar título a las columnas del grid
3521  lcTitutlos = _Browser_Titulos_Campos.Split(',');
3522  int i = 0;
3523  int lnNumTitulos = lcTitutlos.GetLength(0);
3524 
3525  foreach (DataColumn loCol in frmSel._DataTable.Columns)
3526  {
3527  if (i <= (lnNumTitulos - 1))
3528  loCol.Caption = lcTitutlos[i];
3529  i++;
3530  }
3531 
3532  frmSel.ShowDialog(); //Bug 114218 Cambiar .ShowDialog() por ._ShowDialog()
3533  if (frmSel.DialogResult == DialogResult.OK)
3534  {
3535  DataRow drSel = frmSel._DataRowSelect;
3536  lcCodigo = drSel[0].ToString();
3537  }
3538  }
3539 
3540  return lcCodigo;
3541  }
3542 
3543 
3549  private void ewcombobox_Click(object sender, EventArgs e)
3550  {
3551  if (_Click_Combo_Grid != null)
3552  _Click_Combo_Grid();
3553  }
3554 
3555 
3556  private void ewcombobox_SelectedIndexChanged_1(object sender, EventArgs e)
3557  {
3558  //if (_Click_Combo_Grid != null)
3559  // _Click_Combo_Grid();
3560  }
3561 
3562  #endregion EVENTOS PRIVADOS
3563 
3564 
3565  #region METODOS PRIVADOS
3566 
3571  protected virtual void _Cargar_Propiedades()
3572  {
3573 
3574  }
3575 
3576  private String _cCodigoTmp = "";
3577 
3582  protected virtual bool EvaluarOrigenManual()
3583  {
3584  return (_DataTable != null);
3585  }
3586 
3590  private void _Definir_Estilo_Visual()
3591  {
3592  bool llOrigenManual = EvaluarOrigenManual();
3593 
3594  if (Created)
3595  {
3596  _lRedimensionInterna = true; // PE-79609
3597 
3598  // Que no pare en estos botones al tabular
3599  btBrowser.TabStop = false;
3600  btMante.TabStop = false;
3601 
3602  // Adaptar objetos al contenedor
3603  ewcombobox.Top = 0;
3604  ewcombobox.Left = 0;
3605  ewgrid.Top = 0;
3606  ewgrid.Left = 0;
3607  ewtextbox.Top = 0;
3608  ewtextbox.Left = 0;
3609  btBrowser.Top = -1;
3610  btMante.Top = -1;
3611  ewlabel.Top = 4;
3612 
3613  /* PE-77566. Mantenemos el texto actual del label
3614  ewlabel.Text = "";*/
3615 
3616  try
3617  {
3618  // Mostrar aspecto visual correspondiente
3619  switch (_Tipo_Visual)
3620  {
3621  case _Tipos_Visuales.Combo:
3622 
3623  ewgrid.Visible = false;
3624  ewtextbox.Visible = false;
3625  btBrowser.Visible = false;
3626  ewlabel.Visible = false;
3627  ewcombobox.Visible = true;
3628  ewFlowLayoutPanel1.Visible = true; // PE-92815
3629  btMante.Visible = !llOrigenManual && _Mostrar_Mante;
3630 
3631  ewcombobox.Font = _oFont;
3632  ewcombobox.Width = _AnchoCombo > 0 ? _AnchoCombo : this.Width - ((!llOrigenManual && _Mostrar_Mante) ? ewcombobox.Height + 3 : 0);
3633  ewFlowLayoutPanel1.Left = ewcombobox.Width + 1; // PE-92815
3634  btMante.Height = ewcombobox.Height + 2;
3635  btMante.Width = btMante.Height;
3636 
3637  this.Height = ewcombobox.Height + 1; // PE-68407
3638 
3639  //PE-100413 Para tablas personalizadas la asignación se debe sobreescribir y así poder configurar el combo y detectar sus cambios de valor
3640  if (llOrigenManual)
3641  _Set_Custom_Combo_DataSource(ewcombobox);
3642 
3643  _CargaBotonesAdicionales();
3644 
3645  if(ewFlowLayoutPanelBotonesAdicionales.Controls.Count > 0 )
3646  {
3647  ewcombobox.Width -= ewFlowLayoutPanelBotonesAdicionales.Width + 5;
3648  ewFlowLayoutPanel1.Left = ewcombobox.Width + 1;
3649 
3650  foreach (Control loControl in ewFlowLayoutPanelBotonesAdicionales.Controls)
3651  {
3652  loControl.Height = btMante.Height;
3653  }
3654  }
3655 
3656  break;
3657 
3658  case _Tipos_Visuales.Grid:
3659 
3660  ewgrid.ReadOnly = true;
3661  ewgrid.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
3662  ewgrid.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
3663  ewgrid.DefaultCellStyle.Font = _oFont;
3664  ewgrid._oDefaultCellStyle.Font = _oFont; //CCR 142160
3665  ewgrid.RowHeadersVisible = false;
3666 
3667  // PE-91847. Si se ha definido barras grandes, no aplicar el dock y redimensionar el grid teniendo en cuenta el tamaño del contenedor y las barras de desplazamiento
3669  ewgrid.Dock = DockStyle.Fill;
3670  else
3671  {
3672  ewgrid.Dock = DockStyle.None;
3673  ewgrid.Width = this.Width;
3674  ewgrid.Height = this.Height;
3675  if (vScrollBar1.Visible)
3676  ewgrid.Width = this.Width - vScrollBar1.Width;
3677  if (hScrollBar1.Visible)
3678  ewgrid.Height = this.Height - hScrollBar1.Height;
3679  }
3680 
3681  ewcombobox.Visible = false;
3682  ewtextbox.Visible = false;
3683  btBrowser.Visible = false;
3684  btMante.Visible = false;
3685  ewlabel.Visible = false;
3686  ewFlowLayoutPanel1.Visible = false; // PE-92815
3687  ewgrid.Visible = true;
3688  ewgrid.MultiSelect = false; //PE-93946: no permitimos en los grids del perfil táctil que haya múltiple selección
3689 
3690  // PE-80134
3691  ewgrid.ColumnHeadersVisible = !string.IsNullOrWhiteSpace(_Browser_Titulo) && (_Presentar_Browser_Titulo); // PARTE 94327
3692  // FI PE-80134
3693 
3694  // Calcular el número de registros a añadir al grid en caso de tipo _Grid
3695  _nRegistrosCarga = _Obtener_Registros_Carga();
3696 
3697  ewPanelBotonesAdicionales.Visible = false;
3698 
3699  break;
3700 
3701  // Tipo "estandar" por defecto
3702  default:
3703 
3704  ewgrid.Visible = false;
3705  ewcombobox.Visible = false;
3706  ewtextbox.Visible = true;
3707  ewFlowLayoutPanel1.Visible = true; // PE-92815
3708  btBrowser.Visible = _Mostrar_Browser;
3709  btMante.Visible = _Mostrar_Mante;
3710  btInfo.Visible = _Mostrar_Info;
3711 
3712  ewtextbox.Font = _oFont;
3713  ewtextbox.MaxLength = _Len;
3714  ewtextbox.Width = _Ancho_TextBox();
3715  ewFlowLayoutPanel1.Left = ewtextbox.Left + ewtextbox.Width + 1; // PE-92815
3716 
3717  btBrowser.Height = ewtextbox.Height + 2;
3718  btBrowser.Width = btBrowser.Height;
3719  btMante.Height = ewtextbox.Height + 2;
3720  btMante.Width = btMante.Height;
3721  btInfo.Height = ewtextbox.Height + 2;
3722  btInfo.Width = btInfo.Height;
3723  ewlabel.Visible = !_lEsconder_Label; // PE-79609
3724  ewlabel.Font = _oFont;
3725 
3726  this.Height = ewtextbox.Height + (_lSage50 ? 2 : 1); // PE-68407 //PE-101446
3727 
3728  _CargaBotonesAdicionales();
3729 
3730  break;
3731  }
3732  }
3733  catch (Exception loEx)
3734  {
3735  DB.Registrar_Error(loEx);
3736  }
3737 
3738  _lRedimensionInterna = false; // PE-79609
3739  }
3740  else
3741  {
3742  if (_Tipo_Visual == _Tipos_Visuales.Combo)
3743  {
3744  ewcombobox.Width = this.Width - ((!llOrigenManual && _Mostrar_Mante) ? ewcombobox.Height + 3 : 0);
3745  ewFlowLayoutPanel1.Left = ewcombobox.Width + 1;
3746  }
3747  }
3748  }
3749 
3750  private void _CargaBotonesAdicionales()
3751  {
3752  Int32 lnCont = 1;
3753 
3754  ewPanelBotonesAdicionales.Visible = _MostrarBotonesAdicionales;
3755 
3756  if (Created && _MostrarBotonesAdicionales && _BotonesAdicionales.Count > 0 && ewFlowLayoutPanelBotonesAdicionales.Controls.Count == 0)
3757  {
3758  foreach(ewbutton loButton in _BotonesAdicionales)
3759  {
3760  loButton.Name = String.Format("{0}{1}", String.IsNullOrEmpty(loButton.Name) ? "BotonAdicional" : loButton.Name, lnCont++);
3761  loButton.TabStop = false;
3762  ewFlowLayoutPanelBotonesAdicionales.Controls.Add(loButton);
3763  }
3764  }
3765  }
3766 
3767  //PE-100413 Para tablas personalizadas la asignación se debe sobreescribir y así poder configurar el combo y detectar sus cambios de valor
3772  protected virtual void _Set_Custom_Combo_DataSource(ewcombobox toCombo)
3773  {
3774  //Se debe implementar en la clase derivada
3775  }
3776 
3777  //Task 106365
3783  {
3784  return ewcombobox;
3785  }
3786 
3790  private void _Definir_Browser()
3791  {
3792  if (Created)
3793  {
3794  btBrowser._Clave = _Browser_Clave;
3795  btBrowser._ClavePrimaria = _Browser_ClavePrimaria;
3796  btBrowser._Campo_Predet = _Browser_Campo_Predet;
3797  btBrowser._Campos = _Browser_Campos;
3798  btBrowser._Condicion = _Browser_Condicion;
3799  btBrowser._DataBase = _Browser_Database;
3800  btBrowser._Tabla = _Browser_Tabla;
3801  btBrowser._Titulo = _Browser_Titulo;
3802  btBrowser._Titulos_Campos = _Browser_Titulos_Campos;
3803  btBrowser._UsarExtensiones = _Browser_Usar_Extensiones;
3804  btBrowser._CampoCondicionAutomatica = _Browser_Clave.Contains(",") ? _Clave : _Browser_Clave;
3805  btBrowser._Alias = _Browser_Alias;
3806 
3807  if (dtBrowser_Datatable_Personalizado != null) btBrowser._DatatablePersonalizado = dtBrowser_Datatable_Personalizado;
3808  }
3809  }
3810 
3815  protected virtual int _Ancho_TextBox()
3816  {
3817  if (_Len == 0) // PARTE 103197. Si tenemos un 0 = viene del Designer por el Orden que tenemos guardadas las propiedades, devolvermos un 20, luego volverá a pasar
3818  return 20;
3819 
3820  int lnWidth = 0;
3821  char lcCarText;
3822  // PARTE 103197. En la carga de un perfil necesitamos realizar el cálculo del ancho del control con un carácter de ancho intermedio
3823  if (_cCaracterAncho != ' ' && !String.IsNullOrWhiteSpace(_cCaracterAncho.ToString()))
3824  lcCarText = _cCaracterAncho;
3825  else
3826  lcCarText = 'M';
3827 
3828  string lcText = string.Empty;
3829 
3830  lcText = lcText.PadRight(_Len, lcCarText);
3831  // PARTE 103197
3832 
3833  // PE-86238
3834  // Cambiamos de CreateGraphics a usar la clase TextRenderer pues el tipo Graphics actuando en paralelo da problemas
3835  lnWidth = TextRenderer.MeasureText(lcText, ewtextbox.Font).Width;
3836 
3837  return lnWidth;
3838  }
3839 
3844  private void _Refrescar_Descripcion()
3845  {
3846  if ((_Tipo_Visual == _Tipos_Visuales.Estandar) || (_Tipo_Visual == _Tipos_Visuales.Hibrido))
3847  {
3848  // PE-97944. Optimización
3849  ewlabel.Text = _DescripcionCodigo;
3850 
3851  if (this._lEsconder_Label) toolTipTxtCodLabel.SetToolTip(ewtextbox, ewlabel.Text);
3852  }
3853  }
3854 
3860  {
3861  String lcTextoPersonalizado = string.Empty;
3862 
3863  if (!_Refrescar_Descripcion_Datatable_Personalizado(out lcTextoPersonalizado)) lcTextoPersonalizado = _cDescripcionCodigo;
3864  if(_Refrescar_Descripcion_Personalizada is Delegar_Refrescar_Descripcion_Personalizada) lcTextoPersonalizado = _Refrescar_Descripcion_Personalizada?.Invoke(lcTextoPersonalizado);
3865 
3866  return lcTextoPersonalizado;
3867  }
3868 
3869  //PE-88465
3876  public virtual bool _Refrescar_Descripcion_Datatable_Personalizado(out string tcTextoLabel)
3877  {
3878  tcTextoLabel = "";
3879  return false;
3880  }
3881 
3885  public virtual void _Reload_propiedades()
3886  {
3887  this._Cargar_Propiedades();
3888  }
3889 
3897  private bool _Obtener_Celda_Codigo(string tcCodigo, ref DataGridViewCell dgCelda, out int tnRowIndex)
3898  {
3899  bool llEncontrado = false;
3900 
3901  tnRowIndex = -1;
3902 
3903  if (tcCodigo == string.Empty)
3904  return false;
3905 
3906  if (ewgrid.RowCount == 0)
3907  return false;
3908 
3909  // PE-79708
3910  tcCodigo = tcCodigo.Trim();
3911 
3912  foreach (DataGridViewRow dgRow in ewgrid.Rows)
3913  {
3914  foreach (DataGridViewCell dgCell in dgRow.Cells)
3915  if ((dgCell.Tag != null) && (dgCell.Tag.ToString().Trim() == tcCodigo)) // PE-79708
3916  {
3917  llEncontrado = true;
3918  dgCelda = dgCell;
3919  tnRowIndex = dgCell.RowIndex;
3920  break;
3921  }
3922 
3923  if (llEncontrado)
3924  break;
3925  }
3926 
3927  // Mientras no encontremos la celda vamos añadiendo registros
3928  if ((!llEncontrado) && (_dtVisual.Rows.Count > _nUltimoRegistro))
3929  {
3930  _Cargar_Mas_Registros();
3931  llEncontrado = _Obtener_Celda_Codigo(tcCodigo, ref dgCelda, out tnRowIndex);
3932 
3933  }
3934 
3935  return llEncontrado;
3936  }
3937 
3942  private int _Obtener_Registros_Carga()
3943  {
3944  int lnRegs = 0, lnFilasVisibles = 0;
3945 
3946  if (_Tipo_Visual != _Tipos_Visuales.Grid)
3947  return 0;
3948 
3949  //if (ewgrid.Height < 30)
3950  // return 0;
3951 
3952  if (_CargarTodosRegistros)
3953  // PE-74329. Si hay que cargar todos los registros devolvemos -1 para tratarlo en _Cargar_Mas_Registros.
3954  lnRegs = -1;
3955  else
3956  {
3957  lnFilasVisibles = (ewgrid.Height / _Alto_Filas);
3958 
3959  //PE-78325 Al ser un grid pequeño el calculo de filas visibles queda = 0, eentonces no carga registros
3960  if (lnFilasVisibles < 1) lnFilasVisibles = 1;
3961  lnRegs = (lnFilasVisibles * _Grid_Columnas) * 2;
3962  }
3963 
3964  return lnRegs;
3965  }
3966 
3971  //public void _Actualizar_Tooltips(string tcTooltip)
3972  //{
3973  // foreach (Control loControl in this.Controls)
3974  // {
3975  // _Actualizar_Tooltip(loControl, tcTooltip);
3976  // }
3977  //}
3978 
3984  //private void _Actualizar_Tooltip(Control toControl, string tcTooltip)
3985  //{
3986  // this.toolTipTxtCodLabel.SetToolTip(toControl, tcTooltip);
3987  //}
3988 
3996  public virtual bool _Existe_Codigo(ref string tcCodigo, bool tlValidar = false)
3997  {
3998 
3999  if (_Browser_Datatable_Personalizado != null) return true; //PE-81847
4000 
4001  _ErrorProviderText = ""; //Reseteo la propiedad
4002 
4003  if (tlValidar || (!tlValidar && _Validar_Codigo))
4004  {
4005 
4006  // PE-97944. Optimización
4007  if (string.IsNullOrWhiteSpace(tcCodigo))
4008  return true;
4009 
4010 
4011  bool llOk = false;
4012  DataTable ldtConsulta = new DataTable();
4013 
4014  if (string.IsNullOrWhiteSpace(_Browser_Clave)) _Browser_Clave = _Clave;
4015 
4016  string lcSql = "SELECT " + _Browser_Alias + _Browser_Clave + ", " + _Browser_Alias + _Concepto + " " + // PE-97944. Optimización
4017  "FROM " + DB.SQLDatabase(_Browser_Database, _Browser_Tabla) + " " +
4018  "WHERE " + _Browser_Alias + _Clave + " = " + DB.SQLString(tcCodigo);
4019 
4020  //string lcSql = "SELECT " + _Clave + ", " + _Concepto + " " + // PE-97944. Optimización
4021  // "FROM " + DB.SQLDatabase(_Database, _Tabla) + " " +
4022  // "WHERE " + _Clave + " = " + DB.SQLString(tcCodigo);
4023 
4024  if (!string.IsNullOrWhiteSpace(_Browser_Condicion))
4025  lcSql = lcSql + " AND (" + _Browser_Condicion + " ) ";
4026 
4027  llOk = DB.SQLExec(lcSql, ref ldtConsulta);
4028 
4029  if (llOk && ldtConsulta.Rows.Count > 0) //Ha ido bien la consulta y tengo registros
4030  {
4031  // PE-97944. Optimización, guardar descripción aprovechando la consulta hecha
4032  _cDescripcionCodigo = ldtConsulta.Rows[0][1].ToString();
4033 
4034  if (ldtConsulta.Rows.Count > 1) //Múltiples resultados
4035  {
4036  if (!_lCodigosDiccionarioBrowser) //Controlo que no haya sido elegido por el browser
4037  {
4038  if (_lConsultar_Usuario_Seleccion_Multiple //Si debo consultar al usuario
4039  && !_ReadOnly) //PE-91555 ...y no estoy de solo lectura
4040  {
4041  // Hay más de un elemento de navegación, mostraremos un menú emergente con cada elemento de navegación
4042  ContextMenuStrip = _Montar_ContextMenuStrip(ldtConsulta);
4043 
4044  //Asigno el Datatable
4045  _dtMultiSelectTable = ldtConsulta.Copy();
4046 
4047  //Posiciono el menú debajo del botón
4048  Point lptLowerLeft = new Point(0, Height);
4049  lptLowerLeft = PointToScreen(lptLowerLeft);
4050  if(Visible) //CCR 145498 => Si el control está visible muestro su contextual, sino no
4051  ContextMenuStrip.Show(lptLowerLeft);
4052  }
4053  else //En caso de no tener que preguntar elijo el primer elemento
4054  {
4055  _dtMultiSelectTable = ldtConsulta.Copy();
4056 
4057  Establecer_valor_diccionario(0); //Le digo que elija el índice 0
4058  }
4059  }
4060  }
4061  }
4062  else llOk = false; //PE-84664 No ha ido bien o no tengo registros => El código no existe
4063 
4064  //PE-84279 Reinicio variable
4065  _lCodigosDiccionarioBrowser = false;
4066 
4067  if (!llOk && _lMostrar_Mensaje)
4068  {
4069  //PE-88499. Si es de solo lectura no presentamos aviso y tampoco me interesa que borre el valor actual
4070  if (_ReadOnly)
4071  {
4072  if (_Tipo_Visual == _Tipos_Visuales.Estandar) _ErrorProviderText = _Mensaje_No_Existe;
4073  llOk = true;
4074  }
4075  else
4076  {
4077  if(_CrearManteSiCodigoNoExiste && !String.IsNullOrEmpty(_cMante.Trim()))
4078  {
4079  _MensajeNoSePuedeCrear = _Mensaje_No_Existe;
4080 
4081  if (_LanzarEventoValidacionCrearCodigo(tcCodigo))
4082  {
4083  String lcMessage = String.Format("{0}{1}¿Desea crearlo?", _Mensaje_No_Existe.EndsWith(".") ? _Mensaje_No_Existe : _Mensaje_No_Existe + ".", Environment.NewLine);
4084 
4085  if (DialogResult.Yes == _MessageBox(lcMessage, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2, DialogResult.No))
4086  {
4087  _CreaManteSiCodigoNoExiste(ref tcCodigo, ref llOk);
4088  }
4089  }
4090  else
4091  {
4092  if(!String.IsNullOrEmpty(_MensajeNoSePuedeCrear)) FUNCTIONS._MessageBox(_MensajeNoSePuedeCrear, MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, DialogResult.OK);
4093  }
4094  }
4095  else
4096  {
4097  _MessageBox(_Mensaje_No_Existe, MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, DialogResult.OK);
4098  }
4099  }
4100  //FPE-88499
4101  }
4102 
4103 
4104  return llOk;
4105  }
4106  else
4107  {
4108  return true;
4109  }
4110  }
4111 
4112  private DialogResult _MessageBox(string tcMessage, MessageBoxButtons toMessageBoxButtons, MessageBoxIcon toMessageBoxIcon, MessageBoxDefaultButton toMessageBoxDefaultButton, DialogResult toDialogResult)
4113  {
4114  if (!string.IsNullOrEmpty(_Guid) && !_DesactivarRespuestasAutomaticas && _FormBase is FormBase && _FormBase._MessageBoxAutomatic)
4115  {
4116  return _FormBase._MessageBox(tcMessage, toMessageBoxButtons, toMessageBoxIcon, toMessageBoxDefaultButton, toDialogResult, new MessageBoxAutomatico() { _Guid = _Guid, _Pantalla = _FormBase._Pantalla });
4117  }
4118  else
4119  {
4120  return FUNCTIONS._MessageBox(tcMessage, toMessageBoxButtons, toMessageBoxIcon, toMessageBoxDefaultButton, toDialogResult);
4121  }
4122  }
4123 
4124  private bool _LanzarEventoValidacionCrearCodigo(String tcCodigo)
4125  {
4126  Boolean lbOk = true;
4127 
4128  if (_ValidacionCrearCodigo != null) lbOk = _ValidacionCrearCodigo(tcCodigo);
4129 
4130  return lbOk;
4131  }
4132 
4133  private void _CreaManteSiCodigoNoExiste(ref String tcCodigo, ref Boolean tlOk)
4134  {
4135  String lcCodigoTmp = _cCodigo;
4136  List<ewbutton> loAsistentes = new List<ewbutton>();
4137 
4138  if (_MostrarBotonesAdicionales && _BotonesAdicionales.Count > 0)
4139  {
4140  loAsistentes = (from loButton in _BotonesAdicionales
4141  where loButton is IBotonAsistente
4142  select loButton).ToList();
4143  }
4144 
4145  _cCodigo = tcCodigo;
4146  _Validar_Codigo = false;
4147 
4148  if (loAsistentes.Count > 0)
4149  {
4150  IBotonAsistente loBoton = ((IBotonAsistente)loAsistentes.First());
4151 
4152  loBoton._ShowAsistente(tcCodigo);
4153  if(!String.IsNullOrEmpty(loBoton._CodigoCreado.Trim())) tcCodigo = loBoton._CodigoCreado.Trim();
4154  }
4155  else
4156  {
4157  //Asignamos el codigo porque eal hacer el PerformClick vuelve a lanzar los eventos, así el codigo no cambia y no hace nada
4158  _btMante._CrearNuevoCodigo = true;
4159  _btMante._Codigo = tcCodigo;
4160  _btMante.btMante_Click(_btMante, null);
4161 
4162  }
4163 
4164  //Dejamos el codigo original
4165  _cCodigo = lcCodigoTmp;
4166 
4167  //Miramos si el codigo se ha creado
4168  _lMostrar_Mensaje = false;
4169  tlOk = _Existe_Codigo(ref tcCodigo, true);
4170 
4171  if (!tlOk) _Refrescar_Descripcion();
4172 
4173  _lMostrar_Mensaje = true;
4174  _Validar_Codigo = true;
4175 
4176  }
4177 
4183  private bool Llenar_Codigo(string tcTaula)
4184  {
4185 
4186  bool llOk = true;
4187 
4188  if (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_hera")))
4189  {
4190  if (!string.IsNullOrWhiteSpace(tcTaula))
4191  {
4192  tcTaula = tcTaula.ToLower();
4193  int lnLongTaula = tcTaula.Length;
4194  int lnPos = 0;
4195  string lcCodTaula = "";
4196 
4197  lnPos = tcTaula.IndexOf('_');
4198 
4199  if (lnPos == -1)
4200  lnPos = tcTaula.IndexOf('!');
4201 
4202  if (lnPos != -1)
4203  lcCodTaula = tcTaula.Substring(lnPos);
4204  else
4205  lcCodTaula = tcTaula;
4206 
4207  if (!string.IsNullOrWhiteSpace(lcCodTaula))
4208  {
4209  List<string> Lista_Tablas = new List<string>();
4210  Lista_Tablas.Add("almacen");
4211  Lista_Tablas.Add("idioma");
4212  Lista_Tablas.Add("familias");
4213  Lista_Tablas.Add("subfam");
4214  Lista_Tablas.Add("zonas");
4215  Lista_Tablas.Add("paises");
4216  Lista_Tablas.Add("rutas");
4217  Lista_Tablas.Add("activi");
4218  Lista_Tablas.Add("zonashera");
4219  Lista_Tablas.Add("delegacion");
4220  Lista_Tablas.Add("vendedor");
4221  Lista_Tablas.Add("clientes");
4222 
4223  llOk = !Lista_Tablas.Contains(lcCodTaula);
4224  }
4225  }
4226  }
4227  else if (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_sage50")))
4228  {
4229  llOk = tcTaula.ToLower() != "codpos";
4230  }
4231 
4232  return llOk;
4233  }
4234 
4235 
4243  private System.Drawing.Bitmap _RedimensionarImagen(System.Drawing.Image toImagen, int tnAlto, int tnAncho)
4244  {
4245  int lnAnchoOriginal = toImagen.Width;
4246  int lnAltoOriginal = toImagen.Height;
4247 
4248  float lnPorcentajeEscaladoX = (float)tnAncho / (float)lnAnchoOriginal;
4249  float lnPorcentajeEscaladoY = (float)tnAlto / (float)lnAltoOriginal;
4250 
4251  int lnNuevoAncho = (int)(lnAnchoOriginal * lnPorcentajeEscaladoX);
4252  int lnNuevoAlto = (int)(lnAltoOriginal * lnPorcentajeEscaladoY);
4253 
4254  System.Drawing.Bitmap loNuevaImagen = new System.Drawing.Bitmap(lnNuevoAncho, lnNuevoAlto);
4255  System.Drawing.Graphics loSuperficieGDI = System.Drawing.Graphics.FromImage((System.Drawing.Image)loNuevaImagen);
4256  loSuperficieGDI.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
4257  loSuperficieGDI.DrawImage(toImagen, 0, 0, lnNuevoAncho, lnNuevoAlto);
4258  loSuperficieGDI.Dispose();
4259 
4260  return loNuevaImagen;
4261  }
4262 
4263 
4267  private void Control_Paralelismo()
4268  {
4269  if (EW_GLOBAL._lParalelismo_Activo == false)
4270  {
4271  this.btMante.Visible = false;
4272  this.btBrowser.Visible = false;
4273  this.ewtextbox.Visible = false;
4274  this.ewlabel.Visible = false;
4275 
4276  // PE-87248, en el caso de los txtcodlabels con formato de visualizacion standar no se acaba mostrando esta combo pero pasa por aqui abajo y dispara
4277  // el evento y si el control se ha de mostrar con estilo, hace instrucciones .CreateGraphics() que no son compatibles con paralelismo, de aquí que se condicione a
4278  // que no haya paralelismo activo.
4279  //
4280  // En el caso de los txtcodlabels con visualizcion diferente de standar (combos, grids, etc.) el control ya no se crea con paralelismo activo por lo que pasara por aqui
4281  // y hará lo que corresponda.
4282  this.ewcombobox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
4283  this.ewcombobox.Visible = false;
4284  }
4285  }
4286 
4287  #endregion METODOS PRIVADOS
4288 
4289 
4290  #region METODOS PUBLICOS
4291 
4292  // PARTE 94327
4297  protected override void OnVisibleChanged(EventArgs e)
4298  {
4299  base.OnVisibleChanged(e);
4300 
4301  if (Visible && !Disposing)
4302  {
4303  // Volvemos a refrescar las propiedades del _Browser, en algunas pantallas tenemos guardados en el "Designer" de la pantalla "Codigo,Nombre"...
4304  if (_cSQL_Personalizado != null && (!string.IsNullOrWhiteSpace(_cSQL_Personalizado)) && !_Modo_Diseño)
4305  {
4306  _Reload_propiedades();
4307 
4308  if (_Browser_Tabla.Trim().ToUpper() == "ARTICULO")
4309  {
4310  // PE-95408. Para artículos, pasamos la sql, no el datatable. Hay clientes que tienen muchos artículos y les va lento.
4311  _Browser_ConsultaPersonalizada = _cSQL_Personalizado;
4312  }
4313  else
4314  {
4315  // Antes de que revise si el origen de datos es manual vamos a ver si debe de realizar la consulta personalizada y asignar a los datatables correspondientes
4316  if (_Tipo_Visual == _Tipos_Visuales.Estandar && _DataTable == null)
4317  {
4318  // Preperamos un Datatable
4319  DataTable ldtPersonalizado = new DataTable();
4320 
4321  // Realizamos la consulta personalizada
4322  DB.SQLExec(_cSQL_Personalizado, ref ldtPersonalizado);
4323 
4324  // Asignamos el Datatable
4325  _DataTable = ldtPersonalizado;
4326  _Browser_Datatable_Personalizado = ldtPersonalizado;
4327  }
4328  }
4329  }
4330  }
4331  }
4332  // FPARTE 94327
4333 
4337  public virtual void _Refresh()
4338  {
4339  if (Created)
4340  {
4341  if (_CargarTodosRegistros && _RegistrosCargados)
4342  return; // PE-74329. Ya se han cargado los datos
4343 
4344  bool llConexion = !string.IsNullOrWhiteSpace(DB.Conexion);
4345  bool llOrigenManual = (_DataTable != null);
4346 
4347  if (!llConexion) // Si se ha establecido el modo diseño o no hay conexión, no realizamos la carga de datos
4348  return;
4349 
4350  _Desactivar_Evento_Codigo_Cambiado = true; // Desactivamos el evento _Codigo_Cambiado() mientras refrescamos los datos para evitar problemas
4351 
4352  try
4353  {
4354  if (_PrimeraVez || _Modo_Diseño) // PE-79835
4355  {
4356  // Preparar datatable para el combo/grid
4357  if (((_Tipo_Visual == _Tipos_Visuales.Combo) || (_Tipo_Visual == _Tipos_Visuales.Grid)) && !_Modo_Diseño)
4358  {
4359  if (llOrigenManual) // Comprobar si se ha indicado un DataTable propio
4360  _dtVisual = _dtDataTable; //Cambio la asignación _DataTable por la privada _dtDataTable
4361  else
4362  RefreshDatatable();
4363  }
4364 
4365  _Resultados_Datatable(ref _dtVisual); //PE92379 - aquí et permet afegir registres nous o modificar el datatable que es presenta
4366 
4367  switch (_Tipo_Visual) // Carga de datos
4368  {
4369  case _Tipos_Visuales.Combo:
4370  RefreshTipoCombo();
4371  break;
4372 
4373  case _Tipos_Visuales.Grid:
4374  if (!RefreshTipoGrid())
4375  return;
4376  break;
4377 
4378  default: // Tipo "estandar" por defecto
4379  _Definir_Browser();
4380  break;
4381  }
4382  }
4383 
4384  _RefrescarBinding(); // PE-78599. Refrescar los databindings.
4385 
4386  if (_CargarTodosRegistros)
4387  _RegistrosCargados = true; // PE-74329. Se han cargado los datos
4388 
4389  }
4390  catch (Exception loEx)
4391  {
4392  DB.Registrar_Error(loEx);
4393  }
4394 
4395  _Desactivar_Evento_Codigo_Cambiado = false;
4396 
4397  _EstablecerPermisos();
4398  }
4399  }
4400 
4404  private void RefreshDatatable()
4405  {
4406  if (!string.IsNullOrEmpty(_Browser_Database) && !string.IsNullOrEmpty(_Browser_Tabla)) //PE-75531 (Santi) Si no hi ha browser ben definit no faig res.
4407  {
4408  DataTable dtCons = new DataTable();
4409 
4410  string lcSql = "select " + _Browser_Distinct + " " + _Browser_Alias + _Clave + ", ";
4411 
4412  if (!string.IsNullOrWhiteSpace(_MultiCampos))
4413  {
4414  string lcMulticampos = _MultiCampos.Replace(",", "+' '+");
4415  lcSql += lcMulticampos + " as " + _Concepto;
4416  }
4417  else
4418  lcSql += _Browser_Alias + _Concepto;
4419 
4420  if (!string.IsNullOrWhiteSpace(_Imagen))
4421  lcSql = lcSql + ", " + _Browser_Alias + _Imagen;
4422 
4423  if (!string.IsNullOrWhiteSpace(_CampoBackColor))
4424  lcSql = lcSql + ", " + _CampoBackColor;
4425 
4426  if (!string.IsNullOrWhiteSpace(_CampoForeColor))
4427  lcSql = lcSql + ", " + _CampoForeColor;
4428 
4429  if (!string.IsNullOrWhiteSpace(_CampoFont))
4430  lcSql = lcSql + ", " + _CampoFont;
4431 
4432  lcSql = lcSql + " from " + DB.SQLDatabase(_Browser_Database, _Browser_Tabla);
4433 
4434  if (!string.IsNullOrWhiteSpace(_CampoVisible)) // PE-84621. Eliminar registros no visibles
4435  {
4436  if (!string.IsNullOrWhiteSpace(_Browser_Condicion))
4437  _Browser_Condicion += " and ";
4438 
4439  _Browser_Condicion += _CampoVisible + " = " + DB.SQLTrue();
4440  }
4441 
4442  if (!string.IsNullOrWhiteSpace(_Browser_Condicion))
4443  lcSql = lcSql + " where " + _Browser_Condicion;
4444 
4445  if (!string.IsNullOrWhiteSpace(_Browser_Campo_Predet))
4446  lcSql = lcSql + " order by " + _Browser_Campo_Predet;
4447 
4448  DB.SQLExec(lcSql, ref dtCons);
4449  _dtVisual = dtCons;
4450 
4451  // PE-89439 : Si tenemos una tabla donde el campo "codigo" y el campo "nombre" coinciden (p.ej: tabla usuarios, campo nombre se utiliza como codigo y no existe un campo nombre).
4452  // Como se utilizan tanto la propiedad _Clave como _Nombre para construir la consulta, acaba "petando" (select nombre,nombre from usuarios order by nombre).
4453  // Añado un "hack" para poder pasar al campo _Clave algo tipo "nombre as _alias_" y que posteriormente utilize solo "_alias_" como campo _Clave y que construya
4454  // la consulta con el "order by _alias_". Ejemplo en frmSeries.cs (sage.ew.series)
4455  if (_Clave.Contains(" as "))
4456  _Clave = _Clave.Substring(_Clave.IndexOf(" as ") + 4);
4457  }
4458  else _dtVisual = null;
4459  }
4460 
4464  private bool RefreshTipoGrid()
4465  {
4466  if (_Grid_Columnas <= 0)
4467  {
4468  FUNCTIONS._MessageBox("Debe establecer la propiedad _Grid_Columnas para el tipo cuadrícula", "txtcodlabel", MessageBoxButtons.OK, MessageBoxIcon.Information, (FormBase)this.FindForm()); // PARTE 80838
4469  return false;
4470  }
4471 
4472  if (_Modo_Diseño) // En modo diseño creamos un grid con las columnas indicadas y 50 filas vacías (Gestión de pxerfil)
4473  {
4474  if (_dtVisual == null)
4475  _dtVisual = new DataTable();
4476 
4477  _dtVisual.Clear();
4478  for (int lnCol = 0; lnCol < _Grid_Columnas; lnCol++)
4479  {
4480  _dtVisual.Columns.Add();
4481  }
4482  for (int lnFila = 0; lnFila < (50 * _Grid_Columnas); lnFila++)
4483  {
4484  _dtVisual.Rows.Add(new string[_Grid_Columnas]);
4485  }
4486  }
4487 
4488  if (_dtVisual != null) // Datos
4489  {
4490  string lcCol = "";
4491 
4492  // Características del grid
4493  ewgrid.Columns.Clear();
4494  ewgrid.Rows.Clear();
4495 
4496  // Añadir tantas columnas al grid como se han indicado en la propiedad _Grid_Columnas
4497  for (int lnCol = 0; lnCol < _Grid_Columnas; lnCol++)
4498  {
4499  // Características de la columna
4500  TextAndImageColumn loCol = new TextAndImageColumn();
4501  lcCol = "col" + lnCol.ToString().Trim();
4502  loCol.Name = lcCol;
4503 
4504  ewgrid.Columns.Add(loCol);
4505  ewgrid.Columns[lcCol].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
4506  ewgrid.Columns[lcCol].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
4507  ewgrid.Columns[lcCol].Resizable = DataGridViewTriState.False;
4508 
4509  if (lnCol > 0)
4510  ewgrid.Columns[lnCol].HeaderText = "";
4511  else
4512  ewgrid.Columns[lnCol].HeaderText = _Browser_Titulo;
4513  }
4514 
4515  // PE-79835. Añadir registros con los datos en el grid
4516  _nUltimoRegistro = 0;
4517  _nRegistrosCarga = _Obtener_Registros_Carga();
4518 
4519  if (_nRegistrosCarga != 0)
4520  {
4521  _Cargar_Mas_Registros();
4522  _PrimeraVez = false;
4523  }
4524  // FI PE-79835
4525  }
4526 
4527  return true;
4528  }
4529 
4533  private void RefreshTipoCombo()
4534  {
4535  if (_dtVisual != null && !_Modo_Diseño)
4536  {
4537  if (_Valor_Vacio)
4538  {
4539  if (IndiceValorVacio < 0 || IndiceValorVacio >= _dtVisual.Rows.Count) //No especificado o fuera de rango
4540  {
4541  _dtVisual.Rows.Add(new object[] { "", LiteralValorVacio }); //Task 105515 => Literal
4542  _dtVisual.DefaultView.Sort = _Concepto;
4543  }
4544  else //Task 105515 => Posición valor vacio
4545  {
4546  //Ordenación
4547  _dtVisual.DefaultView.Sort = _Concepto;
4548  _dtVisual = _dtVisual.DefaultView.ToTable(); //La volco, no la dejo fija para que no altere la operación de inserción
4549 
4550  DataRow ldrRowValorVacio = _dtVisual.NewRow();
4551  ldrRowValorVacio[_Clave] = "";
4552  ldrRowValorVacio[_Concepto] = LiteralValorVacio;
4553  _dtVisual.Rows.InsertAt(ldrRowValorVacio, IndiceValorVacio); //Task 105515 => Inserto en la opsición que elegida.
4554  }
4555  }
4556  _dtVisual.CaseSensitive = true; //PE-103110
4557  ewcombobox.DataSource = _dtVisual;
4558  ewcombobox.ValueMember = _dtVisual.Columns[_Clave].ToString();
4559  if (_dtVisual.Columns.Contains(_Concepto)) //PE85420 - ens podem trobar que només hi hagi una columna
4560  ewcombobox.DisplayMember = _dtVisual.Columns[_Concepto].ToString();
4561  if (_Valor_Vacio)
4562  {
4563  ewcombobox.Text = LiteralValorVacio;
4564  }
4565  else
4566  {
4567  if (_dtVisual != null && _dtVisual.Rows.Count > 0)
4568  {
4569  ewcombobox.SelectedIndex = 0;
4570  ewcombobox.SelectedValue = _dtVisual.Rows[0][_Clave];
4571  }
4572  }
4573  }
4574  _PrimeraVez = false; // PE-79835
4575  }
4576 
4577  private void _EstablecerPermisos()
4578  {
4579  if (this.ParentForm != null && ((this.ParentForm is FormMante && !_ReadOnly) || !(this.ParentForm is FormMante)))
4580  {
4581  // PE-82607 - Incluir el combo de la serie de factura para que no se quede de solo lectura.
4582  string lcObjecte = this.GetType().Name.Trim().ToLower();
4583  string lcObj2 = this.Name.Trim().ToLower();
4584 
4585  if (!(lcObjecte == "txtseltipodoc" || lcObj2 == "cmbfacturadocserie"))
4586  {
4587  if (!(lcObjecte == "txtplananalitico" && ParentForm.Name == "frmZoomCuenta"))
4588  {
4589  // EL control de selector de tipo de documento es de tipo txtcodlabel y no puede estar inhabilitado.
4590  // PE-74827
4591  // dynamic por que este control puede estar en formulario de mas de un tipo (formbase, formsatellite, formdialog, frmgestionperfil, ...) y aqui no sabemos
4592  // en qué tipo de formulario estamos, por tanto, para que funcione para todos hacemos ésto.
4593  dynamic loForm = ParentForm;
4594 
4595  // Aqui dentro del método se hace todo, se revisa el _ReadOnly del formulario, y si es un frmgestionperfil además también se mira el _Documento, si está vacío, si está en uso, etc.
4596  bool llReadOnly = loForm._Controles_En_Formulario_De_Solo_Lectura();
4597 
4598  _ReadOnly = llReadOnly;
4599  }
4600  }
4601  }
4602 
4603  // PE-92757. Comprobar si se han indicado OpcEsp
4604  if (!this._ReadOnly)
4605  {
4606  string[] lcOpcEsp = this._OpcEsp.Split(',');
4607  foreach (string lcCodiOpcEsp in lcOpcEsp)
4608  {
4609  if (!string.IsNullOrWhiteSpace(lcCodiOpcEsp))
4610  {
4611  bool lbValor = Usuario._This._Opcesp(lcCodiOpcEsp);
4612  if (lbValor)
4613  {
4614  this._ReadOnly = true;
4615  break;
4616  }
4617  }
4618  }
4619  }
4620 
4621  }
4622 
4627  public void _Clonar(ewtxtcodlabel toFiltroClon)
4628  {
4629  PropertyInfo[] controlProperties = typeof(ewtxtcodlabel).GetProperties(BindingFlags.Public | BindingFlags.Instance);
4630 
4631  foreach (PropertyInfo oPropInfo in controlProperties)
4632  {
4633  if (oPropInfo.CanWrite)
4634  {
4635  switch (oPropInfo.Name)
4636  {
4637  case "_Browser_Datatable_Personalizado": //PE-83560 No se clonaba bien
4638  if (this._Browser_Datatable_Personalizado != null)
4639  toFiltroClon._Browser_Datatable_Personalizado = this._Browser_Datatable_Personalizado.Copy();
4640  break;
4641 
4642  case "_DataTable": //PE-83560 No se clonaba bien
4643  if (this._DataTable != null)
4644  toFiltroClon._DataTable = this._DataTable.Copy();
4645  break;
4646 
4647  case "_btBrowser": //PE-83560 No se clonaba bien
4648  this._btBrowser._Clonar(toFiltroClon._btBrowser);
4649  break;
4650 
4651  case "ActiveControl":
4652  case "WindowTarget":
4653  case "_AplicarEstilos":
4654  case "BackColor":
4655  break;
4656 
4657  default:
4658  oPropInfo.SetValue(toFiltroClon, oPropInfo.GetValue(this, null), null);
4659  break;
4660  }
4661  }
4662  }
4663  }
4664 
4665 
4669  public virtual void _RefrescarBinding()
4670  {
4671  Binding loBind = this.DataBindings["_Codigo"];
4672  if (loBind != null)
4673  this.DataBindings[0].ReadValue();
4674  }
4675 
4680  public virtual void _Resultados_Datatable(ref DataTable loResultados)
4681  {
4682  }
4683 
4687  public void _Suscripcion_Eventos()
4688  {
4689  // PE-79979: se pasaba dos veces por aqui, una proveniente del _Load del ewtxtcodlabel y otra de una llamada desde frmGestionPerfil y en el caso
4690  // de un txtcodlabel funcionando en modo hibrido como está programada la aparición de la pantalla de browser en el _Click_Before por eso salia dos veces
4691  // De esta forma, antes de suscribirse a un evento nos desuscribimos antes y asi no se "acumulan" las suscripciones, y tanto si ya estaba suscrito como
4692  // si no lo está funciona y no da error.
4693  _Cancelar_Suscripcion_Eventos();
4694 
4695  // Captura de eventos base i definición de los eventos que se podrán utilizar a nivel del objeto txtcodlabel
4696  btBrowser._Click_Before += new botones.btBrowser._Click_Before_Handler(btBrowser_base_Click_Before);
4697  btBrowser._Click_After += new botones.btBrowser._Click_After_Handler(btBrowser_base_Click_After);
4698  btMante._Click_Before += new botones.btMante._Click_Before_Handler(btMante_base_Click_Before);
4699  btMante._Click_After += new botones.btMante._Click_After_Handler(btMante_base_Click_After);
4700  ewcombobox.SelectedIndexChanged += new EventHandler(ewcombobox_SelectedIndexChanged);
4701  ewgrid.SelectionChanged += new EventHandler(ewgrid_SelectionChanged);
4702  ewgrid.CellMouseDown += new DataGridViewCellMouseEventHandler(ewgrid_CellMouseDown);
4703  ewgrid.CellMouseUp += new DataGridViewCellMouseEventHandler(ewgrid_CellMouseUp);
4704  }
4705 
4706 
4711  {
4712  // Captura de eventos base i definición de los eventos que se podrán utilizar a nivel del objeto txtcodlabel
4713  btBrowser._Click_Before -= new botones.btBrowser._Click_Before_Handler(btBrowser_base_Click_Before);
4714  btBrowser._Click_After -= new botones.btBrowser._Click_After_Handler(btBrowser_base_Click_After);
4715  btMante._Click_Before -= new botones.btMante._Click_Before_Handler(btMante_base_Click_Before);
4716  btMante._Click_After -= new botones.btMante._Click_After_Handler(btMante_base_Click_After);
4717  ewcombobox.SelectedIndexChanged -= new EventHandler(ewcombobox_SelectedIndexChanged);
4718  ewgrid.SelectionChanged -= new EventHandler(ewgrid_SelectionChanged);
4719  ewgrid.CellMouseDown -= new DataGridViewCellMouseEventHandler(ewgrid_CellMouseDown);
4720  ewgrid.CellMouseUp -= new DataGridViewCellMouseEventHandler(ewgrid_CellMouseUp);
4721  }
4722 
4727  {
4728  ewgrid.CurrentCell = null;
4729  ewgrid.ClearSelection();
4730  }
4731  // FI PE-76883
4732 
4736  private void _Cargar_Mas_Registros()
4737  {
4738  //Amaguem les barres
4739  this.HideScrollBars();
4740 
4741  bool llRestaurar = false; // PE-79835
4742 
4743  //PE-74329. Cargar todos los registros
4744  if (_CargarTodosRegistros)
4745  _nRegistrosCarga = _dtVisual.Rows.Count;
4746 
4747  int lnCol = 0, lnRegistrosAñadir = _nRegistrosCarga;
4748  DataGridViewRow dgvrFila = null;
4749 
4750  if (_Grid_Columnas <= 0)
4751  return;
4752 
4753  // PE-79835
4754  if (_Desactivar_Evento_Codigo_Cambiado)
4755  llRestaurar = true;
4756 
4757  // Descativamos el evento _Codigo_Cambiado() mientras cargamos los datos para evitar problemas
4758  _Desactivar_Evento_Codigo_Cambiado = true;
4759 
4760  // Obtener el siguiente tramo de registros a añadir
4761  lnRegistrosAñadir = lnRegistrosAñadir + _nUltimoRegistro;
4762 
4763  if (_dtVisual.Rows.Count < lnRegistrosAñadir)
4764  lnRegistrosAñadir = _dtVisual.Rows.Count;
4765 
4766  // Comprobamos si hay que mostrar IMAGEN y TEXTO a la vez
4767  int lnAchoImagen = (ewgrid.Width / _Grid_Columnas);
4768  if (this._Imagen_y_Texto)
4769  {
4770  lnAchoImagen = lnAchoImagen / 2;
4771  if (_nAlto_Filas < lnAchoImagen)
4772  lnAchoImagen = _nAlto_Filas;
4773  }
4774 
4775 
4776  // Añadir filas
4777  for (int lnFila = _nUltimoRegistro; lnFila < lnRegistrosAñadir; lnFila++)
4778  {
4779  if ((lnFila == _nUltimoRegistro) || (lnFila % _Grid_Columnas == 0))
4780  {
4781  // Añadimos al grid la fila anterior creada
4782  if (dgvrFila != null)
4783  ewgrid.Rows.Add(dgvrFila);
4784 
4785  // Características de la nueva fila
4786  dgvrFila = new DataGridViewRow();
4787  dgvrFila.CreateCells(ewgrid);
4788  dgvrFila.Height = _Alto_Filas;
4789  dgvrFila.Resizable = DataGridViewTriState.False;
4790  lnCol = 0;
4791  }
4792 
4793  // Añadir valores a la fila
4794  if (!_Modo_Diseño)
4795  {
4796  // Creación celda. Propiedades TEXTO
4797  TextAndImageCell loCelda = ((TextAndImageCell)dgvrFila.Cells[lnCol]);
4798  loCelda.Value = _dtVisual.Rows[lnFila][_Concepto].ToString().Trim();
4799  loCelda.Tag = _dtVisual.Rows[lnFila][_Clave];
4800 
4801  // Comprobamos si hay que mostrar una imagen. Propiedades IMAGEN
4802  string lcImagen = "";
4803  if (!string.IsNullOrWhiteSpace(_Imagen))
4804  lcImagen = _dtVisual.Rows[lnFila][_Imagen].ToString();
4805 
4806  // Prevalece la imagen a las propiedades configurables de la celda (backcolor, forecolor, font)
4807  bool llImagenOk = false;
4808  if (!string.IsNullOrWhiteSpace(lcImagen))
4809  {
4810  //PE-80219 : si no encotramos la imagen, comprobaremos el path de fotos de comunes
4811  if (!File.Exists(lcImagen))
4812  {
4813  lcImagen = EW_GLOBAL._GetVariable("wc_iniservidor").ToString() + EW_GLOBAL._GetVariable("wc_comunesfotos").ToString() + lcImagen;
4814  }
4815 
4816  //comprobamos si la imagen existe
4817  if (File.Exists(lcImagen))
4818  {
4819  try
4820  {
4821  Bitmap loImagen = _RedimensionarImagen(Image.FromFile(lcImagen), _nAlto_Filas - 5, lnAchoImagen - 5);
4822  loCelda._Imagen = loImagen;
4823  loCelda._AnchoImagen = lnAchoImagen;
4824  llImagenOk = true;
4825  }
4826  catch (Exception)
4827  {
4828 
4829  }
4830  }
4831  }
4832 
4833  // PE-84621
4834  // Comprobar si hay que mostrar color de fondo
4835  if (!llImagenOk && !string.IsNullOrWhiteSpace(_CampoBackColor)) // PARTE XXX
4836  {
4837  String lcColor = Convert.ToString(_dtVisual.Rows[lnFila][_CampoBackColor]).Trim();
4838  if (!String.IsNullOrEmpty(lcColor))
4839  {
4840  try
4841  {
4842  Int32 lnColor = Convert.ToInt32(_dtVisual.Rows[lnFila][_CampoBackColor]);
4843  loCelda.Style.BackColor = System.Drawing.ColorTranslator.FromWin32(lnColor);
4844  }
4845  catch (Exception loEx)
4846  {
4847  DB.Registrar_Error(loEx);
4848  }
4849  }
4850  // FI 86698
4851  }
4852 
4853  // Comprobar si hay que cambiar color de fuente
4854  if (!string.IsNullOrWhiteSpace(_CampoForeColor))
4855  {
4856  String lcColor = Convert.ToString(_dtVisual.Rows[lnFila][_CampoBackColor]).Trim();
4857  if (!String.IsNullOrEmpty(lcColor))
4858  {
4859  try
4860  {
4861  Int32 lnColor = Convert.ToInt32(_dtVisual.Rows[lnFila][_CampoForeColor]);
4862  loCelda.Style.ForeColor = System.Drawing.ColorTranslator.FromWin32(lnColor);
4863  }
4864  catch (Exception loEx)
4865  {
4866  DB.Registrar_Error(loEx);
4867  }
4868  }
4869  // FI 86698
4870  }
4871 
4872  // Comprobar si hay que cambiar la fuente
4873  if (!string.IsNullOrWhiteSpace(_CampoFont))
4874  {
4875  string lcValor = _dtVisual.Rows[lnFila][_CampoFont].ToString().Trim();
4876  if (!string.IsNullOrWhiteSpace(lcValor))
4877  {
4878  try
4879  {
4880  string[] lcFont = lcValor.Split(',');
4881  // 86698 - PARTE 101475
4882  float lnFuente = 9.5F;
4883 
4884  if (lcFont.Length >= 2)
4885  if (!float.TryParse(lcFont[1].Replace(".", ","), out lnFuente))
4886  lnFuente = 9.5F;
4887 
4888  if (lcFont.Length == 2)
4889  loCelda.Style.Font = new Font(lcFont[0], lnFuente);
4890  else if (lcFont.Length == 3)
4891  {
4892  try
4893  {
4894  FontStyle loFontStyle = (FontStyle)Enum.Parse(typeof(FontStyle), lcFont[2].Trim());
4895 
4896  loCelda.Style.Font = new Font(lcFont[0], lnFuente, loFontStyle);
4897  }
4898  catch
4899  {
4900  loCelda.Style.Font = new Font(lcFont[0], lnFuente);
4901  }
4902  }
4903  // FI 86698 - // FPARTE 101475
4904  }
4905  catch (Exception loEx)
4906  {
4907  DB.Registrar_Error(loEx);
4908  }
4909  }
4910  }
4911  // PE-84621
4912 
4913  if (lnFila + 1 == lnRegistrosAñadir)
4914  {
4915  ewgrid.Rows.Add(dgvrFila);
4916  }
4917  }
4918  lnCol++;
4919  }
4920 
4921  // Actualizamos el último registro añadido
4922  _nUltimoRegistro = lnRegistrosAñadir;
4923 
4924  //reset displayed row
4925  if (ewgrid.Rows.Count > 0 && this.ewgrid.FirstDisplayedScrollingRowIndex > -1 && this._GridFirstVisibleRow > -1)
4926  {
4927  //Mostrem les barres
4928  this.ShowScrollBars();
4929  }
4930 
4931  if (!llRestaurar) // PE-79835
4932  _Desactivar_Evento_Codigo_Cambiado = false;
4933  }
4934 
4940  protected static Color Name_to_Color(string tcColor)
4941  {
4942  Color loColor;
4943  //Miro si el formato de color es RGB 0,0,0 (tipo FOX)
4944  string[] lcRGB = tcColor.Split(',');
4945  if (lcRGB.Length > 1)
4946  {
4947  loColor = Color.FromArgb(Convert.ToInt32(lcRGB[0]), Convert.ToInt32(lcRGB[1]), Convert.ToInt32(lcRGB[2]));
4948  }
4949  else //Hexadecimal o System.Drawing.KnownColor (Tipo .NET)
4950  {
4951  // Primer mirem si és un SystemColor
4952  if (tcColor.Substring(0, 1) == "#")
4953  //loColor = ColorTranslator.FromHtml(tcColor);
4954  loColor = Color.FromArgb(ColorTranslator.FromHtml(tcColor).ToArgb()); //Para uniformizar salida
4955  else
4956  //loColor = Color.FromName(tcColor.Trim());
4957  loColor = Color.FromArgb(Color.FromName(tcColor.Trim()).ToArgb()); //Para uniformizar salida
4958  }
4959  return loColor;
4960  }
4961 
4962  //PE- 84279
4970  public virtual ContextMenuStrip _Montar_ContextMenuStrip(DataTable tdtTablaOrigen)
4971  {
4972  if (!this._MostrarMenuContextual) return new ContextMenuStrip(); //o un menú vacío
4973 
4974  if (tdtTablaOrigen == null || tdtTablaOrigen.Columns.Count < 2) return new ContextMenuStrip(); //Sino tengo tabla retorno un menú vacio
4975 
4976  ContextMenuStrip loContextMenuStrip = new ContextMenuStrip();
4977  int lnIndex = 0;
4978  int nlNumCols = tdtTablaOrigen.Columns.Count;
4979 
4980  //Añado los elementos al menú contextual
4981  foreach (DataRow drRow in tdtTablaOrigen.Rows)
4982  {
4983  ToolStripMenuItem loSubContextMenuStrip = new ToolStripMenuItem();
4984  loSubContextMenuStrip.Name = lnIndex.ToString();
4985  for (int lnCol = 0; lnCol < nlNumCols; lnCol++)
4986  {
4987  loSubContextMenuStrip.Text += drRow[lnCol].ToString().TrimEnd();
4988  loSubContextMenuStrip.Tag += drRow[lnCol].ToString().TrimEnd();
4989  if (lnCol < nlNumCols - 1) //Sino es la última columna
4990  {
4991  loSubContextMenuStrip.Text += " - ";
4992  loSubContextMenuStrip.Tag += " - ";
4993  }
4994  }
4995  //Eventos mejor que delegados pq con delegados siempre manda la clave del último que se crea
4996  loSubContextMenuStrip.Click += new EventHandler(Evento_Codigo_Elegido);
4997  loContextMenuStrip.Items.Add(loSubContextMenuStrip);
4998 
4999  //Actualizo el indice
5000  lnIndex++;
5001  }
5002 
5003  return loContextMenuStrip;
5004  }
5005  //FPE- 84279
5006 
5007 
5008  #endregion METODOS PUBLICOS
5009 
5010  // PE-78589. Al browser necessitem saber si el combo està desplegat o no
5011  private void ewcombobox_DropDown(object sender, EventArgs e)
5012  {
5013  if (_Click_Combo_DropDown != null)
5014  _Click_Combo_DropDown(true);
5015  }
5016 
5017  // PE-78589. Al browser necessitem saber si el combo està desplegat o no
5018  private void ewcombobox_DropDownClosed(object sender, EventArgs e)
5019  {
5020  if (_Click_Combo_DropDown != null)
5021  _Click_Combo_DropDown(false);
5022  }
5023 
5024  private void btBrowser__Click_Before(ref bool tlOk)
5025  {
5026 
5027  }
5028  }
5029 
5030 
5031  #region CLASES DERIVADAS EWTXTCODLABEL
5032  public class txtArticulo : ewtxtcodlabel
5036  {
5042  public delegate void Delegar_ProcessCmdKey(ref bool tlOk, Keys keyData);
5043 
5047  public event Delegar_ProcessCmdKey _Delegar_ProcessCmdKey;
5048 
5052  public txtArticulo()
5053  {
5054  // PE-95344. Mover de _Cargar_Propiedades a aquí
5055  _Valor_Vacio = true; // PE-80837
5056  _Tactil = false;
5057  _Codigo = "";
5058  _Relleno = ' ';
5059 
5060 
5061  // 105398 Mover de _Cargar_Propiedades a aquí
5062  _Browser_Titulo = "Listado de artículos";
5063 
5064  if (!DesignMode)
5065  _btMante._Click_BeforeExtended += _btMante__Click_BeforeExtended;
5066  }
5067 
5074  private void _btMante__Click_BeforeExtended(object sender, EventArgs e, ref bool tlOk)
5075  {
5076  int lnTipo = 1;
5077 
5078  if (!string.IsNullOrWhiteSpace(_Codigo))
5079  lnTipo = Convert.ToInt16(DB.SQLValor("ARTICULO", "CODIGO", _Codigo, "TIPO"));
5080  else if (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_ConceptosFacturables")))
5081  lnTipo = 2;
5082 
5083  _Mante = lnTipo == 2 ? "CONCEPTOSFACTURABLES" : "ARTICULO";
5084  }
5085 
5089  protected override void _Cargar_Propiedades()
5090  {
5091  base._Cargar_Propiedades();
5092 
5093  _Clave = "CODIGO";
5094  _Len = Convert.ToInt32(EW_GLOBAL._GetLenCampo(KeyDiccionarioLenCampos.wn_articulo));
5095  _Expandir = false;
5096  _Database = "GESTION";
5097  _Tabla = "ARTICULO";
5098  _Nombre = "NOMBRE";
5099  _Mante = "ARTICULO";
5100  _Imagen = "IMAGEN";
5101  _Mensaje_No_Existe = "El código de artículo no existe";
5102 
5103  // 140407. Unificar browsers
5104  botones.btBrowArticulo btbrowarticulo = new botones.btBrowArticulo();
5105  _Browser_Clave = btbrowarticulo._Clave;
5106  _Browser_Database = btbrowarticulo._DataBase;
5107  _Browser_Campo_Predet = btbrowarticulo._Campo_Predet;
5108  _Browser_Campos = btbrowarticulo._Campos;
5109  _Browser_Condicion = "";
5110  _Browser_Tabla = btbrowarticulo._Tabla;
5111  _Browser_Titulos_Campos = btbrowarticulo._Titulos_Campos;
5112  _Browser_Titulo = btbrowarticulo._Titulo;
5113  _Browser_Alias = btbrowarticulo._Alias;
5114 
5116  //_SQL_Personalizado = "select a.codigo as CODIGO, a.nombre as NOMBRE, b.nombre as FAMILIA, " +
5117  // DB.SQLNvl("c.nombre", "space(2)") + " as SUBFAMILIA " +
5118  // (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_hera")) ? "" : "," + DB.SQLNvl("d.nombre", "space(2)") + " as MARCA ") +
5119  // "from " + sage.ew.db.DB.SQLDatabase("GESTION", "ARTICULO") + " a " +
5120  // "inner join " + sage.ew.db.DB.SQLDatabase("GESTION", "FAMILIAS") + " b on a.familia = b.codigo " +
5121  // "left join " + sage.ew.db.DB.SQLDatabase("GESTION", "SUBFAM") + " c on a.familia = c.familia and a.subfamilia = c.codigo " + // PE-95060
5122  // "left join " + sage.ew.db.DB.SQLDatabase("GESTION", "MARCAS") + " d on a.marca = d.codigo ";
5124 
5125  //_Browser_Clave = "CODIGO";
5126  //_Browser_Database = "GESTION";
5127  //_Browser_Campo_Predet = "NOMBRE";
5128  //_Browser_Campos = "CODIGO,NOMBRE,FAMILIA,SUBFAMILIA" + (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_hera")) ? "" : ",MARCA"); // 94266
5129  //_Browser_Condicion = "";
5130  //_Browser_Tabla = "ARTICULO";
5131  //_Browser_Titulos_Campos = "Código,Nombre,Familia,Subfamilia" + (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_hera")) ? "" : ",Marca"); // 94266,95060
5132 
5133 
5134  _TooltipBrowser = "Consultar artículos";
5135  _TooltipMante = "Mantenimiento de artículos";
5136 
5137  _Trim_Codigo_Seleccionado = false; //CCR 186648: Forzar a false esta variable que permite que no se haga trim de los códigos en los browsers y filtros
5138  }
5139 
5140 
5147  public override bool _Existe_Codigo(ref string tcCodigo, bool tlValidar = false)
5148  {
5149 
5150  if (tlValidar || (!tlValidar && this._Validar_Codigo))
5151  {
5152  bool llOk = false;
5153 
5154 
5155  if (_Browser_Datatable_Personalizado == null) llOk = base._Existe_Codigo(ref tcCodigo, tlValidar); // 94313
5156  else
5157  {
5158 
5159  if (_Browser_Datatable_Personalizado.Select("codigo = '" + tcCodigo + "'").Count() > 0) llOk = true;
5160  else llOk = false;
5161 
5162  if (!llOk && _Mostrar_Mensaje)
5163  {
5164  //Si es de solo lectura no presentamos aviso y tampoco me interesa que borre el valor actual
5165  if (_ReadOnly)
5166  {
5167  if (this._Tipo_Visual == _Tipos_Visuales.Estandar) _ErrorProviderText = _Mensaje_No_Existe;
5168  llOk = true;
5169  }
5170  else
5171  {
5172  FUNCTIONS._MessageBox(_Mensaje_No_Existe, MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, DialogResult.OK);
5173  }
5174  }
5175  }
5176 
5177  return llOk;
5178  }
5179  else return true;
5180  }
5181 
5188  protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
5189  {
5190  bool llOk = true;
5191 
5192  //Accio abans de l'F4/F5 al txtCliente
5193  if (_Delegar_ProcessCmdKey != null)
5194  _Delegar_ProcessCmdKey(ref llOk, keyData);
5195 
5196  //Si tot ok continuem amb l'execució per defecte
5197  if (llOk)
5198  llOk = base.ProcessCmdKey(ref msg, keyData);
5199 
5200  return llOk;
5201  }
5202  }
5203 
5208  {
5213  {
5214  }
5215 
5219  protected override void _Cargar_Propiedades()
5220  {
5221  base._Cargar_Propiedades();
5222 
5223  _Valor_Vacio = true; // PE-80837
5224  _Tactil = false;
5225  _Codigo = "";
5226  _Relleno = ' ';
5227  _Clave = "CODIGO";
5228  _Len = 5;
5229  _Expandir = false;
5230  _Database = "COMUNES";
5231  _Tabla = "CLASIF";
5232  _Nombre = "NOMBRE";
5233  _Mante = "ARTICULO";
5234  _Imagen = "FOTO";
5235  _CampoBackColor = "BACKCOLOR"; // PE-85113
5236  _CampoForeColor = "FORECOLOR"; // PE-85113
5237  _CampoFont = "FONTTPV"; // PE-101545
5238 
5239  _Mensaje_No_Existe = "El código de artículo no existe";
5240 
5241  _Browser_Clave = "CODIGO";
5242  _Browser_Database = "COMUNES";
5243  _Browser_Campo_Predet = "NOMBRE";
5244  _Browser_Campos = "CODIGO,NOMBRE";
5245  _Browser_Condicion = "";
5246  _Browser_Tabla = "CLASIF";
5247  _Browser_Titulos_Campos = "Código,Nombre";
5248  _Browser_Titulo = "Listado de clasificaciones";
5249 
5250  _TooltipBrowser = "Consultar clasificaciones";
5251  _TooltipMante = "Mantenimiento de clasificaciones";
5252 
5253  this._btMante._Click_Before += new btMante._Click_Before_Handler(_btMante__Click_Before);
5254  }
5255 
5260  void _btMante__Click_Before(ref bool tlOk)
5261  {
5262  //Queremos capturar el click para hacer otra cosa
5263  tlOk = false;
5264 
5265  //Invoco al botón de mantenimientos para no repetir código
5266  using (sage.ew.botones.Clases.btMantes loBoton = new sage.ew.botones.Clases.btMantes())
5267  {
5268  loBoton._NombreMante = "CLASIFICACIONES";
5269  loBoton.PerformClick();
5270  }
5271  }
5272  }
5273 
5278  {
5279  #region Propiedades privadas
5280  private bool _lExisteCodigoRaizCuenta = false;
5281  #endregion Propiedades privadas
5282 
5283  #region Constructor
5284  public ewtxtcodlabelRaizCuenta()
5288  {
5289  if (!DesignMode)
5290  _Codigo_Cambiado_Before_Extended += ewtxtcodlabelRaizCuenta__Codigo_Cambiado_Before_Extended;
5291  }
5292  #endregion Constructor
5293 
5294  #region Métodos public override
5295  public override bool _Existe_Codigo(ref string tcCodigo, bool tlValidar = false)
5302  {
5303  if (_lExisteCodigoRaizCuenta)
5304  {
5305  tcCodigo = _GetTextBox().Text;
5306  _lExisteCodigoRaizCuenta = false;
5307  }
5308 
5309  return base._Existe_Codigo(ref tcCodigo, tlValidar);
5310  }
5311  #endregion Métodos public override
5312 
5313  #region Métodos privados
5314  private void ewtxtcodlabelRaizCuenta__Codigo_Cambiado_Before_Extended(object sender, string tcValorCandidato, ref bool tlOk)
5321  {
5322  string lcRaizCuenta = tcValorCandidato.Trim();
5323 
5324  if (!string.IsNullOrWhiteSpace(lcRaizCuenta) && !lcRaizCuenta.Contains(".") && lcRaizCuenta.Length != Convert.ToInt32(EW_GLOBAL._GetLenCampo(KeyDiccionarioLenCampos.wn_digitos)))
5325  {
5326  _lExisteCodigoRaizCuenta = true;
5327 
5328  _Codigo_Cambiado_Before_Extended -= ewtxtcodlabelRaizCuenta__Codigo_Cambiado_Before_Extended;
5329  _GetTextBox().Text = CONTABILIDAD._TxtCodigoRaizCuenta(lcRaizCuenta, _Browser_Condicion);
5330  _Codigo_Cambiado_Before_Extended += ewtxtcodlabelRaizCuenta__Codigo_Cambiado_Before_Extended;
5331  }
5332  }
5333  #endregion Métodos privados
5334  }
5335 
5339  public class txtCuenta : ewtxtcodlabel
5340  {
5344  [Browsable(false)]
5345  public override string _Guid => "c1c4c6eb-e2a2-4b62-bbdb-573c92974103";
5346 
5347  private bool _bMostrarCif = false;
5348 
5349  #region Constructor
5350  public txtCuenta()
5354  {
5355  }
5356  #endregion Constructor
5357 
5358  #region Métodos protected override
5359  protected override void _Cargar_Propiedades()
5363  {
5364  base._Cargar_Propiedades();
5365 
5366  _Valor_Vacio = true; // PE-80837
5367  _Tactil = false;
5368  _Codigo = "";
5369  _Relleno = '0';
5370  _Clave = "CODIGO";
5371  _Len = Convert.ToInt32(EW_GLOBAL._GetLenCampo(KeyDiccionarioLenCampos.wn_digitos));
5372  _Expandir = true;
5373  _Database = "GESTION";
5374  _Tabla = "CUENTAS";
5375  _Nombre = "NOMBRE";
5376  _Mante = "CUENTAS";
5377  _Mensaje_No_Existe = "El código de cuenta no existe";
5378 
5379  // Permitir cargar el browser con nombre alternativo al de la configuración guardada en las listas previas
5380  _btBrowser._GuardarBrowserExtPos_Alternativo = true;
5381 
5382  _EstablecerColumnas();
5383 
5384  _Browser_Clave = "CODIGO";
5385  _Browser_Database = "GESTION";
5386  _Browser_Campo_Predet = "NOMBRE";
5387  _Browser_Condicion = "";
5388  _Browser_Tabla = "CUENTAS";
5389  _Browser_Titulo = "Listado de cuentas";
5390 
5391  _TooltipBrowser = "Consultar cuentas";
5392  _TooltipMante = "Mantenimiento de cuentas";
5393 
5394  }
5395 
5399  public bool _MostrarCif
5400  {
5401  get
5402  {
5403  return _bMostrarCif;
5404  }
5405  set
5406  {
5407  _bMostrarCif = value;
5408  _EstablecerColumnas();
5409  }
5410  }
5411 
5412  private void _EstablecerColumnas()
5413  {
5414  _Browser_Campos = String.Format("CODIGO, NOMBRE {0}", _MostrarCif ? ", CIF" : "");
5415  _Browser_Titulos_Campos = String.Format("Código, Nombre {0}", _MostrarCif ? ", NIF" : "");
5416  }
5417  #endregion Métodos protected override
5418  }
5419 
5423  public class txtBanco : ewtxtcodlabel
5424  {
5428  public txtBanco()
5429  {
5430  }
5431 
5435  protected override void _Cargar_Propiedades()
5436  {
5437  base._Cargar_Propiedades();
5438 
5439  string lcCondicion = sage.ew.functions.FUNCTIONS._Obtener_Cuentas_Bancarias();
5440 
5441  _Valor_Vacio = true;
5442  _Tactil = false;
5443  _Codigo = "";
5444  _Relleno = '0';
5445  _Clave = "CODIGO";
5446  _Len = Convert.ToInt32(EW_GLOBAL._GetLenCampo(KeyDiccionarioLenCampos.wn_digitos));
5447  _Expandir = true;
5448  _Database = "GESTION";
5449  _Tabla = "CUENTAS";
5450  _Nombre = "NOMBRE";
5451  _Mante = "CUENTAS";
5452  _Mensaje_No_Existe = "El código de cuenta contable de banco no existe";
5453 
5454  _Browser_Clave = "CODIGO";
5455  _Browser_Database = "GESTION";
5456  _Browser_Campo_Predet = "NOMBRE";
5457  _Browser_Campos = "CODIGO,NOMBRE";
5458  _Browser_Condicion = lcCondicion;
5459  _Browser_Tabla = "CUENTAS";
5460  _Browser_Titulos_Campos = "Código,Nombre";
5461  _Browser_Titulo = "Listado de cuentas de bancos";
5462 
5463  _TooltipBrowser = "Consultar cuentas de bancos";
5464  _TooltipMante = "Mantenimiento de cuentas";
5465  }
5466  }
5467 
5468  // 77958
5472  public class txtPaises : ewtxtcodlabel
5473  {
5477  public txtPaises()
5478  {
5479  }
5480 
5484  protected override void _Cargar_Propiedades()
5485  {
5486  base._Cargar_Propiedades();
5487 
5488  _Valor_Vacio = true; // PE-80837
5489  _Tactil = false;
5490  _Codigo = "";
5491  _Relleno = '0';
5492  _Clave = "CODIGO";
5493  _Len = 3;
5494  _Expandir = false;
5495  _Database = "COMUNES";
5496  _Tabla = "PAISES";
5497  _Nombre = "NOMBRE";
5498  _Mante = "PAISES"; // PARTE 91566
5499  _Mensaje_No_Existe = "El código de país no existe";
5500 
5501  _Browser_Clave = "CODIGO";
5502  _Browser_Database = "COMUNES";
5503  _Browser_Campo_Predet = "NOMBRE";
5504  _Browser_Campos = "CODIGO,NOMBRE";
5505  _Browser_Condicion = "";
5506  _Browser_Tabla = "PAISES";
5507  _Browser_Titulos_Campos = "Código,Nombre";
5508  _Browser_Titulo = "Listado de paises";
5509 
5510  _TooltipBrowser = "Consultar paises";
5511  _TooltipMante = "Mantenimiento de paises";
5512  }
5513  }
5514 
5519  {
5523  public dynamic _txtNumero = null; // PARTE XXXX
5524 
5528  [Browsable(false)]
5529  public override string _Guid => "467e9a6f-faba-425e-96e1-919f9752d621";
5530 
5531  private dynamic _oDocumento;
5535  public dynamic _Documento
5536  {
5537  get { return _oDocumento; }
5538  set
5539  {
5540  _oDocumento = value;
5541 
5542  if (_oDocumento == null)
5543  return;
5544 
5545  this.DataBindings.Clear();
5546 
5547  this.DataBindings.Add("_Codigo", _oDocumento._Cabecera, "_Proveedor");
5548 
5549  _Refresh();
5550  }
5551  }
5552 
5553  private bool MostrarCuentasNivel3Proveedor = false;
5558  [
5559  Bindable(false),
5560  Category("Varios"),
5561  DefaultValue(false),
5562  DisplayName("MostrarCuentasNivel3Proveedor"),
5563  Description("Muestra las cuentas de proveedores, acreedores y cuentas cuyo nivel3 está marcado ficha de proveedor."),
5564  Localizable(false),
5565  Browsable(true)
5566  ]
5567  public bool _MostrarCuentasNivel3Proveedor
5568  {
5569  get { return MostrarCuentasNivel3Proveedor; }
5570  set
5571  {
5572  if (MostrarCuentasNivel3Proveedor != value)
5573  {
5574  MostrarCuentasNivel3Proveedor = value;
5575 
5576  CambiarACuentas();
5577  }
5578  }
5579  }
5580 
5584  public txtProveed()
5585  {
5586  // Task 135499. Comprobar ejecutable para evitar error al consultar _Solucion
5587  if (EW_GLOBAL._EsEjecutable)
5588  {
5589  CambiarACuentas();
5590  }
5591 
5592  if (!DesignMode)
5593  {
5594  _Codigo_Cambiado += new Delegar_Codigo_Cambiado(txtProveedor__Codigo_Cambiado);
5595  _Codigo_Cambiado_Before += new Delegar_Codigo_Cambiado_Before(txtProveedor__Codigo_Cambiado_Before);
5596  _ValidacionCrearCodigo += txtProveedor__ValidacionCrearCodigo;
5597  }
5598  }
5599 
5603  public txtProveed(bool mostrarcuentasnivel3proveedor) : this()
5604  {
5605  _MostrarCuentasNivel3Proveedor = mostrarcuentasnivel3proveedor;
5606 
5607  }
5608 
5609  private void CambiarACuentas()
5610  {
5611  if (DesignMode || !EW_GLOBAL._EsEjecutable)
5612  return;
5613 
5614  // Task 142633
5615  //
5616  int lnAsesorContable = Convert.ToInt32(EW_GLOBAL._GetVariable("wn_AsesorContable",0));
5617 
5618  // Task-132956. Para 'Solo Conta', o 'Asesor Contable' convertimos txtProveed en txtCuenta.
5619  //
5620  if (EW_GLOBAL._Solucion < 2 || lnAsesorContable > 0 || _MostrarCuentasNivel3Proveedor)
5621  {
5622  // Guardar estado del control para restaurar después de clonar
5623  Control parent = this.Parent;
5624 
5625  using (txtCuenta txtcuenta = new txtCuenta())
5626  {
5627  txtcuenta._Clonar(this);
5628  }
5629 
5630  if (parent != null)
5631  {
5632  this.Parent = parent;
5633  this.Parent.Controls.Add(this);
5634  }
5635 
5636  // Ponemos filtro para ver solo proveedores
5637  string lcPrefijoCtaProveed = Convert.ToString(EW_GLOBAL._GetVariable("wc_proveed")).Substring(0, 3);
5638  string lcPrefijoCtaAcreedor = Convert.ToString(EW_GLOBAL._GetVariable("wc_acreed")).Substring(0, 3);
5639  string lcPrefijoCtaRemuPenPag = Convert.ToString(EW_GLOBAL._GetVariable("wc_remupenpag")).Substring(0, 3);
5640  string lcCondicion = "(CODIGO Like '" + lcPrefijoCtaProveed + "%' or CODIGO Like '" + lcPrefijoCtaAcreedor + "%' or CODIGO Like '" + lcPrefijoCtaRemuPenPag + "%'";
5641 
5642  // Añadir prefijos de proveedores según nivel 3
5643  DataTable ldtPrefijosProveedores = CONTABILIDAD._PrefijosProveedores();
5644  foreach (DataRow loPrefijo in ldtPrefijosProveedores.Rows)
5645  {
5646  lcCondicion += " OR CODIGO LIKE '" + Convert.ToString(loPrefijo["codigo"]).TrimEnd() + "%' ";
5647  }
5648 
5649  // Añadir prefijos de proveedores según el diccionario de cuentas
5650  DataTable ldtPrefijosCuentas = CONTABILIDAD._CuentasDeudaCortoLargoPlazo();
5651  foreach (DataRow loPrefijo in ldtPrefijosCuentas.Rows)
5652  {
5653  lcCondicion += " OR CODIGO LIKE '" + Convert.ToString(loPrefijo["codigo"]).TrimEnd() + "%' ";
5654  }
5655 
5656  lcCondicion += ")";
5657 
5658  this._Browser_Condicion = lcCondicion;
5659  }
5660  }
5661 
5662  private bool txtProveedor__ValidacionCrearCodigo(String tcCodigo)
5663  {
5664  if (!CONTABILIDAD._EsProveedor(tcCodigo) && !CONTABILIDAD._EsDeudaCortoLargoPlazo(tcCodigo) && !CONTABILIDAD._EsTrabajador(tcCodigo, 3))
5665  {
5666  _MensajeNoSePuedeCrear = String.Format("El código {0} no es una cuenta de proveedor válida", tcCodigo);
5667  return false;
5668  }
5669  return true;
5670  }
5671 
5675  protected override void _Cargar_Propiedades()
5676  {
5677  // Task 142633
5678  //
5679  int lnAsesorContable = Convert.ToInt32(EW_GLOBAL._GetVariable("wn_AsesorContable",0));
5680 
5681  // Task-132956. Para 'Solo Conta' y 'Asesor Contable' hemos convertido txtProveed en txtcuenta.
5682  //
5683  if (EW_GLOBAL._Solucion < 2 || lnAsesorContable > 0)
5684  return;
5685 
5686  base._Cargar_Propiedades();
5687 
5688  string lcProveed = Convert.ToString(EW_GLOBAL._GetVariable("wc_proveed")).Trim(); // PE-84257
5689 
5690  _Valor_Vacio = true; // PE-80837
5691  _Tactil = false;
5692  _Codigo = "";
5693  _Relleno = '0';
5694  _Clave = "CODIGO";
5695  _Len = Convert.ToInt32(EW_GLOBAL._GetLenCampo(KeyDiccionarioLenCampos.wn_digitos));
5696  _Expandir = true;
5697  _InicioCodigo = (string.IsNullOrWhiteSpace(lcProveed) ? "" : lcProveed.Substring(0, 3)); // PE-81114, PE-84257
5698 
5699  _Database = "GESTION";
5700  _Tabla = "PROVEED";
5701  _Nombre = "NOMBRE";
5702  _Mante = "PROVEED";
5703  _Mensaje_No_Existe = "El código de proveedor no existe";
5704 
5705  // 140407. Unificar browsers
5706  botones.btBrowProveedor btbrowproveedor = new botones.btBrowProveedor();
5707  _Browser_Clave = btbrowproveedor._Clave;
5708  _Browser_Database = btbrowproveedor._DataBase;
5709  _Browser_Campo_Predet = btbrowproveedor._Campo_Predet;
5710  _Browser_Campos = btbrowproveedor._Campos;
5711  _Browser_Condicion = "";
5712  _Browser_Tabla = btbrowproveedor._Tabla;
5713  _Browser_Titulos_Campos = btbrowproveedor._Titulos_Campos;
5714  _Browser_Titulo = btbrowproveedor._Titulo;
5715 
5716  _TooltipBrowser = "Consultar proveedores";
5717  _TooltipMante = "Mantenimiento de proveedores";
5718  }
5719 
5720  private void txtProveedor__Codigo_Cambiado()
5721  {
5722  //Tengo documento, numero y código para el cambio...
5723  string lcEmpresa = Convert.ToString(EW_GLOBAL._GetVariable("wc_empresa"));
5724 
5725  if (_oDocumento == null || this._Codigo == null)
5726  return;
5727 
5728  if (this._oDocumento._TipoDocumento == eTipoDocumento.AlbaranCompra)
5729  {
5730  if (string.IsNullOrWhiteSpace(this._Codigo))
5731  return;
5732 
5733  // Si estoy en albarán de compra, comprueba si estamos en el caso de que no hay declarado número de albarán sino que están intentando acceder al albarán de compra
5734  // declarando nº de factura y código de proveedor con lo cual tiene que cargar el primer albarán de compra que encuentra de la factura y proveedor introducidos.
5735  if (string.IsNullOrWhiteSpace(this._oDocumento._Numero) && !string.IsNullOrWhiteSpace(this._oDocumento._Cabecera._Factura))
5736  {
5737  if (this._oDocumento._Documento_Vacio())
5738  {
5739  // Averiguar primer número de albarán de compra de la factura que se ha introducido.
5740  string lcNumeroAlb = this.Obtener_NumAlbFacturaCompra(lcEmpresa, this._Codigo, this._oDocumento._Cabecera._Factura);
5741 
5742  // No se detectan albaranes para esta factura, por tanto no dejo continuar.
5743  if (string.IsNullOrWhiteSpace(lcNumeroAlb))
5744  {
5745  _oDocumento._MessageBox("Este número de factura '" + this._oDocumento._Cabecera._Factura.Trim() + "' no existe para el proveedor '" + this._Codigo + "'.", MessageBoxButtons.OK, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button1, DialogResult.OK);
5746  this._Codigo = "";
5747  return;
5748  }
5749  else
5750  {
5751  Form loForm = this.FindForm();
5752  if (loForm != null)
5753  {
5754  Control[] laControls = loForm.Controls.Find("txtNumFacCompra", true);
5755  if (laControls.Length > 0)
5756  {
5757  txtNumFacCompra loTxtNumFacCompra = (txtNumFacCompra)laControls[0];
5758  loTxtNumFacCompra._ReadOnly = true;
5759  }
5760  }
5761  // Rellenamos esta propiedad para cargar el primer albarán de la factura.
5762  this._oDocumento._Numero = lcNumeroAlb;
5763  }
5764  }
5765  }
5766 
5767 
5768  if (string.IsNullOrWhiteSpace(_oDocumento._Numero))
5769  {
5770  this._oDocumento._New(lcEmpresa, "", this._Codigo);
5771 
5772  }
5773  else if (this._oDocumento._Documento_Vacio() && !string.IsNullOrWhiteSpace(_oDocumento._Numero) && !string.IsNullOrWhiteSpace(this._Codigo))
5774  {
5775  string lcNumero = _oDocumento._Numero; //PE103358
5776  string lcProveedor = _Codigo; //PE103358
5777 
5778  //Al dar número y asignar proveedor, sin entrar ninguna línea, borramos el código de proveedor, vuelve a dejar el mismo, entonces no debe realizar nada mas
5779  if (lcProveedor == _oDocumento._Cabecera._Proveedor)
5780  return;
5781 
5782  //PE102249 - estic fent un albarà de compra amb un proveedor, només tinc la capsalera, i llavors canvio el proveedor, es quedava la capsalera tirada.
5783  if (!string.IsNullOrWhiteSpace(_oDocumento._Numero) && !string.IsNullOrWhiteSpace(_oDocumento._Cabecera._Proveedor) && _oDocumento._Documento_Vacio() && _oDocumento._Cabecera._Proveedor != _GetTextBox().Text)
5784  this._oDocumento._Delete(); //PE103358 - borrem tot el document ja que es quedava informació a les taules lligades amb la capsalera
5785 
5786  if (!this._oDocumento._Load(lcEmpresa, lcNumero, lcProveedor))
5787  {
5788  if (!this._oDocumento._New(lcEmpresa, lcNumero, lcProveedor)) // Si no existe lo creamos
5789  _oDocumento._Numero = ""; //PE99948 - si ens retorna fals ha de presentar el missatge pq no es pot fer
5790  }
5791  }
5792 
5793  if (string.IsNullOrWhiteSpace(_oDocumento._Numero) && !string.IsNullOrWhiteSpace(this._Codigo))
5794  {
5795  if (!string.IsNullOrWhiteSpace(_oDocumento._Mensaje_Error))
5796  _oDocumento._MessageBox(_oDocumento._Mensaje_Error, MessageBoxButtons.OK, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button1, DialogResult.OK);
5797  this._Codigo = "";
5798  this._oDocumento._Refrescar_Form();
5799  return;
5800  }
5801 
5802  }
5803  else
5804  {
5805  string lcCodigo = this._Codigo.ToString().Trim();
5806 
5807  if (lcCodigo != _oDocumento._Cabecera._Proveedor)
5808  {
5809  _oDocumento._Cabecera._Proveedor = lcCodigo;
5810 
5811  //Comprovem si la classe ha canviat o esborrat el codi del proveedor per baja, ventas bloqueadas, etc.
5812  if (lcCodigo != _oDocumento._Cabecera._Proveedor)
5813  {
5814  this._Codigo = _oDocumento._Cabecera._Proveedor;
5815  }
5816  }
5817  }
5818  }
5819 
5827  private string Obtener_NumAlbFacturaCompra(string tcEmpresa, string tcProveedor, string tcFactura = "")
5828  {
5829  string lcNumeroAlb = "";
5830  DataTable ldtAlbaranesFactura = new DataTable();
5831 
5832  ewDocCompraFACTURA loFacturaCompra = new ewDocCompraFACTURA();
5833  loFacturaCompra._Empresa = tcEmpresa;
5834  loFacturaCompra._Numero = tcFactura;
5835  loFacturaCompra._Cabecera._Proveedor = tcProveedor;
5836  ldtAlbaranesFactura = loFacturaCompra._Albaranes_Factura();
5837  if (ldtAlbaranesFactura.Rows.Count > 0)
5838  lcNumeroAlb = Convert.ToString(ldtAlbaranesFactura.Rows[0]["numero"]);
5839 
5840  return lcNumeroAlb;
5841  }
5842 
5843  private void txtProveedor__Codigo_Cambiado_Before(ref bool tlOk)
5844  {
5845  if ((_oDocumento != null) && (_Tipo_Visual == _Tipos_Visuales.Estandar))
5846  {
5847  if (this._oDocumento._TipoDocumento != eTipoDocumento.AlbaranCompra && this._oDocumento._TipoDocumento != eTipoDocumento.FacturaCompra && string.IsNullOrWhiteSpace(_oDocumento._Numero)) // PARTE XXX
5848  {
5849  // No hi ha número
5850  _oDocumento._MessageBox("Para poder entrar el código de proveedor debe haber entrado el número de documento.", MessageBoxButtons.OK, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button1, DialogResult.OK);
5851  tlOk = false;
5852  }
5853 
5854  // PE-97271
5855  if (this._oDocumento._TipoDocumento == eTipoDocumento.AlbaranCompra)
5856  {
5857  string lcCodProv = "", lcEmpresa = "";
5858  lcCodProv = this.ewtextbox.Text;
5859  lcEmpresa = Convert.ToString(EW_GLOBAL._GetVariable("wc_empresa"));
5860 
5861  if (string.IsNullOrWhiteSpace(lcCodProv))
5862  return;
5863 
5864 
5865 
5866  // Si estoy en albarán de compra, comprueba si es el caso de que hayan declarado nº de factura y código de proveedor, pero no nº de factura de compra.
5867  if (string.IsNullOrWhiteSpace(this._oDocumento._Numero) && !string.IsNullOrWhiteSpace(this._oDocumento._Cabecera._Factura))
5868  {
5869  if (this._oDocumento._Documento_Vacio())
5870  {
5871 
5872  string lcNumeroAlb = this.Obtener_NumAlbFacturaCompra(lcEmpresa, lcCodProv, this._oDocumento._Cabecera._Factura);
5873 
5874  // No se detectan albaranes para esta factura, por tanto no dejo continuar.
5875  if (string.IsNullOrWhiteSpace(lcNumeroAlb))
5876  {
5877  _oDocumento._MessageBox("Este número de factura '" + this._oDocumento._Cabecera._Factura.Trim() + "' no existe para el proveedor '" + lcCodProv + "'.", MessageBoxButtons.OK, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button1, DialogResult.OK);
5878 
5879  this._oDocumento._Cabecera._Factura = ""; // PARTE 102135.
5880  this._oDocumento._Refrescar_Form(); // PARTE 102135. Tenemos de refrescar el formulario o se queda el valor en el control
5881 
5882  tlOk = false;
5883  }
5884  else
5885  {
5886  Form loForm = this.FindForm();
5887  if (loForm != null)
5888  {
5889  Control[] laControls = loForm.Controls.Find("txtNumFacCompra", true);
5890  if (laControls.Length > 0)
5891  {
5892  txtNumFacCompra loTxtNumFacCompra = (txtNumFacCompra)laControls[0];
5893  loTxtNumFacCompra._ReadOnly = true;
5894  }
5895  }
5896  // Rellenamos esta propiedad para cargar el primer albarán de la factura.
5897  this._oDocumento._Numero = lcNumeroAlb;
5898  }
5899  }
5900  }
5901  }
5902  }
5903  }
5904 
5905  }
5906 
5907 
5912  {
5913  private bool MostrarCuentasNivel3Proveedor = false;
5918  [
5919  Bindable(false),
5920  Category("Varios"),
5921  DefaultValue(false),
5922  DisplayName("MostrarCuentasNivel3Proveedor"),
5923  Description("Muestra las cuentas de proveedores, acreedores y cuentas cuyo nivel3 está marcado ficha de proveedor."),
5924  Localizable(false),
5925  Browsable(true)
5926  ]
5927  public bool _MostrarCuentasNivel3Proveedor
5928  {
5929  get { return MostrarCuentasNivel3Proveedor; }
5930  set
5931  {
5932  if (MostrarCuentasNivel3Proveedor != value)
5933  {
5934  MostrarCuentasNivel3Proveedor = value;
5935  }
5936  }
5937  }
5938 
5942  public txtProveedNIF()
5943  {
5944  if (DesignMode || !EW_GLOBAL._EsEjecutable)
5945  return;
5946 
5947  this._btMante._Click_BeforeExtended += _btMante__Click_BeforeExtended;
5948 
5949  // Task 142633
5950  //
5951  int lnAsesorContable = Convert.ToInt32(EW_GLOBAL._GetVariable("wn_AsesorContable", 0));
5952 
5953  // Task-132956. Para 'Solo Conta', o 'Asesor Contable' convertimos txtProveed en txtCuenta.
5954  //
5955  if (EW_GLOBAL._Solucion < 2 || lnAsesorContable > 0 || _MostrarCuentasNivel3Proveedor)
5956  {
5957  // Guardar estado del control para restaurar después de clonar
5958  Control parent = this.Parent;
5959 
5960  using (txtCuenta txtcuenta = new txtCuenta())
5961  {
5962  txtcuenta._Clonar(this);
5963  }
5964 
5965  if (parent != null)
5966  {
5967  this.Parent = parent;
5968  this.Parent.Controls.Add(this);
5969  }
5970 
5971  // Ponemos filtro para ver solo proveedores
5972  string lcPrefijoCtaProveed = Convert.ToString(EW_GLOBAL._GetVariable("wc_proveed")).Substring(0, 3);
5973  string lcPrefijoCtaAcreedor = Convert.ToString(EW_GLOBAL._GetVariable("wc_acreed")).Substring(0, 3);
5974  string lcPrefijoCtaRemuPenPag = Convert.ToString(EW_GLOBAL._GetVariable("wc_remupenpag")).Substring(0, 3);
5975  string lcCondicion = "(CODIGO Like '" + lcPrefijoCtaProveed + "%' or CODIGO Like '" + lcPrefijoCtaAcreedor + "%' or CODIGO Like '" + lcPrefijoCtaRemuPenPag + "%'";
5976 
5977  // Añadir prefijos de proveedores según nivel 3
5978  DataTable ldtPrefijosProveedores = CONTABILIDAD._PrefijosProveedores();
5979  foreach (DataRow loPrefijo in ldtPrefijosProveedores.Rows)
5980  {
5981  lcCondicion += " OR CODIGO LIKE '" + Convert.ToString(loPrefijo["codigo"]).TrimEnd() + "%' ";
5982  }
5983 
5984  // Añadir prefijos de proveedores según el diccionario de cuentas
5985  DataTable ldtPrefijosCuentas = CONTABILIDAD._CuentasDeudaCortoLargoPlazo();
5986  foreach (DataRow loPrefijo in ldtPrefijosCuentas.Rows)
5987  {
5988  lcCondicion += " OR CODIGO LIKE '" + Convert.ToString(loPrefijo["codigo"]).TrimEnd() + "%' ";
5989  }
5990 
5991  lcCondicion += ")";
5992 
5993  this._Browser_Condicion = lcCondicion;
5994  }
5995  }
5996 
5997  private void _btMante__Click_BeforeExtended(object sender, EventArgs e, ref bool tlOk)
5998  {
5999  string cCodProveed = "";
6000 
6001  if (!string.IsNullOrWhiteSpace(_Codigo))
6002  cCodProveed = Convert.ToString(DB.SQLValor("PROVEED", "CIF", _Codigo, "CODIGO"));
6003 
6004  if (!string.IsNullOrEmpty(cCodProveed))
6005  {
6006  Proveedor loProveed = new Proveedor();
6007 
6008  loProveed._Codigo = cCodProveed;
6009  loProveed._Load();
6010 
6011  loProveed._Show();
6012 
6013  }
6014  tlOk = false;
6015 
6016  }
6017 
6021  protected override void _Cargar_Propiedades()
6022  {
6023  // Task 142633
6024  //
6025  int lnAsesorContable = Convert.ToInt32(EW_GLOBAL._GetVariable("wn_AsesorContable", 0));
6026 
6027  // Task-132956. Para 'Solo Conta' y 'Asesor Contable' hemos convertido txtProveed en txtcuenta.
6028  //
6029  if (EW_GLOBAL._Solucion < 2 || lnAsesorContable > 0)
6030  return;
6031 
6032  base._Cargar_Propiedades();
6033 
6034  string lcProveed = Convert.ToString(EW_GLOBAL._GetVariable("wc_proveed")).Trim(); // PE-84257
6035 
6036  _Valor_Vacio = true; // PE-80837
6037  _Tactil = false;
6038  _Codigo = "";
6039  _Clave = "CODIGO";
6040  _Len = 15;
6041 
6042  _Database = "GESTION";
6043  _Tabla = "PROVEED";
6044  _Nombre = "NOMBRE";
6045  _Mante = "PROVEED";
6046  _Mensaje_No_Existe = "El código de proveedor no existe";
6047 
6048  // 140407. Unificar browsers
6049  botones.btBrowProveedor btbrowproveedor = new botones.btBrowProveedor();
6050  _Browser_Distinct = " DISTINCT ";
6051  _Browser_Clave = "CIF";
6052  _Browser_ClavePrimaria = "CODIGO";
6053  _Browser_Database = btbrowproveedor._DataBase;
6054  _Browser_Campo_Predet = "CIF";
6055  _Browser_Campos = "DISTINCT CIF, CODIGO, NOMBRE, NOMBRE2";
6056  _Browser_Condicion = "";
6057  _Browser_Tabla = btbrowproveedor._Tabla;
6058  _Browser_Titulos_Campos = "CIF, Código, Nombre, Razón Social"; ;
6059  _Browser_Titulo = btbrowproveedor._Titulo;
6060 
6061  _TooltipBrowser = "Consultar proveedores";
6062  _TooltipMante = "Mantenimiento de proveedores";
6063  }
6064  }
6065 
6066 
6070  public class txtPleFact : ewtxtcodlabel
6071  {
6075  public string _cEmpresa
6076  {
6077  get
6078  {
6079  return cEmpresaPrivate;
6080  }
6081  set
6082  {
6083  _Browser_Condicion = "empresa = " + DB.SQLString(value) + " and basep = " + DB.SQLFalse();
6084  cEmpresaPrivate = value;
6085  }
6086  }
6087  private string cEmpresaPrivate = Convert.ToString(EW_GLOBAL._GetVariable("wc_empresa"));
6088 
6092  public txtPleFact()
6093  {
6094  }
6095 
6099  protected override void _Cargar_Propiedades()
6100  {
6101  base._Cargar_Propiedades();
6102 
6103  string lcEmpresa = cEmpresaPrivate;
6104 
6105  _Valor_Vacio = true;
6106  _Tactil = false;
6107  _Codigo = "";
6108  _Relleno = '0';
6109  _Clave = "CODIGO";
6110  _Len = 10;
6111  _Expandir = false;
6112  _Database = "COMUNES";
6113  _Tabla = "PLEFACT_C";
6114  _Nombre = "NOMBRE";
6115  _Mante = "PLEFACT";
6116  _Mensaje_No_Existe = "El código de la plantilla no existe";
6117 
6118  _Browser_Clave = "CODIGO";
6119  _Browser_Database = "COMUNES";
6120  _Browser_Campo_Predet = "NOMBRE";
6121  _Browser_Campos = "CODIGO,NOMBRE";
6122  _Browser_Condicion = "empresa = " + DB.SQLString(lcEmpresa) + " and basep = " + DB.SQLFalse();
6123  _Browser_Tabla = "PLEFACT_C";
6124  _Browser_Titulos_Campos = "Código,Nombre";
6125  _Browser_Titulo = "Listado de plantillas de factura electrónica";
6126 
6127  _TooltipBrowser = "Consultar plantillas de factura electrónica";
6128  _TooltipMante = "Mantenimiento de plantillas de factura electrónica";
6129  }
6130 
6131  }
6132 
6138  {
6143  {
6147  [Description("Todo")]
6148  Todo = 0,
6152  [Description("Gastos")]
6153  Gastos = 1,
6157  [Description("Ingresos")]
6158  Ingresos = 2,
6162  [Description("Bienes")]
6163  Bienes = 3
6164  }
6165 
6169  public TipoConceptosMostrar _TipoConceptosMostrar
6170  {
6171  get { return _lTipoConceptosMostrar; }
6172  set
6173  {
6174  _lTipoConceptosMostrar = value;
6175 
6176  switch (_lTipoConceptosMostrar)
6177  {
6178  case TipoConceptosMostrar.Todo:
6179  _Browser_Condicion = "";
6180  _Browser_Titulo = "Listado de conceptos de gastos e ingresos";
6181  _TooltipBrowser = "Consultar conceptos de gastos e ingresos";
6182  break;
6183 
6184  case TipoConceptosMostrar.Gastos:
6185  _Browser_Condicion = "tipogrupo = " + DB.SQLString(Convert.ToInt16(TipoGastoIngreso.Gastos));
6186  _Browser_Titulo = "Listado de conceptos de gastos";
6187  _TooltipBrowser = "Consultar conceptos de gastos";
6188  break;
6189 
6190  case TipoConceptosMostrar.Ingresos:
6191  _Browser_Condicion = "tipogrupo = "+DB.SQLString(Convert.ToInt16(TipoGastoIngreso.Ingresos));
6192  _Browser_Titulo = "Listado de conceptos de ingresos";
6193  _TooltipBrowser = "Consultar conceptos de ingresos";
6194  break;
6195 
6196  case TipoConceptosMostrar.Bienes:
6197  _Browser_Condicion = "tipogrupo = " + DB.SQLString(Convert.ToInt16(TipoGastoIngreso.Bienes));
6198  _Browser_Titulo = "Listado de conceptos de bienes";
6199  _TooltipBrowser = "Consultar conceptos de bienes";
6200  break;
6201  }
6202  }
6203  }
6204  private TipoConceptosMostrar _lTipoConceptosMostrar = TipoConceptosMostrar.Todo;
6205 
6210  {
6211  }
6212 
6216  protected override void _Cargar_Propiedades()
6217  {
6218  base._Cargar_Propiedades();
6219 
6220  _Valor_Vacio = false;
6221  _Tactil = false;
6222  _Codigo = "";
6223  _Relleno = '0';
6224  _Clave = "CODIGO";
6225  _Len = 2;
6226  _Expandir = false;
6227  _Database = "GESTION";
6228  _Tabla = "CONGASING";
6229  _Nombre = "NOMBRE";
6230  _Mante = "CONGASING";
6231  _Mensaje_No_Existe = "El código del concepto no existe";
6232 
6233  _Browser_Clave = "CODIGO";
6234  _Browser_Database = "GESTION";
6235  _Browser_Campo_Predet = "NOMBRE";
6236  _Browser_Campos = "CODIGO,NOMBRE";
6237  _Browser_Condicion = "";
6238  _Browser_Tabla = "CONGASING";
6239  _Browser_Titulos_Campos = "Código,Nombre";
6240  _Browser_Titulo = "Listado de conceptos de gastos e ingresos";
6241 
6242  _TooltipBrowser = "Consultar conceptos de gastos e ingresos";
6243  _TooltipMante = "Mantenimiento de conceptos de gastos e ingresos";
6244  }
6245  }
6246 
6252  {
6257  {
6261  [Description("Todo")]
6262  Todo = 0,
6266  [Description("Gastos")]
6267  Gastos = 1,
6271  [Description("Ingresos")]
6272  Ingresos = 2,
6276  [Description("Bienes")]
6277  Bienes = 3
6278  }
6279 
6283  public string _ConceptoEOS
6284  {
6285  get { return _cConceptoEOS; }
6286  set
6287  {
6288  _cConceptoEOS = value;
6289 
6290  _Browser_Condicion = "";
6291 
6292  if (!string.IsNullOrWhiteSpace(_cConceptoEOS))
6293  {
6294  _Browser_Condicion += "congasing = " + DB.SQLString(_cConceptoEOS);
6295  }
6296 
6297  if (!string.IsNullOrWhiteSpace(_cCondicionTipoConceptosIRPF))
6298  {
6299  if (!string.IsNullOrWhiteSpace(_Browser_Condicion))
6300  {
6301  _Browser_Condicion += " AND ";
6302  }
6303  _Browser_Condicion += _cCondicionTipoConceptosIRPF;
6304  }
6305 
6306  }
6307  }
6308  private string _cConceptoEOS = "";
6309 
6310  private string _cCondicionTipoConceptosIRPF = string.Empty;
6311 
6315  public TipoConceptosIRPFMostrar _TipoConceptosIRPFMostrar
6316  {
6317  get { return _lTipoConceptosMostrar; }
6318  set
6319  {
6320  _lTipoConceptosMostrar = value;
6321 
6322  switch (_lTipoConceptosMostrar)
6323  {
6324  case TipoConceptosIRPFMostrar.Todo:
6325  _cCondicionTipoConceptosIRPF = "";
6326  break;
6327 
6328  case TipoConceptosIRPFMostrar.Gastos:
6329  _cCondicionTipoConceptosIRPF = " CONGASING in (SELECT codigo FROM " + DB.SQLDatabase("GESTION","congasing") +
6330  " where tipogrupo = " + DB.SQLString(Convert.ToInt16(TipoGastoIngreso.Gastos)) + ")";
6331  break;
6332 
6333  case TipoConceptosIRPFMostrar.Ingresos:
6334  _cCondicionTipoConceptosIRPF = " CONGASING in (SELECT codigo FROM " + DB.SQLDatabase("GESTION", "congasing") +
6335  " where tipogrupo = " + DB.SQLString(Convert.ToInt16(TipoGastoIngreso.Ingresos)) + ")";
6336  break;
6337 
6338  case TipoConceptosIRPFMostrar.Bienes:
6339  _cCondicionTipoConceptosIRPF = " CONGASING in (SELECT codigo FROM " + DB.SQLDatabase("GESTION", "congasing") +
6340  " where tipogrupo = " + DB.SQLString(Convert.ToInt16(TipoGastoIngreso.Bienes)) + ")";
6341  break;
6342  }
6343  }
6344  }
6345  private TipoConceptosIRPFMostrar _lTipoConceptosMostrar = TipoConceptosIRPFMostrar.Todo;
6346 
6351  {
6352  }
6353 
6357  protected override void _Cargar_Propiedades()
6358  {
6359  base._Cargar_Propiedades();
6360 
6361  _Valor_Vacio = false;
6362  _Tactil = false;
6363  _Codigo = "";
6364  _Relleno = ' ';
6365  _Clave = "CONIRPF";
6366  _Len = 3;
6367  _Expandir = false;
6368  _Database = "GESTION";
6369  _Tabla = "CONIRPF";
6370  _Nombre = "NOMBRE";
6371  _Concepto = "NOMBRE";
6372  _Mante = "CONIRPF";
6373  _Mensaje_No_Existe = "El código del concepto de libros IVA/IRPF no existe";
6374 
6375  _Browser_Clave = "CONIRPF";
6376  _Browser_Database = "GESTION";
6377  _Browser_Campo_Predet = "NOMBRE";
6378  _Browser_Campos = "CONIRPF,NOMBRE,CONGASING";
6379  _Browser_Condicion = "";
6380  _Browser_Tabla = "CONIRPF";
6381  _Browser_Titulos_Campos = "Código,Nombre,Concepto EOS";
6382  _Browser_Titulo = "Listado de conceptos de libros IVA/IRPF";
6383 
6384  _TooltipBrowser = "Consultar conceptos de libros IVA/IRPF";
6385  _TooltipMante = "Mantenimiento de conceptos de libros IVA/IRPF";
6386  }
6387 
6388 
6394  protected override Boolean _ExpandirTexto(ref String tcTexto)
6395  {
6396  if (!string.IsNullOrWhiteSpace(tcTexto) && (!_Expandir) && (!string.IsNullOrWhiteSpace(_Relleno.ToString()) || _Relleno == ' '))
6397  {
6398  if (tcTexto.Contains(".")) tcTexto = tcTexto.Replace(".", ""); //Si no expande y ponemos el . rellena el campo pero no quita el punto
6399 
6400  tcTexto = tcTexto.Trim().PadLeft(_Len, _Relleno); //PE-84816 Ahora hago el trim() ya que voy a rellenar
6401  return true;
6402  }
6403 
6404  return false;
6405  }
6406 
6407  }
6408 
6412  public class txtFamilia : ewtxtcodlabel
6413  {
6417  public txtFamilia()
6418  {
6419  }
6420 
6421 
6426  public new bool _Tactil
6427  {
6428  get { return base._Tactil; }
6429  set
6430  {
6431  base._Tactil = value;
6432  //CCR 206714: establecer el orden en el campo predet según si es táctil o no
6433  if (value)
6434  {
6435  //Consulta para ver si hay algun registro en familias con orden diferente de 0. Si no lo hay seguimos ordenando por nombre
6436  DataTable ldtTemp = new DataTable();
6437  string lcSql = "SELECT COUNT(*) AS total FROM " + DB.SQLDatabase("GESTION", "FAMILIAS") + " WHERE orden <> 0";
6438  DB.SQLExec(lcSql, ref ldtTemp);
6439 
6440  if (ldtTemp != null && ldtTemp.Rows.Count > 0 && Convert.ToInt32(ldtTemp.Rows[0]["total"]) > 0)
6441  _Browser_Campo_Predet = "ORDEN";
6442  else
6443  _Browser_Campo_Predet = "NOMBRE";
6444 
6445  FUNCTIONS._DisposeDatatable(ldtTemp);
6446  }
6447  else
6448  _Browser_Campo_Predet = "NOMBRE";
6449  }
6450  }
6451 
6455  protected override void _Cargar_Propiedades()
6456  {
6457  base._Cargar_Propiedades();
6458 
6459  _Valor_Vacio = true; // PE-80837
6460  _Tactil = false;
6461  _Codigo = "";
6462  _Relleno = '0';
6463  _Clave = "CODIGO";
6464  _Len = Convert.ToInt32(EW_GLOBAL._GetLenCampo(KeyDiccionarioLenCampos.wn_familia)); // PE-69435
6465  _Expandir = false;
6466  _Database = "GESTION";
6467  _Tabla = "FAMILIAS";
6468  _Nombre = "NOMBRE";
6469  _Mante = "FAMILIAS";
6470  _Imagen = "FOTO";
6471  _CampoBackColor = "BACKCOLOR"; // PE-84621,85099
6472  _CampoForeColor = "FORECOLOR"; // PE-84621,85099
6473  _CampoFont = "FONTTPV"; // PE-84621
6474  _CampoVisible = "VERTPV"; // PE-84621
6475  _Mensaje_No_Existe = "El código de la familia no existe";
6476 
6477  _Browser_Clave = "CODIGO";
6478  _Browser_Database = "GESTION";
6479  _Browser_Campo_Predet = "NOMBRE";
6480  _Browser_Campos = "CODIGO,NOMBRE";
6481  _Browser_Condicion = "";
6482  _Browser_Tabla = "FAMILIAS";
6483  _Browser_Titulos_Campos = "Código,Nombre";
6484  _Browser_Titulo = "Listado de familias";
6485 
6486  _TooltipBrowser = "Consultar familias";
6487  _TooltipMante = "Mantenimiento de familias";
6488  }
6489 
6490  }
6491 
6496  {
6501  {
6502 
6503  _Mante_Click_Before += new Delegar_Mante_Before(txtDelegaciones__Mante_Click_Before); //PE86928
6504  }
6505 
6510  void txtDelegaciones__Mante_Click_Before(ref bool tlOk)
6511  {
6512  string lcEmpresa = Convert.ToString(EW_GLOBAL._GetVariable("wc_empresa"));
6513  _btMante._Codigo = lcEmpresa + "|" + _Codigo;
6514  }
6515 
6519  protected override void _Cargar_Propiedades()
6520  {
6521  base._Cargar_Propiedades();
6522 
6523  _Valor_Vacio = true; // PE-80837
6524  _Tactil = false;
6525  _Codigo = "";
6526  _Relleno = '0';
6527  _Len = 10;
6528  _Clave = "CODIGO";
6529  _Expandir = false;
6530  _Database = "TPV";
6531  _Tabla = "DELEGACION";
6532  _Nombre = "NOMBRE";
6533  _Mante = "DELEGACIONES"; // PE-81487 //PE-93517 Restituyo Mante
6534  _Mostrar_Mante = true; // PE-81487 //PE-93517 Restituyo Mante
6535  _Imagen = "";
6536  _Mensaje_No_Existe = "El código de la delegación no existe";
6537 
6538  _Browser_Clave = "CODIGO";
6539  _Browser_Database = "TPV";
6540  _Browser_Campo_Predet = "NOMBRE";
6541  _Browser_Campos = "CODIGO,NOMBRE";
6542  _Browser_Condicion = "empresa = " + DB.SQLString(EW_GLOBAL._GetVariable("wc_empresa")); // PE-86172
6543  _Browser_Tabla = "DELEGACION";
6544  _Browser_Titulos_Campos = "Código,Nombre";
6545  _Browser_Titulo = "Listado de delegaciones";
6546 
6547  _TooltipBrowser = "Consultar delegaciones";
6548  _TooltipMante = "Mantenimiento de delegaciones";
6549  }
6550 
6551  }
6552 
6553 
6558  {
6563  {
6564  }
6565 
6569  protected override void _Cargar_Propiedades()
6570  {
6571  base._Cargar_Propiedades();
6572 
6573  _Valor_Vacio = false;
6574  _Tactil = false;
6575  _Codigo = "";
6576  _Relleno = ' ';
6577  _Len = 10;
6578  _Clave = "CODIGO";
6579  _Expandir = false;
6580  _Database = "TPV";
6581  _Tabla = "TERRITORIOS";
6582  _Nombre = "TERRITORIO";
6583  _Concepto = "TERRITORIO";
6584  _Mante = "";
6585  _Mostrar_Mante = false;
6586  _Imagen = "";
6587  _Mensaje_No_Existe = "El código de territorio no existe";
6588 
6589  _Browser_Clave = "CODIGO";
6590  _Browser_Database = "TPV";
6591  _Browser_Campo_Predet = "TERRITORIO";
6592  _Browser_Campos = "CODIGO,TERRITORIO";
6593  _Browser_Condicion = "";
6594  _Browser_Tabla = "TERRITORIOS";
6595  _Browser_Titulos_Campos = "Código,Territorio";
6596  _Browser_Titulo = "Listado de territorios";
6597 
6598  _TooltipBrowser = "Consultar territorios";
6599  _TooltipMante = "Mantenimiento de territorios";
6600  }
6601 
6602  }
6603 
6608  {
6613  {
6614  }
6615 
6619  protected override void _Cargar_Propiedades()
6620  {
6621  base._Cargar_Propiedades();
6622 
6623  _Valor_Vacio = true;
6624  _Tactil = false;
6625  _Codigo = "";
6626  _Relleno = ' ';
6627  _Len = 2;
6628  _Clave = "CODIGO";
6629  _Expandir = false;
6630  _Database = "COMUNES";
6631  _Tabla = "G_CONTRI";
6632  _Nombre = "NOMBRE";
6633  _Concepto = "NOMBRE";
6634  _Mante = "G_CONTRI";
6635  _Mostrar_Mante = true;
6636  _Imagen = "";
6637  _Mensaje_No_Existe = "El código de grupo de contribuyentes no existe";
6638 
6639  _Browser_Clave = "CODIGO";
6640  _Browser_Database = "COMUNES";
6641  _Browser_Campo_Predet = "NOMBRE";
6642  _Browser_Campos = "CODIGO,NOMBRE";
6643  _Browser_Condicion = "";
6644  _Browser_Tabla = "G_CONTRI";
6645  _Browser_Titulos_Campos = "Código,Nombre";
6646  _Browser_Titulo = "Listado de grupos de contribuyentes";
6647 
6648  _TooltipBrowser = "Consultar grupos de contribuyentes";
6649  _TooltipMante = "Mantenimiento de grupos de contribuyentes";
6650  }
6651  }
6652 
6657  {
6662  {
6663  }
6664 
6668  protected override void _Cargar_Propiedades()
6669  {
6670  base._Cargar_Propiedades();
6671 
6672  _Valor_Vacio = true;
6673  _Tactil = false;
6674  _Codigo = "";
6675  _Relleno = ' ';
6676  _Len = 3;
6677  _Clave = "CODIGO";
6678  _Expandir = false;
6679  _Database = "TPV";
6680  _Tabla = "IMPRESOR";
6681  _Nombre = "NOMBRE";
6682  _Concepto = "NOMBRE";
6683  _Mante = "IMPRESOR";
6684  _Mostrar_Mante = true;
6685  _Imagen = "";
6686  _Mensaje_No_Existe = "El código de impresora no existe";
6687 
6688  _Browser_Clave = "CODIGO";
6689  _Browser_Database = "TPV";
6690  _Browser_Campo_Predet = "NOMBRE";
6691  _Browser_Campos = "CODIGO,NOMBRE";
6692  _Browser_Condicion = "";
6693  _Browser_Tabla = "IMPRESOR";
6694  _Browser_Titulos_Campos = "Código,Nombre";
6695  _Browser_Titulo = "Listado de impresoras";
6696 
6697  _TooltipBrowser = "Consultar impresoras";
6698  _TooltipMante = "Mantenimiento de impresoras";
6699  }
6700  }
6701 
6706  {
6707 
6708  private string _cFamilia = "";
6712  public string _Familia
6713  {
6714  get { return _cFamilia; }
6715  set { _cFamilia = value; }
6716  }
6717 
6721  public txtSubFamilia()
6722  {
6723  }
6724 
6728  protected override void _Cargar_Propiedades()
6729  {
6730  base._Cargar_Propiedades();
6731 
6732  _Valor_Vacio = true; // PE-80837
6733  _Tactil = false;
6734  _Codigo = "";
6735  _Relleno = '0';
6736  _Clave = "CODIGO";
6737  _Len = Convert.ToInt32(EW_GLOBAL._GetLenCampo(KeyDiccionarioLenCampos.wn_subfamilia));
6738  _Expandir = false;
6739  _Database = "GESTION";
6740  _Tabla = "SUBFAM";
6741  _Nombre = "NOMBRE";
6742  _Mante = "SUBFAMI";
6743  _Imagen = "FOTO"; // 83201
6744  _CampoBackColor = "BACKCOLOR"; // PE-84621,85099
6745  _CampoForeColor = "FORECOLOR"; // PE-84621,85099
6746  _CampoFont = "FONTTPV"; // PE-84621
6747  _CampoVisible = "VERTPV"; // PE-84621
6748  _Mensaje_No_Existe = "El código de la subfamilia no existe";
6749 
6750  _Browser_Clave = "CODIGO";
6751  _Browser_Database = "GESTION";
6752  _Browser_Campo_Predet = "NOMBRE";
6753  _Browser_Condicion = "";
6754  _Browser_Tabla = "SUBFAM";
6755  _Browser_Campos = "CODIGO,NOMBRE";
6756  _Browser_Titulos_Campos = "Código,Nombre";
6757  _Browser_Titulo = "Listado de subfamilias";
6758 
6759  // 83201
6760  if (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_hera")))
6761  _Browser_Distinct = " DISTINCT ";
6762  else
6763  _Browser_Distinct = "";
6764  // fi 83201
6765 
6766  _TooltipBrowser = "Consultar subfamilias";
6767  _TooltipMante = "Mantenimiento de subfamilias";
6768  }
6769 
6770  }
6771 
6775  public class txtMarca : ewtxtcodlabel
6776  {
6780  public txtMarca()
6781  {
6782  }
6783 
6787  protected override void _Cargar_Propiedades()
6788  {
6789  base._Cargar_Propiedades();
6790 
6791  _Valor_Vacio = true; // PE-80837
6792  _Tactil = false;
6793  _Codigo = "";
6794  _Relleno = '0';
6795  _Clave = "CODIGO";
6796  _Len = Convert.ToInt32(EW_GLOBAL._GetLenCampo(KeyDiccionarioLenCampos.wn_marcas));
6797  _Expandir = false;
6798  _Database = "GESTION";
6799  _Tabla = "MARCAS";
6800  _Nombre = "NOMBRE";
6801  _Mante = "MARCAS";
6802  _Imagen = "FOTO";
6803  _CampoBackColor = "BACKCOLOR"; // PE-84621,85099
6804  _CampoForeColor = "FORECOLOR"; // PE-84621,85099
6805  _CampoFont = "FONTTPV"; // PE-84621
6806  _CampoVisible = "VERTPV"; // PE-84621
6807  _Mensaje_No_Existe = "El código de la marca no existe";
6808 
6809  _Browser_Clave = "CODIGO";
6810  _Browser_Database = "GESTION";
6811  _Browser_Campo_Predet = "NOMBRE";
6812  _Browser_Campos = "CODIGO,NOMBRE";
6813  _Browser_Condicion = "";
6814  _Browser_Tabla = "MARCAS";
6815  _Browser_Titulos_Campos = "Código,Nombre";
6816  _Browser_Titulo = "Listado de marcas";
6817 
6818  _TooltipBrowser = "Consultar marcas";
6819  _TooltipMante = "Mantenimiento de marcas";
6820  }
6821 
6822  }
6823 
6828  {
6829 
6830  private dynamic _oDocumento;
6831 
6835  public dynamic _Documento
6836  {
6837  get { return _oDocumento; }
6838  set
6839  {
6840  _oDocumento = value;
6841 
6842  if (_oDocumento == null)
6843  return;
6844  this.DataBindings.Clear();
6845  this.DataBindings.Add("_Codigo", _oDocumento._Cabecera, "_Ruta");
6846 
6847  _Refresh();
6848  }
6849  }
6850 
6854  public txtRuta()
6855  {
6856 
6857  }
6858 
6859 
6863  protected override void _Cargar_Propiedades()
6864  {
6865  base._Cargar_Propiedades();
6866 
6867  _Valor_Vacio = true; // PE-80837
6868  _Tactil = false;
6869  _Codigo = "";
6870  _Relleno = '0';
6871  _Clave = "CODIGO";
6872  _Len = Convert.ToInt32(EW_GLOBAL._GetLenCampo(KeyDiccionarioLenCampos.wn_ruta));
6873  _Expandir = false;
6874  _Database = "GESTION";
6875  _Tabla = "RUTAS";
6876  _Nombre = "NOMBRE";
6877  _Mante = "RUTAS";
6878  _Mensaje_No_Existe = "El código de la ruta no existe";
6879 
6880  _Browser_Clave = "CODIGO";
6881  _Browser_Database = "GESTION";
6882  _Browser_Campo_Predet = "NOMBRE";
6883  _Browser_Campos = "CODIGO,NOMBRE";
6884  _Browser_Condicion = "";
6885  _Browser_Tabla = "RUTAS";
6886  _Browser_Titulos_Campos = "Código,Nombre";
6887  _Browser_Titulo = "Listado de rutas";
6888 
6889  _TooltipBrowser = "Consultar rutas";
6890  _TooltipMante = "Mantenimiento de rutas";
6891  }
6892 
6893  }
6894 
6899  {
6900  // PE-85235: Al entrar a crear un documento de venta el control de operario se mostraba activo
6901  private dynamic _oDocumento;
6902  private Boolean _bValidarClaveOperiario = false;
6903 
6907  public dynamic _Documento
6908  {
6909  get { return _oDocumento; }
6910  set
6911  {
6912  _oDocumento = value;
6913 
6914  if (_oDocumento == null)
6915  return;
6916 
6917  this.DataBindings.Clear();
6918  this.DataBindings.Add("_Codigo", _oDocumento._Cabecera, "_Operario");
6919 
6920  //PE98667
6921  if (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_sage50")))
6922  {
6923  if (_oDocumento._TipoDocumentoGeneral == eTipoDocumentoGeneral.Ventas)
6924  this.Visible = Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_Operari")) == true;
6925  else
6926  this.Visible = Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_Opercomp")) == true;
6927  }
6928 
6929  _ValidarClaveOperario = true;
6930  }
6931  }
6932  // FPE-85235
6933 
6937  [Browsable(false)]
6938  public override string _Guid => "d34e0b32-a86a-40bf-954e-d9c2e4213a5f";
6939 
6943  public Boolean _ValidarClaveOperario
6944  {
6945  get
6946  {
6947  return _bValidarClaveOperiario;
6948  }
6949  set
6950  {
6951  if (!DesignMode)
6952  {
6953  if (value && _bValidarClaveOperiario != value)
6954  {
6955  //Declaro el evento _before para validar la clave del operio si la tiene
6956  this._Codigo_Cambiado_Before_Extended += new Delegar_Codigo_Cambiado_Before_Extended(txtOperario__Codigo_Cambiado_Before_Extended);
6957  }
6958  else
6959  {
6960  //Declaro el evento _before para validar la clave del operio si la tiene
6961  this._Codigo_Cambiado_Before_Extended -= new Delegar_Codigo_Cambiado_Before_Extended(txtOperario__Codigo_Cambiado_Before_Extended);
6962  }
6963  }
6964  _bValidarClaveOperiario = value;
6965  }
6966  }
6967 
6974  protected virtual void txtOperario__Codigo_Cambiado_Before_Extended(object sender, string tcValorCandidato, ref bool tlOk)
6975  {
6976  if (_bValidarClaveOperiario && !String.IsNullOrEmpty(tcValorCandidato.Trim()))
6977  {
6978  if (Convert.ToString(EW_GLOBAL._GetVariable("wc_OperarioTPV")) != tcValorCandidato)
6979  {
6980  if ((_oDocumento != null && _oDocumento._Cabecera._Operario != tcValorCandidato) || _oDocumento == null)
6981  {
6982  sage.ew.ewbase.Operario loOperario = new sage.ew.ewbase.Operario(tcValorCandidato);
6983  if (!String.IsNullOrEmpty(loOperario._Password.Trim()))
6984  {
6985  formul.Forms.frmSelOper frmSelOperario = new formul.Forms.frmSelOper(tcValorCandidato);
6986  frmSelOperario._Predeterminar = false;
6987 
6988  if (frmSelOperario.ShowDialog() == System.Windows.Forms.DialogResult.OK)
6989  {
6990  if (String.IsNullOrEmpty(frmSelOperario._Operario.Trim()))
6991  {
6992  tlOk = false;
6993  }
6994  else if (frmSelOperario._Operario.Trim() != tcValorCandidato.Trim())
6995  {
6996  tlOk = false;
6997  this._Codigo = frmSelOperario._Operario;
6998  }
6999  }
7000  else
7001  {
7002  tlOk = false;
7003  }
7004  }
7005  }
7006  }
7007  }
7008  }
7012  public txtOperario()
7013  {
7014  }
7015 
7016 
7020  protected override void _Cargar_Propiedades()
7021  {
7022  base._Cargar_Propiedades();
7023 
7024  _Valor_Vacio = true; // PE-80837
7025  _Tactil = false;
7026  _Codigo = "";
7027  _Relleno = '0';
7028  _Clave = "CODIGO";
7029  _Len = 2;
7030  _Expandir = false;
7031  _Database = "COMUNES";
7032  _Tabla = "OPERARIO";
7033  _Nombre = "NOMBRE";
7034  _Mante = "OPERARIOS";
7035  _Mensaje_No_Existe = "El código de operario no existe";
7036 
7037  _Browser_Clave = "CODIGO";
7038  _Browser_Database = "COMUNES";
7039  _Browser_Campo_Predet = "NOMBRE";
7040  _Browser_Campos = "CODIGO,NOMBRE";
7041  _Browser_Condicion = "";
7042  _Browser_Tabla = "OPERARIO";
7043  _Browser_Titulos_Campos = "Código,Nombre";
7044  _Browser_Titulo = "Listado de operarios";
7045 
7046  _TooltipBrowser = "Consultar operarios";
7047  _TooltipMante = "Mantenimiento de operarios";
7048  }
7049  }
7050 
7055  {
7056 
7057 
7058 
7062  public txtCajasTpv()
7063  {
7064  }
7068  protected override void _Cargar_Propiedades()
7069  {
7070  base._Cargar_Propiedades();
7071 
7072  _Valor_Vacio = true; // PE-80837
7073  _Tactil = false;
7074  _Codigo = "";
7075  _Relleno = '0';
7076  _Clave = "CODIGO";
7077  _Len = 4;
7078  _Expandir = false;
7079  _Database = "TPV";
7080  _Tabla = "CAJAS";
7081  _Nombre = "NOMBRE";
7082  _Mante = "CAJAS_TPV"; // PE-81092
7083  _Mensaje_No_Existe = "El código de la caja no existe";
7084 
7085  _Browser_Clave = "CODIGO";
7086  _Browser_Database = "TPV";
7087  _Browser_Campo_Predet = "NOMBRE";
7088  _Browser_Campos = "CODIGO,NOMBRE";
7089  _Browser_Condicion = "";
7090  _Browser_Tabla = "CAJAS";
7091  _Browser_Titulos_Campos = "Código,Nombre";
7092  _Browser_Titulo = "Listado de cajas";
7093 
7094  _TooltipBrowser = "Consultar cajas";
7095  _TooltipMante = "Mantenimiento de cajas";
7096  }
7097 
7098  }
7099 
7100 
7105  {
7109  protected string _cObraOld = string.Empty;
7110 
7111  private string _cObras = Convert.ToString(EW_GLOBAL._GetVariable("wc_desobra")).Trim(); // 91752
7112 
7116  [Browsable(false)]
7117  public override string _Guid => "f17b1a87-61d1-430b-b57d-dbaf969e23ac";
7118 
7122  protected dynamic _oDocumento;
7123 
7127  public dynamic _Documento
7128  {
7129  get
7130  {
7131  return _oDocumento;
7132  }
7133  set
7134  {
7135  _oDocumento = value;
7136 
7137  //PE79522
7138  if (_oDocumento == null)
7139  return;
7140 
7141  this.DataBindings.Clear();
7142  this.DataBindings.Add("_Codigo", _oDocumento._Cabecera, "_Obra");
7143 
7144 
7145  _Refresh();
7146  }
7147  }
7148 
7149 
7153  public txtObraBase()
7154  {
7155 
7156  //PE-68459 Si no se trabaja con facturación por obras lo oculto
7157  //PE-77357 Se añade el control de _EdicionPerfiles para que no lo oculte en modo diseño.
7158  if (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_obra")) == true || EW_GLOBAL._EdicionPerfiles)
7159  this.Visible = true;
7160  else
7161  this.Visible = false;
7162  }
7163 
7167  protected override void OnCreateControl()
7168  {
7169  base.OnCreateControl();
7170 
7171  _SubscripcionEventos();
7172  }
7173 
7180  protected internal void _SubscripcionEventos()
7181  {
7182  //PE-78139
7183  if (!Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_nocliobra")))
7184  {
7185  _btBrowser._Click_Before += new btBrowser._Click_Before_Handler(btBrowser__Click_Before);
7186  _btBrowser._Click_After += new btBrowser._Click_After_Handler(btBrowser__Click_After);
7187 
7188  // PE-79929
7189  //Declaro el evento _Codigo_Cambiado para validar el cambio de código por si lo introducen directamente por el teclado
7190  _Codigo_Cambiado += new Delegar_Codigo_Cambiado(txtObra__Codigo_Cambiado);
7191 
7192  //Declaro el evento _before para poder guardar el valor actual del código de obra antes de que lo modifiquen y poderlo restaurar si fuera necesario.
7193  _Codigo_Cambiado_Before += new Delegar_Codigo_Cambiado_Before(txtObra__Codigo_Cambiado_Before);
7194  }
7195  }
7196 
7200  protected internal void _CancelarSubscripcionEventos()
7201  {
7202  //PE-78139
7203  if (!Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_nocliobra")))
7204  {
7205  _btBrowser._Click_Before -= new btBrowser._Click_Before_Handler(btBrowser__Click_Before);
7206  _btBrowser._Click_After -= new btBrowser._Click_After_Handler(btBrowser__Click_After);
7207  _Codigo_Cambiado -= new Delegar_Codigo_Cambiado(txtObra__Codigo_Cambiado);
7208  _Codigo_Cambiado_Before -= new Delegar_Codigo_Cambiado_Before(txtObra__Codigo_Cambiado_Before);
7209  }
7210  }
7211 
7215  protected virtual void btBrowser__Click_Before(ref bool tlOk)
7216  {
7217 
7218  }
7219 
7220 
7225  protected virtual void btBrowser__Click_After(bool tlAceptar)
7226  {
7227 
7228  }
7229 
7230 
7235  protected virtual void txtObra__Codigo_Cambiado_Before(ref bool tlOk)
7236  {
7237  //Guardo la obra original
7238  if (string.IsNullOrWhiteSpace(this._Codigo))
7239  {
7240  _cObraOld = "";
7241  }
7242  else
7243  {
7244  _cObraOld = this._Codigo.ToString().Trim();
7245  }
7246  }
7247 
7248 
7252  protected virtual void txtObra__Codigo_Cambiado()
7253  {
7254  }
7255 
7259  protected override void _Cargar_Propiedades()
7260  {
7261  bool llOpcFlag_NoCeroObra = Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_no0obra")); // Opcflag "NO LLENAR CON CEROS EL CÓDIGO DE OBRA, MATRÍCULA, ETC."
7262  bool llOpcFlag_Obra_Taller = Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_obra_taller")); // Opcflag "TRABAJAR OBRAS COMO TALLER MECÁNICO"
7263 
7264  base._Cargar_Propiedades();
7265 
7266 
7267  _Valor_Vacio = true; // PE-80837
7268  _Tactil = false;
7269  _Codigo = "";
7270 
7271  _Relleno = '0';
7272  // Si tenemos alguno de estos opcflags activado no rellenamos el código de obra con ceros ...
7273  if (llOpcFlag_NoCeroObra || llOpcFlag_Obra_Taller)
7274  this._Relleno = ' ';
7275 
7276  _Clave = "CODIGO";
7277  _Len = Convert.ToInt32(EW_GLOBAL._GetLenCampo(KeyDiccionarioLenCampos.wn_obra));
7278  _Expandir = false;
7279  _Database = "COMUNES";
7280  _Tabla = "OBRA";
7281  _Nombre = "NOMBRE";
7282  _Mante = "OBRA";
7283  _Mensaje_No_Existe = "El código de obra no existe";
7284 
7285  _Browser_Clave = "CODIGO";
7286  _Browser_Database = "COMUNES";
7287  _Browser_Campo_Predet = "NOMBRE";
7288  _Browser_Campos = "CODIGO,NOMBRE";
7289  _Browser_Condicion = "";
7290  _Browser_Tabla = "OBRA";
7291  _Browser_Titulos_Campos = "Código,Nombre";
7292  _Browser_Titulo = "Listado de " + _cObras; // 91752
7293 
7294  _TooltipBrowser = "Consultar " + _cObras; // 91752
7295  _TooltipMante = "Mantenimiento de " + _cObras; // 91752
7296 
7297  }
7298  }
7299 
7304  {
7308  private bool _lRefrescando = false;
7309 
7310  private string _cTextoIVA = Convert.ToString(EW_GLOBAL._GetVariable("wc_iva"));
7311  private string _cObras = Convert.ToString(EW_GLOBAL._GetVariable("wc_desobra")).Trim();
7312  private string _cCliente = string.Empty;
7313 
7317  public string _Cliente
7318  {
7319  get
7320  {
7321  if (_oDocumento == null)
7322  return _cCliente;
7323  else
7324  return _oDocumento._Cabecera._Cliente;
7325  }
7326  set
7327  {
7328  _cCliente = value;
7329  }
7330  }
7331 
7335  protected override void _Cargar_Propiedades()
7336  {
7337  bool llNoControlarCliente = Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_nocliobra")); //PE79522
7338 
7339  base._Cargar_Propiedades();
7340 
7341  _Mensaje_No_Existe = "El código de obra no existe";
7342 
7343  //PE79522
7344  if (llNoControlarCliente)
7345  _Browser_Condicion = "";
7346  else
7347  _Browser_Condicion = string.IsNullOrWhiteSpace(this._Cliente) ? "" : "Cliente = " + DB.SQLString(this._Cliente);
7348 
7349  this._Codigo_Cambiado_Before_Extended += TxtObraVentas__Codigo_Cambiado_Before_Extended;
7350  }
7351 
7352  private void TxtObraVentas__Codigo_Cambiado_Before_Extended(object sender, string tcValorCandidato, ref bool tlOk)
7353  {
7354  // CCR205112
7355  // El _Refresh() del control (cuando toma valor la propiedad _Codigo) se ejecuta al navegar con la botonera
7356  // por los documentos o al cargar un documento en pantalla. En este escenario siempre vamos a dar por bueno
7357  // lo que haya guardado en la bd. independientemente de que ahora sea incompatible con alguna configuracion de empresa
7358  // como por ejemplo el control de obras por clientes, imaginemos que inicialmente no tenemos el opcflafg activado
7359  // de WL_NOCLIOBRA, permitiendo introducir cualquier obra aunque no sea del cliente en el documento de venta, y
7360  // más tarde se activa el opcflag, con lo que algunas obras introducidas anteriormente no serian validas ahora si se
7361  // intentasen introducir, pero no vamos a hacer saltar el mensaje ahora y vamos a aceptarlo. De ahi el control
7362  // que sigue, si se está refrescando no se hace ninguna validacion.
7363  //
7364  if (this._lRefrescando)
7365  return;
7366 
7367  if (!Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_nocliobra")))
7368  tlOk = _ValidarCodigo(tcValorCandidato);
7369  }
7370 
7371 
7376  protected override void btBrowser__Click_Before(ref bool tlOk)
7377  {
7378  base.btBrowser__Click_Before(ref tlOk);
7379 
7380  _Browser_Condicion = string.IsNullOrWhiteSpace(this._Cliente) ? "" : "Cliente = " + DB.SQLString(this._Cliente);
7381  }
7382 
7387  protected override void btBrowser__Click_After(bool tlAceptar)
7388  {
7389  base.btBrowser__Click_After(tlAceptar);
7390 
7391  // Quito la condición por que si me ponen un código de obra que no es del cliente pero existente, no me salte el error
7392  // de que el código no existe.
7393  //
7394  _Browser_Condicion = "";
7395  }
7396 
7401  protected override void txtObra__Codigo_Cambiado()
7402  {
7403  if(_oDocumento != null && !_oDocumento._CarregantDocGuardat && !_oDocumento._Documento_Vacio())
7404  {
7405  string lcTipoIVAOld = string.Empty;
7406  if (!string.IsNullOrWhiteSpace(_oDocumento._Cabecera._Obra))
7407  {
7408  if (_oDocumento._Cabecera._oObra != null && _oDocumento._Cabecera._oObra._Codigo == _oDocumento._Cabecera._Obra)
7409  lcTipoIVAOld = _oDocumento._Cabecera._oObra._TipoIVA;
7410  else
7411  {
7412  using (Obra loObra = new Obra(_oDocumento._Cabecera._Obra))
7413  {
7414  lcTipoIVAOld = loObra._TipoIVA;
7415  }
7416  }
7417  }
7418 
7419  string lcTipoIvaNuevo = string.Empty;
7420  if (!string.IsNullOrWhiteSpace(_Codigo))
7421  {
7422  using (Obra loObra = new Obra(_Codigo))
7423  {
7424  lcTipoIvaNuevo = loObra._TipoIVA;
7425  }
7426  }
7427 
7428  if (lcTipoIVAOld != lcTipoIvaNuevo)
7429  {
7430  _oDocumento._MessageBox("El cambio de " + _cObras + " implica un tipo de " + _cTextoIVA + " ISP distinto. " + Environment.NewLine + Environment.NewLine +
7431  "Para revisar los tipos de " + _cTextoIVA + " debe acceder a la comprobación de " + _cTextoIVA + " desde el botón de opciones.",
7432  MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, DialogResult.None);
7433  }
7434  }
7435  }
7436 
7442  private bool _ValidarCodigo(string tcCodigo)
7443  {
7444  string lcSql, lcClienteObra, lcMensaje;
7445  DataTable loDt;
7446 
7447  if (!string.IsNullOrEmpty(_Cliente) && !string.IsNullOrEmpty(tcCodigo))
7448  {
7449  loDt = new DataTable();
7450  lcSql = $"SELECT CODIGO, CLIENTE FROM {DB.SQLDatabase("COMUNES", "OBRA")} WHERE CODIGO = {DB.SQLString(tcCodigo)}";
7451 
7452  if (DB.SQLExec(lcSql, ref loDt) && loDt.Rows.Count > 0)
7453  {
7454  lcClienteObra = Convert.ToString(loDt.Rows[0]["CLIENTE"]).Trim();
7455 
7456  if (string.IsNullOrWhiteSpace(lcClienteObra))
7457  {
7458  lcMensaje = $"Esta obra no tiene ningún cliente asignado.{Environment.NewLine}¿Desea asignar a esta obra el cliente {_Cliente.Trim()}?";
7459  if (FUNCTIONS._MessageBox(lcMensaje, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2, DialogResult.No) == DialogResult.Yes)
7460  {
7461  Obra oObra = new Obra();
7462  oObra._Codigo = tcCodigo;
7463  oObra._Cliente = _Cliente;
7464  oObra._Save();
7465  }
7466  }
7467  else if (lcClienteObra != _Cliente)
7468  {
7469  lcMensaje = $"El código de obra introducido no corresponde al cliente {_Cliente}";
7470  FUNCTIONS._MessageBox(lcMensaje, MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, DialogResult.None);
7471  return false;
7472  }
7473  }
7474  }
7475 
7476  return true;
7477  }
7478 
7479 
7483  public override void _Refresh()
7484  {
7485  this._lRefrescando = true;
7486 
7487  base._Refresh();
7488 
7489  this._lRefrescando = false;
7490  }
7491 
7492  }
7493 
7498  {
7499  }
7500 
7505  {
7506 
7507  private dynamic _oDocumento;
7508 
7512  public dynamic _Documento
7513  {
7514  get { return _oDocumento; }
7515  set
7516  {
7517  _oDocumento = value;
7518 
7519  if (_oDocumento == null)
7520  return;
7521  this.DataBindings.Clear();
7522  this.DataBindings.Add("_Codigo", _oDocumento._Cabecera, "_Vendedor");
7523 
7524  _Refresh();
7525  }
7526  }
7527 
7531  [Browsable(false)]
7532  public override string _Guid => "02e1214f-7339-494e-8920-c367c4218687";
7533 
7537  public txtVendedor()
7538  {
7539  }
7540 
7544  protected override void _Cargar_Propiedades()
7545  {
7546  base._Cargar_Propiedades();
7547 
7548  _Valor_Vacio = true; // PE-80837
7549  _Tactil = false;
7550  _Codigo = "";
7551  _Relleno = '0';
7552  _Clave = "CODIGO";
7553  _Len = Convert.ToInt32(EW_GLOBAL._GetLenCampo(KeyDiccionarioLenCampos.wn_vendedor));
7554  _Expandir = false;
7555  _Database = "GESTION";
7556  _Tabla = "VENDEDOR";
7557  _Nombre = "NOMBRE";
7558  _Mante = "VENDEDOR";
7559  _Imagen = "FOTO";
7560  _Mensaje_No_Existe = "El código de vendedor no existe";
7561 
7562  // 140407. Unificar browsers
7563  botones.btBrowVendedor btbrowvendedor = new botones.btBrowVendedor();
7564  _Browser_Clave = btbrowvendedor._Clave;
7565  _Browser_Database = btbrowvendedor._DataBase;
7566  _Browser_Campo_Predet = btbrowvendedor._Campo_Predet;
7567  _Browser_Campos = btbrowvendedor._Campos;
7568  _Browser_Condicion = "";
7569  _Browser_Tabla = btbrowvendedor._Tabla;
7570  _Browser_Titulos_Campos = btbrowvendedor._Titulos_Campos;
7571  _Browser_Titulo = btbrowvendedor._Titulo;
7572 
7573  _TooltipBrowser = "Consultar vendedores";
7574  _TooltipMante = "Mantenimiento de vendedores";
7575  }
7576 
7577  }
7578 
7579 
7584  {
7585 
7589  protected dynamic _oDocumento;
7590 
7594  public dynamic _Documento
7595  {
7596  get { return _oDocumento; }
7597  set
7598  {
7599  _oDocumento = value;
7600 
7601  if (_oDocumento == null)
7602  return;
7603 
7604  this.DataBindings.Clear();
7605  this.DataBindings.Add("_Codigo", _oDocumento._Cabecera, "_FormaPago");
7606 
7607  _Refresh();
7608  }
7609  }
7610 
7614  [Browsable(false)]
7615  public override string _Guid => "7c856251-eb88-4c60-bd3c-c38fa2f20f77";
7616 
7621  {
7622  // this._CargarTodosRegistros = true; // PE-78599, 79835
7623  _Codigo_Cambiado += new Delegar_Codigo_Cambiado(txtFormaPago__Codigo_Cambiado);
7624  _Codigo_Cambiado_Before += new Delegar_Codigo_Cambiado_Before(txtFormaPago__Codigo_Cambiado_Before);
7625  }
7626 
7631  protected virtual void txtFormaPago__Codigo_Cambiado_Before(ref bool tlOk)
7632  {
7633  }
7634 
7638  protected virtual void txtFormaPago__Codigo_Cambiado()
7639  {
7640  }
7641 
7645  protected override void _Cargar_Propiedades()
7646  {
7647  base._Cargar_Propiedades();
7648 
7649  _Valor_Vacio = true; // PE-80837
7650  _Tactil = false;
7651  _Codigo = "";
7652  _Relleno = '0';
7653  _Clave = "codigo";
7654  _Len = Convert.ToInt32(EW_GLOBAL._GetLenCampo(KeyDiccionarioLenCampos.wn_fpag));
7655  _Expandir = false;
7656  _Database = "gestion";
7657  _Tabla = "FPAG";
7658  _Nombre = "nombre";
7659  _Mante = "FPAGO";
7660  _Mensaje_No_Existe = "El código de la forma de pago no existe";
7661 
7662  _Browser_Clave = "codigo";
7663  _Browser_Database = "gestion";
7664  _Browser_Campo_Predet = "nombre";
7665  _Browser_Campos = "codigo,nombre";
7666  _Browser_Condicion = "";
7667  _Browser_Tabla = "fpag";
7668  _Browser_Titulos_Campos = "Código,Nombre";
7669  _Browser_Titulo = "Listado de formas de pago";
7670 
7671  _TooltipBrowser = "Consultar formas de pago";
7672  _TooltipMante = "Mantenimiento de formas de pago";
7673 
7674  // PE-92757. Asignar opcesp
7675  _OpcEsp = "0039"; // No modificar formas de pago en albaranes de venta
7676  }
7677  }
7678 
7679 
7680 
7685  {
7686  private string lcFpagoOld = string.Empty;
7687  private Usuario _oUsuario = null;
7688 
7693  protected override void txtFormaPago__Codigo_Cambiado_Before(ref bool tlOk)
7694  {
7695  base.txtFormaPago__Codigo_Cambiado_Before(ref tlOk);
7696 
7697  //Guardo la Forma de pago original
7698  if (string.IsNullOrWhiteSpace(this._Codigo)) lcFpagoOld = "";
7699  else lcFpagoOld = this._Codigo.ToString().Trim();
7700 
7701  // Task 132537 optimización, utilizar el objeto global Usuario en vez de crear un nuevo objeto Usuario() lo cual provoca consultas innecesarias.
7702  //if (_oUsuario == null) this._oUsuario = new Usuario();
7703  if (_oUsuario == null)
7704  this._oUsuario = sage.ew.usuario.Usuario._This;
7705 
7706  if (!string.IsNullOrWhiteSpace(this._Codigo)) //Si no tengo nada permito el cambio
7707  {
7708  if (this._oUsuario._Opcesp("0039"))
7709  {
7710  FormBase loForm = (FormBase)this.FindForm();
7711 
7712  DialogResult lodialog = loForm._MessageBox("El usuario no tiene permisos para modificar formas de pago en albaranes de venta.",
7713  MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, DialogResult.None);
7714  tlOk = false;
7715  }
7716  }
7717  }
7718  }
7719 
7720 
7725  {
7726 
7727  }
7728 
7729 
7734  {
7735 
7739  protected override void _Cargar_Propiedades()
7740  {
7741  base._Cargar_Propiedades();
7742 
7743  _Valor_Vacio = true; // PE-80837
7744  _Tactil = false;
7745  _Codigo = "";
7746  _Relleno = '0';
7747  _Clave = "codigo";
7748  _Len = Convert.ToInt32(EW_GLOBAL._GetLenCampo(KeyDiccionarioLenCampos.wn_fpag));
7749  _Expandir = false;
7750  _Database = "comunes";
7751  _Tabla = "fraefpag ";
7752  _Nombre = "nombre";
7753  _Mante = "";
7754  _Mensaje_No_Existe = "El código en Facturae no existe";
7755 
7756  _Browser_Clave = "codigo";
7757  _Browser_Database = "comunes";
7758  _Browser_Campo_Predet = "nombre";
7759  _Browser_Campos = "codigo,nombre";
7760  _Browser_Condicion = "";
7761  _Browser_Tabla = "fraefpag ";
7762  _Browser_Titulos_Campos = "Código,Nombre";
7763  _Browser_Titulo = "Listado códigos en Facturae";
7764 
7765  _TooltipBrowser = "Consultar códigos en Facturae";
7766  _TooltipMante = "";
7767  }
7768  }
7769 
7774  {
7775  #region Propiedades privadas
7776  private dynamic _oDocumento;
7777  #endregion Propiedades privadas
7778 
7779  #region Propiedades públicas
7780  public dynamic _Documento
7784  {
7785  get { return _oDocumento; }
7786  set
7787  {
7788  _oDocumento = value;
7789 
7790  if (_oDocumento == null)
7791  return;
7792 
7793  DataBindings.Clear();
7794  DataBindings.Add("_Codigo", _oDocumento._Cabecera, "_Tarifa");
7795 
7796  _Refresh();
7797  }
7798  }
7799  #endregion Propiedades públicas
7800 
7801  #region Constructor
7802  public txtTarifa()
7806  {
7807  }
7808  #endregion Constructor
7809  }
7810 
7815  {
7819  [Browsable(false)]
7820  public override string _Guid => "35a6ea93-4781-4f19-a296-64d8d090cb3a";
7821 
7822  #region Constructor
7823 
7827  public txtTarifaBase()
7828  {
7829  }
7830 
7831  #endregion Constructor
7832 
7833  #region Métodos protected override
7834  protected override void _Cargar_Propiedades()
7838  {
7839  base._Cargar_Propiedades();
7840 
7841  _Valor_Vacio = true; // PE-80837
7842  _Tactil = false;
7843  _Codigo = "";
7844  _Relleno = '0';
7845  _Clave = "CODIGO";
7846  _Len = Convert.ToInt32(EW_GLOBAL._GetLenCampo(KeyDiccionarioLenCampos.wn_tarifas));
7847  _Expandir = false;
7848  _Database = "GESTION";
7849  _Tabla = "TARIFAS";
7850  _Nombre = "NOMBRE";
7851  _Mante = "TARIFAS1";
7852  _Mensaje_No_Existe = "El código de la tarifa no existe";
7853 
7854  _Browser_Clave = "CODIGO";
7855  _Browser_Database = "GESTION";
7856  _Browser_Campo_Predet = "NOMBRE";
7857  _Browser_Campos = "CODIGO,NOMBRE";
7858  _Browser_Condicion = "";
7859  _Browser_Tabla = "TARIFAS";
7860  _Browser_Titulos_Campos = "Código,Nombre";
7861  _Browser_Titulo = "Listado de tarifas";
7862 
7863  _TooltipBrowser = "Consultar tarifas";
7864  _TooltipMante = "Mantenimiento de tarifas";
7865  }
7866  #endregion Métodos protected override
7867  }
7868 
7873  {
7874  #region Propiedades públicas
7875  [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
7879  public List<string> _ListaTarifas
7880  {
7881  get { return _lstTarifas; }
7882  set {
7883  _lstTarifas = value;
7884  DataTablePersonalizadoTarifas();
7885  }
7886  }
7887  private List<string> _lstTarifas = new List<string>();
7888  #endregion Propiedades públicas
7889 
7890  #region Constructor
7895  {
7896  _Tipo_Visual = _Tipos_Visuales.Combo;
7897 
7898  if (!DesignMode)
7899  DataTablePersonalizadoTarifas();
7900  }
7901  #endregion Constructor
7902  private string WhereTarifas()
7906  {
7907  string lcWhere = string.Empty;
7908 
7909  if (_lstTarifas.Count > 0)
7910  foreach (string lcTarifa in _lstTarifas)
7911  lcWhere += (string.IsNullOrWhiteSpace(lcWhere) ? " WHERE " : " OR ") + "codigo = " + DB.SQLString(lcTarifa) + " ";
7912 
7913  return lcWhere;
7914  }
7915 
7916  #region Métodos privados
7917  private void DataTablePersonalizadoTarifas()
7921  {
7922  DataTable ldtTarifas = new DataTable();
7923 
7924  bool llOK = DB.SQLExec("select codigo, codigo + REPLICATE(' ', 4 - LEN(codigo)) + nombre as nombre" +
7925  " FROM " + DB.SQLDatabase("gestion", "tarifas") +
7926  WhereTarifas() +
7927  " ORDER by codigo", ref ldtTarifas);
7928 
7929  _Mostrar_Mante = false;
7930  _DataTable = ldtTarifas;
7931  _Clave = "codigo";
7932  _Concepto = "nombre";
7933  _PrimeraVez = true;
7934  _Refresh();
7935  }
7936  #endregion Métodos privados
7937  }
7938 
7943  {
7948  {
7949  }
7950 
7954  protected override void _Cargar_Propiedades()
7955  {
7956  base._Cargar_Propiedades();
7957 
7958  _Valor_Vacio = true; // PE-80837
7959  _Tactil = false;
7960  _Codigo = "";
7961  _Relleno = '0';
7962  _Clave = "CODIGO";
7963  _Len = 2;
7964  _Expandir = false;
7965  _Database = "GESTION";
7966  _Tabla = "CARAC";
7967  _Nombre = "NOMBRE";
7968  //_Mante = "MANTECARAC";
7969  //PE-96299 Cambio el nomnre del mantenimiento
7970  _Mante = "CARAC";
7971  _Mensaje_No_Existe = "El código de característica no existe";
7972 
7973  _Browser_Clave = "CODIGO";
7974  _Browser_Database = "GESTION";
7975  _Browser_Campo_Predet = "NOMBRE";
7976  _Browser_Campos = "CODIGO,NOMBRE";
7977  _Browser_Condicion = "";
7978  _Browser_Tabla = "CARAC";
7979  _Browser_Titulos_Campos = "Código,Nombre";
7980  _Browser_Titulo = "Listado de características";
7981 
7982  _TooltipBrowser = "Consultar características";
7983  _TooltipMante = "Mantenimiento de características";
7984  }
7985 
7986  }
7987 
7988 
7993  {
7997  public txtFormaCobro()
7998  {
7999  }
8000 
8004  protected override void _Cargar_Propiedades()
8005  {
8006  base._Cargar_Propiedades();
8007 
8008  _Valor_Vacio = true; // PE-80837
8009  _Tactil = false;
8010  _Codigo = "";
8011  _Relleno = '0';
8012  _Clave = "codigo";
8013  _Len = 2;
8014  _Expandir = false;
8015  _Database = "tpv";
8016  _Tabla = "f_cobros";
8017  _Nombre = "nombre";
8018  _Mante = "f_cobros";
8019  _Mensaje_No_Existe = "El código de la forma de cobro no existe";
8020 
8021  _Browser_Clave = "codigo";
8022  _Browser_Database = "tpv";
8023  _Browser_Campo_Predet = "nombre";
8024  _Browser_Campos = "codigo,nombre";
8025  _Browser_Condicion = "";
8026  _Browser_Tabla = "f_cobros";
8027  _Browser_Titulos_Campos = "Código,Nombre";
8028  _Browser_Titulo = "Listado de formas de cobro";
8029 
8030  _TooltipBrowser = "Consultar formas de cobro";
8031  _TooltipMante = "Mantenimiento de formas de cobro";
8032  }
8033  }
8034 
8035  //Task 105418 Deprecated => Usar txtMoneda
8039  //public class txtDivisa : ewtxtcodlabel
8040  //{
8041  // /// <summary>
8042  // /// Constructor
8043  // /// </summary>
8044  // public txtDivisa()
8045  // {
8046  // }
8047 
8048  // /// <summary>
8049  // /// Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados para Divisas
8050  // /// </summary>
8051  // protected override void _Cargar_Propiedades()
8052  // {
8053  // base._Cargar_Propiedades();
8054 
8055  // _Valor_Vacio = true; // PE-80837
8056  // _Tactil = false;
8057  // _Codigo = "";
8058  // _Relleno = '0';
8059  // _Clave = "codigo";
8060  // _Len = 2;
8061  // _Expandir = false;
8062  // _Database = "gestion";
8063  // _Tabla = "moneda";
8064  // _Nombre = "nombre";
8065  // _Mante = "monmante";
8066  // _Mensaje_No_Existe = "El código de la divisa no existe";
8067 
8068  // _Browser_Clave = "codigo";
8069  // _Browser_Database = "gestion";
8070  // _Browser_Campo_Predet = "nombre";
8071  // _Browser_Campos = "codigo,nombre";
8072  // _Browser_Condicion = "";
8073  // _Browser_Tabla = "moneda";
8074  // _Browser_Titulos_Campos = "Código,Nombre";
8075  // _Browser_Titulo = "Listado de divisas";
8076 
8077  // _TooltipBrowser = "Consultar divisas";
8078  // _TooltipMante = "Mantenimiento de divisas";
8079  // }
8080 
8081  //}
8082 
8086  public class txtTipoRet : ewtxtcodlabel
8087  {
8091  public txtTipoRet()
8092  {
8093  }
8094 
8098  protected override void _Cargar_Propiedades()
8099  {
8100  base._Cargar_Propiedades();
8101 
8102  _Valor_Vacio = true; // PE-80837
8103  _Tactil = false;
8104  _Codigo = "";
8105  _Relleno = '0';
8106  _Clave = "CODIGO";
8107  _Len = 2;
8108  _Expandir = false;
8109  _Database = "GESTION";
8110  _Tabla = "TIPO_RET";
8111  _Nombre = "NOMBRE";
8112  _Mante = "TIPO_RET";
8113  _Mensaje_No_Existe = "El código del tipo de retención no existe";
8114 
8115  _Browser_Clave = "CODIGO";
8116  _Browser_Database = "GESTION";
8117  _Browser_Campo_Predet = "NOMBRE";
8118  _Browser_Campos = "CODIGO,NOMBRE";
8119  _Browser_Condicion = "";
8120  _Browser_Tabla = "TIPO_RET";
8121  _Browser_Titulos_Campos = "Código,Nombre";
8122  _Browser_Titulo = "Listado de tipos de retención";
8123 
8124  _TooltipBrowser = "Consultar tipos de retención";
8125  _TooltipMante = "Mantenimiento de tipos de retención";
8126  }
8127  }
8128 
8133  {
8134 
8138  public txtDefVales()
8139  {
8140  }
8144  protected override void _Cargar_Propiedades()
8145  {
8146  base._Cargar_Propiedades();
8147 
8148  _Valor_Vacio = true; // PE-80837
8149  _Tactil = false;
8150  _Codigo = "";
8151  _Relleno = '0';
8152  _Clave = "CODIGO";
8153  _Len = 2;
8154  _Expandir = false;
8155  _Database = "TPV";
8156  _Tabla = "DEFVALES";
8157  _Nombre = "NOMBRE";
8158  _Mante = "DEFVALES";
8159  _Mensaje_No_Existe = "El código de definición de vale no existe";
8160 
8161  _Browser_Clave = "CODIGO";
8162  _Browser_Database = "TPV";
8163  _Browser_Campo_Predet = "CODIGO"; // 82716
8164  _Browser_Campos = "CODIGO,NOMBRE";
8165  _Browser_Condicion = "";
8166  _Browser_Tabla = "DEFVALES";
8167  _Browser_Titulos_Campos = "Código,Nombre";
8168  _Browser_Titulo = "Listado de definición de vales";
8169 
8170  _TooltipBrowser = "Consultar vales";
8171  _TooltipMante = "Mantenimiento de vales";
8172  }
8173  }
8174 
8175 
8180  {
8184  public txtCuentaERP()
8185  {
8186  }
8187 
8191  protected override void _Cargar_Propiedades()
8192  {
8193  base._Cargar_Propiedades();
8194 
8195  _Valor_Vacio = true;
8196  _Tactil = false;
8197  _Codigo = "";
8198  _Relleno = ' '; // 93034
8199  _Clave = "codigo";
8200  _Len = Convert.ToInt32(EW_GLOBAL._GetLenCampo(KeyDiccionarioLenCampos.wn_digitos)); // PE-82056
8201  _Expandir = false;
8202  _Database = "comunes";
8203  _Tabla = "cuentaserp";
8204  _Nombre = "nombre";
8205  _Mante = "";
8206  _Mostrar_Mante = false;
8207  _Mensaje_No_Existe = "El código de cuenta contable no existe";
8208 
8209  _Browser_Clave = "codigo";
8210  _Browser_Database = "comunes";
8211  _Browser_Campo_Predet = "nombre";
8212  _Browser_Campos = "codigo,nombre";
8213  _Browser_Condicion = "";
8214  _Browser_Tabla = "cuentaserp";
8215  _Browser_Titulos_Campos = "Código,Nombre";
8216  _Browser_Titulo = "Listado de cuentas contables";
8217 
8218  _TooltipBrowser = "Consultar cuentas contables";
8219  _TooltipMante = "Mantenimiento de cuentas contables";
8220  }
8221  }
8222 
8223 
8224 
8225 
8226 
8227 
8228  // PARTE 89113. Formulario de empresa
8233  {
8234  #region CONSTRUCTORES
8235  public txtTipoEmpresa()
8239  {
8240  // Preparar DataTable con los tipos de empresa
8241  this._Preparar_DataTable();
8242  this._Mostrar_Mante = false;
8243  this._Tipo_Visual = _Tipos_Visuales.Combo;
8244  }
8245  #endregion CONSTRUCTORES
8246 
8247  #region METODOS PÚBLICOS
8248  public override void _Refresh()
8252  {
8253  // Ejecutar el código base
8254  base._Refresh();
8255  }
8256  #endregion METODOS PÚBLICOS
8257 
8258  #region METODOS PRIVADOS
8259 
8260  // Preparar DataTable con los tipos de empresa
8261  private void _Preparar_DataTable()
8262  {
8263  DataTable dtTipoDoc = new DataTable();
8264 
8265  dtTipoDoc.Columns.Add("tipo", typeof(System.String));
8266 
8267  dtTipoDoc.Rows.Add(new object[] { "Normal" });
8268  dtTipoDoc.Rows.Add(new object[] { "Consolidada" });
8269 
8270  // Asignar propiedades txtcodlabel
8271  this._Clave = "tipo";
8272 
8273  this._DataTable = dtTipoDoc;
8274  }
8275 
8276  #endregion METODOS PRIVADOS
8277  }
8278  // FPARTE 89113. Formulario de empresa
8279 
8280  // 94870
8285  {
8286  #region CONSTRUCTORES
8287  public txtTipoImpresora()
8291  {
8292  // Preparar DataTable con los tipos de impresora
8293  this._Preparar_DataTable();
8294  this._Mostrar_Mante = false;
8295  this._Tipo_Visual = _Tipos_Visuales.Combo;
8296  }
8297  #endregion CONSTRUCTORES
8298 
8299  #region METODOS PÚBLICOS
8300  public override void _Refresh()
8304  {
8305  // Ejecutar el código base
8306  base._Refresh();
8307  }
8308  #endregion METODOS PÚBLICOS
8309 
8310  #region METODOS PRIVADOS
8311 
8312  // Preparar DataTable con los tipos de impresora
8313  private void _Preparar_DataTable()
8314  {
8315  DataTable dtTipoDoc = new DataTable();
8316 
8317  dtTipoDoc.Columns.Add("tipo", typeof(System.String));
8318  dtTipoDoc.Columns.Add("nombre", typeof(System.String));
8319 
8320  dtTipoDoc.Rows.Add(new object[] { "1", "Impresora" });
8321  dtTipoDoc.Rows.Add(new object[] { "2", "Visor" });
8322 
8323  // Asignar propiedades txtcodlabel
8324  _Clave = "tipo";
8325  _Nombre = "nombre";
8326 
8327  _DataTable = dtTipoDoc;
8328  }
8329 
8330  #endregion METODOS PRIVADOS
8331  }
8332  // fi 94870
8333 
8334  // 93382
8339  {
8340  #region CONSTRUCTORES
8341  public txtOrdenImpresion()
8345  {
8346  // Preparar DataTable con los tipos de empresa
8347  this._Preparar_DataTable();
8348  this._Mostrar_Mante = false;
8349  this._Tipo_Visual = _Tipos_Visuales.Combo;
8350  }
8351  #endregion CONSTRUCTORES
8352 
8353  #region METODOS PÚBLICOS
8354  public override void _Refresh()
8358  {
8359  // Ejecutar el código base
8360  base._Refresh();
8361  }
8362  #endregion METODOS PÚBLICOS
8363 
8364  #region METODOS PRIVADOS
8365 
8366  // Preparar DataTable con los tipos de empresa
8367  private void _Preparar_DataTable()
8368  {
8369  // Añadir los distintos tipos de impresión
8370  DataTable ldtTipoImpresion = new DataTable();
8371  ldtTipoImpresion.Columns.Add("codigo", typeof(System.String));
8372  ldtTipoImpresion.Columns.Add("nombre", typeof(System.String));
8373 
8374  ldtTipoImpresion.Rows.Add(new object[] { "0", "Antes de la entrega en el cajón inteligente" });
8375  ldtTipoImpresion.Rows.Add(new object[] { "1", "Después de la entrega en el cajón inteligente" });
8376  ldtTipoImpresion.Rows.Add(new object[] { "2", "No imprimir" });
8377 
8378  _Clave = "codigo";
8379  _Nombre = "nombre";
8380  _DataTable = ldtTipoImpresion;
8381  }
8382 
8383  #endregion METODOS PRIVADOS
8384  }
8385 
8390  {
8395  {
8396  }
8397 
8401  protected override void _Cargar_Propiedades()
8402  {
8403  base._Cargar_Propiedades();
8404 
8405  _Valor_Vacio = false; // PE-80837
8406  _Tactil = false;
8407  _Codigo = "0";
8408  _Clave = "ID";
8409  _Expandir = false;
8410  _Database = "COMUNES";
8411  _Tabla = "REPLAN";
8412  _Nombre = "NOMBRE";
8413  _Mante = "REPLAN";
8414  _Mensaje_No_Existe = "El código de la plantilla no existe";
8415  _PrimeraVez = false;
8416 
8417  _Browser_Clave = "ID";
8418  _Browser_Database = "COMUNES";
8419  _Browser_Campo_Predet = "NOMBRE";
8420  _Browser_Campos = "ID,NOMBRE";
8421  _Browser_Condicion = "";
8422  _Browser_Tabla = "REPLAN";
8423  _Browser_Titulos_Campos = "Código,Nombre";
8424  _Browser_Titulo = "Listado de plantillas";
8425 
8426  _TooltipBrowser = "Consultar plantillas";
8427  _TooltipMante = "Mantenimiento de plantillas";
8428 
8429  }
8430 
8435  protected override bool EvaluarOrigenManual()
8436  {
8437  // Los Provienen datos de tabla pero al ser cargados se almacenan en el datatable por lo que al dispararse un SizeChanged
8438  //se reevalua y cambia de valor provocando colateralmente la ocultación del mantenimiento en modo combo
8439  //(que va ligado a _mostra_mante y a esta evaluación)
8440 
8441  return false;
8442  }
8443  }
8444 
8445  // 93382
8446  #endregion CLASES DERIVADAS EWTXTCODLABEL
8447 
8448 
8452  public class TextAndImageColumn : DataGridViewTextBoxColumn
8453  {
8458  {
8459  this.CellTemplate = new TextAndImageCell();
8460  }
8461 
8465  private TextAndImageCell TextAndImageCellTemplate
8466  {
8467  get { return (TextAndImageCell)this.CellTemplate as TextAndImageCell; }
8468  }
8469  }
8470 
8474  public class TextAndImageCell : DataGridViewTextBoxCell
8475  {
8476  private Image _imageValue;
8477  private Size _imageSize;
8478 
8479  private int _nAnchoImagen = 0;
8483  public int _AnchoImagen
8484  {
8485  get { return _nAnchoImagen; }
8486  set { _nAnchoImagen = value; }
8487  }
8488 
8492  public Image _Imagen
8493  {
8494  get
8495  { return this._imageValue; }
8496 
8497  set
8498  {
8499  if ((!object.ReferenceEquals(this._Imagen, value)))
8500  {
8501  this._imageValue = value;
8502  this._imageSize = value.Size;
8503 
8504  Padding inheritedPadding = this.Style.Padding;
8505  this.Style.Padding = new Padding(_imageSize.Width, inheritedPadding.Top, inheritedPadding.Right, inheritedPadding.Bottom);
8506  }
8507  }
8508  }
8509 
8513  private TextAndImageColumn OwningTextAndImageColumn
8514  {
8515  get { return (TextAndImageColumn)this.OwningColumn as TextAndImageColumn; }
8516  }
8517 
8522  public override object Clone()
8523  {
8525  loCelda._imageValue = this._imageValue;
8526  loCelda._imageSize = this._imageSize;
8527 
8528  return loCelda;
8529  }
8530 
8545  protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts)
8546  {
8547  base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts);
8548 
8549  if ((this._Imagen != null))
8550  {
8551  bool llCeldaActual = (this.DataGridView.CurrentCell == this);
8552  int lnX = cellBounds.Location.X + 1;
8553  int lnY = cellBounds.Location.Y;
8554  int lnAlto = cellBounds.Height - 2;
8555  int lnAncho = this._nAnchoImagen - 2;
8556 
8557  if (cellBounds.Width < this._nAnchoImagen)
8558  lnAncho = cellBounds.Width - 2;
8559 
8560  // Si se trata de la celda actual, quitamos un trozo para el recuadro de selección
8561  if (llCeldaActual)
8562  {
8563  lnX = lnX + 2;
8564  lnY = lnY + 2;
8565  lnAlto = lnAlto - 3;
8566  lnAncho = lnAncho - 3;
8567  }
8568 
8569  // Pintamos la imagen en la celda
8570  System.Drawing.Drawing2D.GraphicsContainer container = graphics.BeginContainer();
8571  graphics.SetClip(cellBounds);
8572  graphics.DrawImage(this._Imagen, lnX, lnY, lnAncho, lnAlto);
8573 
8574  if (llCeldaActual)
8575  {
8576  // Pintamos el borde de la celda
8577  Pen loPen = new Pen(Color.DodgerBlue, 2);
8578  Rectangle loRectangle = cellBounds;
8579  loRectangle.Height = loRectangle.Height - 1;
8580  loRectangle.Width = loRectangle.Width - 1;
8581  loRectangle.Inflate(-2, -2);
8582  graphics.DrawRectangle(loPen, loRectangle);
8583  }
8584 
8585  graphics.EndContainer(container);
8586  }
8587  }
8588  }
8589 
8590 }
8591 
8592 
Indica que es un ewbutton de mantenimiento
Definition: IAsistente.cs:11
String _CondicionAutomatica
Texto para el filtro automático
virtual void txtFormaPago__Codigo_Cambiado()
txtFormaPago__Codigo_Cambiado
virtual DataTable _DatatablePersonalizado
Datatable personalizado
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
bool _ReadOnly
Si es de solo lectura del campo de texto que alojará el número
void LanzarEvento_Codigo_Cambiado_Before(ref bool tlOk)
Disparador de evento de código cambiado con sender y valor candidato
virtual Boolean _ExpandirTexto(ref String tcTexto)
Expandir texto
_Click_After_Handler _Click_After
_Click_After_Handler
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
Definición del txtcodlabel para características
string _CampoCondicionAutomatica
Definición del campo clave para la búsqueda de condiciones automáticas en campos multiclave ...
txtTipoEmpresa: Selección del tipo de empresa: Normal o Consolidada
virtual String _Refrescar_Descripcion_Datatable_Personalizado()
Refrescar descripcion personalizada
_Click_Before_Handler _Click_Before
_Click_Before_Handler
override bool EvaluarOrigenManual()
Override para determinar si los datos se obtiene de tabla o son personalizados
_Tipos_Visuales
Definición de los posibles tipos visuales de la clase txtcodlabel
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
_Click_After_Handler _Click_After
_Click_After_Handler
Definición del txtcodlabel para formas de pago (PE-95424)
Interfaz que deberán cumplir todos los controles visuales en que se pueda establecer un valor de conf...
PE-84040 Control tipo ew de ErrorProvider
DelegarValidacionCrearCodigo _ValidacionCrearCodigo
Definición del delegado para el evento para validar el codigo antes de crearlo
void _SetToolTips(string tcTooltipBrowser="", string tcTooltipMante="")
Establece o refresca los tooltips
static DataTable _CuentasDeudaCortoLargoPlazo()
Devuelve en un DataTable los códigos de cuenta de deuda a corto/largo plazo
bool _AplicarEstilos
Aplicar estilo al control
bool _Autoload
PE-92458 Se utiliza para determinar si el mantenimineto debe presentar el primer registro o bien apar...
Definición del txtcodlabel para grupos de contribuyentes (PE-87841)
static sage.ew.usuario.Usuario _This
Instancia estática del objeto usuario con los datos del usuario actual (wc_usuario) ...
Definition: clsUsuario.cs:341
_ReadOnly
_ReadOnly
Definition: clsPerfiles.cs:671
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
Clase sage.ew.objetos.ewcombobox
virtual bool _ActivarCondicionAutomatica(ref string tcTexto)
Indica si se tiene que activar el filtrado parcial
ewlabel _GetLabel()
PE-93157 : Retorna el ewlabel
Delegar_ProcessCmdKey _Delegar_ProcessCmdKey
Definición del evento Delegar_ProcessCmdKey
bool _Tactil
Indica si el botón se utilizará en una pantalla para uso táctil.
virtual bool _Existe_Codigo(ref string tcCodigo, bool tlValidar=false)
Verifica si el código pasado por parámetro existe en la bd En caso de múltiples resultados monta y mu...
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
ewgrid()
Inicializa una nueva instancia de la clase ewgrid
Definition: grid.cs:383
ewcomboboxEstilosBase _PropiedadesDeEstilos
Objeto estilo
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
bool _MessageBoxAutomatic
Para presentar en la parte derecha del formulario la opción para ir a la configuración de mensajes Se...
Definition: clsFormul.cs:1131
DataTable _Albaranes_Factura(string tcEjercicio="GESTION")
Devuelve un datatable con los albaranes asociados al número de factura
Definición del txtcodlabel para cuentas contables
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
Browser, basat en sage.ew.objetos.ewbutton
_TiposFormulario
Tipos de formularios
Definition: clsFormul.cs:323
IDisposable Subscribe(IObserver< TxtCodLabelInfo > toObservador)
Método para recibir los observadores
override void _Load()
Load del proveedor
Definition: Proveedor.cs:7998
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
EventHandler OnConfigUserValueChanged
Evento para determinar cuando cambia el valor y mostrar mensaje si es opcional
TipoConceptosMostrar
Enumerado con los tipos de grupos de conceptos de gastos e ingresos. Para poder configurar que concep...
Clase TextoInformacion para utilizar en el UserControl btInfo
Definición del txtcodlabel para formas de pago
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
override void _Refresh()
Para que al navegar por los documentos cuando carga el codigo en el txtObra no haga ninguna validacio...
void UnSubscribe(IObserver< TxtCodLabelInfo > toObservador)
Método para eliminar a los suscriptores
Definición del txtcodlabel para IMPRESORAS DE TPV (PE-84202)
override bool ProcessCmdKey(ref Message msg, Keys keyData)
Para controlar F4 y F5 a nivel de UserControl
virtual void OnCompleted()
Método OnCompleted
delegate void _Click_Before_Handler(ref Boolean tlOk)
_Click_Before_Handler
Clase para poder mostrar imagen y texto en las celdas de un DataGridView
Delegar_Click_Celda _Click_Celda
Definición del delegado para el evento _Click_Celda
ewGridScrollBars
Tipos de barras de desplazamiento personalizadas
Definition: grid.cs:43
string _Titulo
Título de la página
override Boolean _ExpandirTexto(ref String tcTexto)
Expandir texto especial para txtConceptIRPF que puede tener espaciosen blanco por la izquierda...
string _Titulos_Campos
lista de títulos de los campos que nos presentará en el browser
Definición del txtcodlabel para formas de cobro
eUsarExtensionesBrowser _UsarExtensiones
Muestra el panel de extensiones
Clase de recurso fuertemente tipado, para buscar cadenas traducidas, etc.
Clase de negocio Proveedor
Definition: Proveedor.cs:33
ewtextboxEstilosBase _PropiedadesDeEstilos
Objeto estilo
static bool _EsTrabajador(string tcCodigo)
Comprueba si es una cuenta de trabajador
override void txtFormaPago__Codigo_Cambiado_Before(ref bool tlOk)
txtFormaPago__Codigo_Cambiado_Before
override object Clone()
Para clonar la celda con IMAGEN y TEXTO
override void btBrowser__Click_Before(ref bool tlOk)
Funcionalidad especial para ventas
I - Ingresos e IVA Repercutido
virtual int _Ancho_TextBox()
Método que nos calcula el ancho correspondiente al textbox según la longitud del campo contenido ...
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
virtual void _Resultados_Datatable(ref DataTable loResultados)
PE92379 - ens permet modificar el datatable de la consulta per afegir registres,...
ewlabelEstilosBase _PropiedadesDeEstilos
Objeto estilo
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
string _Tooltip
Tooltip del control para asignar por código
ewbuttonEstilosBase _PropiedadesDeEstilos
Objeto estilo
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
Delegar_Browser_After _Browser_Click_After
Definición del evento _Browser_Click_After (Además de en el browser también se utilizará al cambiar l...
void _SetValueUserOption(object toValor)
Para establecer un valor en el control visual.
Delegar_Codigo_Cambiado_Before _Codigo_Cambiado_Before
Definición del delegado para el evento _Codigo_Cambiado_Before
Boolean _ShowAsistente(String tcNuevoCodigo="")
Metodo para abrir el asistente
KeyDiccionarioLenCampos
Clave del diccionario LenCampos
Definition: Diccionarios.cs:11
Definición del txtcodlabel para tipos de retención
Clase sage.ew.objetos.ewlabel
Clase de negocio para el mantenimiento de obras
Definition: Obra.cs:18
virtual void txtObra__Codigo_Cambiado_Before(ref bool tlOk)
Capturar antes del cambio del código de obra
Clase sage.ew.objetos.ewtextbox
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
TipoGastoIngreso
Enumerado con los tipos de grupos de conceptos de gastos e ingresos (EOS)
TipoConceptosIRPFMostrar
Enumerado con los tipos de grupos de conceptos de gastos e ingresos. Para poder configurar que concep...
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
Clase auxiliar para el intercambio de mensajes de notificación
TxtCodLabelInfo()
Constructor por defecto
bool _AplicarEstilos
Aplicar estilos visuales
Definition: clsEstilos.cs:5531
string _DataBase
nombre de la base de datos de la tabla
void _SetFirstCellValue()
PE-87225 Posa el codi el valor de la primera cela
Interfaz utilizada en los controles que se añaden en los perfiles
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
Classe documento Factura de compra
Clase del objeto grid para Sage50
Definition: grid.cs:31
override void WndProc(ref Message m)
Mensajes recibidos
virtual void _Show()
Muestra el formulario asiociado
Definition: clsEwBase.cs:5021
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
DataGridViewCellStyle _oDefaultCellStyle
Guardem una còpia del estil per a poder restaurar-lo
Definition: clsEstilos.cs:5738
Definición del txtcodlabel para subfamilias
Delegar_Click_Combo_Grid _Click_Combo_Grid
Definición del delegado para el evento _Click_Combo_Grid
virtual void _RefrescarBinding()
Método para refrescar los bindings (PE-78599)
bool _AbrirConTeclaF4
Indica si se abrirá F4 con la tecla +
Definición del txtcodlabel para familias
eTipoDocumentoGeneral
Enumeración pública para definir las diferentes categorias que tenemos de documentos (ventas...
Definition: General.cs:13
_Tipos_Visuales
_Tipos_Visuales: Definición de los posibles tipos visuales de la clase txtcodlabel ...
Definition: clsPerfiles.cs:626
virtual bool EvaluarOrigenManual()
Método virtual para permitir determinar el origen manual de los datos
Definición del txtcodlabel para proveedores
static bool _EsDeudaCortoLargoPlazo(string tcCodigo)
Comprueba si es una cuenta de deuda a corto/largo plazo
Definición del txtcodlabel para familias
override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts)
Redefinición del evento Paint de la celda para mostrar la imagen en la celda
Definición del txtcodlabel para Cajas del TPV (PE-75073)
void _Focus()
PE-84262 pone el focue en el textbox
virtual void btBrowser__Click_Before(ref bool tlOk)
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
eUsarExtensionesBrowser
Enumerado para gestionar el uso de extensiones de browser a un nivel superior
Definition: generales.cs:407
Boolean _ShowDialog
Indica si debe mostrar la pantalla en modal
Definición del txtcodlabel para tarifas
Clase para uso de funciones genéricas
Definition: functions.cs:146
virtual void _Cargar_Propiedades()
Método que se encarga de inicializar las propiedades específicas para cada tipo de txtCodLabel defini...
Delegar_Codigo_Cambiado_Before_Extended _Codigo_Cambiado_Before_Extended
Definición del delegado para el evento _Codigo_Cambiado_Before
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
bool _ValidarAbrirConTeclaF4()
Valida si se puede simular el F4 a partir de la tecla configurada
virtual void _Reload_propiedades()
Método para volver a ejecutar la configuración del browser
virtual void OnError(Exception error)
Método OnError
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
Definición del txtcodlabel para cuentas contables de bancos (PE-85500)
delegate void _Click_After_Handler(Boolean tlAceptar)
_Click_After_Handler
string _Tabla
Tabla de la que se presentarán los datos
string _ClavePrimaria
campos que forman la clave primaria del browser separados por comas
Boolean _CondicionAutomaticaActiva
Filtrar automáticamente los registros si al acceder a los F4
Definición del txtcodlabel para plantillas de facturae
txtProveed(bool mostrarcuentasnivel3proveedor)
Constructor
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
Definición del txtcodlabel para formas de pago
bool _ActivarCondicionAutomatica(ref String tcTexto, int tnLen)
Indica si se tiene que activar el filtrado parcial
Muestra el mantenimiento correspondiente a _Form con el registro correspondiente al _Codigo ...
void LanzarEvento_Codigo_Cambiado_Validated(bool tlResultadoValidacion)
Disparador del evento de resultados de validación
Definición del txtcodlabel para cuentas contables
Definición del txtcodlabel base para obras
virtual void _Refresh()
Método para forzar el refresco de los datos mostrados teniendo en cuenta los nuevos valores de las pr...
virtual void _Set_Custom_Combo_DataSource(ewcombobox toCombo)
Permite definir como aplicar la propiedad _DataTable sobre el combo Para tablas personalizadas la asi...
Formulario base de Eurowin
Definition: clsFormul.cs:400
virtual ContextMenuStrip _Montar_ContextMenuStrip(DataTable tdtTablaOrigen)
Método virtual para crear un ToolStripMenuItem a partir de un datatable La propiedad NAME contendrá e...
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
override bool _Existe_Codigo(ref string tcCodigo, bool tlValidar=false)
Si ha entrado una raíz de cuenta tenemos de refrescar el código de cuenta que se ha seleccionado ...
eTipoDocumento
Detalle los tipos de documento posibles de ventas y compras
Definition: docsvenenum.cs:32
virtual void txtObra__Codigo_Cambiado()
Capturar cuando se cambia el código de obra
string _Form
Referencia al formulario
string _Codigo
valor del registro seleccionado por parte del usuario (readonly)
_Click_Before_Handler _Click_Before
_Click_Before_Handler
override void OnCreateControl()
Al crearse el control es el momento de subscribirnos a los eventos para gestionar el cambio de obra ...
txtOrdenImpresion : Orden de impresion del Cash
string _NombreManteNet
Nombre del mantenimiento de .Net
Base para los botones de Eurowin
Delegar_Mante_Before _Mante_Click_Before
Definición del evento _Mante_Click_Before
string _Cliente
Cliente de la obra
Definition: Obra.cs:124
List< string > _TextoParrafos
Lista de párrafos de la página
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
string _Alias
Alias de la _Tabla para cuando se añaden condiciones automáticas
virtual void btBrowser__Click_After(bool tlAceptar)
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
void _Suscripcion_Eventos()
Método que da de alta la suscripción a eventos. Se invoca al cargar un perfil desde FRMGESTIONPERFIL ...
Delegar_Mante_After _Mante_Click_After
Definición del evento _Mante_Click_After
delegate void _Click_Before_Handler(ref Boolean tlOk)
_Click_Before_Handler
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
string _Titulo
Titulo de la ventana
txtTipoImpresora: Selección del tipo de impresora: Impresora o visor
Delegar_Codigo_Cambiado_ValidationResult _Codigo_Cambiado_Validated
Definición del delegado para el evento informar de validación completa
Clase para Botones de mantenimientos
Definition: btMantes.cs:26
Task 141344 Definición del txtcodlabel para conceptos de libros IRPF
Interfaz para la gestión de eventos en el perfil en los controles que tienen la propiedad _Documento ...
void _Clonar(ewtxtcodlabel toFiltroClon)
Método para clonar el objeto
Definición del txtcodlabel para formas de pago (PE-95424)
Delegar_Browser_Before _Browser_Click_Before
Definición del evento _Browser_Click_Before
Definición del txtcodlabel para marcas
static DataTable _PrefijosProveedores()
Devuelve en un DataTable los códigos de nivel3 que tienen ficha de proveedor
override string _Numero
Número del document - Aquí ja controla wn_FactCompra
static System.Drawing.Bitmap maintenance_16
Busca un recurso adaptado de tipo System.Drawing.Bitmap.
virtual void _setTxtBoxFocus()
Establece el foco y selecciona el contenido del input
void LanzarEvento_Codigo_Cambiado_Before_Extended(string tcValorCandidato, ref bool tlOk)
Disparador de evento de código cambiado (before) con sender y valor candidato
override void txtObra__Codigo_Cambiado()
La validación del tipo de iva y presentación del mensaje solo debe realizarse en ventas en los docume...
static Color Name_to_Color(string tcColor)
Función Auxiliar que a partir de un string devuelve un objeto color. Admite 3 modos: ...
bool _Opcesp(string tcCodigo)
Método que nos devuelve "true" en caso que el usuario actual tenga acceso a la opción especial con có...
Definition: clsUsuario.cs:1521
Tarifa en formato combo donde se presenta el código y el nombre
virtual bool _Refrescar_Descripcion_Datatable_Personalizado(out string tcTextoLabel)
Método para refrescar el label cuando se trabaja con tablas de datos personalizadas Se debe implement...
static string _TxtCodigoRaizCuenta(string tcRaizCuenta, string tcBrowser_Condicion="")
Presentamos el browser ordenado por código de la raíz del código de la cuenta Utilizado en el siguien...
Definición del txtcodlabel para vendedores
ewGridScrollBars _ewGridScrollBars
PE-83909. Tipos de barras de desplazamiento
Definition: grid.cs:120
Definición del txtcodlabel para territorios (PE-84202)
override bool _Save()
Override Save para guardar datos tablas relacionadas
Definition: Obra.cs:807
Redefinición de la clase txtObra para ventas (PE-95424)
Delegar_Codigo_Cambiado _Codigo_Cambiado
Definición del delegado para el evento _Codigo_Cambiado
Clase para el control de operarios
Definition: clsOperario.cs:26
void _Cancelar_Suscripcion_Eventos()
Método que cancela la suscripción a eventos. Se invoca al cambiar de perfil en FRMGESTIONPERFIL ...
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
override bool _Existe_Codigo(ref string tcCodigo, bool tlValidar=false)
Override del método de validación de valores
Definición del txtcodlabel para cuentas ERP (PE-81117)
override void btBrowser__Click_After(bool tlAceptar)
Funcionalidad especial para ventas
Definición del txtcodlabel para plantillas de reports
Base para los mantenimientos de Sage TPV
Definition: FormMante.cs:26
string _TipoIVA
Propiedad puente para cumplir la interficie IGestionTipoIVA, ya que teníamos creada de antes la propi...
Definition: Obra.cs:728
Delegar_Click_Combo_Grid_Up _Click_Combo_Grid_Up
Definición del delegado para el evento _Click_Combo_Grid_Up
override void OnCreateControl()
Al crearse el control lo definimos
ewcombobox _GetComboBox()
Da acceso al control combobox
Dictionary< string, object > _CodigosDiccionario
Diccionario con los valores de todas las claves (PE-84497)
virtual void txtFormaPago__Codigo_Cambiado_Before(ref bool tlOk)
txtFormaPago__Codigo_Cambiado_Before
Classe txtNumFacompra representa el control de nº de factura de compra que se permitirá añadir únicam...
Definición del txtcodlabel para operarios
override void OnVisibleChanged(EventArgs e)
OnVisibleChanged: Para refrescar las propiedades que podemos tener guardados en el designer de una pa...
string _Campos
lista de campos separados por comas que nos presentará en el browser
virtual void OnNext(TxtCodLabelInfo toObrseved)
Método Next del objeto observado
object _GetValueUserOption()
Nos devuelve el valor establecido en este momento en el control visual.
Definición del txtcodlabel para Cajas del TPV (PE-74399)
string _Condicion
condición que se podrá especificar en el momento de realizar la consulta SQL
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
override void _Cargar_Propiedades()
Redefinición del método Cargar_Propiedades() para establecer los valores de las propiedades adecuados...
void _Evento_CodigoDiccionario_Establecido()
PE-84279 Disparador del evento de selección múltiple
Delegar_Refrescar_Descripcion_Personalizada _Refrescar_Descripcion_Personalizada
Definición del delegado para el evento _Codigo_Cambiado
Interfaz para refrescar los controles de los perfiles
Definición del txtcodlabel para rutas
override bool ProcessCmdKey(ref Message msg, Keys keyData)
Para controlar F4 y F5 a nivel de UserControl
override string _Codigo
override de _Codigo para que en el Set podamos convertir el número que nos llega a código de cliente ...
Definition: Proveedor.cs:5395
Clase para poder mostrar imagen y texto en una columna de un DataGridView
string _Clave
campos que forman la clave primaria del browser separados por comas
static System.Drawing.Bitmap search_16
Busca un recurso adaptado de tipo System.Drawing.Bitmap.
Clase base para controles de tipo txtcodlabelf
virtual void txtOperario__Codigo_Cambiado_Before_Extended(object sender, string tcValorCandidato, ref bool tlOk)
PE-108799 Validamos el pass del operario si lo tiene
static bool _EsProveedor(string tcCodigo)
Comprueba si se trata de una cuenta de cliente
Delegar_Codigo_Actualizado _Codigo_Actualizado
Definición del delegado para el evento _Codigo_Actualizado El evento código actualizado se lanza al c...
TxtCodLabelInfo(object toSender, string tcValor)
Constructor con parámtros
DialogResult _MessageBox(String tcMensaje, MessageBoxButtons toBotones, MessageBoxIcon toIcono, MessageBoxDefaultButton toBotonDefecto, DialogResult toResultadoDefecte)
Messagebox propio 1
Definition: clsFormul.cs:3364
override string _Codigo
Override del _Codigo para usar autorelleno
Definition: Obra.cs:72
Definición del txtcodlabel base que gestiona la raíz de cuenta
Redefinición de la clase txtObra para COMPRAS (PE-95424)
string _Campo_Predet
Campo predeterminado que se utilizará en la presentación de la información
PE-85115 Definición del txtcodlabel para clasificaciónes de articulos
Task 152322 Definición del txtcodlabel para conceptos de gastos e ingresos
Delegar_Click_Combo_DropDown _Click_Combo_DropDown
Definición del delegado para cuando se desplega el combo
void ewtextbox_Validated(object sender, EventArgs e)
Método para poder capturar el evento al cambiar la celda seleccionada en el grid
Delegar_CodigoDiccionario_Establecido _CodigoDiccionario_Establecido
PE-84279 Delegado de la selección múltiple. Este evento nos informa de que se ha finalizado la elecci...
Clase que guarda los datos de los formularios de los messagebox
Definición de la clase Usuario
Definition: clsUsuario.cs:113
ewtextbox _GetTextBox()
PE-84262 Retorna el ewtextbox
bool ReadOnly
Indica si es ReadOnly