btLotes.cs
1 using System;
2 using System.Windows.Forms;
3 using sage.ew.global;
4 using sage.ew.lote.Clases;
5 using sage.ew.docventatpv;
6 using sage.ew.functions;
7 using sage.ew.interficies;
8 using sage.ew.ewbase;
10 using sage.ew.botones;
11 using sage.ew.enumerations;
12 
13 namespace sage.ew.lote.UserControls
14 {
19  {
20  #region Propiedades
21 
22  private BotonesExtensiones _ControladorBoton
23  {
24  get
25  {
26  if (_oControladorBoton == null)
27  _oControladorBoton = new BotonExtensionLotesImpl();
28  return _oControladorBoton;
29  }
30  set { _oControladorBoton = value; }
31  }
32  private BotonesExtensiones _oControladorBoton = null;
33 
37  public dynamic _Documento
38  {
39  get { return _ControladorBoton.getDocumento(); }
40  set { _ControladorBoton.setDocumento(value); }
41  }
42 
46  public IDocumentoLineaExtensiones _DocLinea
47  {
48  get { return _ControladorBoton.getLinea(); }
49  set { _ControladorBoton.setLinea(value); }
50  }
51 
55  public Mantegrid _GridArt
56  {
57  get { return _ControladorBoton.getGrid(); }
58  set { _ControladorBoton.setGrid(value); }
59  }
60 
61  #endregion Propiedades
62 
63  #region Variables
64 
65  // Obtener la configuración del módulo de LOTES
66  private LotesConfig _oLotesConfig = (LotesConfig)EW_GLOBAL._GetVariable("wo_lotesconfig");
67 
68  #endregion Variables
69 
70  #region CONSTRUCTORES
71 
75  public btLotes()
76  {
77  //PE-100866 Al cargar en diseño falla, se pone temporalmente try
78  if (EW_GLOBAL._EsEjecutable)
79  {
80  // PARTE 89581
81  // Si la empresa no trabaja con series deshabilito el botón.
82  if (((LotesConfig)EW_GLOBAL._GetVariable("wo_lotesconfig"))._ModuloLotes || EW_GLOBAL._EdicionPerfiles) // 90441
83  {
84  Visible = true;
85 
86  // PARTE 90507
87  if (((LotesConfig)EW_GLOBAL._GetVariable("wo_lotesconfig"))._ModuloLotes)
88  {
89  Text = _oLotesConfig._Definicion.Trim(); //PE-90360
90  }
91  else
92  {
93  if (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_hera")))
94  Text = "Partidas";
95  else
96  Text = "Lotes";
97  // FPARTE 89581
98  }
99  // FPARTE 90507
100 
101  }
102  else
103  Visible = false;
104  // FPARTE 89581
105 
106  }
107 
108  Image = images.Properties.Resources.Lotes_32x32;
109 
110  // Capturamos el evento click
111  Click += new EventHandler(btLotes_Click);
112 
113  //Necesitamos el sender (Mantegrid) => usamos el evento extendido
114  _Click_BeforeExtended += new _Click_BeforeExtended_Handler(btLotes__Click_BeforeExtended);
115  }
116 
117  void btLotes__Click_BeforeExtended(object sender, EventArgs e, ref bool tlOk)
118  {
119  //Capturamos el sender => Que presuntamente es el propio grid
120  if (_GridArt == null && sender is Mantegrid)
121  _GridArt = (Mantegrid)sender;
122 
123  //Paro el click del mante
124  tlOk = false;
125 
126  }
127 
128  #endregion CONSTRUCTORES
129 
130  #region METODOS
131 
132 
138  public void btLotes_Click(object sender, EventArgs e)
139  {
140  _ControladorBoton.EjecutarAsignacion();
141 
142  lanzarEventoClickAfter();
143  }
144 
148  public void _Asignacion_Lotes(ewCampo toUnidades = null, bool tlAutomatico = false)
149  {
150  bool llOk = true;
151 
152  lanzarEventoClickBefore(ref llOk);
153 
154  if (llOk)
155  {
156  //Invoco a negocio
157  _ControladorBoton.EjecutarAsignacion(toUnidades, tlAutomatico);
158 
159  lanzarEventoClickAfter();
160  }
161  }
162 
163  private void lanzarEventoClickAfter()
164  {
165  //Lotes no publican eventos
167  //var handler = _Click_After;
168  //if (handler != null)
169  // handler();
170  }
171 
172  private void lanzarEventoClickBefore(ref bool tlOk)
173  {
174  //Lotes no publican eventos
176  //var handler = _Click_Before;
177  //if (handler != null)
178  // handler(ref tlOk);
179  }
180 
181  #endregion METODOS
182  }
183 
188  {
189  #region Variables
190 
191  // Obtener la configuración del módulo de LOTES
192  private LotesConfig _oLotesConfig = (LotesConfig)EW_GLOBAL._GetVariable("wo_lotesconfig");
193 
194  private bool _lEvitarRecursivitat = false;
195 
196  #endregion Variables
197 
198  #region Constructores
199 
204  : base(enumerations.eTipoExtension.lotes) { }
205 
210  public BotonExtensionLotesImpl(dynamic toDocumento)
211  : base(enumerations.eTipoExtension.lotes)
212  {
213  setDocumento(toDocumento);
214  }
215 
216  #endregion Constructores
217 
223  public override void EjecutarAsignacion(ewCampo toUnidades = null, bool tlAutomatico = false)
224  {
225 
226  //Sino tengo documento acabo
227  if (!tengoDocumento()) return;
228 
229  // 86101
230  if (!tengoNumero())
231  {
232  FUNCTIONS._MessageBox("Debe seleccionar un documento.", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, DialogResult.OK);
233  return;
234  }
235  // fi 86101
236 
237  if (traspasadoEjercicio())
238  {
239  FUNCTIONS._MessageBox("El documento está traspasado de ejercicio. Para consultar la asignación de " + Convert.ToString(EW_GLOBAL._GetVariable("wc_deflote")).ToLower() + " debe acceder desde el ejercicio en el que está documento.", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, DialogResult.OK);
240  return;
241  }
242 
243  dynamic loLineaActual = null;
244  //Recupero la linea
245  if (!_ObtenerLineaDeTrabajo(ref loLineaActual))
246  return;
247 
248  // Mirem que la linia no sigui de comentari
249  if (tengoGrid() && elGridTieneFilaSeleccionada() && laLineaEsDeArticulo())
250  {
251  try //dichosos dynamic... :(
252  {
253  //Si esta tratando de ver series de otros años... pues no va a poder ser
254  if (getDocumento()._EjercicioDB != Convert.ToString(EW_GLOBAL._GetVariable("wc_any")).Trim())
255  {
256  if (!tlAutomatico)
257  {
258  DialogResult lodialog = functions.FUNCTIONS._MessageBox("El documento pertenece a otro ejercicio. " + Environment.NewLine +
259  "Para consultar la asignación de " + Convert.ToString(EW_GLOBAL._GetVariable("wc_deflote")).ToLower() + " debe acceder desde el ejercicio en el que está documento.",
260  MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, DialogResult.None);
261  return;
262  }
263  }
264  }
265  catch
266  {
267  //No registro nada pues trato de acceder al tuntun suponiendo que será un documento
268  }
269 
270 
271 
272  ewCampo loUnidades = new ewCampo();
273 
274  loLineaActual._Save();
275  _Asignacion_Lotes(loUnidades);
276 
277  if (loUnidades._NewVal != null && Convert.ToDecimal(loUnidades._NewVal) != loLineaActual._Unidades)
278  {
279  _lEvitarRecursivitat = true;
280  decimal lnPeso = 0;
281  if (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_peso")))
282  lnPeso = loLineaActual._Peso;
283 
284  loLineaActual._Unidades = Convert.ToDecimal(loUnidades._NewVal);
285 
286  if (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_peso")) && loLineaActual._Peso != lnPeso)
287  loLineaActual._Peso = lnPeso;
288 
289  _lEvitarRecursivitat = false;
290  }
291 
292  loLineaActual._Recalcular_Importe();
293  loLineaActual._Recalcular_Stock();
294  }
295  }
296 
300  private void _Asignacion_Lotes(ewCampo toUnidades = null, bool tlAutomatico = false)
301  {
302  if (_lEvitarRecursivitat) return;
303 
304  //Sino tengo documento o no tengo numero acabo
305  if (!tengoDocumento() || !tengoNumero())
306  return;
307 
308  // Això ha d'anar després de tots els returns
309  _lEvitarRecursivitat = true;
310 
311  //PARTE 76624 Se modifica el control para que lo mire por línea y no por grid dado que al crear lineas no vinculadas al grid se disparaba
312  dynamic loLineaActual = null;
313  //Recupero la linea
314  if (!_ObtenerLineaDeTrabajo(ref loLineaActual))
315  return;
316 
317  //Sino tengo artículo acabo
318  if (string.IsNullOrWhiteSpace((string)loLineaActual._Articulo))
319  {
320  //Informamos al usuario si el click es manual
321  if (!tlAutomatico)
322  {
323  //Si no tiene IVA => No es un articulo Dolar. Puede ser un comentario o que no haya línea
324  if (string.IsNullOrWhiteSpace((string)loLineaActual._TipoIva))
325  FUNCTIONS._MessageBox("Debes informar el artículo antes de introducir " + _oLotesConfig._Definicion.Trim() + ".", //PE-90360
326  MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, DialogResult.None);
327  else
328 
329  FUNCTIONS._MessageBox("Artículos sin código no trabajan con " + _oLotesConfig._Definicion.Trim() + ".", //PE-90360
330  MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, DialogResult.None);
331  }
332  }
333  else
334  {
335  if (loLineaActual._UsaLotes) // 88012
336  {
337  //100163
338  LinVenDet<LinVenDetLotes> loLinVenDetLotes = new LinVenDet<LinVenDetLotes>();
339  loLinVenDetLotes._Lineas = loLineaActual;
340  loLinVenDetLotes._Automatico = tlAutomatico;
341  loLinVenDetLotes._Load();
342  // FI 100163
343 
344  if (toUnidades != null) toUnidades._OldVal = toUnidades._NewVal = loLineaActual._Unidades; // 100762
345  }
346  else
347  {
348  // si esta forçat per algun canvi d'unitats, no cal missatge
349  if (!tlAutomatico)
350  {
351  // 103254
352  if (loLineaActual._oArticulo._ArtLot._Lote)
353  FUNCTIONS._MessageBox("Este artículo no trabaja con " + _oLotesConfig._Definicion.Trim().ToLower() + " hasta el " + loLineaActual._oArticulo._ArtLot._Fecha.ToString(EW_GLOBAL._CustomFormatDate) + " .",
354  MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, DialogResult.None);
355  else
356  FUNCTIONS._MessageBox("Este artículo no trabaja con " + _oLotesConfig._Definicion.Trim().ToLower() + ".",
357  MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, DialogResult.None);
358  // fi 103254
359  }
360  }
361  }
362  _lEvitarRecursivitat = false;
363  }
364 
365  }
366 }
override void EjecutarAsignacion(ewCampo toUnidades=null, bool tlAutomatico=false)
Método para realizar la asignación de Series
Definition: btLotes.cs:223
bool _Load()
Cargará todas las series/lotes asignadas a una linea del documento de venta
Definition: LinVenDet.cs:677
void _Asignacion_Lotes(ewCampo toUnidades=null, bool tlAutomatico=false)
Executo el codi del click del botó LOTES
Definition: btLotes.cs:148
dynamic _Lineas
Objeto que continene una linea de detalle del documento de venta. Es un array, hay que acceder al índ...
Definition: LinVenDet.cs:564
BotonExtensionLotesImpl(dynamic toDocumento)
Constructor
Definition: btLotes.cs:210
Interfície para líneas que trabajan con extensiones. Hereda de IDocumentLinea
Clase abstracta con la operativa base para botones de extensiones (series y lotes) ...
Botón que nos presentará la pantalla de Lotes
Definition: btLotes.cs:18
Classe campo para las entidades, que permitirá comprobar si se ha cambiado su valor ...
Definition: clsEwBase.cs:676
bool _Automatico
Indica si se ha instanciado mediante botón o con el set de unidades/peso
Definition: LinVenDet.cs:598
Interfaz utilizada en los controles que se añaden en los perfiles
btLotes()
Crea una nueva instancia de la classe btAparcarTiquet
Definition: btLotes.cs:75
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
Muestra el mantenimiento correspondiente a _Form con el registro correspondiente al _Codigo ...
object _NewVal
Valor nuevo
Definition: clsEwBase.cs:712
dynamic getDocumento()
Obtiene el documetno
void btLotes_Click(object sender, EventArgs e)
Click
Definition: btLotes.cs:138
Presenta un datagridview con botones añadir y borrar tipo Mantegrid de Eurowin
Definition: Mantegrid.cs:30
Clase que gestiona las series/lotes asignados a una linea de un documento de venta ...
Definition: LinVenDet.cs:534