FidelizaFuncs.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Data;
6 
7 using sage.ew.db;
8 using sage.ew.global;
9 using sage.ew.listados.Clases;
10 using sage.ew.functions;
11 using System.Windows.Forms;
12 using sage.ew.ewbase;
14 using Sage.ES.S50.Addons;
15 using System.Net;
17 using Unity;
18 
19 namespace sage.addons.fideliza.Negocio.Clases
20 {
25  public class fideliza
26  {
27  # region PROPIEDADES PÚBLICAS
28 
29 
30  # endregion
31 
32 
33  //PE-98118: si funcionamos con Hera
34  private bool _llHera = Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_hera"));
35 
36  private string _cEmpresa = Convert.ToString(EW_GLOBAL._GetVariable("wc_empresa"));
37  private string _cAny = Convert.ToString(EW_GLOBAL._GetVariable("wc_any"));
38 
39  private addons.fideliza.fideliza _ofideliza = FIDELIZA._Get_Objeto_Fideliza();
40  private IFidelizaFuncsDA oFidelizaFuncsDA;
41 
42  #region Constructors
43 
48  [InjectionConstructor]
49  public fideliza(IFidelizaFuncsDA fidelizaFuncsDA)
50  {
51  oFidelizaFuncsDA = fidelizaFuncsDA;
52  }
53  #endregion Contructors
54 
65  public DataTable _Calcular_Puntos(string tcNumero, string tcLetra, DateTime tdFecha, decimal tnValorPunto, int tnSession = 0, bool tlCancelar = false)
66  {
67 
68  bool llAbono, llAplicar;
69  int lnSessionAux, lnRecno, lnLinia;
70  decimal lnPuntos;
71  string lcSQL, lcSelect, lcWhere, lcOrder, lcJoinFactor, lcWhereFactor, lcJoinJAC, lcInstr;
72 
73  lnPuntos = lnSessionAux = lnRecno = lnLinia = 0;
74  lcSQL = lcSelect = lcWhere = lcOrder = lcJoinFactor = lcWhereFactor = lcJoinJAC = lcInstr = string.Empty;
75  llAbono = llAplicar = false;
76 
77  DataTable ldtLinVen;//= new DataTable();
78  DataTable ldtFACTPTOS; // = new DataTable();
79  //DataTable ldtFACTPTOS1; // = new DataTable();
80  DataTable ldtFACTPTOS2; // = new DataTable();
81  DataTable ldtFACTPTOS3; // = new DataTable();
82  DataTable ldtFACTPTOS4; // = new DataTable();
83  DataTable ldtFACTPTOS5; // = new DataTable();
84  DataTable ldtFACTPTOS6; // = new DataTable();
85  DataTable ldtFACTPTOS7; // = new DataTable();
86  DataTable ldtFACTPTOS8; // = new DataTable();
87  DataTable ldtFACTPTOS9; // = new DataTable();
88  DataTable ldtFACTPTOS10; // = new DataTable();
89  DataTable ldtFACTPTOS11; // = new DataTable();
90 
91  ldtLinVen = oFidelizaFuncsDA.GetLineasVenta( _cEmpresa, tcNumero, tcLetra, _cAny);
92  //lcSQL = " SELECT C.CLIENTE, D.ARTICULO, D.DEFINICION, D.LINIA, D.IMPORTEIVA, D.PUNTOS, A.SUBFAMILIA, D.FAMILIA, A.MARCA, E.TARIFA, '' AS ACTIVIDAD " +
93  // " FROM ((((" + DB.SQLDatabase("GESTION", "D_ALBVEN") + " D " +
94  // " INNER JOIN " + DB.SQLDatabase("GESTION", "C_ALBVEN") + " C ON C.EMPRESA = D.EMPRESA AND C.NUMERO = D.NUMERO AND C.LETRA = D.LETRA) " +
95  // " INNER JOIN " + DB.SQLDatabase("GESTION", "CLIENTES") + " E ON C.CLIENTE = E.CODIGO) " +
96  // " INNER JOIN " + DB.SQLDatabase("TUEFID", "LIN_AV") + " L ON D.EMPRESA = L.EMPRESA AND D.NUMERO = L.NUMERO AND D.LETRA = L.LETRA AND D.LINIA = L.LINIA) " +
97  // " LEFT JOIN " + DB.SQLDatabase("GESTION", "ARTICULO") + " A ON D.ARTICULO = A.CODIGO) " +
98  // " WHERE D.EMPRESA = " + DB.SQLString(_cEmpresa) + " " +
99  // " AND D.NUMERO = " + DB.SQLString(tcNumero) + " " +
100  // " AND D.LETRA = " + DB.SQLString(tcLetra) + " " +
101  // " AND L.EJERCICIO = " + DB.SQLString(_cAny) + " " +
102  // " AND L.PUNTOSPRO = 0 " +
103  // " AND D.TIPO_IVA != '' AND D.IMPORTEIVA != 0 " +
104  // " ORDER BY D.LINIA";
105  //DB.SQLExec(lcSQL, ref ldtLinVen);
106  ldtFACTPTOS = oFidelizaFuncsDA.GetLineasFacturacionPtos(_cEmpresa, tcNumero, tcLetra, tdFecha, out lcSelect, out lcWhere, out lcOrder);
107  //foreach (DataRow ldrItem in ldtLinVen.Rows)
108  // ldrItem["actividad"] = Convert.ToString(DB.SQLValor("ACTI_CLI", "CLIENTE", Convert.ToString(ldrItem["cliente"]), "ACTIVIDAD"));
109 
110  //lcSelect = "SELECT D.LINIA, F.FACTOR AS FACTOR, F.SUMAR AS SUMAR, F.CLIENTE, F.ARTICULO, F.SUBFAMILIA, F.FAMILIA, F.MARCA, F.ACTIVIDAD, F.TARIFA " +
111  // " FROM " + DB.SQLDatabase("GESTION", "C_ALBVEN") + " C " +
112  // " LEFT JOIN " + DB.SQLDatabase("GESTION", "D_ALBVEN") + " D ON C.EMPRESA = D.EMPRESA AND C.NUMERO = D.NUMERO AND C.LETRA = D.LETRA " +
113  // " LEFT JOIN " + DB.SQLDatabase("GESTION", "ARTICULO") + " A ON D.ARTICULO = A.CODIGO ";
114 
115  //lcWhere = " WHERE C.EMPRESA = " + DB.SQLString(_cEmpresa) + " " +
116  // " AND C.NUMERO = " + DB.SQLString(tcNumero) + " " +
117  // " AND C.LETRA = " + DB.SQLString(tcLetra) + " " +
118  // " AND D.TIPO_IVA != '' AND D.IMPORTEIVA != 0 " +
119  // " AND F.FECHAINI <= " + DB.SQLString(tdFecha) + " AND F.FECHAFIN >= " + DB.SQLString(tdFecha) + " ";
120 
121  //lcOrder = " ORDER BY D.LINIA";
122 
124  //lcJoinFactor = " LEFT JOIN " + DB.SQLDatabase("GESTION", "ACTI_CLI") + " E ON C.CLIENTE = E.CLIENTE " +
125  // " LEFT JOIN " + DB.SQLDatabase("TUEFID", "FACTORPTOS") + " F ON E.ACTIVIDAD = F.ACTIVIDAD ";
126  //lcWhereFactor = "AND F.ACTIVIDAD <> '' AND F.CLIENTE = '' AND F.ARTICULO = '' AND F.FAMILIA = '' AND F.SUBFAMILIA = '' AND F.MARCA = '' ";
127  //lcSQL = lcSelect + lcJoinFactor + lcWhere + lcWhereFactor + lcOrder;
128  //DB.SQLExec(lcSQL, ref ldtFACTPTOS1);
129  //ldtFACTPTOS = ldtFACTPTOS1;
130 
131  // Consulta por cliente.
132  ldtFACTPTOS2 = oFidelizaFuncsDA.GetLineasFacturacionPtosPorCliente(lcSelect, lcWhere, lcOrder);
133  //lcJoinFactor = "LEFT JOIN " + DB.SQLDatabase("TUEFID", "FACTORPTOS") + " F ON D.CLIENTE = F.CLIENTE ";
134  //lcWhereFactor = "AND F.CLIENTE <> '' AND F.ARTICULO = '' AND F.FAMILIA = '' AND F.SUBFAMILIA = '' AND F.MARCA = '' ";
135  //lcSQL = lcSelect + lcJoinFactor + lcWhere + lcWhereFactor + lcOrder;
136  //DB.SQLExec(lcSQL, ref ldtFACTPTOS2);
137  DBfunctions.SQLUnionDatatable(ref ldtFACTPTOS, ldtFACTPTOS2);
138 
139  // Consulta por tarifa
140  ldtFACTPTOS3 = oFidelizaFuncsDA.GetLineasFacturacionPtosPorTarifa(lcSelect, lcWhere, lcOrder);
141  //lcJoinFactor = " LEFT JOIN " + DB.SQLDatabase("GESTION", "CLIENTES") + " E ON C.CLIENTE = E.CODIGO " +
142  // "LEFT JOIN " + DB.SQLDatabase("TUEFID", "FACTORPTOS") + " F ON E.TARIFA = F.TARIFA ";
143  //lcWhereFactor = "AND F.TARIFA <> '' AND F.ARTICULO = '' AND F.FAMILIA = '' AND F.SUBFAMILIA = '' AND F.MARCA = '' ";
144  //lcSQL = lcSelect + lcJoinFactor + lcWhere + lcWhereFactor + lcOrder;
145  //DB.SQLExec(lcSQL, ref ldtFACTPTOS3);
146  DBfunctions.SQLUnionDatatable(ref ldtFACTPTOS, ldtFACTPTOS3);
147 
148  // Consulta por artículo.
149  ldtFACTPTOS4 = oFidelizaFuncsDA.GetLineasFacturacionPtosPorArticulos(lcSelect, lcWhere, lcOrder);
150  //lcJoinFactor = "LEFT JOIN " + DB.SQLDatabase("TUEFID", "FACTORPTOS") + " F ON D.ARTICULO = F.ARTICULO ";
151  //lcWhereFactor = "AND F.ARTICULO <> '' AND F.FAMILIA = '' AND F.SUBFAMILIA = '' AND F.MARCA = '' ";
152  //lcSQL = lcSelect + lcJoinFactor + lcWhere + lcWhereFactor + lcOrder;
153  //DB.SQLExec(lcSQL, ref ldtFACTPTOS4);
154  DBfunctions.SQLUnionDatatable(ref ldtFACTPTOS, ldtFACTPTOS4);
155 
156  // Consulta por familia.
157  ldtFACTPTOS5 = oFidelizaFuncsDA.GetLineasFacturacionPorFamilias(lcSelect, lcWhere, lcOrder);
158  //lcJoinFactor = "LEFT JOIN " + DB.SQLDatabase("TUEFID", "FACTORPTOS") + " F ON A.FAMILIA = F.FAMILIA ";
159  //lcWhereFactor = "AND F.ARTICULO = '' AND F.FAMILIA <> '' AND F.SUBFAMILIA = '' AND F.MARCA = '' ";
160  //lcSQL = lcSelect + lcJoinFactor + lcWhere + lcWhereFactor + lcOrder;
161  //DB.SQLExec(lcSQL, ref ldtFACTPTOS5);
162  DBfunctions.SQLUnionDatatable(ref ldtFACTPTOS, ldtFACTPTOS5);
163 
165  ldtFACTPTOS6 = oFidelizaFuncsDA.GetLineasFacturacionPorSubFamilia(lcSelect, lcWhere, lcOrder);
166  //lcJoinFactor = "LEFT JOIN " + DB.SQLDatabase("TUEFID", "FACTORPTOS") + " F ON A.SUBFAMILIA = F.SUBFAMILIA ";
167  //lcWhereFactor = "AND F.ARTICULO = '' AND F.FAMILIA = '' AND F.SUBFAMILIA <> '' AND F.MARCA = '' ";
168  //lcSQL = lcSelect + lcJoinFactor + lcWhere + lcWhereFactor + lcOrder;
169  //DB.SQLExec(lcSQL, ref ldtFACTPTOS6);
170  DBfunctions.SQLUnionDatatable(ref ldtFACTPTOS, ldtFACTPTOS6);
171 
172  // Consulta por marca.
173  ldtFACTPTOS7 = oFidelizaFuncsDA.GetLineasFacturacionPorFamilias(lcSelect, lcWhere, lcOrder);
174  //lcJoinFactor = "LEFT JOIN " + DB.SQLDatabase("TUEFID", "FACTORPTOS") + " F ON A.MARCA = F.MARCA ";
175  //lcWhereFactor = "AND F.ARTICULO = '' AND F.FAMILIA = '' AND F.SUBFAMILIA = '' AND F.MARCA <> '' ";
176  //lcSQL = lcSelect + lcJoinFactor + lcWhere + lcWhereFactor + lcOrder;
177  //DB.SQLExec(lcSQL, ref ldtFACTPTOS7);
178  DBfunctions.SQLUnionDatatable(ref ldtFACTPTOS, ldtFACTPTOS7);
179  ldtFACTPTOS8 = oFidelizaFuncsDA.GetLineasFacturacionPorFamiliaYSubfamilia(lcSelect, lcWhere, lcOrder);
180  // Consulta por familia y subfamilia.
181  //lcJoinFactor = "LEFT JOIN " + DB.SQLDatabase("TUEFID", "FACTORPTOS") + " F ON A.FAMILIA = F.FAMILIA AND A.SUBFAMILIA = F.SUBFAMILIA ";
182  //lcWhereFactor = "AND F.ARTICULO = '' AND F.FAMILIA <> '' AND F.SUBFAMILIA <> '' AND F.MARCA = '' ";
183  //lcSQL = lcSelect + lcJoinFactor + lcWhere + lcWhereFactor + lcOrder;
184  //DB.SQLExec(lcSQL, ref ldtFACTPTOS8);
185  DBfunctions.SQLUnionDatatable(ref ldtFACTPTOS, ldtFACTPTOS8);
186 
187  // Consulta por familia y marca.
188  ldtFACTPTOS9 = oFidelizaFuncsDA.GetLineasFacturacionPorFamiliaYMarca(lcSelect, lcWhere, lcOrder);
189  //lcJoinFactor = "LEFT JOIN " + DB.SQLDatabase("TUEFID", "FACTORPTOS") + " F ON A.FAMILIA = F.FAMILIA AND A.MARCA = F.MARCA ";
190  //lcWhereFactor = "AND F.ARTICULO = '' AND F.FAMILIA <> '' AND F.SUBFAMILIA = '' AND F.MARCA <> '' ";
191  //lcSQL = lcSelect + lcJoinFactor + lcWhere + lcWhereFactor + lcOrder;
192  //DB.SQLExec(lcSQL, ref ldtFACTPTOS9);
193  DBfunctions.SQLUnionDatatable(ref ldtFACTPTOS, ldtFACTPTOS9);
194 
196  ldtFACTPTOS10 = oFidelizaFuncsDA.GetLineasFacturacionPorSubfamiliaYMarca(lcSelect, lcWhere, lcOrder);
197  //lcJoinFactor = "LEFT JOIN " + DB.SQLDatabase("TUEFID", "FACTORPTOS") + " F ON A.SUBFAMILIA = F.SUBFAMILIA AND A.MARCA = F.MARCA ";
198  //lcWhereFactor = "AND F.ARTICULO = '' AND F.FAMILIA = '' AND F.SUBFAMILIA <> '' AND F.MARCA <> '' ";
199  //lcSQL = lcSelect + lcJoinFactor + lcWhere + lcWhereFactor + lcOrder;
200  //DB.SQLExec(lcSQL, ref ldtFACTPTOS10);
201  DBfunctions.SQLUnionDatatable(ref ldtFACTPTOS, ldtFACTPTOS10);
202 
203  // Consulta por familia, subfamilia y marca.
204  ldtFACTPTOS11 = oFidelizaFuncsDA.GetLineasFacturacionPorFamiliaSubfamiliaYMarca(lcSelect, lcWhere, lcOrder);
205  //lcJoinFactor = "LEFT JOIN " + DB.SQLDatabase("TUEFID", "FACTORPTOS") + " F ON A.FAMILIA = F.FAMILIA AND A.SUBFAMILIA = F.SUBFAMILIA AND A.MARCA = F.MARCA ";
206  //lcWhereFactor = "AND F.ARTICULO = '' AND F.FAMILIA <> '' AND F.SUBFAMILIA <> '' AND F.MARCA <> '' ";
207  //lcSQL = lcSelect + lcJoinFactor + lcWhere + lcWhereFactor + lcOrder;
208  //DB.SQLExec(lcSQL, ref ldtFACTPTOS11);
209  DBfunctions.SQLUnionDatatable(ref ldtFACTPTOS, ldtFACTPTOS11);
210 
211  //ldtFACTPTOS1 = null;
212  ldtFACTPTOS2 = null;
213  ldtFACTPTOS3 = null;
214  ldtFACTPTOS4 = null;
215  ldtFACTPTOS5 = null;
216  ldtFACTPTOS6 = null;
217  ldtFACTPTOS7 = null;
218  ldtFACTPTOS8 = null;
219  ldtFACTPTOS9 = null;
220  ldtFACTPTOS10 = null;
221  ldtFACTPTOS11 = null;
222 
223 
224  var ldtLINVENPTOSAUX = (from a in ldtLinVen.AsEnumerable()
225  join b in ldtFACTPTOS.AsEnumerable()
226  on new
227  {
228  linia = a.Field<int>("linia")
229  }
230  equals new
231  {
232  linia = b.Field<int>("linia")
233  }
234  into leftJoin
235  from c in leftJoin.DefaultIfEmpty()
236  select new
237  {
238  actividad = a.Field<string>("actividad"),
239  cliente = a.Field<string>("cliente"),
240  tarifa = a.Field<string>("tarifa"),
241  articulo = a.Field<string>("articulo"),
242  nombre_articulo = a.Field<string>("definicion"),
243  linia = a.Field<int>("linia"),
244  importeiva = a.Field<decimal>("importeiva"),
245  puntos = a.Field<decimal>("puntos"),
246  subfamilia = a.Field<string>("subfamilia"),
247  familia = a.Field<string>("familia"),
248  marca = a.Field<string>("marca"),
249  factor = (c == null ? 99999 : c.Field<decimal>("factor")), //CCR 140945: si no hay registros en el leftjoin de factorpuntos ponemos 99999 como marca
250  sumar = (c == null ? 0 : c.Field<int>("sumar")),
251  factividad = (c == null ? string.Empty : c.Field<string>("actividad")),
252  fcliente = (c == null ? string.Empty : c.Field<string>("cliente")),
253  ftarifa = (c == null ? string.Empty : c.Field<string>("tarifa")),
254  farticulo = (c == null ? string.Empty : c.Field<string>("articulo")),
255  fsubfamilia = (c == null ? string.Empty : c.Field<string>("subfamilia")),
256  ffamilia = (c == null ? string.Empty : c.Field<string>("familia")),
257  fmarca = (c == null ? string.Empty : c.Field<string>("marca")),
258  numreg = 0,
259  aplicar = true,
260  puntoscalc = 0.0M,
261  }).__CopyToDataTable();
262 
263 
264  lnRecno = 0;
265  foreach (DataRow ldrItem in ldtLINVENPTOSAUX.Rows)
266  {
267  lnRecno++;
268  ldrItem["numreg"] = lnRecno;
269  }
270 
271  var ldtLINVENPTOS = (from item in ldtLINVENPTOSAUX.AsEnumerable()
272  group item by new
273  {
274  linia = item.Field<int>("linia")
275  } into g
276  select new
277  {
278  articulo = g.Max(x => x.Field<string>("articulo")),
279  nombre_articulo = g.Max(x => x.Field<string>("nombre_articulo")),
280  linia = g.Key.linia,
281  importeiva = g.Max(x => x.Field<decimal>("importeiva")),
282  puntos = g.Max(x => x.Field<decimal>("puntos")),
283  factor = g.Sum(x => x.Field<decimal>("factor")),
284  sumar = g.Sum(x => x.Field<int>("sumar")),
285  puntoscalc = g.Max(x => x.Field<decimal>("puntoscalc"))
286  }).__CopyToDataTable();
287 
288  lnRecno = 0;
289  foreach (DataRow ldrItem in ldtLINVENPTOSAUX.Rows)
290  {
291  lnRecno++;
292  llAplicar = false;
293 
294  lnLinia = Convert.ToInt32(ldrItem["linia"]);
295 
296 
297  if (Convert.ToBoolean(ldrItem["aplicar"]))
298  {
299  if (!string.IsNullOrWhiteSpace(Convert.ToString(ldrItem["factividad"])))
300  llAplicar = true;
301  else
302  {
303  if (!string.IsNullOrWhiteSpace(Convert.ToString(ldrItem["fcliente"])))
304  llAplicar = true;
305  else
306  {
307  if (!string.IsNullOrWhiteSpace(Convert.ToString(ldrItem["ftarifa"])))
308  llAplicar = true;
309  else
310  {
311  if (!string.IsNullOrWhiteSpace(Convert.ToString(ldrItem["farticulo"])))
312  llAplicar = true;
313  else
314  {
315  if (!string.IsNullOrWhiteSpace(Convert.ToString(ldrItem["fsubfamilia"]))) // PE-97904. Cambiar fsubfam por fsubfamilia
316  llAplicar = true;
317  else
318  {
319  if (!string.IsNullOrWhiteSpace(Convert.ToString(ldrItem["ffamilia"])))
320  llAplicar = true;
321  else
322  {
323  if (!string.IsNullOrWhiteSpace(Convert.ToString(ldrItem["fmarca"])))
324  llAplicar = true;
325  }
326  }
327  }
328  }
329  }
330  }
331  }
332 
333 
334 
335 
336  if (llAplicar)
337  {
338 
339  DataRow[] ldrs = ldtLINVENPTOS.Select("linia=" + lnLinia);
340 
341  if (ldrs.Length == 1)
342  {
343  ldrs[0]["factor"] = Convert.ToDecimal(ldrItem["factor"]);
344  ldrs[0]["sumar"] = Convert.ToInt32(ldrItem["sumar"]);
345  }
346 
347 
348  foreach (DataRow ldrItem2 in ldtLINVENPTOSAUX.Rows)
349  {
350  if (Convert.ToInt32(ldrItem2["linia"]) == lnLinia && Convert.ToInt32(ldrItem2["numreg"]) != lnRecno)
351  ldrItem2["aplicar"] = false;
352  }
353  }
354  }
355 
356 
357  foreach (DataRow ldrItem in ldtLINVENPTOS.Rows)
358  {
359  llAbono = false;
360 
361  if (Convert.ToDecimal(ldrItem["puntos"]) == 0 || tlCancelar)
362  {
363  lnPuntos = Convert.ToDecimal(ldrItem["importeiva"]) * tnValorPunto;
364  llAbono = (Convert.ToDecimal(ldrItem["importeiva"]) < 0);
365  }
366  else
367  lnPuntos = Convert.ToDecimal(ldrItem["puntos"]);
368 
369  //CCR 140945: Se quita la comprobación de que sea difrente de 0 ya que si es 0 hemos de multiplicar por 0 y dejar puntos a 0 al ser un factor explícito a 0
370  //pero si no hay registros de factor tendremos la marca que hemos puesto en el LINQ de 99999
371  if (ldrItem["factor"] != DBNull.Value && Convert.ToDecimal(ldrItem["factor"]) != 99999M)
372  lnPuntos = lnPuntos * Convert.ToDecimal(ldrItem["factor"]);
373 
374 
375  if (ldrItem["sumar"] != DBNull.Value && Convert.ToInt32(ldrItem["sumar"]) != 0)
376  lnPuntos = lnPuntos + Convert.ToInt32(ldrItem["SUMAR"]) * (llAbono ? -1 : 1);
377 
378 
379  //PE-97914: gestionamos el tipo de redondeo de puntos segun lo que nos viene del enlace
380 
381  switch (_ofideliza._FidelizaWS._RedondeoPuntos)
382  {
383  case 1:
384  lnPuntos = Math.Truncate(lnPuntos);
385  break;
386 
387  case 2:
388  lnPuntos = Math.Round(lnPuntos, 0, MidpointRounding.AwayFromZero); //PE-98166
389  break;
390 
391  case 3:
392  lnPuntos = Math.Ceiling(Math.Abs(lnPuntos));
393  if (llAbono)
394  lnPuntos = lnPuntos * -1;
395  break;
396  }
397 
398  ldrItem["puntoscalc"] = lnPuntos;
399 
400  }
401 
402  ldtLinVen = null;
403  ldtFACTPTOS = null;
404  ldtLINVENPTOSAUX = null;
405 
406 
407  return ldtLINVENPTOS;
408  }
409 
416  public void _AltaTarjetaFideliza(string tcCliente, string tcTarjeta, string tcPrincipal = "")
417  {
418  // 98459
419  //la tarjeta no existe, llamaremos al formulario de darla de alta de tarjeta
420  sage.ew.cliente.Cliente loCliente = new sage.ew.cliente.Cliente(tcCliente);
421 
422  Negocio.Clases.TarjetasFideliza loTarjetas = new TarjetasFideliza();
423 
424  if (string.IsNullOrWhiteSpace(tcPrincipal))
425  {
426  loTarjetas._Cif = loCliente._NIF;
427  loTarjetas._Nombre = loCliente._Nombre;
428  loTarjetas._Empresa = loCliente._RazonComercial;
429  loTarjetas._CodPost = loCliente._CodPost;
430  loTarjetas._Direccion = loCliente._Direccion;
431  loTarjetas._Email = loCliente._Email;
432  loTarjetas._Telefono = loCliente._Telefono;
433  loTarjetas._Poblacion = loCliente._Poblacion;
434  loTarjetas._Provincia = loCliente._Provincia;
435  loTarjetas._Pais = loCliente._Pais;
436  }
437  else
438  loTarjetas._TPrincipal = tcPrincipal.Trim(); // establecemos la tarjeta principal asociada
439 
440  loTarjetas._Codigo = tcTarjeta;
441  loTarjetas._Show();
442  // fi 98459
443  }
444 
448  public void _ConsultaTarjetaFideliza(string tcTarjeta, string tcPrincipal = "")
449  {
450  Negocio.Clases.TarjetasFideliza loTarjetas = new TarjetasFideliza();
451 
452  loTarjetas._CargarDatosTarjeta(tcTarjeta);
453 
454  if (!loTarjetas._Activa)
455  {
456  loTarjetas._Codigo = tcTarjeta;
457  loTarjetas._Show(true);
458  }
459  }
460 
466  public string _Obtener_Max_Tarjeta(string tcMaxTarjeta)
467  {
468  int lnLenCad = tcMaxTarjeta.Length;
469  string lcResult = "";
470 
471  //PE-100384: Cambiamos el sistema para obtener el max_Tarjeta a partir directamente del valor de la tarjeta máximo de la web transformandolo a Int64 y sumando 1
472  if (!tcMaxTarjeta.__IsNumber())
473  {
474  lcResult = "0";
475  }
476  else
477  {
478  Int64 lnMax = Convert.ToInt64(tcMaxTarjeta);
479  lnMax = lnMax + 1;
480  lcResult = Convert.ToString(lnMax);
481  }
482 
483  return lcResult;
484  }
485 
494  public string _Get_Tarjeta_Ejercicio(string tcEjercicio, string tcTarjetaAbono, string tcLetraAbono, string tcAliasDB)
495  {
496  string lcTarjeta = "";
497  string lcEmpresa = EW_GLOBAL._GetVariable("wc_empresa").ToString();
498 
499  if (!Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_factser")))
500  tcLetraAbono = " ";
501 
502  lcTarjeta = DB.SQLValor("CAB_AV", "EJERCICIO = '" + tcEjercicio + "' AND EMPRESA = '" + lcEmpresa + "' AND NUMERO = '" + tcTarjetaAbono + "' AND LETRA", tcLetraAbono, "TARJETAFID", tcAliasDB).ToString();
503 
504  return lcTarjeta;
505  }
506 
511  public string _Brow_Tarjetas(int tnTipo = 1)
512  {
513  addons.fideliza.fideliza lofideliza = addons.fideliza.FIDELIZA._Get_Objeto_Fideliza();
514 
515  //PE-97887: llamar al formulario para introducir los criterios de búsqueda de las tarjetas
516  Visual.Forms.frmBuscarTarjetas loFormBuscar = new Visual.Forms.frmBuscarTarjetas(1);
517  loFormBuscar._ShowDialog(); //Bug 114218 Cambiar .ShowDialog() por ._ShowDialog()
518 
519  if (loFormBuscar.DialogResult == DialogResult.OK)
520  return loFormBuscar._Tarjeta;
521  else
522  return string.Empty;
523  }
524 
531  public bool _Buscar_Documentos(string tcTarjeta, out Datos_Documento loDatosDoc)
532  {
533  loDatosDoc.Ejercicio = "";
534  loDatosDoc.Numero = "";
535  loDatosDoc.Letra = "";
536  loDatosDoc.Tarjeta = "";
537  loDatosDoc.Linia = 0;
538 
539  addons.fideliza.fideliza lofideliza = addons.fideliza.FIDELIZA._Get_Objeto_Fideliza();
540 
541  string lcSelectLetra = "";
542  if (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_factser")))
543  lcSelectLetra = ", V.LETRA";
544 
545  string lcSelectTarjeta = "";
546  if (string.IsNullOrWhiteSpace(tcTarjeta))
547  lcSelectTarjeta = ", V.TARJETAFID";
548 
549  string lcAny = EW_GLOBAL._GetVariable("wc_any").ToString();
550 
551  DataTable ldtEjercicios = new DataTable();
552  string lcAnyAnterior = string.Empty;
553  DB.SQLExec("SELECT [any] AS ejer, anterior FROM " + DB.SQLDatabase("COMUNES", "EJERCICI") + " WHERE [any] = " + DB.SQLString(EW_GLOBAL._GetVariable("wc_any")), ref ldtEjercicios);
554  if (ldtEjercicios.Rows.Count > 0)
555  {
556  lcAnyAnterior = Convert.ToString(ldtEjercicios.Rows[0]["anterior"]).Trim();
557  }
558 
559  string lcEmpresa = EW_GLOBAL._GetVariable("wc_empresa").ToString();
560 
561  DataTable ldtAlbAbonos = new DataTable();
562 
563  //PE-98118: Si es Hera, mostrar Clienteerp en la búsqueda
564  string lcCliente = string.Empty;
565  if (_llHera)
566  lcCliente = "C.CLIENTEERP";
567  else
568  lcCliente = "C.CLIENTE";
569 
570  // PE-105235. Hay que buscar datos en el ejercicio actual y el anterior
571  string lcSQL = "Select V.EJERCICIO, V.NUMERO " + lcSelectLetra + ", C.FECHA, " + lcCliente + lcSelectTarjeta +
572  " From " + DB.SQLDatabase(lofideliza._AliasDB, "CAB_AV") + " V " +
573  " Inner Join [multiples_ejercicios].dbo.C_ALBVEN C ON V.EMPRESA = C.EMPRESA AND V.NUMERO = C.NUMERO AND V.LETRA = C.LETRA AND Year(C.FECHA) = [master].dbo.val(V.EJERCICIO) " +
574  " Where (V.EMPRESA = " + DB.SQLString(lcEmpresa) + " " +
575  (lofideliza._Configuracion._OrigenAbonos == false ? "AND V.TIPO = 1 AND V.TARJETAFID <> '' AND V.NUM_AB = '' " : "") +
576  (!string.IsNullOrWhiteSpace(tcTarjeta) ? "AND V.TARJETAFID = '" + tcTarjeta + "'" : "") + ")";
577 
578 
579  if (!string.IsNullOrWhiteSpace(lcAnyAnterior))
580  {
581  DB.SQLExecEjer(lcSQL, ref ldtAlbAbonos, new string[] { lcAny, lcAnyAnterior });
582  }
583  else
584  {
585  DB.SQLExecEjer(lcSQL, ref ldtAlbAbonos, new string[] { lcAny });
586  }
587 
588  sage.ew.formul.Forms.Seleccionar loSeleccionar = new ew.formul.Forms.Seleccionar();
589  loSeleccionar._Titulo = "Documentos de venta a abonar";
590  loSeleccionar._DataTable = ldtAlbAbonos;
591  loSeleccionar._Solo_lectura = true;
592  loSeleccionar._ShowDialog();
593 
594  if (loSeleccionar.DialogResult == System.Windows.Forms.DialogResult.OK)
595  {
596  loDatosDoc.Ejercicio = loSeleccionar._DataRowSelect["Ejercicio"].ToString();
597  loDatosDoc.Numero = loSeleccionar._DataRowSelect["Numero"].ToString();
598  if (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_factser")))
599  loDatosDoc.Letra = loSeleccionar._DataRowSelect["Letra"].ToString();
600  if (string.IsNullOrWhiteSpace(tcTarjeta))
601  loDatosDoc.Tarjeta = loSeleccionar._DataRowSelect["TarjetaFid"].ToString();
602  else
603  loDatosDoc.Tarjeta = tcTarjeta;
604  }
605 
606  return loSeleccionar.DialogResult == System.Windows.Forms.DialogResult.OK;
607  }
608 
614  public int _Cobros_Facturas_CobTarFid(string tcFactura)
615  {
616  int lnCobTarjFid = 0;
617 
618  addons.fideliza.fideliza lofideliza = addons.fideliza.FIDELIZA._Get_Objeto_Fideliza();
619  string lcAny = EW_GLOBAL._GetVariable("wc_any").ToString();
620  string lcEmpresa = EW_GLOBAL._GetVariable("wc_empresa").ToString();
621  DataTable ldtCobrosTarjFid = new DataTable();
622 
623  string lcSQL = "Select left(numero, (CASE WHEN charindex('/',numero) > 0 THEN charindex('/',numero) ELSE len(numero) END) - 1) As NUMERO " +
624  " From " + DB.SQLDatabase(lofideliza._AliasDB, "COBTARJFID") +
625  " Where EJERCICIO = " + DB.SQLString(lcAny) +
626  " And EMPRESA = " + DB.SQLString(lcEmpresa) +
627  " And NUMERO <> ''" +
628  " And TIPO = 4";
629 
630  if (DB.SQLExec(lcSQL, ref ldtCobrosTarjFid) && ldtCobrosTarjFid.Rows.Count > 0)
631  {
632  DataRow[] loRows = ldtCobrosTarjFid.Select("LTrim(NUMERO) = LTrim('" + tcFactura + "') AND NUMERO != ''");
633  lnCobTarjFid = loRows.Count();
634  }
635 
636  return lnCobTarjFid;
637  }
638 
647  public int _CobrosTarjeta(string tcTablaCobros, string tcNumeroDocumento, string tcLetraDocumento, string lcCondicion = "")
648  {
649  DataTable tdtCobros = new DataTable();
650  return _CobrosTarjeta(tcTablaCobros, tcNumeroDocumento, tcLetraDocumento, lcCondicion, out tdtCobros);
651  }
652 
662  public int _CobrosTarjeta(string tcTablaCobros, string tcNumeroDocumento, string tcLetraDocumento, string lcCondicion, out DataTable tdtCobros)
663  {
664  int lnCobros = 0;
665  tdtCobros = new DataTable();
666 
667  addons.fideliza.fideliza lofideliza = addons.fideliza.FIDELIZA._Get_Objeto_Fideliza();
668  string lcEjercicio = EW_GLOBAL._GetVariable("wc_any").ToString();
669  string lcEmpresa = EW_GLOBAL._GetVariable("wc_empresa").ToString();
670  DataTable ldtCobrosTarjFid = new DataTable();
671 
672  string lcSql = "Select * " +
673  " From " + DB.SQLDatabase(lofideliza._AliasDB, tcTablaCobros) +
674  " Where EJERCICIO = " + DB.SQLString(lcEjercicio) +
675  " And EMPRESA = " + DB.SQLString(lcEmpresa) +
676  " And NUMERO = " + DB.SQLString(tcNumeroDocumento) +
677  " And LETRA = " + DB.SQLString(tcLetraDocumento) +
678  (!string.IsNullOrWhiteSpace(lcCondicion) ? " And " + lcCondicion : "");
679 
680  if (DB.SQLExec(lcSql, ref tdtCobros) && tdtCobros != null)
681  {
682  lnCobros = tdtCobros.Rows.Count;
683  }
684 
685  return lnCobros;
686  }
687 
695  public Cobros_Con_Tarjeta _Comprobar_Cobros_Con_Tarjeta(string tcFactura, string tcNumero, string tcLetra)
696  {
697  // Comprobamos si hay cobros con tarjetas de fidelización.
698  int lnCobTarjFid = _CobrosTarjeta("COBTARJFID", tcNumero, tcLetra);
699 
700  // Si no existen cobros de tarjetas de fidelización y hay número de factura comprobamos que si existen cobros de facturas.
701  if (lnCobTarjFid == 0 && !string.IsNullOrWhiteSpace((tcFactura)))
702  lnCobTarjFid = _Cobros_Facturas_CobTarFid(tcFactura);
703 
704  // Comprobamos si hay cobros con tarjetas de regalo.
705  int lnCobTarjReg = _CobrosTarjeta("COBTARJREG", tcNumero, tcLetra, "TIPOTARJ = 0");
706 
707  // Si no existen cobros de tarjetas de regalo y hay número de factura comprobamos que si existen cobros de facturas.
708  if (lnCobTarjReg == 0 && !string.IsNullOrWhiteSpace((tcFactura)))
709  lnCobTarjReg = _Cobros_Facturas_CobTarFid(tcFactura);
710 
711  // Comprobamos si hay cobros con vales de fidelización.
712  int lnCobTarjVal = _CobrosTarjeta("COBTARJREG", tcNumero, tcLetra, "TIPOTARJ = 1");
713 
714  // Si no existen cobros de vales de fidelización y hay número de factura comprobamos que si existen cobros de facturas.
715  if (lnCobTarjVal == 0 && !string.IsNullOrWhiteSpace((tcFactura)))
716  lnCobTarjVal = _Cobros_Facturas_CobTarFid(tcFactura);
717 
718  Cobros_Con_Tarjeta loCobros_Con_Tarjeta = new Cobros_Con_Tarjeta();
719  loCobros_Con_Tarjeta.ConTarjetaFidelizacion = lnCobTarjFid;
720  loCobros_Con_Tarjeta.ConTarjetaRegalo = lnCobTarjReg;
721  loCobros_Con_Tarjeta.ConTarjetaVales = lnCobTarjVal;
722 
723  return loCobros_Con_Tarjeta;
724  }
725 
732  public bool _Es_Articulo_Regalo(string tcArticulo, string tcTarifa)
733  {
734  bool lb_Es_Articulo_Regalo = false;
735 
736  if (string.IsNullOrWhiteSpace(tcArticulo) || string.IsNullOrWhiteSpace(tcTarifa))
737  return false;
738 
739  string lcSql = "";
740  sage.addons.fideliza.fideliza _ofideliza = FIDELIZA._Get_Objeto_Fideliza();
741 
742  lcSql = "Select ART_REG.ARTICULO " +
743  " From " + DB.SQLDatabase(_ofideliza._AliasDB, "ART_REG") + " ART_REG " +
744  " Where ART_REG.EMPRESA = " + DB.SQLString(_cEmpresa) +
745  " And ART_REG.ARTICULO = " + DB.SQLString(tcArticulo) +
746  " And ART_REG.TARIFA = " + DB.SQLString(tcTarifa);
747 
748  DataTable ldtArt_Reg = new DataTable();
749  if (DB.SQLExec(lcSql, ref ldtArt_Reg) && ldtArt_Reg.Rows.Count > 0)
750  {
751  lb_Es_Articulo_Regalo = true;
752  }
753 
754  return lb_Es_Articulo_Regalo;
755  }
756 
761  public void _Mensaje_TarjetasRegalo(dynamic toDocumento)
762  {
763  sage.addons.fideliza.fideliza loFideliza = FIDELIZA._Get_Objeto_Fideliza();
764 
765  string lcEmpresa = toDocumento._Empresa;
766  string lcNumero = toDocumento._Numero;
767  string lcLetra = toDocumento._Letra;
768 
769  string lcSql = "";
770 
771  lcSql = "Select LIN_AV.TARJETAREG " +
772  " From " + DB.SQLDatabase("GESTION", "D_ALBVEN") + " D_ALBVEN " +
773  " Inner Join " + DB.SQLDatabase("TPV", "C_ALBVEN") + " C_ALBVEN " +
774  " On C_ALBVEN.EJERCICIO = " + DB.SQLString(_cAny) + " And D_ALBVEN.EMPRESA = C_ALBVEN.EMPRESA And D_ALBVEN.NUMERO = C_ALBVEN.NUMERO And C_ALBVEN.LETRA = D_ALBVEN.LETRA " +
775  " Inner Join " + DB.SQLDatabase(loFideliza._AliasDB, "LIN_AV") + " LIN_AV " +
776  " On LIN_AV.EJERCICIO = " + DB.SQLString(_cAny) + " And D_ALBVEN.EMPRESA = LIN_AV.EMPRESA And D_ALBVEN.NUMERO = LIN_AV.NUMERO And D_ALBVEN.LETRA = LIN_AV.LETRA And D_ALBVEN.LINIA = LIN_AV.LINIA " +
777  " Inner Join " + DB.SQLDatabase(loFideliza._AliasDB, "ART_REG") + " ART_REG " +
778  " On ART_REG.ARTICULO = D_ALBVEN.ARTICULO And ART_REG.TARIFA = C_ALBVEN.TARIFA And ART_REG.EMPRESA = C_ALBVEN.EMPRESA " +
779  " Where LIN_AV.EJERCICIO = " + DB.SQLString(_cAny) +
780  " And D_ALBVEN.EMPRESA = " + DB.SQLString(lcEmpresa) +
781  " And D_ALBVEN.NUMERO = " + DB.SQLString(lcNumero) +
782  " And D_ALBVEN.LETRA = " + DB.SQLString(lcLetra) +
783  " And D_ALBVEN.ARTICULO <> '' " +
784  " And D_ALBVEN.TIPO_IVA <> '' " +
785  " And LIN_AV.TARJETAREG = ''";
786 
787  DataTable ldtTarjetasRegalo = new DataTable();
788 
789  if (DB.SQLExec(lcSql, ref ldtTarjetasRegalo) && ldtTarjetasRegalo.Rows.Count > 0)
790  {
791  toDocumento._MessageBox("El albarán contiene líneas con tarjetas de regalo asociadas que no han sido activadas.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, DialogResult.OK);
792  }
793  }
794 
798  public void _Mostrar_Log_Error()
799  {
800  sage.addons.fideliza.fideliza loFideliza = FIDELIZA._Get_Objeto_Fideliza();
801 
802  DataTable ldtLog = new DataTable();
803  ldtLog.Columns.Add("Fecha", typeof(DateTime));
804  ldtLog.Columns.Add("Proceso", typeof(string));
805 
806  // Recuperamos los errores
807  DataTable ldtTaulaLog = new DataTable();
808  if (DB.SQLExec("Select * " +
809  " From " + DB.SQLDatabase(loFideliza._AliasDB, "FIDELILOG") +
810  " Where TIPO <> 0", ref ldtTaulaLog) == false)
811  return;
812 
813  foreach (DataRow loLog in ldtTaulaLog.Rows)
814  {
815  string lcXMLEnv = loLog["ENVXML"].ToString().Trim();
816  int lnTipo = Convert.ToInt32(loLog["TIPO"]);
817 
818  DataTable ldtXML = loFideliza._FidelizaWS._XmlToCursor(lcXMLEnv, "NODO");
819 
820  if (ldtXML.Rows.Count > 0)
821  {
822  string lcNumero = ldtXML.Rows[0]["numero"].ToString();
823  string lcLetra = ldtXML.Rows[0]["letra"].ToString();
824  string lcTarjeta = ldtXML.Rows[0]["tarjeta"].ToString();
825  DateTime ldtFecha = Convert.ToDateTime(ldtXML.Rows[0]["FECHA"]);
826 
827  string lcProceso = "";
828 
829  switch (lnTipo)
830  {
831  case 1: // Envío de puntos.
832  lcProceso = "Envío de puntos de la tarjeta de fidelización " + lcTarjeta + " para el documento " + lcLetra + lcNumero;
833  break;
834  case 2: // Liquidación de puntos.
835  lcProceso = "Liquidación de puntos de la tarjeta de fidelización " + lcTarjeta + " para el documento " + lcLetra + lcNumero;
836  break;
837  case 3: // Cobro saldo tarjeta regalo.
838  lcProceso = "Cobro saldo de la tarjeta de regalo " + lcTarjeta + " para el documento " + lcLetra + lcNumero;
839  break;
840  case 4: // Abono saldo tarjeta regalo.
841  lcProceso = "Abono saldo de la tarjeta de regalo " + lcTarjeta + " para el documento " + lcLetra + lcNumero;
842  break;
843  case 5: // Activación tarjeta regalo.
844  lcProceso = "Activación de la tarjeta de regalo " + lcTarjeta + " para el documento " + lcLetra + lcNumero;
845  break;
846  case 6: // Activación tarjeta fidelización.
847  lcProceso = "Activación de la tarjeta de fidelización " + lcTarjeta;
848  break;
849  default:
850  break;
851  }
852 
853  DataRow loNewLog = ldtLog.NewRow();
854  loNewLog["Fecha"] = ldtFecha;
855  loNewLog["Proceso"] = lcProceso;
856  ldtLog.Rows.Add(loNewLog);
857  }
858  }
859 
860  // Si hay registros para mostrar ...
861  if (ldtLog.Rows.Count > 0)
862  {
863  sage.ew.formul.Forms.Seleccionar frmSeleccionar = new ew.formul.Forms.Seleccionar();
864  frmSeleccionar._DataTable = ldtLog;
865  frmSeleccionar._Boto_Aceptar = false;
866  frmSeleccionar._Solo_lectura = true;
867  frmSeleccionar._Texto_Cancelar = "&Cerrar";
868  frmSeleccionar._Titulo = "Envíos pendientes a la web de fidelización";
869  frmSeleccionar._ShowDialog();
870  }
871  }
872 
878  public bool _Probar_Url_Fideliza(string tcNombre)
879  {
880  bool llExisteTueFid;
881  decimal lnValorPtoAcum, lnValorPtoLiquida, lnDecimales;
882  int lnRes, lnTipo;
883  string lcMens, lcMascara, lcCadWeb, lcNIF, lcNombreEmp, lcEmail, lcDir, lcPob, lcCodPost, lcTelefono, lcNombre;
884 
885  llExisteTueFid = false;
886  lnValorPtoAcum = lnValorPtoLiquida = lnDecimales = lnRes = lnTipo = 0;
887  lcMens = lcMascara = lcCadWeb = lcNIF = lcNombreEmp = lcEmail = lcDir = lcPob = lcCodPost = lcTelefono = lcNombre = string.Empty;
888 
889 
890  lcNombre = tcNombre.Trim().ToLower();
891 
892  addons.fideliza.fideliza lofideliza = addons.fideliza.FIDELIZA._Get_Objeto_Fideliza();
893 
894  //lofideliza._FidelizaWS._URL = FIDELIZA._ProtocoloWeb + "://" + lcNombre + ".tuefideliza.com/";
895  lofideliza._FidelizaWS._URL = lcNombre;
896  llExisteTueFid = lofideliza._FidelizaWS._ExisteFideliza(out lnTipo);
897 
898  if (!llExisteTueFid)
899  {
900  if (lnTipo == 0)
901  {
902  FUNCTIONS._MessageBox("El nombre de la web de fidelización entrado no existe. " + Environment.NewLine + "Debe registrar mediante el botón Registrar web.", "Probar URL", MessageBoxButtons.OK, MessageBoxIcon.Information);
903  }
904  else
905  FUNCTIONS._MessageBox("La web de fidelización entrada está desactivada.", "Probar URL", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
906  }
907  else
908  {
909  //lofideliza._FidelizaWS._URL = FIDELIZA._ProtocoloWeb + "://" + lcNombre + ".tuefideliza.com/";
910  lofideliza._FidelizaWS._URL = lcNombre;
911 
912  lnValorPtoAcum = lofideliza._FidelizaWS._ValorPunto(1);
913 
914  if (string.IsNullOrWhiteSpace(lofideliza._FidelizaWS._Error_Message))
915  lnValorPtoLiquida = lofideliza._FidelizaWS._ValorPunto(2);
916 
917  //PE-98298: Comprobamos si el _Error_Message está lleno ya que probablemente haya un error con el código de tienda. Lo mostramos. En caso contrario mostramos
918  //el valor del punto de acumulación y liquidación
919  if (!string.IsNullOrWhiteSpace(lofideliza._FidelizaWS._Error_Message))
920  {
921  FUNCTIONS._MessageBox(lofideliza._FidelizaWS._Error_Message, "Error conexión", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
922  }
923  else
924  {
925 
926  ewMascara _Mascara = new ewMascara(Convert.ToString(EW_GLOBAL._GetMascara(KeyDiccionarioMascara.wc_grantotal)));
927 
928  lcMens = "ACUMULACIÓN: POR CADA 1 € = " + lnValorPtoAcum.ToString(_Mascara._Mascara_Net) +
929  (lnValorPtoAcum == 1 ? " PUNTO " : " PUNTOS ") +
930  lofideliza._FidelizaWS._NombreSistema.ToUpper() +
931  Environment.NewLine + Environment.NewLine +
932  "LIQUIDACIÓN: POR CADA 1 PUNTO " + lofideliza._FidelizaWS._NombreSistema.ToUpper() + " = " + lnValorPtoLiquida.ToString(_Mascara._Mascara_Net) + " € ";
933 
934  FUNCTIONS._MessageBox(lcMens, "Probar URL", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
935  }
936  }
937  return true;
938  }
939 
945  public string _Revisar_Cif(string tcValor)
946  {
947 
948  string lcCIF, lcValor;
949  int lnLen, lnZeros;
950 
951  lcCIF = string.Empty;
952  lcValor = tcValor.Trim();
953  lnLen = lnZeros = 0;
954 
955  if (!string.IsNullOrWhiteSpace(lcValor))
956  {
957  lcValor = lcValor.Replace("-", "");
958  lcValor = lcValor.Replace(".", "");
959  lcValor = lcValor.Replace(" ", "");
960 
961  lnLen = lcValor.Length;
962 
963  if (lnLen < 9)
964  {
965  lnZeros = 9 - lnLen;
966  lcValor = Enumerable.Repeat("0", lnZeros) + lcValor;
967  }
968 
969  lcCIF = lcValor.Replace("-", "").Trim(); ;
970  }
971 
972  return lcCIF;
973  }
974 
982  public decimal _Redondeo_Puntos(decimal tnImporte, decimal tnValorPunto, bool tlLiquidar)
983  {
984  decimal lnPuntos = 0;
985 
986  switch (_ofideliza._FidelizaWS._RedondeoPuntos)
987  {
988  // Parte entera del importe.
989  case 1:
990  if (tlLiquidar)
991  lnPuntos = Math.Floor(tnImporte / tnValorPunto);
992  else
993  lnPuntos = Math.Floor(tnImporte * tnValorPunto);
994  break;
995 
996  // Redondeo superior o inferior en función del primer decimal.
997  case 2:
998  if (tlLiquidar)
999  lnPuntos = Math.Round(tnImporte / tnValorPunto, 0);
1000  else
1001  lnPuntos = Math.Round(tnImporte * tnValorPunto, 0);
1002  break;
1003 
1004  // Redondeo al entero superior.
1005  case 3:
1006  if (tlLiquidar)
1007  lnPuntos = Math.Floor(Math.Abs(tnImporte) / tnValorPunto) + 1;
1008  else
1009  lnPuntos = Math.Floor(Math.Abs(tnImporte) * tnValorPunto) + 1;
1010 
1011  if (tnImporte < 0)
1012  lnPuntos = lnPuntos * -1;
1013  break;
1014  }
1015 
1016  return lnPuntos;
1017  }
1018 
1028  public bool _PuedeAcumularPuntosFactucert(string tcEmpresa, string tcNumero, string tcLetra, string tcEjercicio, sage.ew.docsven.eTipoDocumento toTipo)
1029  {
1030  if (toTipo == sage.ew.docsven.eTipoDocumento.Ticket && AddonsController.Instance.AddonsManager.IsLoaded("FACTUCERT"))
1031  {
1032  //CCR 211523: Comprobamos si el ticket que nos llega es un ticket borrador y en tal caso retornamos false inmediatamente
1033  //porque no se permite acumular puntos en un ticket borrador. Si lo ha dejado crédito, por ejemplo. Sólo cuando ya se certifica se podrá acumular
1034  if (tcNumero.Substring(Math.Max(0, tcNumero.Length - 2)) == "TB")
1035  {
1036  return false;
1037  }
1038 
1039  DataTable datos = new DataTable();
1040  string lcSql = " SELECT * FROM " + DB.SQLDatabase("FACTUCERT", "FCREGCERT") +
1041  " WHERE EMPRESA = " + DB.SQLString(tcEmpresa) +
1042  " AND NUMERO = " + DB.SQLString(tcNumero) +
1043  " AND LETRA = " + DB.SQLString(tcLetra) +
1044  " AND TIPO_DOC = 2 " +
1045  " AND EJERCICIO = " + DB.SQLString(tcEjercicio);
1046 
1047  DB.SQLExec(lcSql, ref datos);
1048 
1049  if (datos.Rows.Count == 0)
1050  {
1051  return false;
1052  }
1053  else
1054  {
1055  //Bug 179737: Si hemos encontrado registro, aprovechamos aquí para eliminar los registros en CAB_AV y LIN_AV que han quedado con el código de borrador de ticket bai
1056  string lcBorrador = Convert.ToString(datos.Rows[0]["borrador"]);
1057 
1058  //CCR 211523: eliminar este código porque puede estar dando problemas teniendo factucert si el ticket borrador y destino en la tabla FCREGCERT es el mismo
1059  //Bug 212431: Volvemos el código como estaba ya que parece que da problemas en la certificación y reabrimos CCR 211523
1060  lcSql = "DELETE FROM " + DB.SQLDatabase("TUEFID", "CAB_AV") +
1061  " WHERE EMPRESA = " + DB.SQLString(tcEmpresa) +
1062  " AND NUMERO = " + DB.SQLString(lcBorrador) +
1063  " AND LETRA = " + DB.SQLString(tcLetra) +
1064  " AND EJERCICIO = " + DB.SQLString(tcEjercicio);
1065  DB.SQLExec(lcSql);
1066 
1067  lcSql = "DELETE FROM " + DB.SQLDatabase("TUEFID", "LIN_AV") +
1068  " WHERE EMPRESA = " + DB.SQLString(tcEmpresa) +
1069  " AND NUMERO = " + DB.SQLString(lcBorrador) +
1070  " AND LETRA = " + DB.SQLString(tcLetra) +
1071  " AND EJERCICIO = " + DB.SQLString(tcEjercicio);
1072  DB.SQLExec(lcSql);
1073  }
1074  }
1075 
1076  return true;
1077  }
1078 
1088  public bool _ActualizarCobTarjetaFidSiFactuCert(string tcEmpresa, string tcNumero, string tcLetra, string tcEjercicio, sage.ew.docsven.eTipoDocumento toTipo)
1089  {
1090  bool lbOk = false;
1091 
1092  //Comprobar si es un ticket y está certificado
1093  if (toTipo == sage.ew.docsven.eTipoDocumento.Ticket && AddonsController.Instance.AddonsManager.IsLoaded("FACTUCERT"))
1094  {
1095  DataTable datos = new DataTable();
1096  string lcSql = " SELECT * FROM " + DB.SQLDatabase("FACTUCERT", "FCREGCERT") +
1097  " WHERE EMPRESA = " + DB.SQLString(tcEmpresa) +
1098  " AND NUMERO = " + DB.SQLString(tcNumero) +
1099  " AND LETRA = " + DB.SQLString(tcLetra) +
1100  " AND TIPO_DOC = 2 " +
1101  " AND EJERCICIO = " + DB.SQLString(tcEjercicio);
1102 
1103  DB.SQLExec(lcSql, ref datos);
1104 
1105  if (datos.Rows.Count > 0)
1106  {
1107  //Ticket certificado, localizamos registro en cobtarjfid con el numero de borrador y si lo encontramos, cambiamos el borrador por el ticket certificado
1108  DataTable ldtTemp = new DataTable();
1109  string lcBorrador = Convert.ToString(datos.Rows[0]["borrador"]);
1110  lcSql = "SELECT * FROM " + DB.SQLDatabase("TUEFID", "COBTARJFID") +
1111  " WHERE EMPRESA = " + DB.SQLString(tcEmpresa) +
1112  " AND NUMERO = " + DB.SQLString(lcBorrador) +
1113  " AND LETRA = " + DB.SQLString(tcLetra) +
1114  " AND TIPO = 1 " +
1115  " AND EJERCICIO = " + DB.SQLString(tcEjercicio);
1116 
1117  DB.SQLExec(lcSql, ref ldtTemp);
1118  if (ldtTemp.Rows.Count > 0)
1119  {
1120  lcSql = "UPDATE " + DB.SQLDatabase("TUEFID", "COBTARJFID") +
1121  " SET NUMERO = " + DB.SQLString(tcNumero) +
1122  " WHERE EMPRESA = " + DB.SQLString(tcEmpresa) +
1123  " AND NUMERO = " + DB.SQLString(lcBorrador) +
1124  " AND LETRA = " + DB.SQLString(tcLetra) +
1125  " AND TIPO = 1 " +
1126  " AND EJERCICIO = " + DB.SQLString(tcEjercicio);
1127  DB.SQLExec(lcSql);
1128 
1129  lbOk = true;
1130  }
1131  }
1132  }
1133 
1134  return lbOk;
1135  }
1136 
1146  public bool _ActualizarCobTarjetaRegSiFactuCert(string tcEmpresa, string tcNumero, string tcLetra, string tcEjercicio, sage.ew.docsven.eTipoDocumento toTipo)
1147  {
1148  bool lbOk = false;
1149 
1150  //Comprobar si es un ticket y está certificado
1151  if (toTipo == sage.ew.docsven.eTipoDocumento.Ticket && AddonsController.Instance.AddonsManager.IsLoaded("FACTUCERT"))
1152  {
1153  DataTable datos = new DataTable();
1154  string lcSql = " SELECT * FROM " + DB.SQLDatabase("FACTUCERT", "FCREGCERT") +
1155  " WHERE EMPRESA = " + DB.SQLString(tcEmpresa) +
1156  " AND NUMERO = " + DB.SQLString(tcNumero) +
1157  " AND LETRA = " + DB.SQLString(tcLetra) +
1158  " AND TIPO_DOC = 2 " +
1159  " AND EJERCICIO = " + DB.SQLString(tcEjercicio);
1160 
1161  DB.SQLExec(lcSql, ref datos);
1162 
1163  if (datos.Rows.Count > 0)
1164  {
1165  //Ticket certificado, localizamos registro en cobtarjfid con el numero de borrador y si lo encontramos, cambiamos el borrador por el ticket certificado
1166  DataTable ldtTemp = new DataTable();
1167  string lcBorrador = Convert.ToString(datos.Rows[0]["borrador"]);
1168  lcSql = "SELECT * FROM " + DB.SQLDatabase("TUEFID", "COBTARJREG") +
1169  " WHERE EMPRESA = " + DB.SQLString(tcEmpresa) +
1170  " AND NUMERO = " + DB.SQLString(lcBorrador) +
1171  " AND LETRA = " + DB.SQLString(tcLetra) +
1172  " AND TIPO = 1 " +
1173  " AND EJERCICIO = " + DB.SQLString(tcEjercicio) +
1174  " AND TIPOTARJ = 0";
1175 
1176  DB.SQLExec(lcSql, ref ldtTemp);
1177  if (ldtTemp.Rows.Count > 0)
1178  {
1179  lcSql = "UPDATE " + DB.SQLDatabase("TUEFID", "COBTARJREG") +
1180  " SET NUMERO = " + DB.SQLString(tcNumero) +
1181  " WHERE EMPRESA = " + DB.SQLString(tcEmpresa) +
1182  " AND NUMERO = " + DB.SQLString(lcBorrador) +
1183  " AND LETRA = " + DB.SQLString(tcLetra) +
1184  " AND TIPO = 1 " +
1185  " AND EJERCICIO = " + DB.SQLString(tcEjercicio) +
1186  " AND TIPOTARJ = 0";
1187  DB.SQLExec(lcSql);
1188 
1189  lbOk = true;
1190  }
1191  }
1192  }
1193 
1194  return lbOk;
1195  }
1196 
1205  public bool _HaAcumuladoPuntosTicket(string tcEmpresa, string tcNumero, string tcLetra, string tcEjercicio)
1206  {
1207  DataTable ldtDatos = new DataTable();
1208  string lcSql = " SELECT * FROM " + DB.SQLDatabase("TUEFID", "CAB_AV") +
1209  " WHERE EMPRESA = " + DB.SQLString(tcEmpresa) +
1210  " AND NUMERO = " + DB.SQLString(tcNumero) +
1211  " AND LETRA = " + DB.SQLString(tcLetra) +
1212  " AND TIPO = 1 " + //Comprobar si el ticket ya ha acumulado puntos 1 acumulado, 0 no
1213  " AND TARJETAFID <> '' " + //Comprobar si el ticket ya ha acumulado puntos tarjetafid llena o no
1214  " AND EJERCICIO = " + DB.SQLString(tcEjercicio);
1215  DB.SQLExec(lcSql, ref ldtDatos);
1216  if (ldtDatos != null && ldtDatos.Rows.Count > 0)
1217  return true;
1218  else
1219  return false;
1220  }
1221 
1227  {
1228  //Fideliza ya está funcionando plenamente con https desde hace varias versiones. Quitamos las comprobaciones de protocolo
1229  FIDELIZA._ProtocoloWeb = "https";
1230  }
1231 
1235  public void _ComprobarEntorno()
1236  {
1237  //DataTable ldtTemp = new DataTable();
1238  //string lcSql = "SELECT variable, valor FROM " + DB.SQLDatabase("COMUNES", "VARIABLE") + " WHERE variable = " + DB.SQLString("wc_entorno_fideliza");
1239  //DB.SQLExec(lcSql, ref ldtTemp);
1240  FIDELIZA._Entorno = oFidelizaFuncsDA.GetEntorno();
1241  //if (ldtTemp != null && ldtTemp.Rows.Count > 0)
1242  //{
1243  // //Si existe en comunes!variable utilizamos este valor (vacio o inexistente, producción)
1244  // FIDELIZA._Entorno = Convert.ToString(ldtTemp.Rows[0]["valor"]);
1245  //}
1246  //else
1247  // FIDELIZA._Entorno = "";
1248  }
1249 
1257  public bool ComprobarSerieDocumentalFideliza(string tcSerie, string tablaTuefid)
1258  {
1259  DataTable loBdTuefid = new DataTable();
1260 
1261  bool llOk = false;
1262 
1263  if (DB._SQLExisteBBDD(tablaTuefid))
1264  {
1265  llOk = DB.SQLExec("select empresa, letra from [" + tablaTuefid + "].dbo.multitiend", ref loBdTuefid);
1266 
1267  llOk = false;
1268  foreach (DataRow loRow in loBdTuefid.Rows)
1269  {
1270  string lcLetra = Convert.ToString(loRow["letra"]);
1271  if (!string.IsNullOrWhiteSpace(lcLetra))
1272  {
1273  if (lcLetra == tcSerie)
1274  {
1275  FUNCTIONS._MessageBox("ATENCIÓN: No se puede utilizar la serie " + tcSerie + " porque ya se está utilizando en la opción de Tiendas en Tuefideliza", "Configuración Tu-Efideliza", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
1276  llOk = true;
1277  break;
1278  }
1279  }
1280  else
1281  {
1282  llOk = false;
1283  }
1284  }
1285  }
1286 
1287  return llOk;
1288  }
1289 
1298  public int _ObtenerPuntosALiquidar(string tcNumero, string tcLetra)
1299  {
1300  string lcSql = string.Empty;
1301  DataTable ldtCOBTARJFID = new DataTable();
1302 
1303  string lcAny = EW_GLOBAL._GetVariable("wc_any").ToString();
1304  string lcEmpresa = EW_GLOBAL._GetVariable("wc_empresa").ToString();
1305 
1306  // Comprobamos si existen cobros de tarjeta de fidelización no enlazados.
1307  lcSql = "SELECT TARJETA, LINEA, PUNTOS, IMPORTE FROM " + DB.SQLDatabase(_ofideliza._AliasDB, "COBTARJFID") +
1308  " WHERE EJERCICIO = " + DB.SQLString(lcAny) +
1309  " AND EMPRESA = " + DB.SQLString(lcEmpresa) +
1310  " AND NUMERO = " + DB.SQLString(tcNumero) +
1311  " AND LETRA = " + DB.SQLString(tcLetra) +
1312  " AND TIPO = " + DB.SQLString(1) +
1313  " AND ENLAZADO = 0 ";
1314 
1315  DB.SQLExec(lcSql, ref ldtCOBTARJFID);
1316 
1317  int lnPuntosLiquidadosPendientes = 0;
1318 
1319  if (ldtCOBTARJFID != null && ldtCOBTARJFID.Rows.Count > 0)
1320  {
1321  // Recorremos los cobros y obtenemos los puntos liquidados
1322  foreach (DataRow loRow in ldtCOBTARJFID.Rows)
1323  {
1324  lnPuntosLiquidadosPendientes += Convert.ToInt32(loRow["PUNTOS"]);
1325  }
1326  }
1327 
1328  return lnPuntosLiquidadosPendientes;
1329  }
1330  }
1331 
1335  public struct Cobros_Con_Tarjeta
1336  {
1344  public int ConTarjetaRegalo;
1348  public int ConTarjetaVales;
1349  }
1350 
1354  public struct Datos_Documento
1355  {
1359  public string Ejercicio;
1363  public string Numero;
1367  public string Letra;
1371  public int Linia;
1375  public string Tarjeta;
1376  }
1377 }
string _Get_Tarjeta_Ejercicio(string tcEjercicio, string tcTarjetaAbono, string tcLetraAbono, string tcAliasDB)
Devuelve la tarjeta del ejercicio y documento indicados
DataTable GetLineasVenta(string empresa, string numero, string letra, string any)
Obtiene DataTable de las lineas de ventas
static AddonsController Instance
Instancia al objeto singleton Addons
Para recuperar el número de cobros con tarjetas
Interfaz de acceso a datos de FidelizaFuncs
bool _ActualizarCobTarjetaFidSiFactuCert(string tcEmpresa, string tcNumero, string tcLetra, string tcEjercicio, sage.ew.docsven.eTipoDocumento toTipo)
Bug 179605: Método para actualizar el número de ticket en COBTARJFID después que haya cambiado al cer...
Argumentos para los eventos lanzados por el addons en caso de error
int _Cobros_Facturas_CobTarFid(string tcFactura)
Devuelve el número de cobros de la factura
bool _Es_Articulo_Regalo(string tcArticulo, string tcTarifa)
Comprueba si el arículo y tarifa están definidos como artículo regalo
Clase negocio del formulario de tarjetas de fidelización
Es como el tipo de entrada asientos pero por negocio, sin formulario, pq quiero que me haga las propu...
bool _Probar_Url_Fideliza(string tcNombre)
Nos permite probar si es correcta la URL definida
void _ComprobarProtocoloWeb()
Task 179295: Comprobar si las conexiones van todavía por http o hay ya que conectar por https este mé...
DataTable GetLineasFacturacionPtosPorArticulos(string lcSelect, string lcWhere, string lcOrder)
Obtiene dataTable facturacion de puntos por articulos
KeyDiccionarioMascara
Clave para diccionario de máscaras
void _AltaTarjetaFideliza(string tcCliente, string tcTarjeta, string tcPrincipal="")
Si la tarjeta introducida en el formulario no existe, llamamos al formulario para darla de alta ...
DataTable GetLineasFacturacionPtosPorTarifa(string lcSelect, string lcWhere, string lcOrder)
Obtiene dataTable facturacion de puntos por Tarifa
Para recuperar datos de un documento, línea y tarjeta
bool _HaAcumuladoPuntosTicket(string tcEmpresa, string tcNumero, string tcLetra, string tcEjercicio)
Bug 179528: Comprobación de si se han acumulado puntos para un documento de venta ...
void _ConsultaTarjetaFideliza(string tcTarjeta, string tcPrincipal="")
Si la tarjeta introducida en el formulario no existe, llamamos al formulario para darla de alta ...
bool _PuedeAcumularPuntosFactucert(string tcEmpresa, string tcNumero, string tcLetra, string tcEjercicio, sage.ew.docsven.eTipoDocumento toTipo)
Comprobar si puede acumular puntos si es un tiquet y está certificado (FACTUCERT) ...
DataTable GetLineasFacturacionPorFamiliaSubfamiliaYMarca(string lcSelect, string lcWhere, string lcOrder)
Obtiene dataTable facturacion de puntos por Familia Subfamilia y Marca
Cobros_Con_Tarjeta _Comprobar_Cobros_Con_Tarjeta(string tcFactura, string tcNumero, string tcLetra)
Devuelve el número de los diferentes cobros con tarjeta del documento
void _Mensaje_TarjetasRegalo(dynamic toDocumento)
Comprueba si hay alguna tarjeta regalo no activada y solo muestra un mensaje
Clase base para el módulo fideliza
Definition: SageAddons.cs:66
void _Mostrar_Log_Error()
Muestra los errores del fichero log
int ConTarjetaFidelizacion
Con tarjeta de fidelización
string _Revisar_Cif(string tcValor)
Metodo para revisar el correcto formato del CIF
bool IsLoaded(string nomAddon)
Indica si está cargado el addon por nombre
Clase de negocio del módulo de fideliza
fideliza(IFidelizaFuncsDA fidelizaFuncsDA)
Constructor
bool _Buscar_Documentos(string tcTarjeta, out Datos_Documento loDatosDoc)
Devuelve los documentos que contienen la tarjeta
Proporciona características adicionales de las máscaras de Eurowin
Definition: clsEwBase.cs:6212
IAddonsManager AddonsManager
Gestor de Addons
Seleccionar()
Crea una nueva instancia de la classe Seleccionar.
Definition: Seleccionar.cs:538
string _Obtener_Max_Tarjeta(string tcMaxTarjeta)
Obtener max tarjeta
DataTable GetLineasFacturacionPorSubFamilia(string lcSelect, string lcWhere, string lcOrder)
Obtiene dataTable facturacion de puntos por Subfamilias
DataTable GetLineasFacturacionPorFamiliaYSubfamilia(string lcSelect, string lcWhere, string lcOrder)
Obtiene dataTable facturacion de puntos por Familia y SubFamilia
void _ComprobarEntorno()
Método para obtener el entorno
DataTable GetLineasFacturacionPorFamiliaYMarca(string lcSelect, string lcWhere, string lcOrder)
Obtiene dataTable facturacion de puntos por Familia y Marca
Formulario multipropuesta SELECCIONAR
Definition: Seleccionar.cs:24
string _Mascara_Net
Máscara convertida en formato .Net
Definition: clsEwBase.cs:6235
string _Brow_Tarjetas(int tnTipo=1)
Muestra un formulario para la búsqueda de tarjetas
DataTable GetLineasFacturacionPorSubfamiliaYMarca(string lcSelect, string lcWhere, string lcOrder)
Obtiene dataTable facturacion de puntos por Subfamilia y Marca
int _CobrosTarjeta(string tcTablaCobros, string tcNumeroDocumento, string tcLetraDocumento, string lcCondicion, out DataTable tdtCobros)
Devuelve los cobros de una tarjeta dada
bool _ActualizarCobTarjetaRegSiFactuCert(string tcEmpresa, string tcNumero, string tcLetra, string tcEjercicio, sage.ew.docsven.eTipoDocumento toTipo)
Bug 179605: Método para actualizar el número de ticket en COBTARJREG después que haya cambiado al cer...
DataTable GetLineasFacturacionPtosPorCliente(string lcSelect, string lcWhere, string lcOrder)
Obtiene dataTable facturacion de puntos por cliente
DataTable GetLineasFacturacionPtos(string empresa, string numero, string letra, DateTime fecha, out string lcSelect, out string lcWhere, out string lcOrder)
Obtiene dataTable facturacion de puntos
DataTable _Calcular_Puntos(string tcNumero, string tcLetra, DateTime tdFecha, decimal tnValorPunto, int tnSession=0, bool tlCancelar=false)
Calcular puntos en función del documento de venta
bool ComprobarSerieDocumentalFideliza(string tcSerie, string tablaTuefid)
Task 178481: Comprobar si la serie documental está siendo usada por tuefideliza. Movemos esta comprob...
int _CobrosTarjeta(string tcTablaCobros, string tcNumeroDocumento, string tcLetraDocumento, string lcCondicion="")
Devuelve los cobros de una tarjeta dada
decimal _Redondeo_Puntos(decimal tnImporte, decimal tnValorPunto, bool tlLiquidar)
Método para el redondeo de puntos
DataTable GetLineasFacturacionPorFamilias(string lcSelect, string lcWhere, string lcOrder)
Obtiene dataTable facturacion de puntos por familia
int _ObtenerPuntosALiquidar(string tcNumero, string tcLetra)
CCR 200157: Método para obtener los puntos a liquidar de un tiquet Lo usaremos antes de imprimir para...