GeneradorMontajes.cs
1 using sage.ew.db;
2 using sage.ew.functions;
3 using sage.ew.interficies;
4 using System;
5 using System.Collections.Generic;
6 using System.ComponentModel;
7 using System.Data;
8 using System.Linq;
9 using System.Text;
10 
11 namespace sage.ew.serie
12 {
17  internal class GeneradorMontajes
18  {
19  #region Propiedades
20 
24  public BindingList<LinVenDetSeriesMontajes> _Lista
25  {
26  get { return _lisLista; }
27  set { _lisLista = value; }
28  }
29  private BindingList<LinVenDetSeriesMontajes> _lisLista;
30 
37  public bool _MontajeMinimoAutomatico
38  {
39  get { return _lMontajeMinimaAutomatica; }
40  set { _lMontajeMinimaAutomatica = value; }
41  }
42  private bool _lMontajeMinimaAutomatica;
43 
47  public string _Inicial
48  {
49  get { return _cIni; }
50  set { _cIni = value; }
51  }
52  private string _cIni = "";
53 
57  public string _Final
58  {
59  get { return _cFin; }
60  set { _cFin = value; }
61  }
62  private string _cFin = "";
63 
67  public string _Prefijo
68  {
69  get { return _cPrefijo; }
70  set { _cPrefijo = value; }
71  }
72  private string _cPrefijo = "";
73 
77  public bool _FiltrarAlmacen
78  {
79  get { return _lFiltrarAlmacen; }
80  set { _lFiltrarAlmacen = value; }
81  }
82  private bool _lFiltrarAlmacen = true;
83 
84  #endregion Propiedades
85 
89  private IDocumentLinea _oLineaDocumento;
90 
94  private int _nRequeridas = 0;
95 
99  private Montaje _oMontaje = new Montaje();
100 
104  private List<string> _ListaExclusiones
105  {
106  get
107  {
108  if (_llisExclusiones == null) //Sino tengo lista la creo
109  _llisExclusiones = new List<string>();
110 
111  return _llisExclusiones;
112  }
113  set { _llisExclusiones = value; }
114  }
115  private List<string> _llisExclusiones = null;
116 
117 
118  #region Constructores
119 
124  public GeneradorMontajes(IDocumentLinea toLinea)
125  {
126  _oLineaDocumento = toLinea;
127  }
128 
129  #endregion Constructores
130 
131  #region Métodos públicos
132 
137  public bool _Montajes_Automaticos()
138  {
139  if (!_ComprobacionesInicialesOk())
140  return false;
141 
142  //Valido que tenga elementos que rellenar. Sino, acabo.
143  if (_nRequeridas == 0) return true; //No hay que hacer nada
144 
145  #region parametros
146 
147  string lcArticulo = _oLineaDocumento._Articulo.Trim();
148 
149  //Determino si estamos tratando un abono ( => los montajes han de estar asignados)
150  bool llBaja = (Convert.ToInt32(_oLineaDocumento._Unidades) < 0);
151 
152  //Filtro por almacen
153  string lcAlmacen = string.Empty;
154  if (_FiltrarAlmacen) lcAlmacen = _oLineaDocumento._Almacen.Trim();
155 
156  //Creo la lista de exclusiones (valores inválidos o preexistentes)
157  CrearListaExclusiones();
158 
159  #endregion parametros
160 
161  bool llOk = false;
162  DataTable ldtDatos;
163 
164  ldtDatos = _oMontaje._Obtener_Montajes(lcArticulo, llBaja, _Inicial, _Final, lcAlmacen, _ListaExclusiones);
165 
166  if (ldtDatos.Rows.Count > 0)
167  {
168  llOk = true;
169 
170  //Valores encontrados en la tabla VENSER
171  foreach (DataRow ldr in ldtDatos.Rows)
172  {
173  //Determino la primera posición donde falta el montaje
174  int lnIndiceLista = _PrimerElementoVacio();
175 
176  //Le asigno el montaje y lo grabo
177  _Lista[lnIndiceLista]._Codigo = ldr[0].ToString();
178 
179  //Miro si ya he obtenido todos los que necesitaba
180  _nRequeridas--;
181  if (_nRequeridas == 0) break;
182  }
183  }
184  else
185  {
186  //NO tengo montajes disponibles
187  llOk = false;
188  }
189 
190  return llOk;
191  }
192 
193  #endregion Métodos públicos
194 
195  #region Métodos privados
196 
201  private int _PrimerElementoVacio()
202  {
203  int lnPrimerElemtoVacio = _Lista.IndexOf(_Lista.First(loObj => string.IsNullOrEmpty(loObj._Codigo)));
204  return lnPrimerElemtoVacio;
205  }
206 
211  private int _Cuantos_montajes_faltan()
212  {
213  //Calculo cuantos me faltan
214  int lnRequeridas = _Lista.Count(loObj => string.IsNullOrEmpty(loObj._Codigo));
215  return lnRequeridas;
216  }
217 
222  private bool _ComprobacionesInicialesOk()
223  {
224  //Requerido el artículo
225  if (string.IsNullOrEmpty(_oLineaDocumento._Articulo)) return false; //Mal articulo
226 
227  //Calculo cuantos me faltan
228  _nRequeridas = _Cuantos_montajes_faltan();
229 
230  //Valido que tenga elementos que rellenar. Sino, acabo.
231  if (_nRequeridas == 0) return true; //No hay que hacer nada
232 
233  //No tengo montaje mínimo y esta activado que lo obtenga.
234  if (string.IsNullOrWhiteSpace(_Inicial) && _MontajeMinimoAutomatico)
235  _Inicial = _Lista[_Lista.IndexOf(_Lista.Min())]._Codigo;
236 
237  return true;
238  }
239 
243  private void CrearListaExclusiones()
244  {
245  //Lista de exclusiones
246  foreach (LinVenDetSeriesMontajes ldr in _Lista)
247  {
248  if (!String.IsNullOrWhiteSpace(ldr._Codigo))
249  {
250  _ListaExclusiones.Add(ldr._Codigo.Trim());
251  }
252  }
253  }
254 
255  #endregion Métodos privados
256  }
257 }
Interficie mínima de las líneas (Mantener lo mas reducida posible)
Definition: IDocument.cs:186