public async Task <IActionResult> Put(IngresosEgresosBanco ingresosEgresosBanco)
        {
            var user          = this.GetServiceUser();
            var oldMovimiento = db.IngresosEgresosBanco.Find(ingresosEgresosBanco.Id);

            if (oldMovimiento.EstadoId == (int)IngresosEgresosBancoEstados.Anulado)
            {
                return(BadRequest($"No se puede editar el movimiento {ingresosEgresosBanco.Id} por que esta anulado"));
            }
            var cambioOficial = await db.CambioOficial.FindAsync(ingresosEgresosBanco.FechaProceso);

            if (cambioOficial == null)
            {
                return(BadRequest("No se encontró la tasa de cambios para la fecha " + ingresosEgresosBanco.FechaProceso.ToShortDateString()));
            }
            oldMovimiento.TipoCambio = cambioOficial.Dolares;

            var bancoCuenta = DbIpsa.BancosCuentas.Find(ingresosEgresosBanco.BancoCuenta, "1000");

            if (bancoCuenta == null)
            {
                return(BadRequest("No se encontró información del banco " + bancoCuenta.Descripcion));
            }

            if (oldMovimiento.Procesado == true)
            {
                return(BadRequest($"No se puede editar el movimiento {ingresosEgresosBanco.Id} por que esta conciliado"));
            }

            oldMovimiento.TipoMonedaId     = bancoCuenta.Moneda.Value;
            oldMovimiento.TipoDocumentoId  = ingresosEgresosBanco.TipoDocumentoId;
            oldMovimiento.TipoMovimientoId = ingresosEgresosBanco.TipoMovimientoId;
            oldMovimiento.BancoCuenta      = ingresosEgresosBanco.BancoCuenta;
            oldMovimiento.Referencia       = ingresosEgresosBanco.Referencia;
            oldMovimiento.Monto            = ingresosEgresosBanco.Monto;
            oldMovimiento.Concepto         = ingresosEgresosBanco.Concepto;
            oldMovimiento.FechaProceso     = ingresosEgresosBanco.FechaProceso;

            oldMovimiento.UsernameEditado = user.username;
            oldMovimiento.FechaEditado    = DateTime.Now;

            db.SaveChanges();

            return(Json(ingresosEgresosBanco));
        }
        public async Task <IActionResult> Post(IngresosEgresosBanco ingresosEgresosBanco)
        {
            var user = this.GetServiceUser();

            if (settings.onlyNumber)
            {
                if (ingresosEgresosBanco.Referencia.Any(r => !char.IsNumber(r)))
                {
                    return(BadRequest(string.Format($"La referencia {ingresosEgresosBanco.Referencia} debe ser númerica")));
                }
            }

            ingresosEgresosBanco.CajaId   = user.cajaid;
            ingresosEgresosBanco.EstadoId = (int)IngresosEgresosBancoEstados.Registrado;

            var cambioOficial = await db.CambioOficial.FindAsync(ingresosEgresosBanco.FechaProceso);

            if (cambioOficial == null)
            {
                return(BadRequest("No se encontró la tasa de cambios para la fecha " + ingresosEgresosBanco.FechaProceso.ToShortDateString()));
            }

            ingresosEgresosBanco.TipoCambio = cambioOficial.Dolares;

            var bancoCuenta = DbIpsa.BancosCuentas.Find(ingresosEgresosBanco.BancoCuenta, "1000");

            if (bancoCuenta == null)
            {
                return(BadRequest("No se encontró información del banco " + bancoCuenta.Descripcion));
            }

            ingresosEgresosBanco.TipoMonedaId  = bancoCuenta.Moneda.Value;
            ingresosEgresosBanco.Username      = user.username;
            ingresosEgresosBanco.FechaRegistro = DateTime.Now;
            ingresosEgresosBanco.Procesado     = false;

            if (ModelState.IsValid)
            {
                db.Add(ingresosEgresosBanco);
                await db.SaveChangesAsync();
            }

            return(Json(ingresosEgresosBanco));
        }