FormFiltro.cs
1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Data;
5 using System.Drawing;
6 using System.Linq;
7 using System.Text;
8 using System.Windows.Forms;
9 using System.Text.RegularExpressions;
10 using sage.ew.txtbox.Clases;
12 using sage.ew.db;
13 using sage.ew.interficies;
14 
15 namespace sage.ew.formul.Forms
16 {
20  public partial class FormFiltro : FormBase
21  {
22  #region VARIABLES
23 
27  protected enum TypeFilter
28  {
32  Articulo = 0,
36  Familia = 1,
40  SubFamilia = 2,
44  Marca = 3,
48  Ejercicio = 4,
52  Fecha = 5
53  }
54 
58  protected Dictionary<TypeFilter, IEwFiltro> _oListFilters = new Dictionary<TypeFilter, IEwFiltro>();
59 
60 
61  //El filtro de artículos es especial ya que implica añadir tambien familia, subfamilia y marca
65  protected bool _lFiltroArticulosPresente = false;
69  protected bool _lFiltroFamiliaPresente = false;
73  protected bool _lFiltroSubfamiliaPresente = false;
77  protected bool _lFiltroMarcaPresente = false;
81  protected bool _lFiltroEjercicioPresente = false;
85  protected bool _lFiltroFechaPresente = false;
89  protected bool _lFiltroArticulosUnico = false; // 92765
90 
94  protected Dictionary<string, object> _dOpciones = new Dictionary<string, object>();
98  public Dictionary<string, object> _Opciones
99  {
100  get { return _dOpciones; }
101  set { _dOpciones = value; }
102  }
106  //private Dictionary<string, int> _dImportanciaFiltros = new Dictionary<string, int>();
107  protected SortedList<int, String> _dImportanciaFiltros = new SortedList<int, String>();
111  protected Dictionary<string, object> _dFiltros = new Dictionary<string, object>();
115  public Dictionary<string, object> _Filtros
116  {
117  get { return _dFiltros; }
118  set { _dFiltros = value; }
119  }
120 
124  protected DataRow _drPropiedadesListado;
128  [DefaultValue(null)]
129  public DataRow _PropiedadesListado
130  {
131  get { return _drPropiedadesListado; }
132  set { _drPropiedadesListado = value; }
133  }
134 
138  public sage.ew.listados.Clases.IListados _Listado = null;
139 
143  public DataTable _Resultados = null;
144 
148  private DataTable _PesosFiltros
149  {
150  get
151  {
152  if (this._lPesosFiltros == null)
153  {
154  _lPesosFiltros = new DataTable();
155  string lcSql = "SELECT peso, LOWER(clase) as clase FROM " + DB.SQLDatabase("COMUNES", "FILTROS");
156  DB.SQLExec(lcSql, ref this._lPesosFiltros);
157  }
158  return this._lPesosFiltros;
159  }
160  }
161  private DataTable _lPesosFiltros = null;
162 
163  #endregion VARIABLES
164 
165  #region CONSTRUCTORES
166 
170  public FormFiltro()
171  {
172  InitializeComponent();
173  }
174 
175  #endregion CONSTRUCTORES
176 
177  #region METODOS PRIVADOS
178 
203  protected int _ObtenerPesoControl(Control toControl, string tcNombreOriginal = "")
204  {
205  int lnPeso = 9900;
206 
207  //Recuperamos rows de peso para el filtro actual
208  DataRow[] ldRows = null;
209  if(!string.IsNullOrWhiteSpace(tcNombreOriginal) && tcNombreOriginal != "txtpersonalizado")
210  ldRows = this._PesosFiltros.Select("clase like " + DB.SQLString("%" + tcNombreOriginal));
211  if (ldRows == null || ldRows.Length <= 0)
212  ldRows = this._PesosFiltros.Select("clase like " + DB.SQLString("%" + toControl.GetType().Name));
213 
214  switch (toControl.GetType().Name)
215  {
216  case "txtEjercicioDesdeHasta":
217  if (ldRows.Length > 0) lnPeso = Convert.ToInt32(ldRows[0]["peso"].ToString()); else lnPeso = 50;
218  break;
219 
220  case "txtFechaDesdeHasta":
221  if (ldRows.Length > 0) lnPeso = Convert.ToInt32(ldRows[0]["peso"].ToString()); else lnPeso = 100;
222  break;
223 
224  case "txtSerieDesdeHasta":
225  if (ldRows.Length > 0) lnPeso = Convert.ToInt32(ldRows[0]["peso"].ToString()); else lnPeso = 200;
226  break;
227 
228  case "txtClienteDesdeHasta":
229  if (ldRows.Length > 0) lnPeso = Convert.ToInt32(ldRows[0]["peso"].ToString()); else lnPeso = 300;
230  break;
231 
232  case "txtCPostalDesdeHasta":
233  if (ldRows.Length > 0) lnPeso = Convert.ToInt32(ldRows[0]["peso"].ToString()); else lnPeso = 400;
234  break;
235 
236  case "txtVendedorDesdeHasta":
237  if (ldRows.Length > 0) lnPeso = Convert.ToInt32(ldRows[0]["peso"].ToString()); else lnPeso = 500;
238  break;
239 
240  case "txtOperariosDesdeHasta":
241  if (ldRows.Length > 0) lnPeso = Convert.ToInt32(ldRows[0]["peso"].ToString()); else lnPeso = 600;
242  break;
243 
244  case "txtAlmacenDesdeHasta":
245  if (ldRows.Length > 0) lnPeso = Convert.ToInt32(ldRows[0]["peso"].ToString()); else lnPeso = 700;
246  break;
247 
248  case "txtObraDesdeHasta":
249  if (ldRows.Length > 0) lnPeso = Convert.ToInt32(ldRows[0]["peso"].ToString()); else lnPeso = 800;
250  break;
251 
252  case "txtFPagoDesdeHasta":
253  if (ldRows.Length > 0) lnPeso = Convert.ToInt32(ldRows[0]["peso"].ToString()); else lnPeso = 900;
254  break;
255 
256  case "txtFamiliaDesdeHasta":
257  if (ldRows.Length > 0) lnPeso = Convert.ToInt32(ldRows[0]["peso"].ToString()); else lnPeso = 1000;
258  break;
259 
260  case "txtSubfamDesdeHasta":
261  if (ldRows.Length > 0) lnPeso = Convert.ToInt32(ldRows[0]["peso"].ToString()); else lnPeso = 1100;
262  break;
263 
264  case "txtMarcaDesdeHasta":
265  if (ldRows.Length > 0) lnPeso = Convert.ToInt32(ldRows[0]["peso"].ToString()); else lnPeso = 1200;
266  break;
267 
268  case "txtArticuloDesdeHasta":
269  if (ldRows.Length > 0) lnPeso = Convert.ToInt32(ldRows[0]["peso"].ToString()); else lnPeso = 1300;
270  break;
271 
272  case "txtSerieArtDesdeHasta":
273  if (ldRows.Length > 0) lnPeso = Convert.ToInt32(ldRows[0]["peso"].ToString()); else lnPeso = 1400;
274  break;
275  case "txtTipoServDesdeHasta":
276  case "txtLoteDesdeHasta":
277  case "txtFiltroLoteMinMax": // 91251
278  if (ldRows.Length > 0) lnPeso = Convert.ToInt32(ldRows[0]["peso"].ToString()); else lnPeso = 1500;
279  break;
280 
281  case "txtCaducidadDesdeHasta": // 91251
282  if (ldRows.Length > 0) lnPeso = Convert.ToInt32(ldRows[0]["peso"].ToString()); else lnPeso = 1550;
283  break;
284 
285  case "txtRutaDesdeHasta":
286  if (ldRows.Length > 0) lnPeso = Convert.ToInt32(ldRows[0]["peso"].ToString()); else lnPeso = 1600;
287  break;
288 
289  case "txtTipoFacturacionDesdeHasta":
290  if (ldRows.Length > 0) lnPeso = Convert.ToInt32(ldRows[0]["peso"].ToString()); else lnPeso = 1700;
291  break;
292 
293  case "txtImporteMinMax":
294  if (ldRows.Length > 0) lnPeso = Convert.ToInt32(ldRows[0]["peso"].ToString()); else lnPeso = 1800;
295  break;
296 
297  default:
298  if (ldRows.Length > 0) lnPeso = Convert.ToInt32(ldRows[0]["peso"].ToString()); else lnPeso = 9900;
299  break;
300 
301  }
302 
303  //Evitar duplicados en el diccionario de importancia
304  bool llPesoLibre = false;
305  while (!llPesoLibre)
306  {
307  if (_dImportanciaFiltros.ContainsKey(lnPeso))
308  {
309  lnPeso++;
310  }
311  else llPesoLibre = true;
312  }
313 
314  return lnPeso;
315  }
316 
323  protected string _ObtenerNombreControl(string tcNombre, bool tlFiltros = true)
324  {
325  if (tlFiltros)
326  {
327  if (_Filtros.ContainsKey(tcNombre))
328  {
329  tcNombre = tcNombre + _Filtros.Count(x => x.Key.Contains(tcNombre) == true).ToString();
330  }
331  }
332  else
333  {
334  //Elimino caracteres de control y acentos
335  tcNombre = tcNombre.Normalize(NormalizationForm.FormD);
336  Regex reg = new Regex("[^a-zA-Z0-9 ]");
337  tcNombre = reg.Replace(tcNombre, ""); //Elimino caracteres de control y acentos
338  tcNombre = tcNombre.Replace(" ", ""); //Elimino espacios
339 
340  //=> De este nombre luego se deben ignorar algunos en funcion del tipo de retorno, lo deshabilito
341  //Control de tamaño (20 caracteres)
342  if (tcNombre.TrimEnd().Length > 20) tcNombre = tcNombre.Substring(0, 20);
343 
344  if (_Opciones != null && _Opciones.ContainsKey(tcNombre))
345  {
346  int lnCont = 1;
347  while (_Opciones.Count(x => x.Key == tcNombre + lnCont) > 0) lnCont++; //Hasta que encuentre un número libre
348  tcNombre = tcNombre + lnCont;
349 
350  //tcNombre = tcNombre + _Opciones.Count(x => x.Key == tcNombre).ToString();
351  }
352  }
353  return tcNombre;
354  }
355 
359  protected enum GrupoRelacionados
360  {
364  Todos = 0,
368  Articulo = 1,
372  Ejercicio = 2
373  }
374 
375 
380  {
381  ewFiltro loControl = new ewFiltro();
382 
383  //Si tengo articulos verifico si también tengo Familia, subfamilia y Marca
384  #region Grupo Articulos
385 
386  if (toGrupo == GrupoRelacionados.Todos || toGrupo == GrupoRelacionados.Articulo)
387  {
388  if (_lFiltroArticulosPresente && !_lFiltroArticulosUnico) // 92765
389  {
390  string lcNombreFiltro = string.Empty;
391 
392  if (!_lFiltroFamiliaPresente) //Familia
393  {
394  loControl = new txtFamiliaDesdeHasta();
395  loControl._AnchoFijoFiltros = true;
396  lcNombreFiltro = loControl.Name = _ObtenerNombreControl("txtFamiliaDesdeHasta");
397  _dImportanciaFiltros.Add(_ObtenerPesoControl(loControl, "txtfamilias"), lcNombreFiltro);
398  _dFiltros.Add(lcNombreFiltro, loControl);
399 
400  // PE-91363. Asignar a cada filtro los colores definidos en el estilo
401  FormListado loff = (FormListado)this;
402  loControl._ColorBase = loff._ColorFondoListadosFiltroBase;
406 
407  _AddControlType(loControl, TypeFilter.Familia);
408  }
409 
410  if (!_lFiltroSubfamiliaPresente) //Subfamilia
411  {
412  loControl = new txtSubfamDesdeHasta();
413  loControl._AnchoFijoFiltros = true;
414  lcNombreFiltro = loControl.Name = _ObtenerNombreControl("txtSubfamDesdeHasta");
415  _dImportanciaFiltros.Add(_ObtenerPesoControl(loControl, "txtsubfamilias"), lcNombreFiltro);
416  _dFiltros.Add(lcNombreFiltro, loControl);
417 
418  // PE-91363. Asignar a cada filtro los colores definidos en el estilo
419  FormListado loff = (FormListado)this;
420  loControl._ColorBase = loff._ColorFondoListadosFiltroBase;
424 
425  _AddControlType(loControl, TypeFilter.SubFamilia);
426  }
427 
428  if (!_lFiltroMarcaPresente) //Marca
429  {
430  loControl = new txtMarcaDesdeHasta();
431  loControl._AnchoFijoFiltros = true;
432  lcNombreFiltro = loControl.Name = _ObtenerNombreControl("txtMarcaDesdeHasta");
433  _dImportanciaFiltros.Add(_ObtenerPesoControl(loControl, "txtmarcas"), lcNombreFiltro);
434  _dFiltros.Add(lcNombreFiltro, loControl);
435 
436  // PE-91363. Asignar a cada filtro los colores definidos en el estilo
437  FormListado loff = (FormListado)this;
438  loControl._ColorBase = loff._ColorFondoListadosFiltroBase;
442 
443  _AddControlType(loControl, TypeFilter.Marca);
444  }
445 
446  _oListFilters[TypeFilter.Articulo]._AgrupacionFiltro = _Listado._AgrupacionFiltroArticulo;
447 
448  List<IEwFiltro> loList = (from loFiltro in _oListFilters
449  where loFiltro.Key == TypeFilter.SubFamilia || loFiltro.Key == TypeFilter.Marca || loFiltro.Key == TypeFilter.Familia
450  select loFiltro.Value).ToList();
451 
452  _oListFilters[TypeFilter.Articulo]._ControlesAgrupacionFiltros = loList;
453  _oListFilters[TypeFilter.Articulo]._AfterOpenCloseFilters += (o, e) => { _ResizeFormToScreenSize(); };
454  }
455  }
456  #endregion Grupo Articulos
457 
458  #region Grupo Ejercicio
459 
460  if (toGrupo == GrupoRelacionados.Todos || toGrupo == GrupoRelacionados.Ejercicio)
461  {
462  //Si tengo Filtro de ejercicios y de fechas los vinculo
463  if (_lFiltroEjercicioPresente && _lFiltroFechaPresente)
464  {
465  ((txtEjercicioDesdeHasta)_Filtros["txtEjercicioDesdeHasta"])._FiltroRelacionado = ((txtFechaDesdeHasta)_Filtros["txtFechaDesdeHasta"]);
466  }
467  }
468  #endregion Grupo Ejercicio
469  }
470 
474  protected virtual void _ResizeFormToScreenSize()
475  {
476 
477  }
478 
484  protected void _AddControlType(IEwFiltro loControl, TypeFilter toType)
485  {
486  if (!_oListFilters.ContainsKey(toType)) _oListFilters.Add(toType, loControl);
487  }
488 
493  protected void _ShowError(string tcError = "")
494  {
495  if (!string.IsNullOrWhiteSpace(this._Listado._Error_Message))
496  {
497  tcError += (!string.IsNullOrWhiteSpace(tcError) ? " " : "") + _Listado._Error_Message;
498  _Listado._Error_Message = string.Empty;
499  }
500  _MessageBox(tcError, MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, DialogResult.None);
501  }
502 
507  protected void _EstablecerTituloFormulario(ref ew.objetos.ewlabel toLabelTitulo)
508  {
509  string lcNombre = "";
510  if (!string.IsNullOrWhiteSpace(_PropiedadesListado["nombre"].ToString()))
511  {
512  lcNombre = ((string)_PropiedadesListado["nombre"]);
513  //Asigno el nombre al label
514  toLabelTitulo.Text = lcNombre;
515  }
516 
517  if (!string.IsNullOrWhiteSpace(_PropiedadesListado["Tipo"].ToString()))
518  {
519  string tituloFormulario = "";
520  switch (((Int32)_PropiedadesListado["Tipo"]))
521  {
522  case 1: //Listados
523  string lcOperativo = (_Listado != null && _Listado._ListadoOperativo ? " operativo " : " ");
524  tituloFormulario = $"Listado{lcOperativo}de {lcNombre}";
525  break;
526  case 2: //Procesos
527  tituloFormulario = "Proceso de " + lcNombre;
528  break;
529  case 3: //Graficos
530  tituloFormulario = "Gráfica de " + lcNombre;
531  break;
532 
533  default: //Sin determinar
534  tituloFormulario = toLabelTitulo.Text;
535  break;
536  }
537  Text = tituloFormulario;
538  }
539  }
540 
541  #endregion METODOS PRIVADOS
542 
543  #region METODOS PUBLICOS
544 
550  public bool _Valid()
551  {
552  //Validem que la clase de llistat estigui instanciada
553  if (this._Listado != null)
554  {
555  //Validem el propi llistat
556  if (this._Listado._Valid())
557  {
558  // Mostrar mensajes informativos
559  if (!string.IsNullOrWhiteSpace(this._Listado._Info_Message))
560  {
561  this._MessageBox(this._Listado._Info_Message, MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, DialogResult.OK);
562  this._Listado._Info_Message = "";
563  }
564  return true;
565  }
566  else
567  {
568  //Comprobem si hi ha hagut algun error al formulari
569  if (!string.IsNullOrWhiteSpace(this._Listado._Error_Message))
570  {
571  this._MessageBox(this._Listado._Error_Message, MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, DialogResult.Abort);
572  this._Listado._Error_Message = "";
573  }
574  }
575  }
576  return false;
577  }
578 
585  public virtual DataTable _ExecuteAdicional(DataTable tdtData)
586  {
587  //TODO Definir interficie per la clase de modificacions de clients (IListadosAdicional?) i definir el nom del metode que transforma el DataTable resultant (_DataTable()?)
588  return tdtData;
589  }
590 
591  #endregion METODOS PUBLICOS
592  }
593 }
Interficie para los controles tipo filtro
Definition: IEwFiltro.cs:13
int _ObtenerPesoControl(Control toControl, string tcNombreOriginal="")
Función privada que dado un control devuelve un &#39;peso&#39; para ordenar por importancia. Los pesos estan definidos en la tabla COMUNES!FILTROS (filtrando por clase), en caso de que no se encuentre el filtro en dicha tabla, el orden que se seguira para ordenar los filtros es el siguiente : 0. Ejercicio
Definition: FormFiltro.cs:203
Color _ColorFuenteListadosFiltroBase
Obtiene o establece el color de la fuente del control.
Definition: FormListado.cs:238
Color _ColorActivo
Defino los colores activos
Definition: ewFiltro.cs:99
virtual DataTable _ExecuteAdicional(DataTable tdtData)
Creará una instancia de la clase definida en el campo ADICIONAL siempre y cuando en el campo ADICIONA...
Definition: FormFiltro.cs:585
string _ObtenerNombreControl(string tcNombre, bool tlFiltros=true)
Método que obtiene un nombre para un control
Definition: FormFiltro.cs:323
GrupoRelacionados
GrupoRelacionados
Definition: FormFiltro.cs:359
PE-82361 Formulario responsable de la carga y visualización de los listados (filtros y resultados) ...
Definition: FormListado.cs:45
virtual bool _AnchoFijoFiltros
Establece los filtros Desde y Hasta en posiciones fijas independientes del tamaño o variables en func...
Definition: ewFiltro.cs:365
void _EstablecerTituloFormulario(ref ew.objetos.ewlabel toLabelTitulo)
Método que construye el nombre del formulario y su título en función del tipo y el título guardado en...
Definition: FormFiltro.cs:507
Interficie de listados que todo listado de Eurowin TPV deberá cumplir para toda clase que se defina c...
Definition: IListados.cs:20
FormFiltro()
Constructor de la clase
Definition: FormFiltro.cs:170
Control para filtros Desde - Hasta
Color _ColorFuenteActivo
Defino los colores de Fuente activos
Definition: ewFiltro.cs:121
Color _ColorBase
Defino los colores normal
Definition: ewFiltro.cs:56
Color _ColorFondoListadosFiltroBase
Obtiene o establece el color de fondo del control.
Definition: FormListado.cs:194
Color _ColorFuenteBase
Defino los colores de fuente normal
Definition: ewFiltro.cs:110
void _Grupos_de_Controles_Relacionados(GrupoRelacionados toGrupo)
Método que añade los controles por grupos
Definition: FormFiltro.cs:379
Formulario base de Eurowin
Definition: clsFormul.cs:400
void _ShowError(string tcError="")
Muestra mensaje de error
Definition: FormFiltro.cs:493
Color _ColorFondoListadosFiltroActivo
Obtiene o establece el color de fondo del control.
Definition: FormListado.cs:216
void _AddControlType(IEwFiltro loControl, TypeFilter toType)
Añade los componenete a un listado para tener las referencias y poder plegar/desplegar ...
Definition: FormFiltro.cs:484
DataRow _drPropiedadesListado
Propiedad privada Datos de la pantalla
Definition: FormFiltro.cs:124
Plantilla para la creación de controles de tipo Filtro
Definition: ewFiltro.cs:25
virtual void _ResizeFormToScreenSize()
Redimensiona el alto del formulario según la resolución de la pantalla.
Definition: FormFiltro.cs:474
Color _ColorFuenteListadosFiltroActivo
Obtiene o establece el color de la fuente del control.
Definition: FormListado.cs:260
Formulario base para Listados y gráficas
Definition: FormFiltro.cs:20