TraspasoSiguienteEjercicioBase.cs
1 using Microsoft.VisualStudio.TestTools.UnitTesting;
2 using sage.ew.articulo;
3 using sage.ew.db;
4 using sage.ew.ewbase;
5 using sage.ew.functions;
6 using sage.ew.global;
7 using Sage.ES.S50.UnitTest.Tools;
8 using System;
9 using System.Collections.Generic;
10 using System.Data;
11 using System.Linq;
12 using System.Text;
13 using System.Threading.Tasks;
14 using sage.ew.cliente.Clases;
15 using static sage.ew.cliente.Cliente.Vacaciones;
16 using sage.ew.cliente;
17 using Sage.ES.S50.Addons;
18 
19 namespace Sage.ES.S50.UnitTest
20 {
21 
22  public abstract class TraspasoSiguienteEjercicioBase
23  {
24  private TestContext testContextInstance;
25 
26  protected static string AnyOriginal { get; set; }
27 
28  protected static string AnyActual { get; set; }
29 
30  protected static string AnySiguiente { get; set; }
31 
32  protected List<Tuple<string, string>> CodigosMante = new List<Tuple<string, string>>();
33 
38  public TestContext TestContext
39  {
40  get
41  {
42  return testContextInstance;
43  }
44  set
45  {
46  testContextInstance = value;
47  }
48  }
49 
50  [ClassInitialize(), DoNotParallelize()]
51  public static void MyClassInitialize(TestContext testContext)
52  {
53  //Conexion a Base de Datos
54  testContext.__Test_LoadRandomConfig();
55  //Guardamos el ejercicio original
56  AnyOriginal = DB.Ejercicio_EW;
57  }
58 
62  [TestInitialize(), DoNotParallelize()]
63  public void MyTestInitialize()
64  {
65  CodigosMante.Clear();
66 
67  if (!EstablecePenultimoEjercicio()) Assert.Fail("No se puede estableer el penultimo ejercicio");
68  }
69 
70 
71  [TestCleanup(), DoNotParallelize()]
72  public virtual void MyTestCleanup()
73  {
74  EstablecePenultimoEjercicio();
75 
76  //Eliminamos los clientes del ejercicio penultimo
77  CleanMantes(CodigosMante);
78  CleanPersonalize(DB.Ejercicio_EW);
79 
80  FUNCTIONS.CambiarEjercicio(DB.Ejercicio_EW, AnySiguiente);
81 
82  //Eliminamos los clientes del último ejercicio
83  CleanMantes(CodigosMante);
84  CleanPersonalize(DB.Ejercicio_EW);
85 
86  CodigosMante.Clear();
87  }
88 
89  protected virtual void CleanPersonalize(string ejercicio_EW)
90  {
91 
92  }
93 
94  private void CleanMantes(List<Tuple<string, string>> toCodigosMante)
95  {
96  ewMante loMante;
97 
98  toCodigosMante.ForEach(f =>
99  {
100  loMante = GetMante(f.Item1);
101 
102  if (loMante is ewMante)
103  {
104  loMante._Codigo = f.Item2;
105  loMante._Load();
106  loMante._Delete();
107  }
108  });
109  }
110 
116  protected virtual ewMante GetMante(string tcTabla)
117  {
118  return null;
119  }
120 
124  [ClassCleanup(), DoNotParallelize()]
125  public static void Clean()
126  {
127  //Dejamos como estaba el ejercicio
128  FUNCTIONS.CambiarEjercicio(DB.Ejercicio_EW, AnyOriginal);
129  }
130 
138  protected void CheckCodigo(string tcAnySiguiente, string tcTabla, string tcCodigo, string tcNombre)
139  {
140  CheckCodigo(tcAnySiguiente, new List<string>() { tcTabla }, tcCodigo, tcNombre);
141  }
142 
150  protected void CheckCodigo(string tcAny, List<string> toTabla, string tcCodigo, string tcNombre)
151  {
152  DataTable loDt;
153  loDt = GetDataCheckCodigo(tcAny, toTabla, tcCodigo, tcNombre);
154 
155  Assert.IsTrue(loDt.Rows.Count == toTabla.Count, $"El codigo {tcCodigo} no existe en alguna de las tablas ({string.Join(", ", toTabla)}) del ejercicio siguiente.");
156  }
157 
165  protected void CheckNoCodigo(string tcAny, List<string> toTabla, string tcCodigo, string tcNombre)
166  {
167  DataTable loDt;
168  loDt = GetDataCheckCodigo(tcAny, toTabla, tcCodigo, tcNombre);
169 
170  Assert.IsTrue(loDt.Rows.Count == 0, $"El codigo {tcCodigo} existe en alguna de las tablas ({string.Join(", ", toTabla)}) del ejercicio siguiente.");
171  }
172 
173  private DataTable GetDataCheckCodigo(string tcAny, List<string> toTabla, string tcCodigo, string tcNombre)
174  {
175  DataTable loDt = new DataTable();
176  List<string> loSql = new List<string>();
177 
178  toTabla.ForEach(f =>
179  {
180  loSql.Add($"SELECT '{f}' as TABLA, CODIGO FROM {DB.SQLDatabase(tcAny, f)} WHERE CODIGO = {DB.SQLString(tcCodigo)} AND RTRIM(NOMBRE) = {DB.SQLString(tcNombre)} ");
181  });
182 
183  DB.SQLExec(string.Join(" UNION ", loSql), ref loDt);
184 
185  return loDt;
186  }
187 
195  protected string _GetCodigoNoExisteDosEjercicios(string tcTabla, string tcCodigoInicial, int tnIncremento)
196  {
197  string lcSQL, lcCodigo = "";
198  DataTable loDt = new DataTable();
199 
200  while (string.IsNullOrEmpty(lcCodigo) || loDt.Rows.Count > 0)
201  {
202  lcCodigo = string.IsNullOrEmpty(lcCodigo) ? tcCodigoInicial : Convert.ToString(Convert.ToInt32(lcCodigo) + tnIncremento);
203 
204  lcSQL = $@"SELECT CODIGO FROM {DB.SQLDatabase(AnyActual, tcTabla)} WHERE CODIGO = {DB.SQLString(lcCodigo)} " +
205  $@"UNION " +
206  $@"SELECT CODIGO FROM {DB.SQLDatabase(AnySiguiente, tcTabla)} WHERE CODIGO = {DB.SQLString(lcCodigo)} ";
207 
208  if (!DB.SQLExec(lcSQL, ref loDt)) Assert.Fail($"Error al ejecutar SQL {DB.Error_Message}");
209  }
210 
211  if (!CodigosMante.Any(f => f.Item1 == tcTabla && f.Item2 == lcCodigo)) CodigosMante.Add(new Tuple<string, string>(tcTabla, lcCodigo));
212 
213  return lcCodigo;
214  }
215 
221  protected string _GetCodigoExisteDosEjercicios(string tcTabla)
222  {
223  string lcSQL;
224  DataTable loDt = new DataTable();
225 
226  lcSQL = $@"SELECT TOP 1 t.CODIGO FROM {DB.SQLDatabase(AnyActual, tcTabla)} t " +
227  $@"INNER JOIN {DB.SQLDatabase(AnySiguiente, tcTabla)} i ON t.CODIGO = i.CODIGO ";
228 
229  return DB.SQLExec(lcSQL, ref loDt) && loDt.Rows.Count > 0 ? Convert.ToString(loDt.Rows[0]["CODIGO"]) : string.Empty;
230 
231  }
232 
237  protected static bool EstablecePenultimoEjercicio()
238  {
239  List<string> loList;
240 
241  if (DB._oAliasDBEjer.Count > 1)
242  {
243  AnyActual = DB.Ejercicio_EW;
244  AnySiguiente = Convert.ToString(Convert.ToInt32(DB.Ejercicio_EW) + 1);
245 
246  //Estamos en el último ejercicio
247  if (!DB._EsPenultimoEjercicio())
248  {
249  loList = DB._oAliasDBEjer.ToList().Select(f => f.Key).OrderByDescending(f => Convert.ToInt32(f)).ToList();
250 
251  AnyActual = loList.Skip(1).First();
252  AnySiguiente = loList.First();
253 
254  FUNCTIONS.CambiarEjercicio(DB.Ejercicio_EW, AnyActual);
255 
256  }
257  }
258 
259  return DB._EsPenultimoEjercicio();
260  }
261 
262  }
263 }
void CheckCodigo(string tcAny, List< string > toTabla, string tcCodigo, string tcNombre)
Checkea si un codigo + nombre existe en el ejercicio siguiente
static bool EstablecePenultimoEjercicio()
Establece el penúltimo ejercicio
Clase de negocio base para mantenimientos
Definition: clsEwBase.cs:1643
string _GetCodigoExisteDosEjercicios(string tcTabla)
Obtiene un codigo que exista en los dos ejercicios
virtual ewMante GetMante(string tcTabla)
Obtener el ewMante
static void Clean()
Dejar el ejercio que estaba inicialmente
string _GetCodigoNoExisteDosEjercicios(string tcTabla, string tcCodigoInicial, int tnIncremento)
Obtiene un codigo que no exista en los dos ejercicios
virtual string _Codigo
Valor del campo clave que
Definition: clsEwBase.cs:2513
void CheckNoCodigo(string tcAny, List< string > toTabla, string tcCodigo, string tcNombre)
Checkea si un codigo + nombre no existe en el ejercicio
void _Load(string tcGuid_Id)
Aquest mètode ens carregarà el registre que tingui associat aquest Guid
Definition: clsEwBase.cs:3921
override bool _Delete()
Elimina el registro actual
Definition: clsEwBase.cs:4583
Vacaciones de clientes
Definition: clsCliente.cs:1375
void MyTestInitialize()
Use TestInitialize para ejecutar código antes de ejecutar cada prueba
void CheckCodigo(string tcAnySiguiente, string tcTabla, string tcCodigo, string tcNombre)
Checkea si un codigo + nombre existe en el ejercicio siguiente