OrdenDescuentos.cs
1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Data;
5 using System.Linq;
6 using System.Text;
7 using System.Windows.Forms;
8 using sage.ew.db;
9 using sage.ew.docscompra;
10 using sage.ew.ewbase;
11 using sage.ew.formul.Forms;
12 using sage.ew.global;
13 using sage.ew.interficies;
15 
16 
17 
18 namespace sage.ew.formul.Clases
19 {
23  public class OrdenDescuento
24  {
28  protected internal int _nLinea;
29 
34 
38  public bool _HayCambios = false;
39 
43  public dynamic _Documento;
44 
48  private DataTable _dtEscalado = new DataTable();
49 
50  private string _cEmpresa = EW_GLOBAL._GetVariable("wc_empresa").ToString();
51 
55  public BindingList<LineasOrdenDescuento> _lisLineas;
56 
57  private bool lb_ldmarc = false;
58  private bool lb_climarc = false;
59  private bool lb_cliarrf = false;
60 
61 
62  #region Constructores
63 
67  public OrdenDescuento()
68  {
69  }
70 
71  #endregion
72 
76  public void _Load()
77  {
78  _dtEscalado = _CargarDatos();
79  _dtEscalado = _ValidaDatos(_dtEscalado);
80  _lisLineas = _ConvertirListaLineas();
81 
82  }
83 
87  public DataTable _CargarDatos()
88  {
89  String lcSql;
90  DataTable loDt = new DataTable();
91 
92  lcSql = String.Format("SELECT codigo, nombre, orden FROM {0} WHERE empresa = {1} ORDER BY orden ", DB.SQLDatabase("COMUNES", "ESCALADO"), DB.SQLString(_cEmpresa));
93 
94  DB.SQLExec(lcSql, ref loDt);
95 
96  return loDt;
97  }
98 
104  private DataTable _ValidaDatos(DataTable toDtEscalado)
105  {
106  if (toDtEscalado != null && toDtEscalado.Rows.Count > 0)
107  {
108  Int32 nOrden = toDtEscalado.Rows.Count;
109 
110  // Confirmamos que no existe el escalado 'Linea descuento - Marca' y lo añadimos
111  var l_d_marc = toDtEscalado.AsEnumerable().Where(loEle => loEle.Field<string>("codigo").ToUpper().ToString().Trim() == "L_D_MARC").ToList();
112  if (l_d_marc.Count == 0)
113  {
114  DataRow loRow = toDtEscalado.NewRow();
115  loRow["CODIGO"] = "L_D_MARC";
116  loRow["NOMBRE"] = "Linea descuento - Marca";
117  loRow["ORDEN"] = nOrden + 1;
118  toDtEscalado.Rows.Add(loRow);
119 
120  lb_ldmarc = true;
121 
122  nOrden++;
123  }
124 
125  // Confirmamos que no existe el escalado 'Descuento por Cliente - Marca/Subfamilia' y lo añadimos
126  var cli_marc = toDtEscalado.AsEnumerable().Where(loEle => loEle.Field<string>("codigo").ToUpper().ToString().Trim() == "CLI_MARC").ToList();
127  if (l_d_marc.Count == 0)
128  {
129  DataRow loRow = toDtEscalado.NewRow();
130  loRow["CODIGO"] = "CLI_MARC";
131  loRow["NOMBRE"] = "Descuento por Cliente - Marca/Subfamilia";
132  loRow["ORDEN"] = nOrden + 1;
133  toDtEscalado.Rows.Add(loRow);
134 
135  lb_climarc = true;
136  }
137 
138  // Confirmamos si trabajamos con Descuento por raiz de familia y borramos el escalado 'Descuento Cliente - Raíz de Familia'
139  if (!Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_arrelfam")))
140  {
141  var cliarrf = toDtEscalado.AsEnumerable().Where(loEle => loEle.Field<string>("codigo").ToUpper().ToString().Trim() == "CLI_ARRF").ToList();
142  if (l_d_marc.Count > 0)
143  {
144  toDtEscalado.Rows.Remove(toDtEscalado.AsEnumerable().Where(loEle => loEle.Field<string>("codigo").ToUpper().ToString().Trim() == "CLI_ARRF").FirstOrDefault());
145  lb_cliarrf = true;
146  }
147  }
148 
149  string wc_desobra = Convert.ToString(EW_GLOBAL._GetVariable("wc_desobra"));
150  wc_desobra = wc_desobra.TrimEnd();
151 
152  foreach(DataRow row in toDtEscalado.Rows)
153  {
154  if (row["nombre"].ToString().Contains("Obra"))
155  {
156  row["nombre"] = row["nombre"].ToString().Replace("Obra", wc_desobra);
157  break;
158  }
159  }
160  }
161 
162  if (toDtEscalado != null && toDtEscalado.Rows.Count > 0)
163  {
164  foreach (DataRow row in toDtEscalado.Rows)
165  {
166  row["nombre"] = row["nombre"].ToString().TrimEnd() + " (" + row["codigo"].ToString().TrimEnd() + ")";
167  }
168  }
169 
170  return toDtEscalado;
171  }
172 
173 
174  private BindingList<LineasOrdenDescuento> _ConvertirListaLineas()
175  {
176  _lisLineas = new BindingList<LineasOrdenDescuento>();
177 
178  if (_dtEscalado != null && _dtEscalado.Rows.Count > 0)
179  {
180  int nLin = 1;
181  foreach (DataRow row in _dtEscalado.Rows)
182  {
183  LineasOrdenDescuento loLinea = new LineasOrdenDescuento();
184  loLinea._Load(row, nLin, this);
185  _lisLineas.Add(loLinea);
186  nLin++;
187  }
188  }
189 
190  return _lisLineas;
191  }
192 
197  {
198  _mantegrid._Grid.DataSource = _lisLineas;
199  }
200 
204  public void _Save()
205  {
206  if (_HayCambios)
207  {
208  Actualizar_Registros();
209 
210  Insertar_Registros();
211 
212  OfflineCom_Estado();
213  }
214  }
215 
219  private void Actualizar_Registros()
220  {
221  int nOrden = _lisLineas[_lisLineas.Count - 1]._nOrden;
222 
223  foreach (LineasOrdenDescuento loLin in _lisLineas)
224  {
225  if ((lb_ldmarc && loLin._cCodigo.ToString().Trim() == "L_D_MARC") || (lb_climarc && loLin._cCodigo.ToString().Trim() == "CLI_MARC"))
226  {
227  string lcNombre = (loLin._cCodigo.ToString().Trim() == "L_D_MARC" ? "Descuento por Cliente - Marca/Subfamilia" : "Linea descuento - Marca");
228 
229  DB.SQLExec(" INSERT INTO " + DB.SQLDatabase("COMUNES", "ESCALADO") +
230  " (empresa, codigo, nombre, orden) " +
231  " Values (" + DB.SQLString(_cEmpresa) + "," +
232  DB.SQLString(loLin._cCodigo) + ", " +
233  lcNombre + ", " +
234  DB.SQLString(loLin._nOrden) + ")");
235  }
236  else
237  {
238  string lcModified = "";
239  bool llOrdenCambiado = false;
240  llOrdenCambiado = this.ordenCambiado(loLin._cCodigo, loLin._nOrden, out lcModified);
241  DB.SQLExec(" UPDATE " + DB.SQLDatabase("COMUNES", "ESCALADO") + " " +
242  " SET orden = " + DB.SQLString(loLin._nOrden) + " " +
243  lcModified + " " +
244  " WHERE empresa = " + DB.SQLString(_cEmpresa) + " AND codigo = " + DB.SQLString(loLin._cCodigo));
245 
246  }
247  }
248  }
249 
250 
254  private void Insertar_Registros()
255  {
256  if (lb_cliarrf)
257  {
258  int nOrden = _lisLineas[_lisLineas.Count - 1]._nOrden;
259 
260  var cli_arrf = _dtEscalado.AsEnumerable().Where(loEle => loEle.Field<string>("codigo").ToUpper().ToString().Trim() == "CLI_ARRF").ToList();
261  if (cli_arrf.Count == 0)
262  {
263  DataRow loRow = _dtEscalado.NewRow();
264  loRow["CODIGO"] = "CLI_ARRF";
265  loRow["NOMBRE"] = "Descuento Cliente - Raíz de Familia";
266  loRow["ORDEN"] = nOrden + 1;
267  _dtEscalado.Rows.Add(loRow);
268 
269  string lcModified = "";
270  bool llOrdenCambiado = false;
271  llOrdenCambiado = this.ordenCambiado("CLI_ARRF", nOrden + 1, out lcModified);
272 
273  DB.SQLExec(" UPDATE " + DB.SQLDatabase("COMUNES", "ESCALADO") + " " +
274  " SET orden = " + (nOrden + 1) + " " +
275  lcModified + " " +
276  " WHERE empresa = " + DB.SQLString(_cEmpresa) +
277  " AND codigo = 'CLI_ARRF'" );
278 
279  }
280  }
281  }
282 
283 
291  private bool ordenCambiado(string tcCodigo, int tnOrden, out string tcModified)
292  {
293  tcModified = "";
294  bool tlOrdenCambiado = false;
295 
296  // En _dtEscalado tenemos el orden de los descuentos al hacer el _Load()
297  //
298  DataRow[] registros = this._dtEscalado.Select("codigo=" + DB.SQLString(tcCodigo));
299  if (registros.Count() >= 1)
300  {
301  if (Convert.ToInt32(registros[0]["orden"]) != tnOrden)
302  {
303  // Cambió el orden
304  tlOrdenCambiado = true;
305  tcModified = ", modified = " + DB.SQLString(DateTime.Now);
306  }
307  }
308 
309  return tlOrdenCambiado;
310  }
311 
312 
316  private void OfflineCom_Estado()
317  {
318  // Si tenemos activo el addon de OFFLINE
319  if (EW_GLOBAL._ModuloActivo("OFFLINE"))
320  {
321  // Si el documento se ha enviado por Offline
322  if (DB.SQLExisteCampo("COMUNES", "ESCALADO", "COM_ESTADO"))
323  {
324 
325  foreach (LineasOrdenDescuento loLin in _lisLineas)
326  {
327  DB.SQLExec("UPDATE " + DB.SQLDatabase("COMUNES", "ESCALADO") +
328  " SET com_estado = 2 , " +
329  " com_fecha = " + DB.SQLString(DateTime.Now) + " , " +
330  " modified = " + DB.SQLString(DateTime.Now) + " " +
331  " WHERE com_estado = 1 " +
332  " AND empresa = " + DB.SQLString(_cEmpresa) +
333  " AND codigo = " + DB.SQLString(loLin._cCodigo));
334  }
335  }
336  }
337  }
338  }
339 
340 
345  {
346  #region PROPIEDADES INTERNAS
347 
352 
356  protected internal int _nOrden = 0;
360  protected internal string _cNombre = string.Empty;
361 
365  protected internal string _cCodigo = string.Empty;
366 
370  protected BindingList<OrdenDescuento> _lisLineas;
371 
372  #endregion
373 
374  #region PROPIEDADES PUBLICAS
375 
379  public BindingList<OrdenDescuento> _Lineas
380  {
381  get
382  {
383  if (_lisLineas == null)
384  _lisLineas = new BindingList<OrdenDescuento>();
385 
386  return _lisLineas;
387  }
388  set { _lisLineas = value; }
389  }
390 
391 
395  public string Nombre
396  {
397  get
398  {
399  return _cNombre;
400  }
401  set
402  {
403  _cNombre = value;
404  }
405  }
406 
410  public int Orden
411  {
412  get
413  {
414  return _nOrden;
415  }
416  set
417  {
418  _nOrden = value;
419  }
420  }
421 
425  public string Codigo
426  {
427  get
428  {
429  return _cCodigo;
430  }
431  set
432  {
433  _cCodigo = value;
434  }
435  }
436 
437 
438  #endregion
439 
440  #region CONSTRUCTORES
441 
446  {
447  }
448 
449 
454  public void _Load(DataRow ldr, int nLin, OrdenDescuento od)
455  {
456  _cCodigo = Convert.ToString(ldr["codigo"]).ToString();
457  _cNombre = Convert.ToString(ldr["nombre"]).ToString();
458  _nOrden = Convert.ToInt32(ldr["orden"]);
459  _oOrdenDescuento = od;
460  }
461 
462 
463  #endregion
464 
468  public bool _LineaSubir()
469  {
470  return true;
471  }
472 
476  public bool _LineaBajar()
477  {
478  return true;
479  }
480 
485  public bool _LineaMover(int indiceLineaDestino)
486  {
487  return MoverLineas(indiceLineaDestino + 1);
488  }
489 
493  public bool _LineaPrincipio()
494  {
495  return _LineaMover(0);
496  }
497 
501  public bool _LineaFinal()
502  {
503  return true;
504  }
505 
510  public virtual bool _EsLineaMovible()
511  {
512  return true;
513  }
514 
521  private bool MoverLineas(int indiceLineaDestino, bool tlValidar = true)
522  {
523  dynamic lolin = this;
524 
525  int lnIndice = this._nOrden;
526  bool llInsertar = !(lnIndice + 1 == _oOrdenDescuento._lisLineas.Count);
527 
528  int lnLineaDestino = indiceLineaDestino;
529 
530  MoverLiniaADestino(lnIndice, lnLineaDestino, llInsertar);
531 
532  _oOrdenDescuento._RefescarLineasOrdenDescuento();
533 
534  return true;
535  }
536 
537 
544  private void MoverLiniaADestino(int tnLineaAnt, int tnLineaDestino, bool tlInsertar)
545  {
546  dynamic lolin = this;
547 
548  string lcCodigo = lolin._cCodigo;
549 
550  int nLin = 1;
551 
552  foreach (LineasOrdenDescuento loOd in _oOrdenDescuento._lisLineas)
553  {
554  if (loOd._nOrden == tnLineaAnt && loOd._cCodigo == lcCodigo)
555  {
556  loOd._nOrden = tnLineaDestino;
557  }
558  else
559  {
560  if (nLin == tnLineaDestino)
561  nLin++;
562 
563  loOd._nOrden = nLin;
564  nLin++;
565  }
566  }
567 
568  _oOrdenDescuento._HayCambios = true;
569  _oOrdenDescuento._lisLineas = new BindingList<LineasOrdenDescuento>(_oOrdenDescuento._lisLineas.OrderBy(x => x._nOrden).ToList());
570  }
571  }
572 }
ewgrid _Grid
Proporciona acceso al control DataGrid
Definition: Mantegrid.cs:458
OrdenDescuento()
Contructor por defecto
DataTable _CargarDatos()
Cargar escalado de la empresa activa
bool _LineaFinal()
Mover la línea al final
bool _LineaSubir()
Subir la línea una posición
BindingList< LineasOrdenDescuento > _lisLineas
Líneas
bool _LineaMover(int indiceLineaDestino)
Mover la línea a otra posición
void _RefescarLineasOrdenDescuento()
Refrescar líneas orden descuento del grid
Interfaz para permitir reordenar líneas en los mantegrid
Clase Orden precios/descuentos
bool _LineaPrincipio()
Mover la línea al principio
void _Load()
Realiza la carga de los datos de escalado
bool _HayCambios
Propiedad logica que define si se ha producido algun cambio en el orden de precios/descuentos ...
bool _LineaBajar()
Bajar la línea una posición
void _Load(DataRow ldr, int nLin, OrdenDescuento od)
Método para el cargado de una linea de detalle de plantilla
dynamic _Documento
Referencia al DocVenta
Presenta un datagridview con botones añadir y borrar tipo Mantegrid de Eurowin
Definition: Mantegrid.cs:30
BindingList< OrdenDescuento > _lisLineas
Líneas