frmTraspasoLotes.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 sage.ew.formul.Forms;
10 using sage.ew.docventatpv;
12 using sage.ew.ewbase;
13 using sage.ew.global;
14 using sage.ew.lote.Clases;
15 using sage.ew.objetos;
17 
18 namespace sage.ew.lote.Forms
19 {
23  public partial class frmTraspasoLotes : FormDialog
24  {
28  private int _IndexColumnaSel = 0;
29 
30  private ewDocVentaLinTPV _oLinea = null;
31 
32 
36  public ewDocVentaLinTPV _Linea
37  {
38  get
39  {
40  return this._oLinea;
41  }
42  set
43  {
44  this._Lotes = null;
45  this._oLinea = value;
46 
47  //Asignem les partidas
48  DataTable ldtLotes = new DataTable();
49  if (this._oLinea.__Contiene_Lotes(ref ldtLotes))
50  {
51  this._Lotes = ldtLotes;
52  }
53  }
54  }
55 
59  public DataTable _Lotes = null;
60 
64  public List<Lote> _LotesSeleccionadas = new List<Lote>();
65 
69  public decimal _UnidadesSeleccionadas = 0;
70 
74  public decimal _CajasSeleccionadas = 0;
75 
79  public decimal _PesoSeleccionadas = 0;
80 
81 
85  public decimal _UnidadesTraspaso
86  {
87  get
88  {
89  return this._oUnidadesTraspaso;
90  }
91  set
92  {
93  this._oUnidadesTraspaso = value;
94  this._UnidadesSeleccionadas = value;
95  }
96  }
97 
101  public decimal _CajasTraspaso
102  {
103  get
104  {
105  return this._oCajasTraspaso;
106  }
107  set
108  {
109  this._oCajasTraspaso = value;
110  this._CajasSeleccionadas = value;
111  }
112  }
113 
117  public decimal _PesoTraspaso
118  {
119  get
120  {
121  return this._oPesoTraspaso;
122  }
123  set
124  {
125  this._oPesoTraspaso = value;
126  this._PesoSeleccionadas = value;
127  }
128  }
129 
130  //Variables globales
131  private ewMascara loMascaraUnidades = new ewMascara(Convert.ToString(EW_GLOBAL._GetMascara(KeyDiccionarioMascara.wc_unidades)));
132  private ewMascara loMascaraImport = new ewMascara(EW_GLOBAL._GetMascara(KeyDiccionarioMascara.wc_total));
133  private ewMascara loMascaraPeso = new ewMascara(EW_GLOBAL._GetMascara(KeyDiccionarioMascara.wc_mascarapeso));
134 
135  private bool llPeso = Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_Peso"));
136  private bool llCajas = Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_Cajas"));
137 
138  // Obtener la configuración del módulo de LOTES
139  private LotesConfig _oLotesConfig = (LotesConfig)EW_GLOBAL._GetVariable("wo_lotesconfig"); // 86084
140 
141  private decimal _oUnidadesTraspaso = 0;
142  private decimal _oCajasTraspaso = 0;
143  private decimal _oPesoTraspaso = 0;
144 
149  {
150  InitializeComponent();
151  }
152 
158  public frmTraspasoLotes(ewDocVentaLinTPV loLinea, decimal loUnidades)
159  {
160  InitializeComponent();
161 
162  //Grid
163  this.ewgridResultados.__ReadOnly();
164  this.ewgridResultados.AutoGenerateColumns = false;
165  this.ewgridResultados.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None;
166  this.ewgridResultados.CellClick += new DataGridViewCellEventHandler(ewgridResultados_CellClick);
167  this.ewgridResultados.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(ewgridResultados_DataBindingComplete);
168  this.ewgridResultados.MouseDown += new MouseEventHandler(ewgridResultados_MouseDown);
169  this.ewgridResultados.CellContentClick += new DataGridViewCellEventHandler(ewgridResultados_CellContentClick);
170  this.ewgridResultados.CellValueChanged += new DataGridViewCellEventHandler(ewgridResultados_CellValueChanged);
171  this.ewgridResultados.CellEnter += new DataGridViewCellEventHandler(ewgridResultados_CellEnter);
172  this.ewgridResultados.ReadOnly = false;
173 
174  this._Linea = loLinea;
175  this._UnidadesTraspaso = loUnidades;
176  }
177 
181  protected void _LoadGrid()
182  {
183  string lcTituloCajas = Convert.ToString(EW_GLOBAL._GetVariable("wc_descajas")).Trim();
184  string lcTituloUnidades = Convert.ToString(EW_GLOBAL._GetVariable("wc_desunidades")).Trim();
185 
187  {
188  ldgtbColSeleccionada.Name = "sel";
189  ldgtbColSeleccionada.HeaderText = "Sel.";
190  ldgtbColSeleccionada.ValueType = typeof(bool);
191  ldgtbColSeleccionada.Visible = true;
192  ldgtbColSeleccionada._NoParar = true;
193  ldgtbColSeleccionada.Width = 50;
194  ldgtbColSeleccionada.ToolTipText = "Sirve para seleccionar los elementos con los que operar";
195  ldgtbColSeleccionada.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
196  this.ewgridResultados.Columns.Add(ldgtbColSeleccionada);
197  }
198 
200  {
201  ldgtbColArticulo.Name = "lote";
202 
203  ldgtbColArticulo.HeaderText = _oLotesConfig._Definicion.First().ToString().ToUpper() + _oLotesConfig._Definicion.Substring(1).ToString().ToLower(); // 86084
204  ldgtbColArticulo.ValueType = typeof(string);
205  ldgtbColArticulo.Width = 500;
206  ldgtbColArticulo.Visible = true;
207  ldgtbColArticulo._NoParar = true;
208  ldgtbColArticulo.ReadOnly = true;
209  ldgtbColArticulo.ToolTipText = "Código de " + _oLotesConfig._Definicion.Trim().ToLower(); // 86084
210  ldgtbColArticulo.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
211  this.ewgridResultados.Columns.Add(ldgtbColArticulo);
212  }
213 
214  //Cajas
216  {
217  ldgtbColCajas.Name = "cajas";
218  ldgtbColCajas.HeaderText = lcTituloCajas;
219  ldgtbColCajas.ValueType = typeof(decimal);
220  ldgtbColCajas.Width = 50;
221  ldgtbColCajas.Visible = llCajas; //Visible si se trabaja con cajas
222  ldgtbColCajas._NoParar = true;
223  ldgtbColCajas.ReadOnly = true;
224  ldgtbColCajas.ToolTipText = lcTituloCajas + " del pedido";
225  ldgtbColCajas.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
226  ldgtbColCajas.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
227  this.ewgridResultados.Columns.Add(ldgtbColCajas);
228  }
229  //Unidades
231  {
232  ldgtbColUnidades.Name = "unidades";
233  ldgtbColUnidades.HeaderText = lcTituloUnidades;
234  ldgtbColUnidades.Width = 50;
235  ldgtbColUnidades.Visible = true;
236  ldgtbColUnidades._NoParar = true;
237  ldgtbColUnidades.ReadOnly = true;
238  ldgtbColUnidades.ToolTipText = lcTituloUnidades + " del artículo en el pedido";
239  ldgtbColUnidades.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
240  ldgtbColUnidades.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
241  ldgtbColUnidades.DefaultCellStyle.Format = this.loMascaraUnidades._Mascara_Net;
242  this.ewgridResultados.Columns.Add(ldgtbColUnidades);
243  }
244  //Peso
246  {
247  ldgtbColPesoPedido.Name = "peso";
248  ldgtbColPesoPedido.HeaderText = "Peso";
249  ldgtbColPesoPedido.ValueType = typeof(decimal);
250  ldgtbColPesoPedido.Width = 50;
251  ldgtbColPesoPedido.Visible = llPeso;
252  ldgtbColPesoPedido._NoParar = true;
253  ldgtbColPesoPedido.ReadOnly = true;
254  ldgtbColPesoPedido.ToolTipText = "Peso del pedido";
255  ldgtbColPesoPedido.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
256  ldgtbColPesoPedido.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
257  ldgtbColPesoPedido.DefaultCellStyle.Format = this.loMascaraPeso._Mascara_Net;
258  this.ewgridResultados.Columns.Add(ldgtbColPesoPedido);
259  }
260 
261  //Carreguem la grid
262  this.ewgridResultados.DataSource = this._Lotes;
263 
264  //Asigno el nombre de las columnas
265  foreach (DataGridViewColumn ldgvCol in this.ewgridResultados.Columns)
266  {
267  ldgvCol.DataPropertyName = ldgvCol.Name;
268  }
269 
270  //Asigno les x defecte seleccionades
271  if (this._LotesSeleccionadas.Count > 0)
272  {
273  foreach (DataGridViewRow loRow in this.ewgridResultados.Rows)
274  {
275  foreach (Lote loLote in this._LotesSeleccionadas)
276  {
277  if (loLote._Codigo.Trim() == loRow.Cells["lote"].Value.ToString().Trim())
278  {
279  loRow.Cells[this._IndexColumnaSel].Value = true;
280  loRow.Cells["unidades"].Value = loLote._Unidades;
281 
282  if (llPeso)
283  loRow.Cells["peso"].Value = loLote._Peso;
284 
285  break;
286  }
287  }
288  }
289  }
290  else
291  {
292  decimal lnTotalTemp = this._UnidadesTraspaso;
293  foreach (DataGridViewRow loRow in this.ewgridResultados.Rows)
294  {
295  if (lnTotalTemp > 0)
296  loRow.Cells[this._IndexColumnaSel].Value = true;
297 
298  lnTotalTemp = lnTotalTemp - Convert.ToDecimal(loRow.Cells["unidades"].Value);
299  }
300  }
301 
302  //Actualitzem els totals
303  this.actualizaTotalTraspaso();
304 
305  //Refresquem
306  this.ewgridResultados.Refresh();
307  this.ewgridResultados.RefreshEdit();
308  }
309 
314  protected override void OnLoad(EventArgs e)
315  {
316  bool llOk = true;
317 
318  // Canviar el caption del formulari en funció de la configuració de LOTES
319  this.Text = "Traspaso de " + _oLotesConfig._Definicion.Trim().ToLower() + " de salida "; // 86084
320 
321  if (this._Linea == null)
322  {
323  this._MessageBox("Se ha declarado el objeto sin que se le haya asignado la linea del Documento.",
324  MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, System.Windows.Forms.DialogResult.None);
325  llOk = false;
326  }
327  if (llOk && (this._Lotes == null || this._Lotes.Rows.Count <= 0))
328  {
329  this._MessageBox("El documento de venta no contiene " + _oLotesConfig._Definicion.Trim().ToLower() + ".",
330  MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, System.Windows.Forms.DialogResult.None);
331  llOk = false;
332  }
333 
334  //Comprobació final (tanca el formulari si ha fallat algo)
335  if (!llOk)
336  {
337  this.Close();
338  }
339  else
340  {
341  //Carreguem les dades de l'article
342  this.ewtbArticulo.Text = this._Linea._Articulo;
343  this.ewtbDefinicion.Text = this._Linea._Definicion;
344 
345  //Carrgeuem la grid
346  this._LoadGrid();
347 
348  //Contex menu on rows
349  this.ewgridResultados.ContextMenuStrip = this.ctMenuStrip;
350  this.ewgridResultados.ContextMenuStrip.ItemClicked += new ToolStripItemClickedEventHandler(ContextMenuStrip_ItemClicked);
351 
352  //Actualitzem totals
353  this.actualizaTotalTraspaso();
354 
355  //Refem tamany
356  this._ResizeForm();
357  }
358  }
359 
365  void ewgridResultados_MouseDown(object sender, MouseEventArgs e)
366  {
367  if (e.Button == MouseButtons.Right)
368  {
369  var hti = this.ewgridResultados.HitTest(e.X, e.Y);
370  if (hti.RowIndex >= 0)
371  {
372  this.ewgridResultados.ClearSelection();
373  this.ewgridResultados.Rows[hti.RowIndex].Selected = true;
374  this.ewgridResultados.CurrentCell = this.ewgridResultados.Rows[hti.RowIndex].Cells[0];
375  }
376  }
377  }
378 
384  void ewgridResultados_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
385  {
386  if (this.ewgridResultados.Columns["OPCIONES"] == null)
387  {
388  DataGridViewButtonColumn buttonColumn = new DataGridViewButtonColumn();
389  buttonColumn.Name = "OPCIONES";
390  buttonColumn.HeaderText = "Opciones";
391  buttonColumn.Text = "...";
392  buttonColumn.ToolTipText = "Opciones";
393  buttonColumn.DefaultCellStyle.Padding = new Padding(20, 1, 20, 1);
394  buttonColumn.DisplayIndex = this.ewgridResultados.Columns.Count + 1;
395  buttonColumn.Visible = true;
396  buttonColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
397  // Use the Text property for the button text for all cells rather
398  // than using each cell's value as the text for its own button.
399  buttonColumn.UseColumnTextForButtonValue = true;
400  buttonColumn.ContextMenuStrip = this.ctMenuStrip;
401  // Add the button column to the control.
402  this.ewgridResultados.Columns.Insert(this.ewgridResultados.Columns.Count, buttonColumn);
403  }
404  }
405 
411  void ewgridResultados_CellContentClick(object sender, DataGridViewCellEventArgs e)
412  {
413  this.ewgridResultados.CommitEdit(DataGridViewDataErrorContexts.Commit);
414  }
415 
421  void ewgridResultados_CellEnter(object sender, DataGridViewCellEventArgs e)
422  {
423  this.ewgridResultados_CellClick(sender, e);
424  }
425 
431  void ewgridResultados_CellClick(object sender, DataGridViewCellEventArgs e)
432  {
433  if (e.RowIndex >= 0)
434  {
435  //Edició de celdes
436  this.ewgridResultados.Rows[e.RowIndex].ReadOnly = true;
437 
438  //Comprobem que la celda afectada sigui la de selecció
439  if (e.ColumnIndex == this._IndexColumnaSel)
440  {
441  this.ewgridResultados.Rows[e.RowIndex].ReadOnly = false;
442  }
443 
444  //Boto d'opcions
445  if (this.ewgridResultados.Columns[e.ColumnIndex].Name == "OPCIONES")
446  {
447  var ptLowerLeft = this.ewgridResultados.PointToClient(Cursor.Position);
448  this.ctMenuStrip.Show(this.ewgridResultados, ptLowerLeft);
449  }
450  }
451  }
452 
458  void ewgridResultados_CellValueChanged(object sender, DataGridViewCellEventArgs e)
459  {
460  if (e.RowIndex >= 0)
461  {
462  DataGridViewRow loRow = (DataGridViewRow)this.ewgridResultados.Rows[e.RowIndex];
463  if (loRow.Cells[e.ColumnIndex].Value != null)
464  {
465  //Actualitzem las unidades totales a traspassar
466  this.actualizaTotalTraspaso();
467  }
468  }
469  }
470 
474  private void actualizaTotalTraspaso()
475  {
476  decimal lnTotalSeleccion = 0;
477  foreach (DataGridViewRow loRow in this.ewgridResultados.Rows)
478  {
479  if (loRow.Cells[this._IndexColumnaSel].Value != null && Convert.ToBoolean(loRow.Cells[this._IndexColumnaSel].Value))
480  {
481  lnTotalSeleccion = lnTotalSeleccion + Convert.ToDecimal(loRow.Cells["unidades"].Value);
482  }
483  }
484  this.ewtbTotalTraspaso.Text = this._UnidadesTraspaso.ToString(loMascaraUnidades._Mascara_Net);
485  this.ewtbTotalSeleccion.Text = lnTotalSeleccion.ToString(loMascaraUnidades._Mascara_Net);
486  }
487 
493  void ContextMenuStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
494  {
495  //Tanquem el menu contextual abans que res per evitar solapaments als messatges x pantalla
496  this.ctMenuStrip.Close();
497 
498  switch (e.ClickedItem.Name)
499  {
500  //Selecionar todo / nada
501  case "tsmSelectAll":
502  this.ewcbSelectAll.Checked = !this.ewcbSelectAll.Checked;
503  if (this.ewcbSelectAll.Checked)
504  e.ClickedItem.Text = "Deseleccionar todas las líneas";
505  else
506  e.ClickedItem.Text = "Seleccionar todas las líneas";
507  break;
508  }
509  }
510 
516  private void ewcheckbox2_CheckedChanged(object sender, EventArgs e)
517  {
518  foreach (DataGridViewRow loRow in this.ewgridResultados.Rows)
519  {
520  //Selecciona / Deselecciona tot
521  if (this.ewcbSelectAll.Checked)
522  {
523  //Marcamos el registro
524  loRow.Cells[this._IndexColumnaSel].Value = true;
525  }
526  else
527  {
528  //Desmarcamos el registro
529  loRow.Cells[this._IndexColumnaSel].Value = false;
530  }
531  }
532  }
533 
539  private void _ResizeForm(int tnNumRegs = 25)
540  {
541  //Redimensionem la página, por que yo lo valgo :)
542  if (this.ewgridResultados.Rows.Count < tnNumRegs)
543  {
544  int lnGridSize = this.ewgridResultados.Height;
545  int lnHeight = 0;
546  foreach (DataGridViewRow row in this.ewgridResultados.Rows)
547  lnHeight += row.Height;
548  lnHeight += this.ewgridResultados.ColumnHeadersHeight;
549  int lnWidth = this.ewgridResultados.Width;
550  //Altura del grid
551  this.ewgridResultados.ClientSize = new Size(lnWidth, lnHeight + 2);
552  //Altura del form
553  int lnNewFormSize = this.Height - (lnGridSize - this.ewgridResultados.ClientSize.Height);
554  this.MinimumSize = new System.Drawing.Size(this.MinimumSize.Width, lnNewFormSize);
555  this.MaximumSize = this.MinimumSize;
556  this.Height = lnNewFormSize;
557  //Reposicionem
558  this.CenterToScreen();
559  }
560  }
561 
567  private void btDocAceptar1_Click(object sender, EventArgs e)
568  {
569  bool llOk = false;
570  string lcError = "No ha seleccionado ningún registro para su traspaso.";
571  foreach (DataGridViewRow ldr in this.ewgridResultados.Rows)
572  {
573  if (ldr.Cells[this._IndexColumnaSel].Value != null && (bool)(ldr.Cells[this._IndexColumnaSel].Value) == true)
574  {
575  llOk = true;
576  break;
577  }
578  }
579 
580  if (!llOk)
581  {
582  //Error
583  this._MessageBox(lcError, MessageBoxButtons.OK, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button1, System.Windows.Forms.DialogResult.None);
584  this.DialogResult = DialogResult.None;
585  }
586  else
587  {
588  //Tot be, guardem les series a la propietat publica _LotesSeleccionadas
589  List<Lote> llTemp = new List<Lote>();
590  foreach (DataGridViewRow loRow in this.ewgridResultados.Rows)
591  {
592  if (loRow.Cells[this._IndexColumnaSel].Value != null && Convert.ToBoolean(loRow.Cells[this._IndexColumnaSel].Value))
593  {
594  Lote loLote = new Lote();
595  loLote._Codigo = loRow.Cells["lote"].Value.ToString();
596  loLote._Unidades = Convert.ToDecimal(loRow.Cells["unidades"].Value);
597  loLote._Peso = Convert.ToDecimal(loRow.Cells["peso"].Value);
598 
599  llTemp.Add(loLote);
600 
601  //llTemp.Add(loRow.Cells["lote"].Value.ToString());
602  }
603  }
604  this._LotesSeleccionadas = llTemp;
605  }
606  }
607 
613  private void btDocCancelar1_Click(object sender, EventArgs e)
614  {
615  this.DialogResult = DialogResult.None;
616  this.Close();
617  }
618  }
619 }
frmTraspasoLotes()
Constructor de la clase
void _LoadGrid()
Carga la grid del formulario
Clase para la gestión de los lotes
Definition: Lote.cs:37
frmTraspasoLotes(ewDocVentaLinTPV loLinea, decimal loUnidades)
Constructor del formulario de traspaso de lotes
KeyDiccionarioMascara
Clave para diccionario de máscaras
decimal _Unidades
Unidades asignadas a la venta
Definition: Lote.cs:258
String _Definicion
Definición del LOTE
Definition: LotesConfig.cs:182
Clase para cargar la configuración del módulo de LOTES
Definition: LotesConfig.cs:12
virtual string _Codigo
Valor del campo clave que
Definition: clsEwBase.cs:2513
Clase linea de documento de venta TPV
Clase FormDialog basada en FormBase
Definition: FormDialog.cs:17
Proporciona características adicionales de las máscaras de Eurowin
Definition: clsEwBase.cs:6212
string _Mascara_Net
Máscara convertida en formato .Net
Definition: clsEwBase.cs:6235
Presenta un datagridview con botones añadir y borrar tipo Mantegrid de Eurowin
Definition: Mantegrid.cs:30
override void OnLoad(EventArgs e)
Sobrecarga del Onload
decimal _Peso
Peso asignado a la venta
Definition: Lote.cs:263