Docsven_CalculoLineaCosteBeneficio.cs
1 using sage.ew.objetos;
2 using Microsoft.VisualStudio.TestTools.UnitTesting;
3 using System;
4 using System.Drawing;
5 using System.Collections.Generic;
6 using System.Text.RegularExpressions;
7 using sage.ew.ewbase;
8 using sage.ew.global;
9 using sage.ew.db;
10 using System.Data;
11 using sage.ew.cliente;
12 using sage.ew.docsven;
13 using sage.ew.articulo;
14 using sage.ew.contabilidad;
15 using sage.ew.docventatpv;
16 using static sage.ew.docsven.Docsven;
17 using sage.ew.functions;
18 using System.Linq;
20 using Sage.ES.S50.UnitTest.Tools;
21 
22 namespace Sage.ES.S50.UnitTest.Docsven
23 {
27  [TestClass()]
29  {
30  #region TestContext
31  private TestContext testContextInstance;
32 
37  public TestContext TestContext
38  {
39  get
40  {
41  return testContextInstance;
42  }
43  set
44  {
45  testContextInstance = value;
46  }
47  }
48  #endregion TestContext
49 
50  #region Atributos de prueba adicionales
51  private static string _cUsuario = string.Empty;
52  private static bool _llPeso = false;
53  private static string _cSerie = "CB"; // Serie CB Coste beneficio
54  private static string _Empresa = "01";
55 
56  private static string _cAlbaranVenta = string.Empty;
57  private static string _cMensaje_Error = string.Empty;
58 
59  private const string _cCliente = "43098761";
60  private const string _cFormaPago = "FB";
61  private const string _Pais = "034";
62  private const string _Moneda = "000";
63 
64  private const string _cTipoIVA = "FB";
65  private const string _cFamilia = "FB";
66 
67  private const string _cCtaCompraFamilia = "60098761";
68  private const string _cCtaVentaFamilia = "60098761";
69 
70  private const string _cArticuloUnidades = "UNI";
71  private const string _cArticuloPeso = "PES";
72  private const string _cArticuloCajaPeso = "CAJPES";
73  private const string _cArticuloCajaPesoPVPPorCaja = "CAJPESPC";
74  private const string _cArticuloCaja = "CAJ";
75  private const string _cArticuloCajaPVPPorCaja = "CAJCAJ";
76  private const string _cArticuloCajaPVPPorMil = "CAJMIL";
77  private const string _cArticuloCajaPVPPorComprarCajasVendUni = "CAJCVMIL";
78  private const string _cArticuloPE96778 = "APE96778";
79 
80  private static ewDocVentaTPV _oewDocVentaTPV = null;
81 
82  private static Dictionary<string, ArticuloBeneficio> _dictArticulos = new Dictionary<string, ArticuloBeneficio>();
83 
84  private string _Ejercicio
85  {
86  get { return Convert.ToString(EW_GLOBAL._GetVariable("wc_any")); }
87  }
88  #endregion Atributos de prueba adicionales
89 
90  #region Métodos públicos de inicialización / clean del test
91  //
92  //Puede utilizar los siguientes atributos adicionales mientras escribe sus pruebas:
93  //
94  //Use ClassInitialize para ejecutar código antes de ejecutar la primera prueba en la clase
95  [ClassInitialize()]
96  public static void MyClassInitialize(TestContext testContext)
97  {
98  //Conexion a Base de Datos
99  testContext.__Test_LoadRandomConfig();
100 
101  _cUsuario = Convert.ToString(EW_GLOBAL._GetVariable("wc_usuario"));
102 
103  if (_cUsuario != "SUPERVISOR")
104  EW_GLOBAL.ValorEnClave_VarGlob("wc_usuario", "SUPERVISOR");
105 
106  // Certificamos que trabajamos con series de albaranes
107  EW_GLOBAL._SetVariable("wl_Factser", true); // Series de albaranes
108  EW_GLOBAL._SetVariable("wl_peso", true); // Activamos trabajar con peso
109  EW_GLOBAL._SetVariable("wl_cajas", true); // Activamos trabajar con peso
110 
111  _llPeso = Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_Peso"));
112 
113  EW_GLOBAL._SetVariable("wl_CosteLin", false); //presentar coste total por linea
114 
115  configurarDatos();
116  }
117 
118  //
119  //Use ClassCleanup para ejecutar código después de haber ejecutado todas las pruebas en una clase
120  [ClassCleanup()]
121  public static void MyClassCleanup()
122  {
123  eliminarDocumentoVenta();
124  eliminarSerieDocumento();
125 
126  eliminarCliente();
127 
128  eliminarArticulos();
129  eliminarTipoIVA();
130  elminarCuentasTipoIVA();
131  eliminarFamilia();
132  eliminarCuentasFamilia();
133 
134  if (_cUsuario != "SUPERVISOR")
135  EW_GLOBAL.ValorEnClave_VarGlob("wc_usuario", _cUsuario);
136  }
137 
138  //Use TestInitialize para ejecutar código antes de ejecutar cada prueba
139  //[TestInitialize()]
140  //public void MyTestInitialize()
141  //{
142  //}
143 
144  //Use TestCleanup para ejecutar código después de que se hayan ejecutado todas las pruebas
145  //[TestCleanup()]
146  //public void MyTestCleanup()
147  //{
148  //}
149  #endregion Métodos públicos de inicialización / clean del test
150 
151  #region Test
152 
157  private void testBeneficioCoste(string tcArticulo)
158  {
160  bool llOk = string.IsNullOrWhiteSpace(_cMensaje_Error);
161 
162  ArticuloBeneficio loArticuloBeneficio = _dictArticulos[tcArticulo];
163 
164  decimal lnCosteUnitarioBeneficioExpected = loArticuloBeneficio._CosteUnitarioBeneficioExpected;
165  decimal lnCosteLineaBeneficioExpected = loArticuloBeneficio._CosteLineaBeneficioExpected;
166  decimal lnPorcenBeneficioExpected = loArticuloBeneficio._PorcenBeneficioExpected;
167 
169  decimal lnCosteUnitarioBeneficio = 0;
170  decimal lnCosteLineaBeneficio = 0;
171  decimal lnPorcenBeneficioLinea = 0;
172 
173  if (llOk)
174  CalculoBeneficio(ref lnCosteUnitarioBeneficio, ref lnCosteLineaBeneficio, ref lnPorcenBeneficioLinea, loArticuloBeneficio._Codigo);
175 
177  if (!llOk)
178  Assert.Fail($"Se ha producido un error al crear los mantenimientos y documentos necesarios para la validación del test. Se cancela la ejecución del test que gestiona el % de beneficio de los documentos de venta. {_cMensaje_Error}");
179  else
180  {
181  Assert.AreEqual(lnCosteUnitarioBeneficio, lnCosteUnitarioBeneficioExpected, $"El coste unitario del beneficio de la línea del artículo {tcArticulo} no es el esperado. ({loArticuloBeneficio._Nombre}");
182  Assert.AreEqual(lnCosteLineaBeneficio, lnCosteLineaBeneficioExpected, $"El coste lineal del beneficio del la línea del artículo {tcArticulo} no es el esperado. ({loArticuloBeneficio._Nombre}");
183  Assert.AreEqual(lnPorcenBeneficioLinea, lnPorcenBeneficioExpected, $"El % de beneficio del la línea del artículo {tcArticulo} no es el esperado. ({loArticuloBeneficio._Nombre}");
184  }
185  }
186 
190  private void testBeneficioCosteTotalDocumento()
191  {
193  bool llOk = string.IsNullOrWhiteSpace(_cMensaje_Error);
194 
195  decimal lnCosteTotal = 0, lnCosteTotalDocumento = 0, lnBeneficioTotal = 0, lnTotalBeneficioDocumento = 0, lnPorcenBeneficioDocumento = 0;
196  decimal lnCosteTotalExpected = 0 ;
197 
198  // De momento estos valores lo dejamos prefijados
199  decimal lnBeneficioTotalExpected = 52558;
200  decimal lnPorcenBeneficioDocumentoExpected = 80;
201 
202 
204  lnBeneficioTotal = _oewDocVentaTPV._Beneficio_doc(out lnCosteTotal);
205 
206  lnCosteTotalExpected = _dictArticulos.AsEnumerable().Select(art => string.IsNullOrWhiteSpace(art.Value._Codigo) ? 0 : art.Value._CosteLineaBeneficioExpected).Sum();
207 
208  lnTotalBeneficioDocumento = _oewDocVentaTPV._Beneficio_doc(out lnCosteTotalDocumento);
209 
210  lnPorcenBeneficioDocumento = _oewDocVentaTPV._PorcentajeBeneficio_doc(lnTotalBeneficioDocumento);
211 
212  lnPorcenBeneficioDocumento = new ewMascara(Convert.ToString(EW_GLOBAL._GetMascara(KeyDiccionarioMascara.wc_tpc))).Redondeo(lnPorcenBeneficioDocumento);
213 
214 
216  if (!llOk)
217  Assert.Fail($"Se ha producido un error al crear los mantenimientos y documentos necesarios para la validación del test. Se cancela la ejecución del test que gestiona el % de beneficio de los documentos de venta. {_cMensaje_Error}");
218  else
219  {
220  Assert.AreEqual(lnCosteTotal, lnCosteTotalExpected, $"El coste total del documento no es el esperado.");
221  Assert.AreEqual(lnBeneficioTotal, lnBeneficioTotalExpected, $"El beneficio total del documento no es el esperado.");
222  Assert.AreEqual(lnPorcenBeneficioDocumento, lnPorcenBeneficioDocumentoExpected, $"El % de beneficio total del documento no es el esperado.");
223  }
224  }
225 
229  [Owner(Owners.Diego_Martinez),
230  TestMethod(),
231  Description("Prueba 1 del UserControl que gestiona el % de Beneficio (ctDocBeneficio). " +
232  "Artículo PES: articulo que trabaja con PESO - Tipo PVP por UNIDADES")]
233  [Priority(2)]
235  {
236  testBeneficioCoste(_cArticuloPeso);
237  }
238 
242  [Owner(Owners.Diego_Martinez),
243  TestMethod(),
244  Description("Prueba 2 del UserControl que gestiona el % de Beneficio (ctDocBeneficio). " +
245  "Artículo CAJPES: artículo que trabaja con PESO, CAJAS y Tipo PVP por UNIDADES")]
246  [Priority(2)]
248  {
249  testBeneficioCoste(_cArticuloCajaPeso);
250  }
251 
255  [Owner(Owners.Diego_Martinez),
256  TestMethod(),
257  Description("Prueba 3 del UserControl que gestiona el % de Beneficio (ctDocBeneficio). " +
258  "Artículo CAJPESPC: artículo que trabaja con PESO, CAJAS y Tipo PVP por CAJAS")]
259  [Priority(2)]
261  {
262  testBeneficioCoste(_cArticuloCajaPesoPVPPorCaja);
263  }
264 
268  [Owner(Owners.Diego_Martinez),
269  TestMethod(),
270  Description("Prueba 4 del UserControl que gestiona el % de Beneficio (ctDocBeneficio). " +
271  "Artículo CAJ: artículo que trabaja con CAJAS (1) - Tipo PVP por UNIDADES")]
272  [Priority(2)]
274  {
275  testBeneficioCoste(_cArticuloCaja);
276  }
277 
281  [Owner(Owners.Diego_Martinez),
282  TestMethod(),
283  Description("Prueba 5 del UserControl que gestiona el % de Beneficio (ctDocBeneficio). " +
284  "Artículo CAJ: artículo que trabaja con CAJAS (1) - Tipo PVP por CAJAS")]
285  [Priority(2)]
287  {
288  testBeneficioCoste(_cArticuloCajaPVPPorCaja);
289  }
290 
294  [Owner(Owners.Diego_Martinez),
295  TestMethod(),
296  Description("Prueba 6 del UserControl que gestiona el % de Beneficio (ctDocBeneficio). " +
297  "Artículo CAJ: artículo que trabaja con CAJAS (1) - Tipo PVP por MIL")]
298  [Priority(2)]
300  {
301  testBeneficioCoste(_cArticuloCajaPVPPorMil);
302  }
303 
307  [Owner(Owners.Diego_Martinez),
308  TestMethod(),
309  Description("Prueba 7 del UserControl que gestiona el % de Beneficio (ctDocBeneficio). " +
310  "Artículo CAJ: artículo que trabaja con CAJAS (10) - Tipo PVP Comprar por CAJAS vender por UNIDADES")]
311  [Priority(2)]
313  {
314  testBeneficioCoste(_cArticuloCajaPVPPorComprarCajasVendUni);
315  }
316 
320  [Owner(Owners.Diego_Martinez),
321  TestMethod(),
322  Description("Prueba 8 del UserControl que gestiona el % de Beneficio (ctDocBeneficio). " +
323  "Artículo CAJ: artículo que trabaja con CAJAS (1), PESO - Tipo PVP por CAJAS")]
324  [Priority(2)]
326  {
327  testBeneficioCoste(_cArticuloPE96778);
328  }
329 
333  [Owner(Owners.Diego_Martinez),
334  TestMethod(),
335  Description("Prueba 9 del UserControl que gestiona el % de Beneficio (ctDocBeneficio). " +
336  "Artículo UNI: artículo solo UNIDADES, que NO trabaja con CAJAS ni PESO - Tipo PVP por UNIDADES")]
337  [Priority(2)]
339  {
340  testBeneficioCoste(_cArticuloUnidades);
341  }
342 
346  [Owner(Owners.Diego_Martinez),
347  TestMethod(),
348  Description("Prueba 10 del UserControl que gestiona el % de Beneficio (ctDocBeneficio). " +
349  "Cáclulo del beneficio total del documento")]
350  [Priority(2)]
352  {
353  testBeneficioCosteTotalDocumento();
354  }
355  #endregion Test
356 
357  #region Métodos de configuración de los datos para la ejecución del test
358  private static void populateArticulos()
362  {
363  newArticulo(_cArticuloPeso, $"Artículo {_cArticuloPeso} que trabaja con PESO (10) - Tipo PVP por UNIDADES",
364  tnPeso: 10, tnPvp: 500, // Artículo
365  tnCosteVenta: 100, tnCajasVenta: 0, tnUnidadesVenta: 1, tnPesoVenta: 10, tnPrecioVenta: 500, // Valores de la venta
366  tnCosteUnitarioBeneficioExpected: 1000, tnCosteLineaBeneficioExpected: 1000, tnPorcenBeneficioExpected: 80); // Valores esperados de coste/beneficio
367 
368  newArticulo(_cArticuloCajaPeso, $"Artículo {_cArticuloCajaPeso} que trabaja con CAJAS (1) y PESO (10) - Tipo PVP por UNIDADES",
369  tnPeso: 10, tnUnicaja: 1, tnPvp: 500, // Artículo
370  tnCosteVenta: 100, tnCajasVenta: 5, tnUnidadesVenta: 5, tnPesoVenta: 50, tnPrecioVenta: 500, // Valores de la venta
371  tnCosteUnitarioBeneficioExpected: 1000, tnCosteLineaBeneficioExpected: 5000, tnPorcenBeneficioExpected: 80); // Valores esperados de coste/beneficio
372 
373  newArticulo(_cArticuloCajaPesoPVPPorCaja, $"Artículo {_cArticuloCajaPesoPVPPorCaja} que trabaja con CAJAS (1) y PESO (10) - Tipo PVP por CAJAS",
374  tnPeso: 10, tnUnicaja: 1, tnPvp: 500, tnTipo_PVP: 2, // Artículo
375  tnCosteVenta: 100, tnCajasVenta: 5, tnUnidadesVenta: 5, tnPesoVenta: 50, tnPrecioVenta: 500, // Valores de la venta
376  tnCosteUnitarioBeneficioExpected: 100, tnCosteLineaBeneficioExpected: 500, tnPorcenBeneficioExpected: 80); // Valores esperados de coste/beneficio
377 
378  newArticulo(_cArticuloCaja, $"Artículo {_cArticuloCaja} que trabaja con CAJAS (1) - Tipo PVP por UNIDADES",
379  tnUnicaja: 2, tnPvp: 500, tnTipo_PVP: 1, // Artículo
380  tnCosteVenta: 100, tnCajasVenta: 1, tnUnidadesVenta: 2, tnPrecioVenta: 500, // Valores de la venta
381  tnCosteUnitarioBeneficioExpected: 100, tnCosteLineaBeneficioExpected: 200, tnPorcenBeneficioExpected: 80); // Valores esperados de coste/beneficio
382 
383  newArticulo(_cArticuloCajaPVPPorCaja, $"Artículo {_cArticuloCajaPVPPorCaja} que trabaja con CAJAS (2) - Tipo PVP por CAJAS",
384  tnUnicaja: 2, tnPvp: 500, tnTipo_PVP: 2, // Artículo
385  tnCosteVenta: 50, tnCajasVenta: 1, tnUnidadesVenta: 2, tnPrecioVenta: 500, // Valores de la venta
386  tnCosteUnitarioBeneficioExpected: 50, tnCosteLineaBeneficioExpected: 100, tnPorcenBeneficioExpected: 80); // Valores esperados de coste/beneficio
387 
388  newArticulo(_cArticuloCajaPVPPorMil, $"Artículo {_cArticuloCajaPVPPorMil} que trabaja con CAJAS (2) - Tipo PVP por MIL",
389  tnUnicaja: 2, tnPvp: 500, tnTipo_PVP: 4, // Artículo
390  tnCosteVenta: 1, tnCajasVenta: 500, tnUnidadesVenta: 1000, tnPrecioVenta: 5000, // Valores de la venta
391  tnCosteUnitarioBeneficioExpected: 1, tnCosteLineaBeneficioExpected: 1000, tnPorcenBeneficioExpected: 80); // Valores esperados de coste/beneficio
392 
393  newArticulo(_cArticuloCajaPVPPorComprarCajasVendUni, $"Artículo {_cArticuloCajaPVPPorComprarCajasVendUni} que trabaja con CAJAS (10) - Tipo PVP Comprar por CAJAS vender por UNIDADES",
394  tnUnicaja: 10, tnPvp: 500, tnTipo_PVP: 3, // Artículo
395  tnCosteVenta: 100, tnCajasVenta: 5, tnUnidadesVenta: 50, tnPrecioVenta: 500, // Valores de la venta
396  tnCosteUnitarioBeneficioExpected: 100, tnCosteLineaBeneficioExpected: 5000, tnPorcenBeneficioExpected: 80); // Valores esperados de coste/beneficio
397 
398  newArticulo(_cArticuloPE96778, $"Artículo {_cArticuloPE96778} que trabaja con CAJAS (1) y PESO (2) - Tipo PVP por CAJAS",
399  tnUnicaja: 1, tnPeso: 2, tnPvp: 100, tnTipo_PVP: 2, // Artículo
400  tnCosteVenta: 21, tnCajasVenta: 2, tnPesoVenta: 4, tnUnidadesVenta: 2, tnPrecioVenta: 100, // Valores de la venta
401  tnCosteUnitarioBeneficioExpected: 21, tnCosteLineaBeneficioExpected: 42, tnPorcenBeneficioExpected: 79); // Valores esperados de coste/beneficio
402 
403  newArticulo(_cArticuloUnidades, $"Artículo {_cArticuloUnidades} que NO trabaja con CAJAS ni PESO - Tipo PVP por UNIDADES",
404  tnPeso: 0, tnUnicaja: 0, tnPvp: 500, // Artículo
405  tnCosteVenta: 100, tnCajasVenta: 0, tnUnidadesVenta: 3, tnPesoVenta: 0, tnPrecioVenta: 500, // Valores de la venta
406  tnCosteUnitarioBeneficioExpected: 100, tnCosteLineaBeneficioExpected: 300, tnPorcenBeneficioExpected: 80); // Valores esperados de coste/beneficio
407  }
408 
416  private void CalculoBeneficio(ref decimal tnCosteUnitarioBeneficio, ref decimal tnCosteLineaBeneficio, ref decimal tnPorcenBeneficioLinea, string tcArticulo)
417  {
418  // Porcentaje de beneficio
419  List<IDocVentaLin> lstLineas = _oewDocVentaTPV._Lineas.Where(lin => lin._Articulo == tcArticulo).ToList<IDocVentaLin>(); // .ConvertAll<IDocVentaLin>(lnLin => (IDocVentaLin)lnLin);
420 
421  if (lstLineas.Count > 0)
422  {
423  ewDocVentaLin loLinea = (ewDocVentaLin)lstLineas.First(); // IDocVentaLin
424 
425  // Asignamos los valores del beneficio
426  tnCosteUnitarioBeneficio = loLinea._BeneficioCosteUnitario();
427  tnCosteLineaBeneficio = loLinea._BeneficioCosteLinea();
428 
429  // Asignamos el tanto de Porcentaje de beneficio de la línea
430  tnPorcenBeneficioLinea = loLinea._BeneficioPorcentajeLinea();
431 
432  tnPorcenBeneficioLinea = new ewMascara(Convert.ToString(EW_GLOBAL._GetMascara(KeyDiccionarioMascara.wc_tpc))).Redondeo(tnPorcenBeneficioLinea);
433  }
434  else
435  _cMensaje_Error = $"No se ha encontrado el artículo {tcArticulo} en el albarán de venta";
436  }
437 
441  private static void configurarDatos()
442  {
443  populateArticulos();
444 
445  configurarSerieDocumento();
446 
447  configurarCuentasTipoIVA();
448  configurarTipoIVA();
449 
450  configurarCliente();
451 
452  configurarFamilia();
453  configurarArticulos();
454 
455  crearAlbaranVenta();
456  }
457 
462  private static bool crearAlbaranVenta()
463  {
464  bool llOk = false;
465 
466  _oewDocVentaTPV = new ewDocVentaTPV();
467 
468  _oewDocVentaTPV._Letra = _cSerie;
469  _oewDocVentaTPV._Cabecera._Cliente = _cCliente;
470  _oewDocVentaTPV._Cabecera._FormaPago = _cFormaPago; ;
471  _oewDocVentaTPV._Save();
472 
473  if (_oewDocVentaTPV._New(_Empresa, _cSerie))
474  {
475  _cAlbaranVenta = _oewDocVentaTPV._Numero;
476 
477  foreach (KeyValuePair<string, ArticuloBeneficio> loArticulo in _dictArticulos)
478  {
479  ArticuloBeneficio loArticuloBeneficio = loArticulo.Value;
480 
481  ewDocVentaLin loLin = _oewDocVentaTPV._AddLinea();
482  loLin._Articulo = loArticuloBeneficio._Codigo;
483  loLin._TipoIva = _cTipoIVA;
484 
485  if (loArticuloBeneficio._CajasVenta != 0)
486  loLin._Cajas = loArticuloBeneficio._CajasVenta;
487 
488  loLin._Unidades = loArticuloBeneficio._UnidadesVenta;
489 
490  if (loArticuloBeneficio._PesoVenta != 0)
491  loLin._Peso = loArticuloBeneficio._PesoVenta;
492 
493  loLin._Coste = loArticuloBeneficio._CosteVenta;
494  loLin._Precio = loArticuloBeneficio._PrecioVenta;
495  }
496 
497  llOk = _oewDocVentaTPV._Save();
498  }
499 
500  return llOk;
501  }
502 
521  private static ArticuloBeneficio newArticulo(string tcArticulo, string tcNombre, decimal tnUnicaja = 0, decimal tnPeso = 0, int tnTipo_PVP = 1, decimal tnPvp = 0,
522  decimal tnCajasVenta = 0, decimal tnUnidadesVenta = 1, decimal tnPesoVenta = 0, decimal tnCosteVenta = 0, decimal tnPrecioVenta = 0,
523  decimal tnCosteUnitarioBeneficioExpected = 0, decimal tnCosteLineaBeneficioExpected = 0, decimal tnPorcenBeneficioExpected = 0)
524  {
525 
526  if (_dictArticulos.ContainsKey(tcArticulo))
527  return _dictArticulos[tcArticulo];
528  else
529  {
530  ArticuloBeneficio loArticuloBeneficio = new ArticuloBeneficio(tcArticulo, tcNombre, tnUnicaja, tnPeso, tnTipo_PVP, tnPvp,
531  tnCajasVenta, tnUnidadesVenta, tnPesoVenta, tnCosteVenta, tnPrecioVenta,
532  tnCosteUnitarioBeneficioExpected, tnCosteLineaBeneficioExpected, tnPorcenBeneficioExpected);
533 
534  _dictArticulos.Add(tcArticulo, loArticuloBeneficio);
535 
536  return loArticuloBeneficio;
537  }
538  }
539 
550  private static bool configurarArticulos()
551  {
552  bool llOk = true;
553 
554  foreach (KeyValuePair<string, ArticuloBeneficio> loArticulo in _dictArticulos)
555  {
556  ArticuloBeneficio loArticuloBeneficio = loArticulo.Value;
557 
558  llOk = llOk && configurarArticulo(loArticuloBeneficio);
559  }
560 
561  return llOk;
562  }
563 
569  private static bool configurarArticulo(ArticuloBeneficio toArticuloBeneficio)
570  {
571  bool llOk = false;
572 
573  using (Articulo loArticulo = new Articulo())
574  {
575  loArticulo._Codigo = toArticuloBeneficio._Codigo;
576 
577  if (!loArticulo._Existe_Registro())
578  {
579  loArticulo._New(toArticuloBeneficio._Codigo);
580  }
581 
582  loArticulo._Nombre = toArticuloBeneficio._Nombre;
583  loArticulo._Familia = _cFamilia;
584  loArticulo._Tipo_Iva = _cTipoIVA;
585 
586  loArticulo._Peso = toArticuloBeneficio._Peso;
587  loArticulo._Unicaja = toArticuloBeneficio._Unicaja;
588  loArticulo._Tipo_PVP = toArticuloBeneficio._Tipo_PVP;
589 
590  llOk = loArticulo._Save();
591 
592  if (!llOk)
593  _cMensaje_Error = $"Se ha producido un error al crear el artículo {toArticuloBeneficio._Codigo}. {loArticulo._Error_Message}";
594  }
595 
596  return llOk;
597  }
598 
602  private static void configurarSerieDocumento()
603  {
604  eliminarSerieDocumento();
605 
606  using (Letras loLetras = new Letras())
607  {
608  loLetras._Codigo = _cSerie;
609 
610  if (!loLetras._Existe_Registro())
611  loLetras._Codigo = _cSerie;
612 
613  loLetras._Nombre = "Serie pruebas coste beneficio de documentos de venta";
614  loLetras._Save();
615  }
616  }
617 
621  private static void configurarCliente()
622  {
623  using (sage.ew.cliente.Cliente loCliente = new sage.ew.cliente.Cliente())
624  {
625  loCliente._Codigo = _cCliente;
626 
627  if (!loCliente._Existe_Registro())
628  loCliente._New(_cCliente, "Cliente " + _cCliente + " para pruebas");
629 
630  loCliente._Nombre = "Cliente " + _cCliente + " para pruebas";
631  loCliente._Pais = _Pais;
632  loCliente._Moneda = _Moneda;
633  loCliente._ProntoPago = 0;
634  loCliente._RECC = false;
635  loCliente._Recargo = false;
636  loCliente._RetencionFiscal = false;
637  loCliente._TipoIVA = "";
638  loCliente._TipoCliente = sage.ew.cliente.Cliente.TipoCliente.Nacional;
639 
640  bool llOk = loCliente._Save();
641  }
642  }
643 
647  private static void configurarTipoIVA()
648  {
649  bool llOk = false;
650 
651  using (TipoIVA loTipoIva = new TipoIVA())
652  {
653  loTipoIva._Codigo = _cTipoIVA;
654  if (!loTipoIva._Existe_Registro())
655  {
656  loTipoIva._New(loTipoIva._Codigo);
657  loTipoIva._Codigo = _cTipoIVA;
658  }
659 
660  loTipoIva._Nombre = "IVA 21% (5,2%) ";
661  loTipoIva._IVA = 21;
662  loTipoIva._Recargo = 5.2M;
663  loTipoIva._Cta_IVA_Rep = "47700190";
664  loTipoIva._Cta_IVA_Sop = "47200190";
665  loTipoIva._Cta_REC_Rep = "47700191";
666  loTipoIva._Cta_REC_Sop = "47200191";
667 
668  loTipoIva._Pendevrep = "47710180";
669  loTipoIva._Recrepcdev = "47710195";
670  loTipoIva._Pendedsop = "47210180";
671  loTipoIva._Recsopcdev = "47210195";
672 
673  loTipoIva._Cta_IVA_Sop_Nodeduc = "47200170";
674  loTipoIva._Pendedsop_Nodeduc = "47210171";
675 
676  loTipoIva._IVA_Deducible = true;
677  loTipoIva._IVA_Exento = false;
678 
679  loTipoIva._Tipo = TipoIVA.TipoImpuesto.IVA;
680 
681  llOk = loTipoIva._Save();
682  }
683  }
684 
689  private static bool configurarFamilia()
690  {
691  bool llOk = true;
692 
693  configurarCuentaContable(_cCtaCompraFamilia, $"CUENTA DE COMPRAS DE LA FAMILIA {_cFamilia}");
694  configurarCuentaContable(_cCtaVentaFamilia, $"CUENTA DE VENTAS DE LA FAMILIA {_cCtaVentaFamilia}");
695 
696  using (Familia loFamilia = new Familia())
697  {
698  loFamilia._Codigo = _cFamilia;
699 
700  if (!loFamilia._Existe_Registro())
701  {
702  loFamilia._New(_cFamilia);
703  }
704 
705  loFamilia._Nombre = "FAMILIA TEST CÁLCULO DE COSTE BENEFICIO";
706  loFamilia._CtaCompra = _cCtaCompraFamilia;
707  loFamilia._CtaVenta = _cCtaVentaFamilia;
708 
709  llOk = loFamilia._Save();
710  }
711 
712  return llOk;
713  }
714 
721  private static bool configurarCuentaContable(string tcCodigo, string tcNombre)
722  {
723  bool llOk = true;
724 
725  using (Cuenta loCuenta = new Cuenta())
726  {
727  loCuenta._Codigo = tcCodigo;
728  if (!loCuenta._Existe_Registro())
729  llOk = loCuenta._New(tcCodigo, tcNombre);
730  }
731 
732  return llOk;
733  }
734 
739  private static bool configurarCuentasTipoIVA()
740  {
741  bool llOk = true;
742 
743  llOk = configurarCuentaContable("47700190", "IVA REPERCUTIDOO ");
744  llOk = llOk && configurarCuentaContable("47200190", "IVA SOPORTADO");
745 
746  llOk = llOk && configurarCuentaContable("47700191", "RECARGO REPERCUTIDO");
747  llOk = llOk && configurarCuentaContable("47200191", "RECARGO SOPORTADO");
748 
749  llOk = llOk && configurarCuentaContable("47710180", "CUENTA _Pendevrep");
750  llOk = llOk && configurarCuentaContable("47710195", "CUENTA _Recrepcdev");
751 
752  llOk = llOk && configurarCuentaContable("47210180", "CUENTA _Pendedsop");
753  llOk = llOk && configurarCuentaContable("47210195", "CUENTA _Recsopcdev");
754 
755  llOk = llOk && configurarCuentaContable("47200170", "CUENTA _Cta_IVA_Sop_Nodeduc");
756  llOk = llOk && configurarCuentaContable("47210171", "CUENTA _Pendedsop_Nodeduc");
757 
758  return llOk;
759  }
760 
761  #endregion Métodos de configuración de los datos para la ejecución del test
762 
763  #region Borrado de datos del Test
764  private static void eliminarCliente()
768  {
769  using (sage.ew.cliente.Cliente loCliente = new sage.ew.cliente.Cliente())
770  {
771  loCliente._Codigo = _cCliente;
772 
773  if (loCliente._Existe_Registro())
774  {
775  bool llOk = loCliente._Delete();
776  }
777  }
778  }
779 
783  private static void eliminarDocumentoVenta()
784  {
785  using (ewDocVentaTPV loDocVenta = new ewDocVentaTPV())
786  {
787  bool llOk = loDocVenta._Load(_Empresa, _cAlbaranVenta, _cSerie);
788 
789  llOk = llOk && loDocVenta._Delete();
790  }
791  }
792 
796  private static void eliminarSerieDocumento()
797  {
798  using (Letras loLetras = new Letras())
799  {
800  loLetras._Codigo = _cSerie;
801 
802  if (loLetras._Existe_Registro())
803  {
804  bool llOk = loLetras._Delete();
805  }
806  }
807  }
808 
812  private static void eliminarTipoIVA()
813  {
814  using (TipoIVA loTipoIVA = new TipoIVA())
815  {
816  loTipoIVA._Codigo = _cTipoIVA;
817 
818  if (loTipoIVA._Existe_Registro())
819  {
820  bool llOK = loTipoIVA._Delete();
821  }
822  }
823  }
824 
828  private static void eliminarFamilia()
829  {
830  using (Familia loFamilia = new Familia())
831  {
832  loFamilia._Codigo = _cTipoIVA;
833 
834  if (loFamilia._Existe_Registro())
835  {
836  bool llOK = loFamilia._Delete();
837  }
838  }
839  }
840 
844  private static void eliminarArticulos()
845  {
846  foreach (KeyValuePair<string, ArticuloBeneficio> loArticulo in _dictArticulos)
847  {
848  ArticuloBeneficio loArticuloBeneficio = loArticulo.Value;
849 
850  eliminarArticulo(loArticuloBeneficio._Codigo);
851  }
852  }
853 
858  private static void eliminarArticulo(string tcCodigo)
859  {
860  using (Articulo loArticulo = new Articulo())
861  {
862  loArticulo._Codigo = tcCodigo;
863 
864  if (loArticulo._Existe_Registro())
865  {
866  bool llOK = loArticulo._Delete();
867  }
868  }
869  }
870 
876  private static bool eliminarCuentaTipoIVA(string tcCodigo)
877  {
878  bool llOk = true;
879 
880  using (Cuenta loCuenta = new Cuenta())
881  {
882  loCuenta._Codigo = tcCodigo;
883  if (loCuenta._Existe_Registro())
884  loCuenta._Delete();
885  }
886 
887  return llOk;
888  }
889 
893  private static void elminarCuentasTipoIVA()
894  {
895  eliminarCuentaTipoIVA("47700190");
896  eliminarCuentaTipoIVA("47200190");
897 
898  eliminarCuentaTipoIVA("47700191");
899  eliminarCuentaTipoIVA("47200191");
900 
901  eliminarCuentaTipoIVA("47710180");
902  eliminarCuentaTipoIVA("47710195");
903 
904  eliminarCuentaTipoIVA("47210180");
905  eliminarCuentaTipoIVA("47210195");
906 
907  eliminarCuentaTipoIVA("47200170");
908  eliminarCuentaTipoIVA("47210171");
909  }
910 
914  private static void eliminarCuentasFamilia()
915  {
916  eliminarCuentaTipoIVA(_cCtaCompraFamilia);
917  eliminarCuentaTipoIVA(_cCtaVentaFamilia);
918  }
919  #endregion Borrado de datos del Test
920 
921  #region Clase para poder gestionar con más facilidad la creación de artículo y el flujo del test
922  private class ArticuloBeneficio
926  {
930  public string _Codigo { get; set; }
931 
935  public string _Nombre { get; set; }
936 
940  public decimal _Peso { get; set; }
941 
945  public decimal _Unicaja { get; set; }
946 
950  public int _Tipo_PVP { get; set; }
951 
955  public decimal _Pvp { get; set; }
956 
960  public decimal _UnidadesVenta { get; set; }
961 
965  public decimal _CajasVenta { get; set; }
966 
970  public decimal _PesoVenta { get; set; }
971 
975  public decimal _PrecioVenta { get; set; }
976 
980  public decimal _CosteVenta { get; set; }
981 
985  public decimal _CosteUnitarioBeneficioExpected { get; set; }
986 
990  public decimal _CosteLineaBeneficioExpected { get; set; }
991 
995  public decimal _PorcenBeneficioExpected { get; set; }
996 
1014  public ArticuloBeneficio(string tcArticulo, string tcNombre, decimal tnUnicaja, decimal tnPeso, int tnTipo_PVP, decimal tnPvp,
1015  decimal tnCajasVenta, decimal tnUnidadesVenta, decimal tnPesoVenta, decimal tnCosteVenta, decimal tnPrecioVenta,
1016  decimal tnCosteUnitarioBeneficioExpected, decimal tnCosteLineaBeneficioExpected, decimal tnPorcenBeneficioExpected)
1017  {
1018  _Codigo = tcArticulo;
1019  _Nombre = tcNombre;
1020  _Peso = tnPeso;
1021  _Unicaja = tnUnicaja;
1022  _Tipo_PVP = tnTipo_PVP;
1023  _Pvp = tnPvp;
1024  _CajasVenta = tnCajasVenta;
1025  _UnidadesVenta = tnUnidadesVenta;
1026  _PesoVenta = tnPesoVenta;
1027  _PrecioVenta = tnPrecioVenta;
1028  _CosteVenta = tnCosteVenta;
1029  _CosteUnitarioBeneficioExpected = tnCosteUnitarioBeneficioExpected;
1030  _CosteLineaBeneficioExpected = tnCosteLineaBeneficioExpected;
1031  _PorcenBeneficioExpected = tnPorcenBeneficioExpected;
1032  }
1033  }
1034 
1035  #endregion Clase para poder gestionar con más facilidad la creación de artículo y el flujo del test
1036  }
1037 }
virtual string _Numero
Número del document
Definition: DocsVen.cs:2356
override bool _New(String tcEmpresa, String tcLetra="", String tcNumero="")
Por motives similares a los explicados en el "public override bool _Load" anterior se sobreescribe ta...
string _Pendevrep
Repercutido pendiente devengado (Criterio de caja)
Definition: clsTipoIVA.cs:266
TipoImpuesto
Tipo de impuesto
Definition: clsTipoIVA.cs:117
override bool _Delete()
Borrem el document i presentem display si cal
void Beneficio_Articulo_Cajas_TipoPVPCajas()
Prueba del cálculo de Coste/Beneficio de los documentos de venta /summary>
override bool _Load(string tcEmpresa, string tcNumero, string tcLetra="", string tcEjercicio="GESTION")
Carga un documento existente
void Beneficio_Articulo_Cajas_TipoPVPPorMil()
Prueba del cálculo de Coste/Beneficio de los documentos de venta /summary>
override string _Codigo
Override del código para controlar que no entren espacios por la derecha
Definition: clsLetras.cs:125
Clase Artículo
Definition: articulo.cs:33
void Beneficio_TotalDocumento()
Prueba del cálculo total de Coste/Beneficio de los documentos de venta /summary>
decimal _PorcentajeBeneficio_doc(decimal tnBeneficioDoc)
Porcentaje de Beneficio del documento
Definition: DocsVen.cs:6851
override bool _Delete()
Delete
Definition: articulo.cs:4171
void Beneficio_Articulo_Cajas_Peso_TipoPVPUnidades()
Prueba del cálculo de Coste/Beneficio de los documentos de venta /summary>
bool _IVA_Exento
_IVA_Exento (boolean)
Definition: clsTipoIVA.cs:711
void Beneficio_Articulo_Cajas_TipoPVPUnidades()
Prueba del cálculo de Coste/Beneficio de los documentos de venta /summary>
Clase documento de venta TPV
Definition: DocVentaTpv.cs:47
void Beneficio_Articulo_Cajas_Peso_TipoPVPPorCajas_PE92678()
Prueba del cálculo de Coste/Beneficio de los documentos de venta /summary>
void Beneficio_Articulo_Cajas_Peso_TipoPVPCajas()
Prueba del cálculo de Coste/Beneficio de los documentos de venta /summary>
string _Cta_REC_Rep
_CTA_REC_Rep (string)
Definition: clsTipoIVA.cs:241
Clase de prueba para el cálculo de beneficio de los documentos de venta /summary> ...
override void _New(string tcCodigo="")
Metodo _New de la clase base de los mantenimientos
Definition: clsEwBase.cs:3853
string _Recrepcdev
Recargo repercutido devengado (Criterio de caja)
Definition: clsTipoIVA.cs:316
KeyDiccionarioMascara
Clave para diccionario de máscaras
string _Pendedsop_Nodeduc
Cuenta de IVA soportado pendiente de devengo no deducible (prorrata) Task 143008
Definition: clsTipoIVA.cs:395
void Beneficio_Articulo_Unidades()
Prueba del cálculo de Coste/Beneficio de los documentos de venta /summary>
virtual string _Letra
Lletra
Definition: DocsVen.cs:2340
override bool _Save()
Guarda el registro actual
Definition: clsEwBase.cs:4126
override string _Codigo
Redefinir propiedad _Codigo (PE-102588)
Definition: articulo.cs:267
PE-82381 Clase utilizada para consultar los datos de Letras
Definition: clsLetras.cs:22
override void _New(string tcCodigo="")
_New
bool _IVA_Deducible
_IVA_Deducible (boolean)
Definition: clsTipoIVA.cs:550
string _Cta_REC_Sop
_CTA_REC_Sop (string)
Definition: clsTipoIVA.cs:216
virtual bool _Existe_Registro()
Nos indica si existe el registro en la Base de Datos
Definition: clsEwBase.cs:3649
string _CtaVenta
Cuenta de venta
Definition: clsFamilia.cs:58
override bool _Save()
Save
Definition: articulo.cs:3437
string _Pendedsop
Soportado pendiente devengado (Criterio de caja)
Definition: clsTipoIVA.cs:291
_TipoDocCab _Cabecera
Cabecera
Definition: DocsVen.cs:2626
override bool _Delete()
Borra la familia cargada
Definition: clsFamilia.cs:553
BindingList< _TipoDocLin > _Lineas
Líneas
Definition: DocsVen.cs:2646
TipoCliente
Posibles Tipos de Clientes
Definition: clsCliente.cs:9956
override string _Codigo
Campo clave del mantenimiento
Clase de negocio del mantenimiento de cuentas contables
virtual string _Nombre
Campo nombre del mantenimiento. En este hay que basar los demás campos en las clases heredadas ...
Definition: clsEwBase.cs:2655
virtual string _Codigo
Valor del campo clave que
Definition: clsEwBase.cs:2513
decimal _Unicaja
Propiedad que indica las cajas definidas en la ficha del artículo
Definition: articulo.cs:1024
decimal _IVA
_IVA (decimal)
Definition: clsTipoIVA.cs:70
override bool _Save()
Guardem el document pero aquí tambe fem el save de portes.
Proporciona características adicionales de las máscaras de Eurowin
Definition: clsEwBase.cs:6212
Classe base dels documents.
Definition: DocsVen.cs:684
string _Tipo_Iva
Código del tipo de IVA que tiene asignado el artículo
Definition: articulo.cs:395
void Beneficio_Articulo_SoloPeso()
Prueba del cálculo de Coste/Beneficio de los documentos de venta /summary>
override string _Articulo
PE-69903. Capturem el canvi d&#39;article per tractar les unitats automátiques del TPV (wl_paracantidad) ...
int _Tipo_PVP
Indica el tipo de precio del artículo (1=Por Unidad,2=Por Caja,3=Comprar Caja/Vender Unidades...
Definition: articulo.cs:1285
TipoImpuesto _Tipo
Tipo IVA/IGIC
Definition: clsTipoIVA.cs:133
decimal Redondeo(decimal tnImporte)
Aplica el redondeo segun los decimales de la moneda
Definition: clsEwBase.cs:6296
decimal _Peso
Propiedad que indica el peso definido en la ficha del artículo
Definition: articulo.cs:981
string _CtaCompra
Cuenta de compra
Definition: clsFamilia.cs:27
decimal _Recargo
_Recargo (decimal)
Definition: clsTipoIVA.cs:93
void Beneficio_Articulo_Cajas_TipoPVPPorComprarCajasVenderUnidades()
Prueba del cálculo de Coste/Beneficio de los documentos de venta /summary>
string _Familia
Propiedad que indica la familia
Definition: articulo.cs:374
string _Cta_IVA_Sop_Nodeduc
Cuenta de IVA soportado no deducible (prorrata) Task 143008
Definition: clsTipoIVA.cs:369
override bool _Delete()
Borra el tipo de IVA cargado
Definition: clsTipoIVA.cs:823
string _Recsopcdev
Recargo soportado devengado (Criterio de caja)
Definition: clsTipoIVA.cs:342
override ewDocVentaLinTPV _AddLinea(Articulo toArticulo, int tnInsertLinea=-1, decimal tnUnidades=0m, decimal tnPrecio=0m, decimal tnPeso=0m, string tcAgrupacion="", decimal tnUnidAgrup=0, int tnTipoDoc=0)
Sobreescribir el método _AddLinea() para poder realizar la llamada al evento de pintado de series...
override bool _Delete()
Borra la letra cargada
Definition: clsLetras.cs:225
string _Cta_IVA_Sop
_CTA_IVA_Sop (string)
Definition: clsTipoIVA.cs:166
override bool _Save()
Guardo los cambios en la tabla
Definition: clsFamilia.cs:495
decimal _Beneficio_doc(out decimal tnCosteTotal)
Beneficio del documento
Definition: DocsVen.cs:6823
string _Cta_IVA_Rep
_CTA_IVA_Rep (string)
Definition: clsTipoIVA.cs:191
override bool _Save()
Override _Save
Definition: clsLetras.cs:318
override bool _Delete()
Elimina el registro actual