public static string GenerarTraspaso(int IdCuentaBancariaOrigen, int IdTipoMonedaOrigen, decimal TipoCambioOrigen, decimal MontoOrigen, string ReferenciaOrigen, int IdCuentaBancariaDestino,
                                         int IdTipoMonedaDestino, decimal TipoCambioDestino, decimal MontoDestino, string ReferenciaDestino)
    {
        JObject Respuesta = new JObject();

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

                CMovimiento MovimientoOrigen = new CMovimiento();

                MovimientoOrigen.IdCuentaBancaria = IdCuentaBancariaOrigen;
                MovimientoOrigen.IdTipoMoneda     = IdTipoMonedaOrigen;
                MovimientoOrigen.TipoCambio       = TipoCambioOrigen;
                MovimientoOrigen.Monto            = MontoOrigen;
                MovimientoOrigen.Referencia       = ReferenciaOrigen;
                MovimientoOrigen.IdOrganizacion   = 1415;
                MovimientoOrigen.IdFlujoCaja      = 12;
                MovimientoOrigen.IdTipoMovimiento = 4;
                MovimientoOrigen.FechaMovimiento  = DateTime.Now;
                MovimientoOrigen.FechaAlta        = DateTime.Now;

                CSelectEspecifico ConsultaOrigen           = new CSelectEspecifico();
                ConsultaOrigen.StoredProcedure.CommandText = "sp_Movimiento_BuscarUltimoMovimiento";
                ConsultaOrigen.StoredProcedure.Parameters.Add("IdCuentaBancaria", SqlDbType.Int).Value = MovimientoOrigen.IdCuentaBancaria;

                ConsultaOrigen.Llena(pConexion);

                decimal SaldoInicialOrigen = 0;

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

                ConsultaOrigen.CerrarConsulta();

                MovimientoOrigen.SaldoInicial = SaldoInicialOrigen;
                MovimientoOrigen.SaldoFinal   = SaldoInicialOrigen - MontoOrigen;

                MovimientoOrigen.Agregar(pConexion);

                CMovimiento MovimientoDestino = new CMovimiento();

                MovimientoDestino.IdCuentaBancaria = IdCuentaBancariaDestino;
                MovimientoDestino.IdTipoMoneda     = IdTipoMonedaDestino;
                MovimientoDestino.TipoCambio       = TipoCambioDestino;
                MovimientoDestino.Monto            = MontoDestino;
                MovimientoDestino.Referencia       = ReferenciaDestino;
                MovimientoDestino.IdOrganizacion   = 1415;
                MovimientoDestino.IdFlujoCaja      = 2;
                MovimientoDestino.IdTipoMovimiento = 1;
                MovimientoDestino.FechaAlta        = DateTime.Now;
                MovimientoDestino.FechaMovimiento  = DateTime.Now;

                CSelectEspecifico ConsultaDestino           = new CSelectEspecifico();
                ConsultaDestino.StoredProcedure.CommandText = "sp_Movimiento_BuscarUltimoMovimiento";
                ConsultaDestino.StoredProcedure.Parameters.Add("IdCuentaBancaria", SqlDbType.Int).Value = MovimientoDestino.IdCuentaBancaria;

                ConsultaDestino.Llena(pConexion);

                decimal SaldoInicialDestino = 0;

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

                ConsultaDestino.CerrarConsulta();

                MovimientoDestino.SaldoInicial = SaldoInicialDestino;
                MovimientoDestino.SaldoFinal   = SaldoInicialDestino + MontoOrigen;

                MovimientoDestino.Agregar(pConexion);

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

        return(Respuesta.ToString());
    }
    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());
    }