public static string AgregarMovimiento(int IdCuentaBancaria, int IdTipoMovimiento, string FechaMovimiento, decimal Monto, string Referencia, int IdOrganizacion, int IdFlujoCaja, decimal TipoCambio, int IdTipoMoneda)
    {
        JObject Respuesta = new JObject();

        CUtilerias.DelegarAccion(delegate(CConexion pConexion, int Error, string DescripcionError, CUsuario UsuarioSesion) {
            if (Error == 0)
            {
                CMovimiento Movimiento      = new CMovimiento();
                Movimiento.IdCuentaBancaria = IdCuentaBancaria;
                Movimiento.IdTipoMovimiento = IdTipoMovimiento;
                Movimiento.FechaAlta        = DateTime.Now;
                Movimiento.FechaMovimiento  = Convert.ToDateTime(FechaMovimiento);
                Movimiento.IdOrganizacion   = IdOrganizacion;
                Movimiento.IdFlujoCaja      = IdFlujoCaja;
                Movimiento.Monto            = Monto * TipoCambio;
                Movimiento.Referencia       = Referencia;
                Movimiento.IdUsuarioAlta    = UsuarioSesion.IdUsuario;
                Movimiento.IdTipoMoneda     = IdTipoMoneda;
                Movimiento.TipoCambio       = TipoCambio;
                Movimiento.Baja             = false;

                string validacion = ValidarMovimiento(Movimiento);

                if (validacion == "")
                {
                    CSelectEspecifico Consulta           = new CSelectEspecifico();
                    Consulta.StoredProcedure.CommandText = "sp_Movimiento_BuscarUltimoMovimiento";
                    Consulta.StoredProcedure.Parameters.Add("IdCuentaBancaria", SqlDbType.Int).Value = Movimiento.IdCuentaBancaria;

                    Consulta.Llena(pConexion);

                    decimal SaldoInicial = 0;

                    if (Consulta.Registros.Read())
                    {
                        SaldoInicial = Convert.ToDecimal(Consulta.Registros["Saldo"]);
                    }

                    Consulta.CerrarConsulta();

                    Movimiento.SaldoInicial         = SaldoInicial;
                    CTipoMovimientos TipoMovimiento = new CTipoMovimientos();
                    TipoMovimiento.LlenaObjeto(Movimiento.IdTipoMovimiento, pConexion);
                    Movimiento.SaldoFinal = SaldoInicial + (Movimiento.Monto * TipoMovimiento.Afectacion);

                    Movimiento.Agregar(pConexion);

                    //Afectar cuentas por cobrar y cuentas por pagar
                }
                else
                {
                    DescripcionError = validacion;
                    Error            = 1;
                }
            }
            Respuesta.Add("Error", Error);
            Respuesta.Add("Descripcion", DescripcionError);
        });

        return(Respuesta.ToString());
    }
    public static string ObtenerFormaAgregarMovimiento()
    {
        JObject Respuesta = new JObject();

        CUtilerias.DelegarAccion(delegate(CConexion pConexion, int Error, string DescripcionError, CUsuario UsuarioSesion) {
            if (Error == 0)
            {
                JObject Modelo = new JObject();

                CBanco Bancos = new CBanco();
                Dictionary <string, object> pParametros = new Dictionary <string, object>();
                pParametros.Add("Baja", 0);

                JArray cmbBancos = new JArray();

                foreach (CBanco Banco in Bancos.LlenaObjetosFiltros(pParametros, pConexion))
                {
                    JObject Opcion = new JObject();
                    Opcion.Add("Valor", Banco.IdBanco);
                    Opcion.Add("Descripcion", Banco.Banco);
                    cmbBancos.Add(Opcion);
                }

                Modelo.Add("Bancos", cmbBancos);

                CTipoMovimientos TipoMovimientos = new CTipoMovimientos();

                JArray cmbTipoMovimientos = new JArray();

                foreach (CTipoMovimientos TipoMovimiento in TipoMovimientos.LlenaObjetosFiltros(pParametros, pConexion))
                {
                    JObject Opcion = new JObject();
                    Opcion.Add("Valor", TipoMovimiento.IdTipoMovimientos);
                    Opcion.Add("Descripcion", TipoMovimiento.TipoMovimiento);
                    cmbTipoMovimientos.Add(Opcion);
                }

                Modelo.Add("TipoMovimientos", cmbTipoMovimientos);

                CFlujoCaja FlujosCaja = new CFlujoCaja();

                JArray cmbFlujoCaja = new JArray();

                foreach (CFlujoCaja FlujoCaja in FlujosCaja.LlenaObjetosFiltros(pParametros, pConexion))
                {
                    JObject Opcion = new JObject();
                    Opcion.Add("Valor", FlujoCaja.IdFlujoCaja);
                    Opcion.Add("Descripcion", FlujoCaja.FlujoCaja);
                    cmbFlujoCaja.Add(Opcion);
                }

                Modelo.Add("FlujoCaja", cmbFlujoCaja);

                CSelectEspecifico Consulta           = new CSelectEspecifico();
                Consulta.StoredProcedure.CommandText = "sp_Movimiento_TipoCambioDiarioOficial";

                Consulta.Llena(pConexion);

                if (Consulta.Registros.Read())
                {
                    Modelo.Add("Dolares", Convert.ToDecimal(Consulta.Registros["TipoCambio"]));
                }

                Consulta.CerrarConsulta();

                Respuesta.Add("Modelo", Modelo);
            }

            Respuesta.Add("Descripcion", DescripcionError);
            Respuesta.Add("Error", Error);
        });

        return(Respuesta.ToString());
    }