frmEtiquetasEnvio.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Data;
4 using System.Drawing;
5 using System.Windows.Forms;
6 using sage.ew.botones;
7 using sage.ew.objetos;
8 using sage.ew.botones.Clases;
9 using sage.ew.ewbase;
11 using sage.ew.cliente;
12 using sage.ew.global;
13 using System.Linq;
14 using sage.ew.interficies;
15 using sage.ew.docsven;
17 
18 namespace sage.ew.formul.Forms
19 {
23  public partial class frmEtiquetasEnvio : FormMante
24  {
28  public EtiquetasEnvio _Etiqueta_Envio
29  {
30  get
31  {
32  return (EtiquetasEnvio)_ewMante;
33  }
34  set
35  {
36  _ewMante = value;
37  }
38  }
39 
40  private EtiquetasEnvio.LineaPortes _oLineaPortesNova;
41 
42  //Variable auxiliar para restablecer el valor si corresponde
43  private string _cSerieOldVal = string.Empty; //PE-102342
44  private string _cDocumentoOldVal = string.Empty;
45  private DateTime? _dOldAcabadoVal = null; //PE-89989
46  private bool _lAcabadoValidado = false; //PE-89989
47 
51  public enum NomCols
52  {
56  _Impresa,
60  _Serie,
64  _Documento,
68  _Cliente,
72  _Cliente_Nombre,
76  _Bultos,
80  _Coste,
84  _Peso,
88  _Agencia,
92  _Agencia_Nombre,
96  _Pedido,
100  _Acabado,
104  _Recogida,
108  _Portes,
112  _BotonDireccion,
116  _Direccion,
120  _CPostal,
124  _Poblacion,
128  _Provincia,
132  _Telefono,
136  _Pais
137 
138 
139  }
140 
141  private bool _lNuevaLinea = false;
142 
143  //Botones privados
144  ewbutton _btEtiquetas = new ewbutton();
145  ewbutton _btReparto = new ewbutton();
146  ewbutton _btDesmarcar = new ewbutton();
147 
148  ewbutton _btNavegarGeneric = new ewbutton(); //PE-102726
149  btNavegarAlbaran _btNavegarAlbaran = new btNavegarAlbaran();
150  btNavegarDeposito _btNavegarDeposito = new btNavegarDeposito(); //PE-99332
151 
152  btVentasCliMultiDoc _btVentasCli = new btVentasCliMultiDoc(); //PE-99629 Navegación multiple en función del tipo
153 
154 
155  //Browsers
156  btBrowser _btBrowserAgencias = new btBrowser();
157  btMante _btManteAgencias = new btMante();
158  btBrowser _btBrowserDocs = new btBrowser(); //PE-102726
159 
160  //Variable para la empresa en curso
161  private string _cEmpresa = Convert.ToString(EW_GLOBAL._GetVariable("wc_empresa"));
162 
163  //Mascara
164  ewMascara _oMascaraPrecio = new ewMascara();
165 
166  //Diccionario para mantener el correcto valor del ReadOnly de las columnas del grid durante los cambios de estado
167  Dictionary<string, bool> _dicColsReadOnly = new Dictionary<string, bool>();
168 
169 
170  #region Constructores
171 
176  {
177  // PE-101645. No permitir acceso en empresas consolidadas
178  if (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_normal")) == false)
179  {
180  functions.FUNCTIONS._MessageBox("En una empresa consolidada no se puede confeccionar Etiquetas de envío." + Environment.NewLine + Environment.NewLine +
181  "Opción no disponible.", "Etiquetas de envío", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information);
182  this.Close();
183  return;
184  }
185 
186  InitializeComponent();
187 
188  this._Pantalla = "ENVIOETI"; // PE-87741
189 
190 
191  //PE-99647 Suprimir impresión configurable *** TEMPORAL ***
192  tpImpresion.Text = "";
193  ewtcPaginas.TabPages.Remove(tpImpresion);
194  _OcultarLineaDetalles = true; // PARTE 102549 para que presente la pantalla con menos espacio entre la cabecera y las líneas
195  //FPE-99647
196 
197 
198  if (!DesignMode) Form_Suscripcion_Eventos();
199  }
200 
204  public frmEtiquetasEnvio(ew.cliente.EtiquetasEnvio toEtiquetasEnvio)
205  {
206  InitializeComponent();
207 
208  this._Pantalla = "ENVIOETI"; // PE-87741
209 
210  _Etiqueta_Envio = toEtiquetasEnvio;
211 
212  //PE-99647 Suprimir impresión configurable *** TEMPORAL ***
213  tpImpresion.Text = "";
214  ewtcPaginas.TabPages.Remove(tpImpresion);
215  //FPE-99647
216 
217  if (!DesignMode) Form_Suscripcion_Eventos();
218  }
219 
220  #endregion Constructores
221 
222  #region Funciones OVERRIDE
223 
228  protected override void OnLoad(EventArgs e)
229  {
230  base.OnLoad(e);
231 
232  Form_Configurar_Grid();
233 
234  if (!DesignMode) //Sino estoy en modo diseño me suscribo a los eventos
235  {
236  //Una vez definidos los botones me suscribo al cambio de estado
237  _Etiqueta_Envio._Mantenimiento_Estado_Change += new ewMante._Mantenimiento_Estado_Change_Handler(Evento_Mantenimiento_Estado_Change);
238  Evento_FormMante_Shown_After += new FormMante_Shown_After_Handler(_Evento_FormMante_Shown_After);
239  }
240 
241  //Redefino el browser ya que no dispongo de campo código
242  RefinarCondicionesEnDefinicionDelBrowser();
243 
244  if (!DesignMode)
245  {
246  _btBrowserDocs._Click_Before += new btBrowser._Click_Before_Handler(_btBrowserDocs__Click_Before);
247  //PE-102754 Hay que capturar también el clic integrado
248  try
249  {
250  ((btBrowser)ewgridDetalle.Controls["btBrowserCol"])._Click_Before += new btBrowser._Click_Before_Handler(_btBrowserIntegradoGrid__Click_Before);
251  }
252  catch (Exception loEx)
253  {
254  db.DB.Registrar_Error(loEx);
255  }
256  //FPE-102754
257  }
258 
259 
260  //Ajusto la longitud del campo que nos hace de código código
261  ewtextboxNumero.MaxLength = _ewMante._GetMaxLength("CONTADOR");
262  //this.ewtextboxNumero.RightToLeft = System.Windows.Forms.RightToLeft.No;
263  ewtextboxNumero.TextAlign = HorizontalAlignment.Right;
264  if (_ewMante._Estado == ewMante._EstadosMantenimiento.MostrandoRegistro) //Bug 169786
265  ewtextboxNumero.Enabled = false;
266 
267  //prefijo la utilización del formato de la empresa
268  chkFormatoEmpresa.Checked = true;
269  ucEtiquetas.Enabled = false;
270 
271  btEtiquetas.Image = sage.ew.images.Properties.Resources.envio_etiquetas.ToBitmap();
272  btEtiquetas._Tooltip = "Imprime las etiquets de envio.";
273  btEtiquetas.Click += new EventHandler(Evento_btEtiquetas_Click);
274 
275  btReparto.Image = sage.ew.images.Properties.Resources.envio_reparto.ToBitmap();
276  btReparto._Tooltip = "Imprime la hoja de reparto.";
277  btReparto.Click += new EventHandler(Evento_btReparto_Click);
278 
279  ucEtiquetas._AutoLoadFirst = true;
280  ucEtiquetas._Load();
281  ucEtiquetas._Print_Before += new articulo.UserControls.Etiquetas._Print_Before_Handler(ucEtiquetas__Print_Before);
282  }
283 
287  private void RefinarCondicionesEnDefinicionDelBrowser()
288  {
289  //Redefino el browser ya que no dispongo de campo código
290  _btBrowser._Campo_Predet = "CONTADOR";
291  _btBrowser._Campos = "CONTADOR,LETRA,NUMERO";
292  _btBrowser._Clave = "CONTADOR";
293  _btBrowser._Titulos_Campos = "Envío, Serie, Documento";
294  _btBrowser._Condicion = "EMPRESA = '" + Convert.ToString(EW_GLOBAL._GetVariable("wc_empresa")) + "' AND ALB_DEPO = " +
295  (_Etiqueta_Envio._EsUnDeposito == true ? "'D'" : "''");
296  //PE-102726 Browser ficticio para documentos
297  _btBrowserDocs._Campo_Predet = "CONTADOR";
298  _btBrowserDocs._Campos = "CONTADOR,LETRA,NUMERO";
299  _btBrowserDocs._Clave = "CONTADOR";
300  _btBrowserDocs._Titulos_Campos = "Envío, Serie, Documento";
301  _btBrowserDocs._Condicion = "EMPRESA = '" + Convert.ToString(EW_GLOBAL._GetVariable("wc_empresa")) + "' AND ALB_DEPO = " +
302  (_Etiqueta_Envio._EsUnDeposito == true ? "'D'" : "''");
303  }
304 
308  protected override void _Binding()
309  {
310  //Numero
311  Binding loBind = ewtextboxNumero.DataBindings["Text"];
312  if (loBind != null) ewtextboxNumero.DataBindings[0].ReadValue();
313  else ewtextboxNumero.DataBindings.Add("Text", _ewMante, "_Codigo", true);
314 
315 
316  //Fecha
317  loBind = ewdateFecha.DataBindings["Value"];
318  if (loBind != null) ewdateFecha.DataBindings[0].ReadValue();
319  else ewdateFecha.DataBindings.Add("Value", _ewMante, "_Fecha", true);
320 
321  //Titulo del mantenimiento
322  loBind = DataBindings["Text"];
323  if (loBind != null) DataBindings[0].ReadValue();
324  else DataBindings.Add("Text", _ewMante, "_TituloMantenimiento", true);
325  }
326 
330  protected override void _BloquearControles()
331  {
332  base._BloquearControles();
333 
334  bool llReadOnly = ewtextboxNombre.ReadOnly;
335 
336  ewgridDetalle._ReadOnly = llReadOnly;
337  }
338 
342  protected override void _AgregarBotonesOpciones()
343  {
344  //Desmarcado e impresión
345  _btDesmarcar._Tooltip = "Marca las etiquetas como no impresas.";
346  _btDesmarcar.Text = "Desmarcar";
347  _btDesmarcar.Click += new EventHandler(Evento_btDesmarcar_Click);
348  _AgregarBoton("", "", 0, _btDesmarcar);
349 
350  //Botón de etiquetas
351  _btEtiquetas.Text = "Imprimir etiquetas";
352  _btEtiquetas._Tooltip = "Imprime las etiquets de envio.";
353  _btEtiquetas.Click += new EventHandler(Evento_btEtiquetas_Click);
354  _AgregarBoton("", "", 1, _btEtiquetas);
355 
356  //Botón de reparto
357  _btReparto.Text = "Imprimir hoja de reparto";
358  _btReparto._Tooltip = "Imprime la hoja de reparto.";
359  _btReparto.Click += new EventHandler(Evento_btReparto_Click);
360  _AgregarBoton("", "", 2, _btReparto);
361 
362  //PE-102726
363  _btNavegarGeneric.Text = "Ver documento";
364  _btNavegarGeneric._Tooltip = "Visualiza el documento seleccionado en el grid.";
365  _btNavegarGeneric.Click += new EventHandler(_btNavegarGeneric_Click);
366  _AgregarBoton("Ver documento", "", 3, _btNavegarGeneric);
367 
368  //Botón de selección de albaranes - depositos
369  //Informo al botón de los campos que quiero recuperar
370  _btVentasCli.Image = null; // PARTE 102549
371  _btVentasCli._Lista_Campos = new List<string>() { "Documento", "Letra", "Cliente", "Importe" };
372  _btVentasCli._TipoDocumento = (_Etiqueta_Envio != null && _Etiqueta_Envio._EsUnDeposito == true) ? eTipoDocumento.DepositoVenta : eTipoDocumento.AlbaranVenta;
373  _btVentasCli.Text = "Buscar documentos ";
374  //Me suscribo al evento before_click para procesar los datos
375  _btVentasCli._Click_Before += new btVentasCliMultiDoc._Click_Before_Handler(_btVentasCli__Click_Before);
376  _btVentasCli._Click_After += new btVentasCliMultiDoc._Click_After_Handler(_btVentasCli__Click_After);
377  _AgregarBoton("", "", 4, _btVentasCli);
378  }
379 
383  protected override void _Imprimir()
384  {
385  //Imprimo el reparto
386  _btReparto.PerformClick();
387  }
388 
392  protected override void _Cancelar()
393  {
394  base._Cancelar();
395 
396  //PE-89993 Al editar i cancelar borrava indiscriminadamente las líneas. Lo haremos si quedamos en estado de esperando código
397  //Limpio las líneas
398  if(_ewMante._Estado == ewMante._EstadosMantenimiento.EsperandoCodigo) _Etiqueta_Envio._Lineas.Clear();
399 
400  }
401 
402  #endregion Funciones OVERRIDE
403 
404  #region Funciones privadas
405 
409  private void Form_Configurar_Columnas()
410  {
411  foreach (DataGridViewColumn ldgvCol in this.ewgridDetalle._Grid.Columns)
412  {
413  //Recupero el valor ReadOnly original de la columna
414  ldgvCol.ReadOnly = _dicColsReadOnly[ldgvCol.Name];
415 
416  }
417  }
418 
422  private void Form_Suscripcion_Eventos()
423  {
424  // Eventos
425  ewgridDetalle._DataSource_Row_New_Event += new Mantegrid._DataSource_Row_New_Event_Handler(Evento_Row_New_Event);
426  ewgridDetalle._DataSource_Row_Delete_Event += new Mantegrid._DataSource_Row_Delete_Event_Handler(Evento_Row_Delete_Event);
427  ewgridDetalle._Grid.CellBeginEdit += new DataGridViewCellCancelEventHandler(Evento_CellBeginEdit); //PE-90242
428  ewgridDetalle._Grid.CellValueChanged += new DataGridViewCellEventHandler(Evento_CellValueChanged);
429 
430  ewgridDetalle._Grid.RowsAdded += new DataGridViewRowsAddedEventHandler(Evento_RowsAdded); //Per marcar la primera
431  ewgridDetalle._CellClick += new Mantegrid._CellClick_Handler(Evento_CellClick);
432  ewgridDetalle._Grid.CellPainting += new DataGridViewCellPaintingEventHandler(Evento_CellPainting);
433  ewgridDetalle._Grid._Event_CalendarCell_a_Null += new objetos.ewgrid._CalendarCell_a_Null_Handler(Evento_CalendarCell_a_Null);
434  ewgridDetalle._KeyPress += new Mantegrid._KeyPress_Handler(Evento_ewgridDetalle_KeyPress);
435 
436  ewgridDetalle._Grid.CellValidating += new DataGridViewCellValidatingEventHandler(Evento_CellValidating); //PE-89989
437  ewgridDetalle._Grid.CellEndEdit += new DataGridViewCellEventHandler(Evento_CellEndEdit); //PE-89989
438 
439  }
440 
444  private void Cancelar_Suscripcion_Eventos()
445  {
446  // Eventos
447  ewgridDetalle._DataSource_Row_New_Event -= new Mantegrid._DataSource_Row_New_Event_Handler(Evento_Row_New_Event);
448  ewgridDetalle._DataSource_Row_Delete_Event -= new Mantegrid._DataSource_Row_Delete_Event_Handler(Evento_Row_Delete_Event);
449  ewgridDetalle._Grid.CellBeginEdit -= new DataGridViewCellCancelEventHandler(Evento_CellBeginEdit); //PE-90242
450  ewgridDetalle._Grid.CellValueChanged -= new DataGridViewCellEventHandler(Evento_CellValueChanged);
451  ewgridDetalle._Grid.RowsAdded -= new DataGridViewRowsAddedEventHandler(Evento_RowsAdded); //Per marcar la primera
452  ewgridDetalle._CellClick -= new Mantegrid._CellClick_Handler(Evento_CellClick);
453  ewgridDetalle._Grid.CellPainting -= new DataGridViewCellPaintingEventHandler(Evento_CellPainting);
454  ewgridDetalle._Grid._Event_CalendarCell_a_Null -= new objetos.ewgrid._CalendarCell_a_Null_Handler(Evento_CalendarCell_a_Null);
455  ewgridDetalle._KeyPress -= new Mantegrid._KeyPress_Handler(Evento_ewgridDetalle_KeyPress);
456 
457  ewgridDetalle._Grid.CellValidating -= new DataGridViewCellValidatingEventHandler(Evento_CellValidating); //PE-89989
458  ewgridDetalle._Grid.CellEndEdit -= new DataGridViewCellEventHandler(Evento_CellEndEdit); //PE-89989
459 
460  }
461 
466  private void BorrarLineaPortesPorIndiceYRefrescarGrid(int tnIndex)
467  {
468  _Etiqueta_Envio._Lineas.RemoveAt(tnIndex);
469  ewgridDetalle._Grid.Refresh();
470  }
471 
472 
476  private void Form_Configurar_Grid()
477  {
478  //Configuro el mantegrid para que no me genere las columnas automaticamente.
479  ewgridDetalle._Grid.AutoGenerateColumns = false;
480  ewgridDetalle._RecuadroVisible = false;
481 
482  //Defino tamaño maximo del grid
483  int lnTamanyRestantGrid = ewgridDetalle._Grid.Width - 4;
484 
485  //Mascara
486  ewMascara loMascaraUnidades = new ewMascara("99,999.99");
487  ewMascara loMascaraImport = new ewMascara("9,999,999.99");
488  ewMascara loMascaraPeso = new ewMascara("99,999.9999");
489  ewMascara loMascaraPrecio = new ewMascara(Convert.ToString(EW_GLOBAL._GetMascara(KeyDiccionarioMascara.wc_precioven)));
490 
491 
492  //_Seleccionada (checkbox)
494  {
495  ldgtbColSeleccionada.Name = NomCols._Impresa.ToString();
496  ldgtbColSeleccionada.HeaderText = "Impreso";
497  ldgtbColSeleccionada.ValueType = typeof(bool);
498  ldgtbColSeleccionada.Visible = true;
499  ldgtbColSeleccionada._NoParar = true;
500  ldgtbColSeleccionada.Width = 65;
501  ldgtbColSeleccionada.ToolTipText = "Sirve para seleccionar los elementos con los que operar";
502 
503  _dicColsReadOnly.Add(ldgtbColSeleccionada.Name, ldgtbColSeleccionada.ReadOnly); //PE-99642 Me guardo el diccionario de ReadOnlys
504 
505  ewgridDetalle._Grid.Columns.Add(ldgtbColSeleccionada);
506  }
507 
508  //Serie documento
510  {
511  ldgtbColSerie.Name = NomCols._Serie.ToString();
512  ldgtbColSerie.HeaderText = "Serie";
513  ldgtbColSerie.Width = 50;
514  ldgtbColSerie.Visible = true;
515  ldgtbColSerie._NoParar = true;
516  ldgtbColSerie.ReadOnly = false;
517  ldgtbColSerie.DisplayMember = "CODIGO";
518  ldgtbColSerie.ValueMember = "CODIGO";
519  ldgtbColSerie.FlatStyle = FlatStyle.Flat;
520  ldgtbColSerie.MaxDropDownItems = 5; //Es pasa aquest valor pel forro...
521  ldgtbColSerie.ToolTipText = "Série del documento";
522 
523  if (_Etiqueta_Envio == null) //Por si no esta instanciada
524  ldgtbColSerie.DataSource = ((sage.ew.cliente.EtiquetasEnvio)Activator.CreateInstance(typeof(sage.ew.cliente.EtiquetasEnvio)))._Obtener_Series();
525  else ldgtbColSerie.DataSource = _Etiqueta_Envio._Obtener_Series();
526 
527  _dicColsReadOnly.Add(ldgtbColSerie.Name, ldgtbColSerie.ReadOnly); //PE-99642 Me guardo el diccionario de ReadOnlys
528 
529  ewgridDetalle._Grid.Columns.Add(ldgtbColSerie);
530  }
531 
532  //Número de documento
534  {
535  ldgtbColDocumento.Name = NomCols._Documento.ToString();
536  ldgtbColDocumento.HeaderText = "Nº Docum.";
537  ldgtbColDocumento.ValueType = typeof(string);
538  ldgtbColDocumento.Width = 80;
539  ldgtbColDocumento.Visible = true;
540  ldgtbColDocumento._NoParar = false;
541  ldgtbColDocumento.ReadOnly = false;
542  ldgtbColDocumento.ToolTipText = "Número documento";
543 
544  int lnMaxLength = _ewMante._GetMaxLength("NUMERO"); //Recupero la longitud
545  if (lnMaxLength > 0) ldgtbColDocumento.MaxInputLength = lnMaxLength;
546 
547  _dicColsReadOnly.Add(ldgtbColDocumento.Name, ldgtbColDocumento.ReadOnly); //PE-99642 Me guardo el diccionario de ReadOnlys
548 
549  ewgridDetalle._Grid.Columns.Add(ldgtbColDocumento);
550 
551  //PE-102726 => Quieren F4
552  //Añado un browser a la columna => No, ha de ser la captura
553  ewgridDetalle._TeclaF4(NomCols._Documento.ToString(), _btBrowserDocs);
554  }
555 
556  //Codigo cliente (INVISIBLE)
557  using (Mantegrid.ewDataGridViewTextBoxColumn ldgtbColCodigoCliente = new Mantegrid.ewDataGridViewTextBoxColumn())
558  {
559  ldgtbColCodigoCliente.Name = NomCols._Cliente.ToString();
560  ldgtbColCodigoCliente.HeaderText = "Cod. Cliente";
561  ldgtbColCodigoCliente.ValueType = typeof(string);
562  ldgtbColCodigoCliente.Width = 70;
563  ldgtbColCodigoCliente.Visible = false;
564  ldgtbColCodigoCliente._NoParar = true;
565  ldgtbColCodigoCliente.ReadOnly = true;
566  ldgtbColCodigoCliente.ToolTipText = "Código del cliente";
567 
568  _dicColsReadOnly.Add(ldgtbColCodigoCliente.Name, ldgtbColCodigoCliente.ReadOnly); //PE-99642 Me guardo el diccionario de ReadOnlys
569 
570  ewgridDetalle._Grid.Columns.Add(ldgtbColCodigoCliente);
571  }
572 
573  //Nombre Cliente => Se edita desde el botón de dirección de entrega
574  using (Mantegrid.ewDataGridViewTextBoxColumn ldgtbColNombreCliente = new Mantegrid.ewDataGridViewTextBoxColumn())
575  {
576  ldgtbColNombreCliente.Name = NomCols._Cliente_Nombre.ToString();
577  ldgtbColNombreCliente.HeaderText = "Nombre cliente";
578  ldgtbColNombreCliente.ValueType = typeof(string);
579  ldgtbColNombreCliente.Width = 200;
580  ldgtbColNombreCliente.Visible = true;
581  ldgtbColNombreCliente._NoParar = true;
582  ldgtbColNombreCliente.ReadOnly = true;
583  ldgtbColNombreCliente.ToolTipText = "Nombre cliente";
584  lnTamanyRestantGrid = lnTamanyRestantGrid - ldgtbColNombreCliente.Width; //Resto al tamaño del grid el campo visible actual
585 
586  _dicColsReadOnly.Add(ldgtbColNombreCliente.Name, ldgtbColNombreCliente.ReadOnly); //PE-99642 Me guardo el diccionario de ReadOnlys
587 
588  ewgridDetalle._Grid.Columns.Add(ldgtbColNombreCliente);
589  }
590 
591  // BULTOS
593  {
594  ldgtbColBultos.Name = NomCols._Bultos.ToString();
595  ldgtbColBultos.HeaderText = "Bultos";
596  ldgtbColBultos.ValueType = typeof(decimal);
597  ldgtbColBultos.Width = 70;
598  ldgtbColBultos.Visible = true;
599  ldgtbColBultos._NoParar = false;
600  ldgtbColBultos.ToolTipText = "Bultos";
601  lnTamanyRestantGrid = lnTamanyRestantGrid - ldgtbColBultos.Width; //Resto al tamaño del grid el campo visible actual
602 
603  _dicColsReadOnly.Add(ldgtbColBultos.Name, ldgtbColBultos.ReadOnly); //PE-99642 Me guardo el diccionario de ReadOnlys
604 
605  ewgridDetalle._Grid.Columns.Add(ldgtbColBultos);
606  }
607 
608  //Peso
610  {
611  ldgtbColPeso.Name = NomCols._Peso.ToString();
612  ldgtbColPeso.HeaderText = "Peso";
613  ldgtbColPeso.ValueType = typeof(decimal);
614  ldgtbColPeso.Width = 70;
615  ldgtbColPeso.Visible = true;
616  ldgtbColPeso._NoParar = false;
617  ldgtbColPeso.ToolTipText = "Peso";
618  ldgtbColPeso.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
619  // Propietats del NumericUpDown
620  ldgtbColPeso.DecimalPlaces = loMascaraPeso._Num_Decimales;
621  ldgtbColPeso.Maximum = loMascaraPeso._Rango_Max;
622  ldgtbColPeso.Minimum = loMascaraPeso._Rango_Min;
623  ldgtbColPeso.Increment = 1;
624  ldgtbColPeso.ThousandsSeparator = false;
625 
626  _dicColsReadOnly.Add(ldgtbColPeso.Name, ldgtbColPeso.ReadOnly); //PE-99642 Me guardo el diccionario de ReadOnlys
627 
628  ewgridDetalle._Grid.Columns.Add(ldgtbColPeso);
629  }
630 
631  // Portes
633  {
634  ldgtbColPortes.Name = NomCols._Portes.ToString();
635  ldgtbColPortes.HeaderText = "Portes";
636  ldgtbColPortes.ValueType = typeof(string);
637  ldgtbColPortes.Width = 60;
638  ldgtbColPortes.Visible = true;
639  ldgtbColPortes._NoParar = false;
640  ldgtbColPortes.ToolTipText = "Portes.";
641  lnTamanyRestantGrid = lnTamanyRestantGrid - ldgtbColPortes.Width; //Resto al tamaño del grid el campo visible actual
642 
643  _dicColsReadOnly.Add(ldgtbColPortes.Name, ldgtbColPortes.ReadOnly); //PE-99642 Me guardo el diccionario de ReadOnlys
644 
645  ewgridDetalle._Grid.Columns.Add(ldgtbColPortes);
646  }
647 
648  //Agencia
650  {
651  ldgtbColAgencia.Name = NomCols._Agencia.ToString();
652  ldgtbColAgencia.HeaderText = "Agencia";
653  ldgtbColAgencia.ValueType = typeof(string);
654  ldgtbColAgencia.Width = 60;
655  ldgtbColAgencia.Visible = true;
656  ldgtbColAgencia._NoParar = false;
657  ldgtbColAgencia.ToolTipText = "Agencia";
658 
659  int lnMaxLength = _ewMante._GetMaxLength("AGENCIA"); //Recupero la longitud
660  if (lnMaxLength > 0) ldgtbColAgencia.MaxInputLength = lnMaxLength;
661 
662  _dicColsReadOnly.Add(ldgtbColAgencia.Name, ldgtbColAgencia.ReadOnly); //PE-99642 Me guardo el diccionario de ReadOnlys
663 
664  ewgridDetalle._Grid.Columns.Add(ldgtbColAgencia);
665  // Configurem el browser
666  _btBrowserAgencias._Campo_Predet = "CODIGO";
667  _btBrowserAgencias._Campos = "CODIGO,NOMBRE";
668  _btBrowserAgencias._Clave = "CODIGO";
669  _btBrowserAgencias._Condicion = "";
670  _btBrowserAgencias._DataBase = "GESTION";
671  _btBrowserAgencias._Tabla = "AGENCIA";
672  _btBrowserAgencias._Titulo = "Listado de agéncias de transporte";
673  _btBrowserAgencias._Titulos_Campos = "Código, Nombre";
674  ewgridDetalle._TeclaF4(NomCols._Agencia.ToString(), _btBrowserAgencias);
675  // Configurem el manteniment
676  _btManteAgencias._Form = "AGENCIA";
677  _btManteAgencias._NombreManteNet = "AGENCIA"; // PE-99334. Asignar el nombre de Net para que muestre la pantalla en .Net
678  ewgridDetalle._TeclaF5(NomCols._Agencia.ToString(), _btManteAgencias);
679 
680  }
681 
682  //Nombre Agencia
683  using (Mantegrid.ewDataGridViewTextBoxColumn ldgtbColAgenciaNombre = new Mantegrid.ewDataGridViewTextBoxColumn())
684  {
685  ldgtbColAgenciaNombre.Name = NomCols._Agencia_Nombre.ToString();
686  ldgtbColAgenciaNombre.HeaderText = "Nombre agencia";
687  ldgtbColAgenciaNombre.ValueType = typeof(string);
688  ldgtbColAgenciaNombre.Width = 200;
689  ldgtbColAgenciaNombre.Visible = true;
690  ldgtbColAgenciaNombre._NoParar = true;
691  ldgtbColAgenciaNombre.ReadOnly = true;
692  ldgtbColAgenciaNombre.ToolTipText = "Nombre agencia";
693 
694  _dicColsReadOnly.Add(ldgtbColAgenciaNombre.Name, ldgtbColAgenciaNombre.ReadOnly); //PE-99642 Me guardo el diccionario de ReadOnlys
695 
696  ewgridDetalle._Grid.Columns.Add(ldgtbColAgenciaNombre);
697  }
698 
699  //Pedido
701  {
702  ldgtbColPedido.Name = NomCols._Pedido.ToString();
703  ldgtbColPedido.HeaderText = "Pedido";
704  ldgtbColPedido.ValueType = typeof(string);
705  ldgtbColPedido.Width = 80;
706  ldgtbColPedido.Visible = true;
707  ldgtbColPedido._NoParar = false;
708  ldgtbColPedido.ReadOnly = false;
709  ldgtbColPedido.ToolTipText = "Pedido";
710 
711  _dicColsReadOnly.Add(ldgtbColPedido.Name, ldgtbColPedido.ReadOnly); //PE-99642 Me guardo el diccionario de ReadOnlys
712 
713  ewgridDetalle._Grid.Columns.Add(ldgtbColPedido);
714  }
715 
716  //Fecha Acabado
717  using (Mantegrid.CalendarColumn ldgtbColAcabado = new Mantegrid.CalendarColumn())
718  {
719  ldgtbColAcabado.Name = NomCols._Acabado.ToString();
720  ldgtbColAcabado.HeaderText = "Acabado";
721  ldgtbColAcabado.ValueType = typeof(DateTime);
722  ldgtbColAcabado.Width = 100;
723  ldgtbColAcabado.Visible = true;
724  ldgtbColAcabado._NoParar = false;
725  ldgtbColAcabado.ReadOnly = false;
726  ldgtbColAcabado.ToolTipText = "Fecha acabado";
727 
728  _dicColsReadOnly.Add(ldgtbColAcabado.Name, ldgtbColAcabado.ReadOnly); //PE-99642 Me guardo el diccionario de ReadOnlys
729 
730  ewgridDetalle._Grid.Columns.Add(ldgtbColAcabado);
731  }
732 
733  // Coste
735  {
736  ldgtbColCoste.Name = NomCols._Coste.ToString();
737  ldgtbColCoste.HeaderText = "Coste (" + ( EW_GLOBAL._Moneda == null ? "" : EW_GLOBAL._Moneda._ObtenerSimboloDivisa() ) + ")"; //Mejor que no casque y que salga la columna sin simbolo si no podemos acceder a ella...
738  ldgtbColCoste.ValueType = typeof(decimal);
739  ldgtbColCoste.Width = 70;
740  ldgtbColCoste.Visible = true;
741  ldgtbColCoste._NoParar = false;
742  ldgtbColCoste.ToolTipText = "Coste";
743  lnTamanyRestantGrid = lnTamanyRestantGrid - ldgtbColCoste.Width; //Resto al tamaño del grid el campo visible actual
744  // Propietats del NumericUpDown
745  ldgtbColCoste.DecimalPlaces = loMascaraPrecio._Num_Decimales;
746  ldgtbColCoste.Maximum = loMascaraPrecio._Rango_Max;
747  ldgtbColCoste.Minimum = loMascaraPrecio._Rango_Min;
748  ldgtbColCoste.Increment = 1;
749  ldgtbColCoste.ThousandsSeparator = false;
750 
751  _dicColsReadOnly.Add(ldgtbColCoste.Name, ldgtbColCoste.ReadOnly); //PE-99642 Me guardo el diccionario de ReadOnlys
752 
753  ewgridDetalle._Grid.Columns.Add(ldgtbColCoste);
754  }
755 
756  //Fecha Acabado
757  using (Mantegrid.CalendarColumn ldgtbColRecogida = new Mantegrid.CalendarColumn())
758  {
759  ldgtbColRecogida.Name = NomCols._Recogida.ToString();
760  ldgtbColRecogida.HeaderText = "Recogida";
761  ldgtbColRecogida.ValueType = typeof(DateTime);
762  ldgtbColRecogida.Width = 100;
763  ldgtbColRecogida.Visible = true;
764  ldgtbColRecogida._NoParar = false;
765  ldgtbColRecogida.ReadOnly = false;
766  ldgtbColRecogida.ToolTipText = "Fecha recogida";
767 
768  _dicColsReadOnly.Add(ldgtbColRecogida.Name, ldgtbColRecogida.ReadOnly); //PE-99642 Me guardo el diccionario de ReadOnlys
769 
770  ewgridDetalle._Grid.Columns.Add(ldgtbColRecogida);
771  }
772 
773  // Botó albarán
775  {
776  ldgtbColBoto.Name = NomCols._BotonDireccion.ToString();
777  ldgtbColBoto.HeaderText = "Dirección";
778  ldgtbColBoto.Width = 25;
779  ldgtbColBoto._NoParar = true;
780 
781  _dicColsReadOnly.Add(ldgtbColBoto.Name, ldgtbColBoto.ReadOnly); //PE-99642 Me guardo el diccionario de ReadOnlys
782 
783  ewgridDetalle._Grid.Columns.Add(ldgtbColBoto);
784  }
785 
786  //Dirección (INVISIBLE)
788  {
789  ldgtbColDireccion.Name = NomCols._Direccion.ToString();
790  ldgtbColDireccion.ValueType = typeof(string);
791  ldgtbColDireccion.Visible = false;
792  ldgtbColDireccion._NoParar = true;
793  ldgtbColDireccion.ReadOnly = true;
794 
795  _dicColsReadOnly.Add(ldgtbColDireccion.Name, ldgtbColDireccion.ReadOnly); //PE-99642 Me guardo el diccionario de ReadOnlys
796 
797  ewgridDetalle._Grid.Columns.Add(ldgtbColDireccion);
798  }
799 
800  //Codigo postal (INVISIBLE)
802  {
803  ldgtbColCP.Name = NomCols._CPostal.ToString();
804  ldgtbColCP.ValueType = typeof(string);
805  ldgtbColCP.Visible = false;
806  ldgtbColCP._NoParar = true;
807  ldgtbColCP.ReadOnly = true;
808 
809  _dicColsReadOnly.Add(ldgtbColCP.Name, ldgtbColCP.ReadOnly); //PE-99642 Me guardo el diccionario de ReadOnlys
810 
811  ewgridDetalle._Grid.Columns.Add(ldgtbColCP);
812  }
813 
814  //Población (INVISIBLE)
816  {
817  ldgtbColPoblacion.Name = NomCols._Poblacion.ToString();
818  ldgtbColPoblacion.ValueType = typeof(string);
819  ldgtbColPoblacion.Visible = false;
820  ldgtbColPoblacion._NoParar = true;
821  ldgtbColPoblacion.ReadOnly = true;
822 
823  _dicColsReadOnly.Add(ldgtbColPoblacion.Name, ldgtbColPoblacion.ReadOnly); //PE-99642 Me guardo el diccionario de ReadOnlys
824 
825  ewgridDetalle._Grid.Columns.Add(ldgtbColPoblacion);
826  }
827 
828  //Provincia (INVISIBLE)
830  {
831  ldgtbColProvincia.Name = NomCols._Provincia.ToString();
832  ldgtbColProvincia.ValueType = typeof(string);
833  ldgtbColProvincia.Visible = false;
834  ldgtbColProvincia._NoParar = true;
835  ldgtbColProvincia.ReadOnly = true;
836 
837  _dicColsReadOnly.Add(ldgtbColProvincia.Name, ldgtbColProvincia.ReadOnly); //PE-99642 Me guardo el diccionario de ReadOnlys
838 
839  ewgridDetalle._Grid.Columns.Add(ldgtbColProvincia);
840  }
841 
842  //Teléfono (INVISIBLE)
844  {
845  ldgtbColTelefono.Name = NomCols._Telefono.ToString();
846  ldgtbColTelefono.ValueType = typeof(string);
847  ldgtbColTelefono.Visible = false;
848  ldgtbColTelefono._NoParar = true;
849  ldgtbColTelefono.ReadOnly = true;
850 
851  _dicColsReadOnly.Add(ldgtbColTelefono.Name, ldgtbColTelefono.ReadOnly); //PE-99642 Me guardo el diccionario de ReadOnlys
852 
853  ewgridDetalle._Grid.Columns.Add(ldgtbColTelefono);
854  }
855 
856  //País (INVISIBLE)
858  {
859  ldgtbColPais.Name = NomCols._Pais.ToString();
860  ldgtbColPais.ValueType = typeof(string);
861  ldgtbColPais.Visible = false;
862  ldgtbColPais._NoParar = true;
863  ldgtbColPais.ReadOnly = true;
864 
865  _dicColsReadOnly.Add(ldgtbColPais.Name, ldgtbColPais.ReadOnly); //PE-99642 Me guardo el diccionario de ReadOnlys
866 
867  ewgridDetalle._Grid.Columns.Add(ldgtbColPais);
868  }
869 
870  //Asigno las líneas
871  if (_Etiqueta_Envio != null) ewgridDetalle._Grid.DataSource = _Etiqueta_Envio._Lineas;
872  else ewgridDetalle._Grid.DataSource = ((ew.cliente.EtiquetasEnvio)_ewMante)._Lineas;
873 
874  //Asigno el nombre de las columnas
875  foreach (DataGridViewColumn ldgvCol in ewgridDetalle._Grid.Columns)
876  {
877  ldgvCol.DataPropertyName = ldgvCol.Name;
878  }
879 
880 
881 
882 
883  }
884 
885  //PE-102342
890  private bool ValidarEstadoParaImpresion()
891  {
892  bool llOk = false;
893 
894  //En función del estado no podemos disparar los métodos
895  switch (_ewMante._Estado)
896  {
897  case ewMante._EstadosMantenimiento.EditandoRegistro:
898  case ewMante._EstadosMantenimiento.EntrandoNuevo:
899  this._MessageBox("Para realizar esta acción debe salir del modo de edición. ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, DialogResult.None);
900  llOk = false;
901  break;
902  case ewMante._EstadosMantenimiento.SinRegistro:
903  case ewMante._EstadosMantenimiento.EsperandoCodigo:
904  this._MessageBox("Para realizar esta acción debe seleccionar un documento antes. ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, DialogResult.None);
905  llOk = false;
906  break;
907  case ewMante._EstadosMantenimiento.MostrandoRegistro:
908  llOk = true;
909  break;
910 
911  default:
912  llOk = false;
913  break;
914  }
915 
916  return llOk;
917  }
918 
919 
924  private bool EtiquetaConLineas()
925  {
926  return _Etiqueta_Envio != null && _Etiqueta_Envio._TieneLineas();
927  }
928 
929  #endregion Funciones privadas
930 
931  #region Respuesta a eventos
932 
937  void _Evento_FormMante_Shown_After(object sender)
938  {
939  //El evneto FormMante_Shown de la base asigna a pelo el foco contra el ewtxtboxcodigo pero en este caso no ha de hacerlo ya que
940  //no está disponible. Se pasa el foco al txtboxNumero
941  if (sender != null) ewtextboxNumero.Focus();
942  }
943 
948  void Evento_Mantenimiento_Estado_Change(ewMante._EstadosMantenimiento teEstado)
949  {
950  //Para garantizar el estado de las columnas del grid
951  Form_Configurar_Columnas();
952 
953  switch (teEstado)
954  {
955  case ewMante._EstadosMantenimiento.EditandoRegistro:
956  ewtextboxNumero.Enabled = false;
957  ewdateFecha.Enabled = true; // PARTE 102549
958  _btVentasCli.Enabled = true;
959  _btDesmarcar.Enabled = true;
960  _btNavegarAlbaran.Enabled = true;
961  break;
962  case ewMante._EstadosMantenimiento.EntrandoNuevo:
963  ewtextboxNumero.Enabled = false;
964  ewdateFecha.Enabled = true; // PARTE 102549
965  _btVentasCli.Enabled = true;
966  _btDesmarcar.Enabled = true;
967  _btNavegarAlbaran.Enabled = true;
968 
969  //Se debe añadir una línea
970  _oLineaPortesNova = new EtiquetasEnvio.LineaPortes(this._Etiqueta_Envio);
971  _Etiqueta_Envio._Lineas.Add(_oLineaPortesNova);
972  ewdateFecha.Focus();
973 
974  break;
975  case ewMante._EstadosMantenimiento.EsperandoCodigo:
976  ewtextboxNumero.Enabled = true;
977  ewtextboxNumero.ReadOnly = false; //PE-97215: faltaba poner el ReadOnly a false para que se pueda entrar número para visualizarlo incluso si es sólo lectura el formulario
978  ewdateFecha.Enabled = false; // PARTE 102549
979  ewtextboxNumero.Focus();
980  _btVentasCli.Enabled = false;
981  _btDesmarcar.Enabled = false;
982  _btNavegarAlbaran.Enabled = false;
983 
984 
985  ((EtiquetasEnvio)_ewMante)._EsUnDeposito = null; //Establezco estado indeterminado
986 
987  break;
988  case ewMante._EstadosMantenimiento.MostrandoRegistro:
989  ewtextboxNumero.Enabled = false;
990  ewdateFecha.Enabled = false; // PARTE 102549
991  _btVentasCli.Enabled = false;
992  _btDesmarcar.Enabled = false;
993  _btEtiquetas.Enabled = true;
994  _btReparto.Enabled = true;
995  _btNavegarAlbaran.Enabled = true;
996  break;
997  default:
998  break;
999  }
1000  }
1001 
1007  void Evento_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
1008  {
1009  //verifico si vengo del evento asociado al botón añadir linea.
1010  if (_lNuevaLinea)
1011  {
1012  //Modifico el modo de edicion para que entre en las nuevas celdas en formato de edicion
1013  ewgridDetalle._Grid.EditMode = DataGridViewEditMode.EditOnEnter;
1014  //Restauro control de procedencia
1015  _lNuevaLinea = false;
1016  }
1017  else
1018  {
1019  //Para no quitarle el foco despues de añadir la linea de cortesia
1020  if (_ewMante._Estado != ewMante._EstadosMantenimiento.EntrandoNuevo)
1021  ewgridDetalle._Grid.Focus();
1022  }
1023  }
1024 
1025  //PE-90242
1031  void Evento_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
1032  {
1033  if (e.ColumnIndex == ewgridDetalle._Grid.Columns[NomCols._Documento.ToString()].Index)
1034  {
1035  _cDocumentoOldVal = _Etiqueta_Envio._Lineas[e.RowIndex]._Documento; //Me guardo el número viejo por si hace falta restablecerlo
1036  }
1037 
1038  if (e.ColumnIndex == ewgridDetalle._Grid.Columns[NomCols._Serie.ToString()].Index)
1039  {
1040  _cSerieOldVal = _Etiqueta_Envio._Lineas[e.RowIndex]._Serie; //Me guardo el número viejo por si hace falta restablecerlo
1041  }
1042 
1043  if (e.ColumnIndex == ewgridDetalle._Grid.Columns[NomCols._Acabado.ToString()].Index) //PE-89989
1044  {
1045  _lAcabadoValidado = false; //Marco el registro pendiente de validar
1046  _dOldAcabadoVal = _Etiqueta_Envio._Lineas[e.RowIndex]._Acabado; //Me guardo la fecha para restablecerla
1047  }
1048  }
1049 
1050  //PE-89989
1056  void Evento_CellEndEdit(object sender, DataGridViewCellEventArgs e)
1057  {
1058  //PE-89989 Si es la columna de acabado (DateTimePicker contra DateTime?)
1059  if (e.ColumnIndex == ewgridDetalle._Grid.Columns[NomCols._Acabado.ToString()].Index)
1060  {
1061  //Sino tiene la marca de validación y la última tecla no es un INTRO es que se ha cancelado
1062  //La tecla intro no pasa por el CellValidating pq la captura el mantegrid ProcessEnterKey. pero la guarda en la propiedad _LastKey
1063  if (!_lAcabadoValidado && ewgridDetalle._LastKey != Keys.Enter) ewgridDetalle._Grid[e.ColumnIndex, e.RowIndex].Value = _dOldAcabadoVal;
1064  }
1065  }
1066 
1067  //PE-89989
1073  void Evento_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
1074  {
1075  //PE-89989 Si es la columna de acabado (DateTimePicker contra DateTime?)
1076  if (e.ColumnIndex == ewgridDetalle._Grid.Columns[NomCols._Acabado.ToString()].Index)
1077  {
1078  _lAcabadoValidado = true; //Marco que pasa por validación => Si se cancela no pasa por aquí.
1079  //Los Keys.Enter tampoco pero se gestionan directamente en el CellEndEdit
1080  }
1081  }
1082 
1088  void Evento_CellValueChanged(object sender, DataGridViewCellEventArgs e)
1089  {
1090  //Una vez realizados los cambios restablezco el modo de edicion
1091  ewgridDetalle._Grid.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2;
1092 
1093  //PE-90242 Hacer un load desde el grid
1094  if (e.ColumnIndex == ewgridDetalle._Grid.Columns[NomCols._Serie.ToString()].Index ||
1095  e.ColumnIndex == ewgridDetalle._Grid.Columns[NomCols._Documento.ToString()].Index
1096  )
1097  {
1098  string lcLetra = _Etiqueta_Envio._Lineas[e.RowIndex]._Serie;
1099  string lcNumero = _Etiqueta_Envio._Lineas[e.RowIndex]._Documento;
1100 
1101  if ((!String.IsNullOrWhiteSpace(lcLetra) && !String.IsNullOrWhiteSpace(lcNumero))
1102  //&& //Tengo numero y letra
1103  //(_cDocumentoOldVal != lcNumero) && (_cSerieOldVal != lcLetra)
1104  )
1105  {
1106  bool llOk = false;
1107  llOk = _Etiqueta_Envio._Lineas[e.RowIndex]._Crear_desde_Documento(lcLetra, lcNumero, tlDeposito: _Etiqueta_Envio._EsUnDeposito == true);
1108 
1109  //Sino ha ido bien restablezco
1110  if (!llOk)
1111  {
1112  _Etiqueta_Envio._Lineas[e.RowIndex]._Documento = _cDocumentoOldVal;
1113  }
1114  }
1115  }
1116  //FPE-90242
1117  }
1118 
1124  void Evento_ewgridDetalle_KeyPress(object sender, KeyPressEventArgs e)
1125  {
1126  //Si es un INTRO
1127  if (e.KeyChar == 13)
1128  {
1129  //Tinc cel·la actual
1130  if (ewgridDetalle._Grid.CurrentCell == null) return;
1131  else
1132  {
1133  //La cel·la actual es la de nº de documents i estic en mode d'edició
1134  if (ewgridDetalle._Grid.CurrentCell.ColumnIndex == ewgridDetalle._Grid.Columns["_Documento"].Index &&
1135  (_ewMante._Estado == ewMante._EstadosMantenimiento.EditandoRegistro || _ewMante._Estado == ewMante._EstadosMantenimiento.EntrandoNuevo))
1136  {
1137  this._btVentasCli._HacerClick(); //No hace caso a PerformClick, genero un método
1138  }
1139  }
1140  }
1141  }
1142 
1147  void Evento_Row_Delete_Event(DataGridViewRow trRowDelete)
1148  {
1149  //Verifico que la lista no este vacia
1150  if (EtiquetaConLineas())
1151  BorrarLineaPortesPorIndiceYRefrescarGrid(trRowDelete.Index);
1152  }
1153 
1158  void Evento_Row_New_Event(int tnInsertLinea)
1159  {
1160  // Verifico que tenga elementos en la lista
1161  if (EtiquetaConLineas())
1162  {
1163  if (!UltimaLineaPortesConDocumentoEnBlanco()) // Verifico que el último no tenga documento en blanco en cuyo caso no permito añadir nuevos
1164  CrearLineaPortesNueva();
1165  }
1166  else
1167  CrearLineaPortesNueva();
1168  }
1169 
1174  private bool UltimaLineaPortesConDocumentoEnBlanco()
1175  {
1176  return string.IsNullOrWhiteSpace(_Etiqueta_Envio._Lineas[_Etiqueta_Envio._Lineas.Count - 1]._Documento);
1177  }
1178 
1182  private void CrearLineaPortesNueva()
1183  {
1184  //Marco origen del cambio en las filas en nueva linea
1185  _lNuevaLinea = true;
1186 
1187  //Genero un nuevo detalle de linea de portes
1188  _oLineaPortesNova = new EtiquetasEnvio.LineaPortes(_Etiqueta_Envio);
1189 
1190  _Etiqueta_Envio._Lineas.Add(_oLineaPortesNova);
1191  Refresh();
1192  }
1193 
1198  void Evento_CellClick(DataGridViewCell tdgvCurrentCel)
1199  {
1200  if (tdgvCurrentCel == null)
1201  return;
1202 
1203  // Comprobamos si se trata del botón de albaranes
1204  if (tdgvCurrentCel.OwningColumn.Name == NomCols._BotonDireccion.ToString())
1205  {
1206  EtiquetasEnvio.LineaPortes loLinia = (EtiquetasEnvio.LineaPortes)tdgvCurrentCel.OwningRow.DataBoundItem;
1207  if (loLinia != null)
1208  {
1209  if (string.IsNullOrWhiteSpace(loLinia._Documento)) //Verifico que tenga documento antes de abrir el formulario
1210  {
1211  this._MessageBox("Debe indicar el documento orígen", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, DialogResult.None);
1212  }
1213  else
1214  {
1215  loLinia._Show(ewgridDetalle._ReadOnly);
1216  ewgridDetalle.Refresh();
1217  //Form_Bloquear_Columnas();
1218  }
1219  }
1220  }
1221  }
1222 
1228  void Evento_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
1229  {
1230 
1231  if (e.ColumnIndex >= 0 && ewgridDetalle._Grid.Columns[e.ColumnIndex].Name == NomCols._BotonDireccion.ToString() && e.RowIndex >= 0)
1232  {
1233  e.Paint(e.CellBounds, DataGridViewPaintParts.All);
1234 
1235  DataGridViewButtonCell loBoton =
1236  ewgridDetalle._Grid.Rows[e.RowIndex].Cells[NomCols._BotonDireccion.ToString()] as DataGridViewButtonCell;
1237 
1238  Image loImagen = sage.ew.images.Properties.Resources.home_16; // PARTE 102549;
1239  e.Graphics.DrawImage(loImagen, e.CellBounds.Left + 3, e.CellBounds.Top + 2);
1240 
1241  //No cambio el tamaño las celdas a menos que sea insuficiente
1242  if (ewgridDetalle._Grid.Rows[e.RowIndex].Height < loImagen.Height)
1243  ewgridDetalle._Grid.Rows[e.RowIndex].Height = loImagen.Height;
1244  if(ewgridDetalle._Grid.Columns[e.ColumnIndex].Width < loImagen.Width)
1245  ewgridDetalle._Grid.Columns[e.ColumnIndex].Width = loImagen.Width;
1246 
1247  e.Handled = true;
1248  }
1249  }
1250 
1256  void Evento_CalendarCell_a_Null(object sender, ref DateTime tdData)
1257  {
1258  tdData = _Etiqueta_Envio._Lineas[((DataGridViewCell)sender).RowIndex]._Determinar_Fecha_Minima();
1259  ((DataGridViewCell)sender).Value = tdData; //PE-89989
1260  }
1261 
1262  void _btVentasCli__Click_After(object sender)
1263  {
1264  //Aplantillo para no tener que convertir continuamente para operar
1265  //Control de tipo
1266  if (sender is btVentasCliMultiDoc loBoto)
1267  {
1268  if (loBoto._Resultados != null && loBoto._Resultados.Count > 0)
1269  {
1270  //si tengo lineas, antes de añadir miro que no este vacia
1271  int lnDeleteLine = -1;
1272  if (EtiquetaConLineas())
1273  {
1274  //Verifico si la última linea tiene código o esta vacia
1275  if (UltimaLineaPortesConDocumentoEnBlanco())
1276  lnDeleteLine = _Etiqueta_Envio._Lineas.Count - 1;
1277  }
1278 
1279  foreach (Dictionary<string, object> laElementoSeleccionado in loBoto._Resultados)
1280  {
1281  string lcNumero = string.Empty;
1282  string lcLetra = string.Empty;
1283  string lcCliente = string.Empty;
1284  decimal lnImporte = 0.0M;
1285 
1286  if (laElementoSeleccionado.ContainsKey("Documento"))
1287  lcNumero = Convert.ToString(laElementoSeleccionado["Documento"]);
1288 
1289  if (laElementoSeleccionado.ContainsKey("Letra"))
1290  lcLetra = Convert.ToString(laElementoSeleccionado["Letra"]);
1291 
1292  if (laElementoSeleccionado.ContainsKey("Cliente"))
1293  lcCliente = Convert.ToString(laElementoSeleccionado["Cliente"]);
1294 
1295  if (laElementoSeleccionado.ContainsKey("Importe"))
1296  lnImporte = Convert.ToDecimal(laElementoSeleccionado["Importe"]);
1297 
1298  //Genero un nuevo detalle linea de portes
1299  _oLineaPortesNova = new EtiquetasEnvio.LineaPortes(_Etiqueta_Envio, tlEsUnDeposito: _Etiqueta_Envio._EsUnDeposito == true);
1300 
1301  //Miro que no este en la propia lista (la empresa es constante)
1302  if ((_Etiqueta_Envio._Lineas.Where(lolin => lolin._Serie == lcLetra && lolin._Documento == lcNumero).Count()) > 0)
1303  {
1304  string lcMensajeError = "El documento ";
1305  if (!string.IsNullOrWhiteSpace(lcLetra)) lcMensajeError += lcLetra.Trim() + " - "; //Si tengo serie la informo
1306  lcMensajeError += lcNumero.Trim() + " ya forma parte de esta lista.";
1307  _Etiqueta_Envio._Error_Message = lcMensajeError;
1308  }
1309  else
1310  {
1311  if (_oLineaPortesNova._Crear_desde_Documento(_cEmpresa, lcNumero, lcLetra, lcCliente, lnImporte, ref _oLineaPortesNova, tlDeposito: _Etiqueta_Envio._EsUnDeposito == true))
1312  _Etiqueta_Envio._Lineas.Add(_oLineaPortesNova);
1313  }
1314 
1315  }
1316 
1317  if (lnDeleteLine >= 0)
1318  BorrarLineaPortesPorIndiceYRefrescarGrid(lnDeleteLine);
1319 
1320  //Vacio los resultados
1321  loBoto._LimpiarResultados();
1322  }
1323  }
1324  }
1325 
1326  //PE-102342
1331  void _btVentasCli__Click_Before(ref bool tlOk)
1332  {
1333  //Puede varia el tipo en base a lo que haga el usuario en pantalla. Hay que verificarlo
1334  _btVentasCli._TipoDocumento = _Etiqueta_Envio._EsUnDeposito == true ? eTipoDocumento.DepositoVenta : eTipoDocumento.AlbaranVenta;
1335  }
1336 
1337 
1338  //PE-102726 Quieren tecla F4 pero hay que abrir algo que no es un browser
1343  void _btBrowserDocs__Click_Before(ref bool tlOk)
1344  {
1345  //Paro la ejecución del browser falso
1346  tlOk = false;
1347 
1348  //Ejecuto el código específico
1349  _btVentasCli._HacerClick();
1350  }
1351 
1352  //PE-102726 Quieren tecla F4 pero hay que abrir algo que no es un browser
1357  void _btBrowserIntegradoGrid__Click_Before(ref bool tlOk)
1358  {
1359  //Solo para la columna de numero
1360  if(ewgridDetalle._Grid.CurrentCell != null &&
1361  (ewgridDetalle._Grid.CurrentCell.ColumnIndex == ewgridDetalle._Grid.Columns[NomCols._Documento.ToString()].Index))
1362  {
1363  //Paro la ejecución del browser falso
1364  tlOk = false;
1365 
1366  //Ejecuto el código específico
1367  _btVentasCli._HacerClick();
1368  }
1369  else
1370  {
1371  if (!EtiquetaConLineas())
1372  tlOk = false;
1373  }
1374  }
1375 
1376  //PE-102726 La navegación a documentos no detecta cambios
1382  void _btNavegarGeneric_Click(object sender, EventArgs e)
1383  {
1384  if (_Etiqueta_Envio._EsUnDeposito == true)
1385  {
1386  _btNavegarDeposito._Click_Before -= new btNavegarDeposito._Click_Before_Handler(Evento_NavegarDocumento__Click_Before);
1387  _btNavegarDeposito._Click_Before += new btNavegarDeposito._Click_Before_Handler(Evento_NavegarDocumento__Click_Before);
1388  _btNavegarDeposito.PerformClick();
1389  }
1390  else
1391  {
1392  _btNavegarAlbaran._Click_Before -= new btNavegarAlbaran._Click_Before_Handler(Evento_NavegarDocumento__Click_Before);
1393  _btNavegarAlbaran._Click_Before += new btNavegarAlbaran._Click_Before_Handler(Evento_NavegarDocumento__Click_Before);
1394  _btNavegarAlbaran.PerformClick();
1395  }
1396  }
1397 
1398  //PE-99332 Navegación a depósitos. Se vuelve indiferente al tipo de documento
1405  void Evento_NavegarDocumento__Click_Before(object sender, ref bool tlOk)
1406  {
1407  if (ewgridDetalle._Grid.CurrentRow != null) //Si tengo el cursor en una fila
1408  {
1409  string lcNumero = string.Empty;
1410  string lcLetra = string.Empty;
1411 
1412  //Recupero el número y letra
1413  lcNumero = ewgridDetalle._Grid["_Documento", ewgridDetalle._Grid.CurrentRow.Index].Value.ToString();
1414  lcLetra = ewgridDetalle._Grid["_Serie", ewgridDetalle._Grid.CurrentRow.Index].Value.ToString();
1415 
1416  if (!string.IsNullOrWhiteSpace(lcNumero) && !string.IsNullOrWhiteSpace(lcLetra))
1417  {
1418  ((IEmpresaNumeroLetra)sender)._Empresa = _cEmpresa;
1419  ((IEmpresaNumeroLetra)sender)._Numero = lcNumero;
1420  ((IEmpresaNumeroLetra)sender)._Letra = lcLetra;
1421  }
1422  else tlOk = false;
1423  }
1424  else tlOk = false;
1425  }
1426 
1432  void Evento_btEtiquetas_Click(object sender, EventArgs e)
1433  {
1434  DoPrint(() => _Etiqueta_Envio._Etiquetas()); //Le paso el método que quiero ejecutar (etiquetas)
1435  }
1436 
1442  void Evento_btReparto_Click(object sender, EventArgs e)
1443  {
1444  DoPrint(() => _Etiqueta_Envio._Print()); //Le paso el método que quiero ejecutar (print)
1445  }
1446 
1447  void DoPrint(Action toMetodoImpresion)
1448  {
1449  //PE-102342 Validamos que se llame desde un estado válida
1450  if (!ValidarEstadoParaImpresion())
1451  return;
1452 
1453  //PE-89997 Control de líneas pendientes de imprimir
1454  if (_Etiqueta_Envio._Codigo != null)
1455  {
1456  if (_Etiqueta_Envio._Lineas != null && //Documento no nulo
1457  _Etiqueta_Envio._Lineas.Where(loEti => !string.IsNullOrWhiteSpace(loEti._Documento)).Count() > 0) //y con lineas con número de documento informado
1458  {
1459  if (_Etiqueta_Envio._Lineas != null && (_Etiqueta_Envio._Lineas.Where(loEti => !loEti._Impresa).Count() > 0))
1460  {
1461  toMetodoImpresion(); //Invoco al método recibido como parámetro
1462  _Etiqueta_Envio._Load();
1463  }
1464  else
1465  {
1466  _MessageBox("Todas las etiquetas de envío están marcadas como impresas.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, DialogResult.None);
1467  }
1468  }
1469  else
1470  {
1471  _MessageBox("El documento no tiene líneas.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, DialogResult.None);
1472  }
1473  }
1474  }
1475 
1481  void Evento_btDesmarcar_Click(object sender, EventArgs e)
1482  {
1483  if (EtiquetaConLineas())
1484  {
1485  //PE-90181 si opero sobre los datos luego hay que refrescar el grid... opero directamente sobre el grid
1486  foreach (DataGridViewRow ldrRow in this.ewgridDetalle._Grid.Rows)
1487  {
1488  ldrRow.Cells[NomCols._Impresa.ToString()].Value = false;
1489  }
1490  //FPE-90181
1491  }
1492  }
1493 
1494  private void chkFormatoEmpresa_CheckedChanged(object sender, EventArgs e)
1495  {
1496  ucEtiquetas.Enabled = !chkFormatoEmpresa.Checked;
1497  }
1498 
1503  void ucEtiquetas__Print_Before(ref bool tlOk)
1504  {
1505  tlOk = false;
1506  }
1507 
1512  private void ewgridDetalle__CellClick(DataGridViewCell tdgvCurrentCel)
1513  {
1514  if (tdgvCurrentCel.ColumnIndex == ewgridDetalle._Grid.Columns[NomCols._Impresa.ToString()].Index &&
1515  _ewMante._Estado == ewMante._EstadosMantenimiento.MostrandoRegistro)
1516  {
1517  _ewMante._Estado = ewMante._EstadosMantenimiento.EditandoRegistro;
1518  tdgvCurrentCel.Value = !Convert.ToBoolean(tdgvCurrentCel.Value);
1519  }
1520  }
1521 
1522  #endregion Respuesta a eventos
1523  }
1524 }
1525 
decimal _Rango_Max
Valor máximo según la máscara. Es la máscara de VFP convertida a decimal
Definition: clsEwBase.cs:6245
delegate void _DataSource_Row_Delete_Event_Handler(DataGridViewRow trRowDelete)
Se dispara al borrar un registro cuando el DataSource no es un DataTable
Clase de negocio base para mantenimientos
Definition: clsEwBase.cs:1643
override void _Imprimir()
Override del método imprimir
void _HacerClick()
Método para invocar por código un evento Click
Formulario para las etiquetas de envio
delegate void _Click_Before_Handler(object sender, ref Boolean tlOk)
_Click_Before_Handler
static System.Drawing.Bitmap home_16
Busca un recurso adaptado de tipo System.Drawing.Bitmap.
override void _BloquearControles()
Override del método para el bloqueo de controles
override void _Cancelar()
Override del método Cancelar para realizar operaciones adicionales
delegate void _DataSource_Row_New_Event_Handler(int tnInsertLinea)
Se dispara al añadir un nuevo registro cuando el DataSource no es un DataTable
Browser, basat en sage.ew.objetos.ewbutton
_Click_Before_Handler _Click_Before
_Click_Before_Handler
Interfaz para garantizar la presencia de los campos Empresa, Numero, Letra con fines de tratamientos ...
frmEtiquetasEnvio(ew.cliente.EtiquetasEnvio toEtiquetasEnvio)
Constructor
delegate void _Click_Before_Handler(ref Boolean tlOk)
_Click_Before_Handler
string _Titulos_Campos
lista de títulos de los campos que nos presentará en el browser
Clase de recurso fuertemente tipado, para buscar cadenas traducidas, etc.
KeyDiccionarioMascara
Clave para diccionario de máscaras
eTipoDocumento _TipoDocumento
Obtiene o establece el tipo de documento Por defecto utilizará albaranes
string _Tooltip
Tooltip del control para asignar por código
NomCols
Enumera los elementos esperados en el detalle de la reposición
Clase de navegación a depósito de venta
delegate void _Click_After_Handler(object sender)
_Click_After_Handler
override void _AgregarBotonesOpciones()
Override del método para agregar botones
string _DataBase
nombre de la base de datos de la tabla
delegate void _CellClick_Handler(DataGridViewCell tdgvCurrentCel)
Se produce cuando se hace clic en cualquier parte de una celda.
override void _Binding()
Bindear objetos específicos
static System.Drawing.Icon envio_etiquetas
Busca un recurso adaptado de tipo System.Drawing.Icon similar a (Icono).
Botón que muestra las ventas (del tipo de documento que sea) del cliente para selección múltiple Por ...
Clase de negocio para la líneas de las etiquetas de envío
int _Num_Decimales
Número de decimales de la máscara
Definition: clsEwBase.cs:6240
Clase de negocio para Etiquetas de envío
List< string > _Lista_Campos
Lista con los campos que queremos recuperar
_Click_Before_Handler _Click_Before
_Click_Before_Handler
string _Tabla
Tabla de la que se presentarán los datos
Custom column type dedicated to the DataGridViewNumericUpDownCell cell type.
Definition: Mantegrid.cs:3451
Muestra el mantenimiento correspondiente a _Form con el registro correspondiente al _Codigo ...
Clase btNavegarAlbaran: Botón para la navegación a un documento de venta/compra de tipo albarán...
delegate void _Click_Before_Handler(object sender, ref Boolean tlOk)
_Click_Before_Handler
Proporciona características adicionales de las máscaras de Eurowin
Definition: clsEwBase.cs:6212
eTipoDocumento
Detalle los tipos de documento posibles de ventas y compras
Definition: docsvenenum.cs:32
string _Form
Referencia al formulario
_Click_Before_Handler _Click_Before
_Click_Before_Handler
_EstadosMantenimiento
Declaro un enum para los estados del mantenimiento.
Definition: clsEwBase.cs:1671
string _NombreManteNet
Nombre del mantenimiento de .Net
Base para los botones de Eurowin
string _Titulo
Titulo de la ventana
override void OnLoad(EventArgs e)
Override del método OnLoad
static System.Drawing.Icon envio_reparto
Busca un recurso adaptado de tipo System.Drawing.Icon similar a (Icono).
decimal _Rango_Min
Valor mínimo según la máscara. Es la máscara de VFP convertida a decimal y en negativo ...
Definition: clsEwBase.cs:6250
delegate void _Click_Before_Handler(ref Boolean tlOk)
_Click_Before_Handler
Al volver de la web del Compliance en algunos casos es necesario realizar el refresco de los parámetr...
delegate void _Mantenimiento_Estado_Change_Handler(_EstadosMantenimiento teEstado)
Delegado para el cambio de estado
Base para los mantenimientos de Sage TPV
Definition: FormMante.cs:26
delegate void _KeyPress_Handler(object sender, KeyPressEventArgs e)
Se dispara cuando se pulsa y suelta una tecla
string _Campos
lista de campos separados por comas que nos presentará en el browser
string _Condicion
condición que se podrá especificar en el momento de realizar la consulta SQL
_Click_After_Handler _Click_After
_Click_After_Handler
_Click_Before_Handler _Click_Before
_Click_Before_Handler
string _Clave
campos que forman la clave primaria del browser separados por comas
Presenta un datagridview con botones añadir y borrar tipo Mantegrid de Eurowin
Definition: Mantegrid.cs:30
string _Campo_Predet
Campo predeterminado que se utilizará en la presentación de la información