Пример #1
0
        /// <summary>
        /// просто пополнить счет, вывести оттуда долю или пополнить ПАММ-пай
        /// </summary>
        private Wallet DepositOrWithdraw(ProtectedOperationContext secCtx,
                                         bool putOnAccount,
                                         string userLogin, int accountId, decimal amountInSrcCurrency, out WalletError error)
        {
            var operationParams = string.Format("DepositOrWithdraw(log={0}, acc={1}, amt={2})",
                                                userLogin, accountId, amountInSrcCurrency.ToStringUniformMoneyFormat());

            if (!UserSessionStorage.Instance.PermitUserOperation(secCtx, false, false))
            {
                Logger.Error(operationParams + ": InsufficientRights");
                error = WalletError.InsufficientRights;
                return(null);
            }

            if (amountInSrcCurrency <= 0)
            {
                Logger.Error(operationParams + ": amountInSrcCurrency <= 0");
                error = WalletError.InvalidData;
                return(null);
            }

            // перевести деньги на счет / со счета на кошелек
            try
            {
                using (var ctx = DatabaseContext.Instance.Make())
                {
                    // счет
                    var account = ctx.ACCOUNT.FirstOrDefault(a => a.ID == accountId);
                    if (account == null)
                    {
                        Logger.Error(operationParams + ": account is not found");
                        error = WalletError.InvalidData;
                        return(null);
                    }

                    // пользователь и кошелек
                    var user = ctx.PLATFORM_USER.FirstOrDefault(u => u.Login == userLogin);
                    if (user == null)
                    {
                        Logger.Error(operationParams + ": user is not found");
                        error = WalletError.InvalidData;
                        return(null);
                    }
                    var wallet = ctx.WALLET.FirstOrDefault(w => w.User == user.ID);
                    if (wallet == null)
                    {
                        Logger.Error(operationParams + ": wallet is not found");
                        error = WalletError.InvalidData;
                        return(null);
                    }

                    // это - ПАММ-счет или обычный счет?
                    var userShare = GetAccountSharePercent(ctx, accountId, user.ID);
                    if (userShare < 100M)
                    {
                        var status = new WalletManager4Pamm(secCtx, userLogin, accountId).InvestOrWithdrawFromPamm(
                            amountInSrcCurrency,
                            !putOnAccount, false, ctx);
                        error = status == RequestStatus.OK ? WalletError.OK : WalletError.InvalidData;
                        if (error != WalletError.OK)
                        {
                            Logger.Error(operationParams + ": InvestOrWithdrawFromPamm - " + status);
                        }

                        return(LinqToEntity.DecorateWallet(wallet));
                    }

                    // деньги - в кошелек
                    if (putOnAccount)
                    {
                        return(PutMoneyOnUserOwnedAccount(accountId, amountInSrcCurrency, out error, wallet, account, ctx, user));
                    }

                    // перевести со счета в кошелек
                    return(GetMoneyFromUserOwnedAccount(accountId, amountInSrcCurrency, out error, account, wallet, ctx, user));
                }
            }
            catch (Exception ex)
            {
                Logger.ErrorFormat("Ошибка в TransferToTradingAccount({0}): {1}", accountId, ex);
                error = WalletError.ServerError;
                return(null);
            }
        }
Пример #2
0
        /// <summary>
        /// просто пополнить счет, вывести оттуда долю или пополнить ПАММ-пай
        /// </summary>
        private Wallet DepositOrWithdraw(ProtectedOperationContext secCtx,
            bool putOnAccount,
            string userLogin, int accountId, decimal amountInSrcCurrency, out WalletError error)
        {
            var operationParams = string.Format("DepositOrWithdraw(log={0}, acc={1}, amt={2})",
                                                userLogin, accountId, amountInSrcCurrency.ToStringUniformMoneyFormat());

            if (!UserSessionStorage.Instance.PermitUserOperation(secCtx, false, false))
            {
                Logger.Error(operationParams + ": InsufficientRights");
                error = WalletError.InsufficientRights;
                return null;
            }

            if (amountInSrcCurrency <= 0)
            {
                Logger.Error(operationParams + ": amountInSrcCurrency <= 0");
                error = WalletError.InvalidData;
                return null;
            }

            // перевести деньги на счет / со счета на кошелек
            try
            {
                using (var ctx = DatabaseContext.Instance.Make())
                {
                    // счет
                    var account = ctx.ACCOUNT.FirstOrDefault(a => a.ID == accountId);
                    if (account == null)
                    {
                        Logger.Error(operationParams + ": account is not found");
                        error = WalletError.InvalidData;
                        return null;
                    }

                    // пользователь и кошелек
                    var user = ctx.PLATFORM_USER.FirstOrDefault(u => u.Login == userLogin);
                    if (user == null)
                    {
                        Logger.Error(operationParams + ": user is not found");
                        error = WalletError.InvalidData;
                        return null;
                    }
                    var wallet = ctx.WALLET.FirstOrDefault(w => w.User == user.ID);
                    if (wallet == null)
                    {
                        Logger.Error(operationParams + ": wallet is not found");
                        error = WalletError.InvalidData;
                        return null;
                    }

                    // это - ПАММ-счет или обычный счет?
                    var userShare = GetAccountSharePercent(ctx, accountId, user.ID);
                    if (userShare < 100M)
                    {
                        var status = new WalletManager4Pamm(secCtx, userLogin, accountId).InvestOrWithdrawFromPamm(
                                amountInSrcCurrency,
                                !putOnAccount, false, ctx);
                        error = status == RequestStatus.OK ? WalletError.OK : WalletError.InvalidData;
                        if (error != WalletError.OK)
                            Logger.Error(operationParams + ": InvestOrWithdrawFromPamm - " + status);

                        return LinqToEntity.DecorateWallet(wallet);
                    }

                    // деньги - в кошелек
                    if (putOnAccount)
                        return PutMoneyOnUserOwnedAccount(accountId, amountInSrcCurrency, out error, wallet, account, ctx, user);

                    // перевести со счета в кошелек
                    return GetMoneyFromUserOwnedAccount(accountId, amountInSrcCurrency, out error, account, wallet, ctx, user);
                }
            }
            catch (Exception ex)
            {
                Logger.ErrorFormat("Ошибка в TransferToTradingAccount({0}): {1}", accountId, ex);
                error = WalletError.ServerError;
                return null;
            }
        }