DatosSeleccionMultiple.cs
1 //using sage.ew.db;
2 using sage.ew.docventatpv;
4 using sage.ew.global;
6 using sage.ew.interficies;
8 using System;
9 using System.Data;
10 using System.Linq;
11 
12 
13 namespace sage.ew.serie.Clases
14 {
15 
20  internal class DatosSeleccionMultiple
21  {
22  #region Variables privadas
23 
24  private readonly string Articulo = "";
25  private readonly string Almacen = "";
26  private readonly bool EsUnAbonoDeCompra = false;
27  private readonly bool EsUnAbono = false;
28  private readonly LinVenDet<LinVenDetSeries> _LinVenDetSeries = null;
29  private readonly IDatosSeleccionMultipleDA _datosSeleccionMultipleDA;
30 
31  #endregion Variables privadas
32 
33 
34  #region Constructores
35 
36  private DatosSeleccionMultiple()
37  {
38  _datosSeleccionMultipleDA = DependencyInjector.Instance.Retrieve<IDatosSeleccionMultipleDA>();
39  }
40 
41  public DatosSeleccionMultiple(LinVenDet<LinVenDetSeries> negocioSeries, string articulo, string almacen, bool abonoDeCompra) : this()
42  {
43  _LinVenDetSeries = negocioSeries;
44  Articulo = articulo;
45  Almacen = almacen;
46  EsUnAbonoDeCompra = abonoDeCompra;
47  EsUnAbono = (_LinVenDetSeries._Lineas._Unidades < 0);
48  }
49 
50  #endregion Constructores
51 
52 
53  #region Métodos públicos
54 
59  public DataTable ObtenerDatos()
60  {
61  //Los datos deberían traer también la preselección anterior
62  var incluirSeriesCondicion = string.Empty;
63  var excluirSeriesCondicion = string.Empty;
64 
65  var seriesPreseleccionadas = _LinVenDetSeries._lisCodigos.Where(s => !string.IsNullOrWhiteSpace(s._Codigo)).Select(s => s._Codigo.TrimEnd()).ToList();
66  if (seriesPreseleccionadas.Any())
67  {
68  var seriesEspeciales = string.Join(", ", seriesPreseleccionadas.Select(s => $"'{s.TrimEnd()}'"));
69  incluirSeriesCondicion = " AND SERIE IN (" + seriesEspeciales + ")";
70  excluirSeriesCondicion = " AND SERIE NOT IN (" + seriesEspeciales + ")";
71  }
72 
73  //excluyo las series explicitamente por si hay una llamada (reentrante o no) al formulario con datos no 'Aceptados' en el LinVenDet
74  var whereParaDatos = ObtenerCondicionesFiltrado(Articulo, Almacen) + excluirSeriesCondicion + Environment.NewLine;
75  var whereParaDatosPreexistentes = ObtenerCondicionesFiltradoBase(Articulo, Almacen) + incluirSeriesCondicion + Environment.NewLine;
76 
77  return _datosSeleccionMultipleDA.ObtenerDatos(seriesPreseleccionadas.Any(), whereParaDatos, whereParaDatosPreexistentes);
78  }
79 
80  #endregion Métodos públicos
81 
82  #region Métodos privados
83 
90  private string ObtenerCondicionesFiltradoBase(string lcArticulo, string lcAlmacen)
91  {
92  string lcCondicion = "ARTICULO = '" + lcArticulo + "' AND ALMACEN = '" + lcAlmacen + "'";
93 
94  return lcCondicion;
95  }
96 
103  private string ObtenerCondicionesFiltrado(string articulo, string almacen)
104  {
105  string condicion;
106  if (!EsUnAbono || EsUnAbonoDeCompra) //Sino es un abono de venta o se trata de un abono de compra ha de estar de alta
107  {
108  condicion = ObtenerCondicionesFiltradoAlta(articulo, almacen);
109  }
110  else
111  condicion = ObtenerCondicionesFiltradoBaja(articulo, almacen);
112 
113  return condicion;
114  }
115 
122  private string ObtenerCondicionesFiltradoAlta(string lcArticulo, string lcAlmacen)
123  {
124  string lcCondicion = "BAJA = '' AND ARTICULO = '" + lcArticulo + "' AND ALMACEN = '" + lcAlmacen + "'";
125  if (EsUnAbonoDeCompra)
126  {
127  var _cClausulaWhereAdicional = " AND PROVEEDOR = '" + _LinVenDetSeries._Lineas._Proveedor + "'";
128  lcCondicion += _cClausulaWhereAdicional;
129  }
130 
131  return lcCondicion;
132  }
133 
140  private string ObtenerCondicionesFiltradoBaja(string lcArticulo, string lcAlmacen)
141  {
142  string lcCondicion = "BAJA = 'S' AND ARTICULO = '" + lcArticulo + "' AND ALMACEN = '" + lcAlmacen + "'";
143 
144  //PE-103447 Añado filtro por cliente para compras
145  //Evaluo el flag PERMITIR ABONAR UNA SERIE VENDIDA A OTRO CLIENTE
146  //Sino se trata de lineas de stocks que no tienen cliente
147  if (!Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_serasigcli", false)) && !(_LinVenDetSeries._Lineas is IDocStockLinea))
148  {
149  try // _LinVenDetSeries._Lineas es dynamic => puede no tener cliente como en albaranes de regularización
150  {
151  var _cClausulaWhereAdicional = " AND CLIENTE = '" + _LinVenDetSeries._Lineas._Cliente + "'";
152  lcCondicion += _cClausulaWhereAdicional;
153  }
154  catch (Exception loEx)
155  {
156  _datosSeleccionMultipleDA.Registrar_Error(loEx); //Registramos excepción
157  }
158  }
159 
160  return lcCondicion;
161  }
162 
163  #endregion Métodos privados
164  }
165 }
Definición de la interfície necesaria para los objetos de documento utilizados en el formulario FormD...
Definition: IDocument.cs:305
Interfaz datos selección multiple acceso a datos
object Retrieve(Type T)
Resuelve objeto de tipo T
Tipo de desglose de árbol pasando el Almacen
Clase Inyector de dependencias para resolver las dependencias
Clase que gestiona las series/lotes asignados a una linea de un documento de venta ...
Definition: LinVenDet.cs:534