Ejemplo n.º 1
0
        public string ObtenerExpresion(Columna col)
        {
            string expresion = "";

            var colstart = Columnas.Where(c => (c.TipoColumna == TipoColumna.Neto ||
                                                c.TipoColumna == TipoColumna.SubTotal ||
                                                c.TipoColumna == TipoColumna.Costo) &&
                                          c.Orden < col.Orden).LastOrDefault();

            if (colstart != null)
            {
                List <string> parteExp       = new List <string>();
                string        calc           = "";
                string        desclineal     = "0";
                string        colstartlineal = "";
                for (int i = colstart.Orden; i < col.Orden; i++)
                {
                    if (this.Columnas[i].TipoColumna == TipoColumna.SubTotal ||
                        this.Columnas[i].TipoColumna == TipoColumna.Costo ||
                        this.Columnas[i].TipoColumna == TipoColumna.Neto)
                    {
                        calc           = this.Columnas[i].Nombre;
                        colstartlineal = this.Columnas[i].Nombre;
                    }
                    else
                    {
                        //aca tendria que poner que revise el tipo de descuento si es lineal o en cascada
                        if (this.Columnas[i].TipoColumna == TipoColumna.DescuentoCascada)
                        {
                            calc = string.Format("({0}-({1}*({2}/100)))", calc, calc, this.Columnas[i].Nombre);
                        }
                        else
                        {
                            if (this.Columnas[i].TipoColumna == TipoColumna.DescuentoLineal)
                            {
                                //	calc = string.Format("(({0}*({1}/100)))", calc, this.Columnas[i].Nombre);
                                desclineal = string.Format("({0}+{1})", desclineal, this.Columnas[i].Nombre);
                                calc       = string.Format("({0}-({1}*({2}/100)))", colstartlineal, colstartlineal, desclineal);
                            }
                            else//recargo
                            {
                                calc = string.Format("({0}*(1+({1}/100)))", calc, this.Columnas[i].Nombre);
                            }
                        }
                    }
                    expresion = calc;
                }
            }
            return(expresion);
        }