public void Eliminar(MovimientosModel datos)
 {
     using (var c = new Contexto())
     {
         CuentasRepository RepoCuentas = new CuentasRepository();
         CuentaModel       _cuenta     = RepoCuentas.Devolver(datos.CuentaId);
         RepoCuentas.MovimientosCuenta(null, _cuenta, datos.Monto);
         _cuenta.Movimientos    = null;
         datos.Cuenta           = null;
         c.Entry(_cuenta).State = EntityState.Modified;
         c.Entry(datos).State   = EntityState.Deleted;
         c.SaveChanges();
     }
 }
 public void Grabar(MovimientosModel datos)
 {
     using (var c = new Contexto())
     {
         CuentasRepository RepoCuentas = new CuentasRepository();
         CuentaModel       _cuenta     = RepoCuentas.Devolver(datos.CuentaId);
         if (!datos.Tipo.Value)
         {
             RepoCuentas.MovimientosCuenta(_cuenta, null, datos.Monto);
         }
         else
         {
             RepoCuentas.MovimientosCuenta(null, _cuenta, datos.Monto);
         }
         c.Movimiento.Add(datos);
         c.Entry(_cuenta).State = EntityState.Modified;
         c.SaveChanges();
     }
 }
        public void Eliminar(TransaccionModel datos)
        {
            using (var c = new Contexto())
            {
                CuentasRepository cr             = new CuentasRepository();
                CuentaModel       _cuentaOrigen  = cr.Devolver(datos.CuentaIdOrigen);
                CuentaModel       _cuentaDestino = cr.Devolver(datos.CuentaIdDestino);
                cr.MovimientosCuenta(_cuentaDestino, _cuentaOrigen, datos.Monto);
                _cuentaOrigen.TransaccionesCuentaOrigen   = null;
                _cuentaOrigen.TransaccionesCuentaDestino  = null;
                _cuentaDestino.TransaccionesCuentaOrigen  = null;
                _cuentaDestino.TransaccionesCuentaDestino = null;

                c.Entry(_cuentaOrigen).State  = EntityState.Modified;
                c.Entry(_cuentaDestino).State = EntityState.Modified;
                c.Entry(datos).State          = EntityState.Deleted;
                c.SaveChanges();
            }
        }
        //le paso el modelo a actualizar o agregar y el monto que es la diferencia a actualizar en el caso que haya cambiado el monto,
        //lo hago todo en una transaccion para que aplique todos los cambios
        public void Grabar(TransaccionModel datos, double monto)
        {
            using (var c = new Contexto())
            {
                CuentasRepository cr             = new CuentasRepository();
                CuentaModel       _cuentaOrigen  = cr.Devolver(datos.CuentaIdOrigen);
                CuentaModel       _cuentaDestino = cr.Devolver(datos.CuentaIdDestino);
                if (datos.Id > 0)
                {
                    c.Entry(datos).State = EntityState.Modified;
                    //Si monto es mayor que 0 tiene que devolver a la cuentaOrigen y restarle a la destino
                    if (monto > 0)
                    {
                        cr.MovimientosCuenta(_cuentaDestino, _cuentaOrigen, monto);
                    }
                    //Caso contrario tiene que sumarle la diferencia que es el Monto a cuentaOrigen y restarle a Destino
                    else
                    {
                        cr.MovimientosCuenta(_cuentaOrigen, _cuentaDestino, monto);
                    }
                    _cuentaOrigen.TransaccionesCuentaOrigen   = null;
                    _cuentaOrigen.TransaccionesCuentaDestino  = null;
                    _cuentaDestino.TransaccionesCuentaOrigen  = null;
                    _cuentaDestino.TransaccionesCuentaDestino = null;
                }
                else
                {
                    c.Transaccion.Add(datos);
                    cr.MovimientosCuenta(_cuentaOrigen, _cuentaDestino, datos.Monto);
                }

                c.Entry(_cuentaOrigen).State  = EntityState.Modified;
                c.Entry(_cuentaDestino).State = EntityState.Modified;
                c.SaveChanges();
            }
        }
        public void Actualizar(MovimientosModel datos, double MontoAnterior, int CuentaAnteriorId, bool TipoAnterior)
        {
            using (var c = new Contexto())
            {
                CuentasRepository RepoCuentas     = new CuentasRepository();
                CuentaModel       _cuentaAnterior = RepoCuentas.Devolver(CuentaAnteriorId);
                CuentaModel       _cuentaActual;
                if (CuentaAnteriorId == datos.CuentaId)
                {
                    _cuentaActual = _cuentaAnterior;
                }
                else
                {
                    _cuentaActual = RepoCuentas.Devolver(datos.CuentaId);
                }

                //if (TipoAnterior)
                //{
                //    RepoCuentas.MovimientosCuenta(_cuentaAnterior, null, MontoAnterior);
                //    if (!datos.Tipo.Value)
                //        RepoCuentas.MovimientosCuenta(_cuentaActual, null, datos.Monto);
                //    else
                //        RepoCuentas.MovimientosCuenta(null, _cuentaActual, datos.Monto);
                //}
                //else
                //{
                //    RepoCuentas.MovimientosCuenta(null, _cuentaAnterior, MontoAnterior);
                //    if (!datos.Tipo.Value)
                //        RepoCuentas.MovimientosCuenta(_cuentaActual, null, datos.Monto);
                //    else
                //        RepoCuentas.MovimientosCuenta(null, _cuentaActual, datos.Monto);
                //}

                if ((TipoAnterior != datos.Tipo) || (CuentaAnteriorId != datos.CuentaId) || (MontoAnterior != datos.Monto))
                {
                    if (datos.CuentaId == CuentaAnteriorId)
                    {
                        if (TipoAnterior)
                        {
                            RepoCuentas.MovimientosCuenta(_cuentaAnterior, null, MontoAnterior);
                        }
                        else
                        {
                            RepoCuentas.MovimientosCuenta(null, _cuentaAnterior, MontoAnterior);
                        }
                    }

                    if (datos.Tipo.Value)
                    {
                        RepoCuentas.MovimientosCuenta(null, _cuentaActual, datos.Monto);
                    }
                    else
                    {
                        RepoCuentas.MovimientosCuenta(_cuentaActual, null, datos.Monto);
                    }
                }

                c.Entry(datos).State = EntityState.Modified;

                if (_cuentaActual.Id == _cuentaAnterior.Id)
                {
                    _cuentaActual.Movimientos    = null;
                    c.Entry(_cuentaActual).State = EntityState.Modified;
                }
                else
                {
                    _cuentaActual.Movimientos      = null;
                    _cuentaAnterior.Movimientos    = null;
                    c.Entry(_cuentaActual).State   = EntityState.Modified;
                    c.Entry(_cuentaAnterior).State = EntityState.Modified;
                }

                c.SaveChanges();
            }
        }