public static Precio RecalcularPrecio(
            decimal cneto, decimal ut, decimal tasa,
            OOB.LibInventario.Configuracion.Enumerados.EnumPreferenciaRegistroPrecio enumPreferenciaRegistroPrecio,
            OOB.LibInventario.Configuracion.Enumerados.EnumForzarRedondeoPrecioVenta enumForzarRedondeoPrecioVenta,
            OOB.LibInventario.Configuracion.Enumerados.EnumMetodoCalculoUtilidad enumMetodoCalculoUtilidad,
            decimal tasaCambio)
        {
            var rt = new Precio();

            rt.setTasaCambio(tasaCambio);


            var m = 0.0m;

            if (enumMetodoCalculoUtilidad == OOB.LibInventario.Configuracion.Enumerados.EnumMetodoCalculoUtilidad.Financiero)
            {
                if (ut == 100.0m && cneto == 0.0m)
                {
                    m = 0.0m;
                }
                else
                if (ut == 100)
                {
                }
                else
                {
                    m = cneto / ((100 - ut) / 100);
                }
            }
            else
            {
                m = cneto + (cneto * ut / 100);
            }

            if (enumPreferenciaRegistroPrecio == OOB.LibInventario.Configuracion.Enumerados.EnumPreferenciaRegistroPrecio.Full)
            {
                m += (m * tasa / 100);
            }

            switch (enumForzarRedondeoPrecioVenta)
            {
            case OOB.LibInventario.Configuracion.Enumerados.EnumForzarRedondeoPrecioVenta.SinRedeondeo:
                m = Math.Round(m, 2, MidpointRounding.AwayFromZero);
                break;

            case OOB.LibInventario.Configuracion.Enumerados.EnumForzarRedondeoPrecioVenta.Unidad:
                m = Helpers.MetodosExtension.RoundUnidad((int)m);
                break;

            case OOB.LibInventario.Configuracion.Enumerados.EnumForzarRedondeoPrecioVenta.Decena:
                m = Helpers.MetodosExtension.RoundDecena((int)m);
                break;
            }

            if (enumPreferenciaRegistroPrecio == OOB.LibInventario.Configuracion.Enumerados.EnumPreferenciaRegistroPrecio.Full)
            {
                rt.full = m;
                rt.neto = m / ((tasa / 100) + 1);
            }
            else
            {
                rt.neto = m;
                rt.full = m + (m * tasa / 100);
            }

            return(rt);
        }