public ActionResult EditarMovimiento(int?IdTrasaccion) { try { tmovimiento Movimiento = new tmovimiento(); if (IdTrasaccion != null) { Movimiento = db .tmovimientoes .Where(m => m.Id_Usuario == sesion.Usuario.Id && m.Id == IdTrasaccion).Include(c => c.tcuenta) .SingleOrDefault(); if (Movimiento != null) { ViewBag.Id_Categoria = new SelectList(db.tcategorias.Where(c => c.IdUsuario == sesion.Usuario.Id && c.Tipo == Movimiento.Tipo && c.Activo), "Id", "Nombre", Movimiento.Id_Categoria); Movimiento.MontoAnterior = Movimiento.Monto; ViewBag.Transaccion = IdTrasaccion; } else { ViewBag.Transaccion = null; } } return(View(Movimiento)); } catch (Exception) { AddMsgWeb("Error al acceder a los datos", ToastType.Error); return(RedirectToAction("Index", "Inicio")); } }
// GET: Cuentas/Gasto public ActionResult Gasto() { int tipo = IntValue(TipoMovimiento.Debito); tmovimiento gasto = new tmovimiento(); gasto.Id_Usuario = sesion.Usuario.Id; gasto.TipoMovimiento = TipoMovimiento.Debito; gasto.Fecha = DateTime.Now; ViewBag.Id_Cuenta = new SelectList(sesion.Cuentas, "Id", "Nombre", sesion.CuentaFiltro); ViewBag.Id_Categoria = new SelectList(db.tcategorias.Where(c => c.IdUsuario == sesion.Usuario.Id && c.Tipo == tipo && c.Activo), "Id", "Nombre"); return(View(gasto)); }
public ActionResult EditarCompleto([Bind(Include = "Id,Id_Usuario,Id_Categoria,Id_Cuenta,Fecha,Descripcion,Tipo,TipoMovimiento,Monto,MontoAnterior")] tmovimiento Movimiento) { try { bool has = db.tmovimientoes.Any(p => p.Id_Usuario == Movimiento.Id_Usuario && p.Id != Movimiento.Id); if (has) { using (DbContextTransaction transaction = db.Database.BeginTransaction()) { try { //Edito el Movimiento db.Entry(Movimiento).State = EntityState.Modified; db.SaveChanges(); if (Movimiento.Monto != Movimiento.MontoAnterior) { decimal Diferencia = Movimiento.Monto - Movimiento.MontoAnterior; //Actulizo Saldo tcuenta Cuenta = db.tcuentas.Find(Movimiento.Id_Cuenta); Cuenta.SaldoAnterior = Cuenta.SaldoActual; if (Movimiento.Tipo == 1) { Cuenta.SaldoActual += Diferencia; } else if (Movimiento.Tipo == 2) { Cuenta.SaldoActual -= Diferencia; } else { AddMsgWeb("Las transferencias no pueden alterarse.", ToastType.Warning); throw new Exception("Las transferencias no pueden alterarse."); } db.Entry(Cuenta).State = EntityState.Modified; db.SaveChanges(); } //Cierro tracssaccion transaction.Commit(); AddMsgWeb("Registro editado exitosamente", ToastType.Success); } catch (DbEntityValidationException exp) { transaction.Rollback(); foreach (var eve in exp.EntityValidationErrors) { string msg = string.Format("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State); AddMsgWeb("EntityValidationErrors: " + msg, ToastType.Error); foreach (var ve in eve.ValidationErrors) { string msg1 = string.Format("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage); AddMsgWeb("EntityValidationErrors: " + msg1, ToastType.Error); } } } catch (Exception ex) { transaction.Rollback(); ModelState.AddModelError("ModelErr", ex.Message); AddMsgWeb("Error al agregar el registro", ToastType.Error); } } } else { AddMsgWeb("Error proceso invalido !!", ToastType.Error); } } catch (Exception) { AddMsgWeb("Error al acceder a los datos", ToastType.Error); } return(RedirectToAction("Index", "Inicio")); }
public ActionResult Transferencia([Bind(Include = "CuentaOrigen,CuentaDestino,Descripcion,Monto")] Transferencia pTransferencia) { if (pTransferencia.Monto < 0) { AddMsgWeb("Monto invalido, valor negativo", ToastType.Error); ModelState.AddModelError("ModelErr", "Monto invalido, valor negativo"); } tcuenta CuentaOrigen = db.tcuentas.Where(c => c.Id == pTransferencia.CuentaOrigen).SingleOrDefault(); if (CuentaOrigen != null) { ViewBag.Saldo = CuentaOrigen.SaldoActual_Format; ViewBag.Simbolo = CuentaOrigen.tmoneda.Simbolo; if (pTransferencia.Monto > CuentaOrigen.SaldoActual && (CuentaOrigen.CuentaCredito == false)) { ModelState.AddModelError("ModelErr", "Monto de transferencia mayor al saldo de la cuenta"); AddMsgWeb("Monto de transferencia mayor al saldo de la cuenta", ToastType.Error); } } else { ViewBag.Saldo = "0.0"; } if (ModelState.IsValid) { using (DbContextTransaction transaction = db.Database.BeginTransaction()) { try { var Categoria = db.tcategorias.Where(c => c.IdUsuario == sesion.Usuario.Id && c.Tipo == 3).FirstOrDefault(); tmovimiento Gasto = new tmovimiento(); //Ingreso Gasto Gasto.Id_Usuario = sesion.Usuario.Id; Gasto.Fecha = DateTime.Now; Gasto.Id_Categoria = Categoria.Id; Gasto.Id_Cuenta = pTransferencia.CuentaOrigen; Gasto.Monto = pTransferencia.Monto; Gasto.Descripcion = "Transferencia " + pTransferencia.Descripcion; Gasto.Tipo = IntValue(TipoMovimiento.Debito); db.tmovimientoes.Add(Gasto); tmovimiento Ingreso = new tmovimiento(); //Ingreso Gasto Ingreso.Id_Usuario = sesion.Usuario.Id; Ingreso.Fecha = DateTime.Now; Ingreso.Id_Categoria = Categoria.Id; Ingreso.Id_Cuenta = pTransferencia.CuentaDestino; Ingreso.Monto = pTransferencia.Monto; Ingreso.Descripcion = "Transferencia " + pTransferencia.Descripcion; Ingreso.Tipo = IntValue(TipoMovimiento.Credito); db.tmovimientoes.Add(Ingreso); db.SaveChanges(); //Actulizo Saldo tcuenta COrigen = db.tcuentas.Find(pTransferencia.CuentaOrigen); COrigen.SaldoAnterior = COrigen.SaldoActual; //Cuentas de credito los montos de gastos se convierten en negativos //if (COrigen.CuentaCredito == true) //{ // COrigen.SaldoActual -= (pTransferencia.Monto *= -1); //} //else { COrigen.SaldoActual -= pTransferencia.Monto; //} db.Entry(COrigen).State = EntityState.Modified; //Actulizo Saldo tcuenta CDestino = db.tcuentas.Find(pTransferencia.CuentaDestino); CDestino.SaldoAnterior = CDestino.SaldoActual; CDestino.SaldoActual += pTransferencia.Monto; db.Entry(CDestino).State = EntityState.Modified; db.SaveChanges(); //Cierro tracssaccion transaction.Commit(); AddMsgWeb("Gasto agregado exitosamente", ToastType.Success); return(RedirectToAction("Index", "Inicio")); } catch (DbEntityValidationException exp) { transaction.Rollback(); foreach (var eve in exp.EntityValidationErrors) { string msg = string.Format("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State); AddMsgWeb("EntityValidationErrors: " + msg, ToastType.Error); foreach (var ve in eve.ValidationErrors) { string msg1 = string.Format("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage); AddMsgWeb("EntityValidationErrors: " + msg1, ToastType.Error); } } } catch (Exception ex) { transaction.Rollback(); ModelState.AddModelError("ModelErr", ex.Message); AddMsgWeb("Error al agregar el registro", ToastType.Error); } } } ViewBag.CuentaOrigen = new SelectList(sesion.Cuentas, "Id", "Nombre", pTransferencia.CuentaOrigen); ViewBag.CuentaDestino = new SelectList(sesion.Cuentas.Where(c => c.Id_Usuario == sesion.Usuario.Id && c.Activo && c.Id != CuentaOrigen.Id && c.Id_Moneda == CuentaOrigen.Id_Moneda), "Id", "Nombre", pTransferencia.CuentaDestino); return(View(pTransferencia)); }
public ActionResult Gasto([Bind(Include = "Id_Usuario,Id_Categoria,Id_Cuenta,Fecha,Descripcion,TipoMovimiento,Monto")] tmovimiento pMovimiento) { if (pMovimiento.Monto < 0) { AddMsgWeb("Monto invalido, valor negativo", ToastType.Error); ModelState.AddModelError("ModelErr", "Monto invalido, valor negativo"); } if (ModelState.IsValid) { using (DbContextTransaction transaction = db.Database.BeginTransaction()) { try { //Ingreso Movimiento pMovimiento.Tipo = IntValue(pMovimiento.TipoMovimiento); db.tmovimientoes.Add(pMovimiento); //db.SaveChanges(); //Actulizo Saldo tcuenta cuenta = db.tcuentas.Find(pMovimiento.Id_Cuenta); cuenta.SaldoAnterior = cuenta.SaldoActual; //Cuentas de credito los montos de gastos se convierten en negativos //if (cuenta.CuentaCredito == true) //{ // decimal MontoCredito = pMovimiento.Monto *-1; // cuenta.SaldoActual += MontoCredito; //} //else //{ cuenta.SaldoActual -= pMovimiento.Monto; //} db.Entry(cuenta).State = EntityState.Modified; db.SaveChanges(); //Cierro tracssaccion transaction.Commit(); AddMsgWeb("Gasto agregado exitosamente", ToastType.Success); return(RedirectToAction("Index", "Inicio")); } catch (DbEntityValidationException exp) { transaction.Rollback(); foreach (var eve in exp.EntityValidationErrors) { string msg = string.Format("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State); AddMsgWeb("EntityValidationErrors: " + msg, ToastType.Error); foreach (var ve in eve.ValidationErrors) { string msg1 = string.Format("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage); AddMsgWeb("EntityValidationErrors: " + msg1, ToastType.Error); } } } catch (Exception ex) { transaction.Rollback(); ModelState.AddModelError("ModelErr", ex.Message); AddMsgWeb("Error al agregar el registro", ToastType.Error); } } } ViewBag.Id_Cuenta = new SelectList(sesion.Cuentas, "Id", "Nombre", pMovimiento.Id_Cuenta); int tipo = IntValue(TipoMovimiento.Debito); ViewBag.Id_Categoria = new SelectList(db.tcategorias.Where(c => c.IdUsuario == sesion.Usuario.Id && c.Tipo == tipo && c.Activo), "Id", "Nombre", pMovimiento.Id_Categoria); return(View(pMovimiento)); }