Esempio n. 1
0
 public static AccountShare DecorateAccountShare(ACCOUNT_SHARE share)
 {
     return(new AccountShare
     {
         SharePercent = share.Share,
         UserId = share.ShareOwner,
         HWM = share.HWM ?? 0
     });
 }
Esempio n. 2
0
 public static AccountShare DecorateAccountShare(ACCOUNT_SHARE share)
 {
     return new AccountShare
     {
         SharePercent = share.Share,
         UserId = share.ShareOwner,
         HWM = share.HWM ?? 0
     };
 }
Esempio n. 3
0
        public ACCOUNT_SHARE_HISTORY CalculateAccountShare(TradeSharpConnection ctx,
                                                           ACCOUNT_SHARE share,
                                                           ACCOUNT_SHARE ownerShare,
                                                           ref decimal ownersMoney,
                                                           decimal equity, 
                                                           PaidService serviceWithFeeScale,
                                                           out bool feeWasTaken)
        {
            feeWasTaken = false;
            var shareMoney = equity*share.Share/100M;
            var hist = new ACCOUNT_SHARE_HISTORY
                {
                    Account = share.Account,
                    Date = DateTime.Now,
                    OldShare = share.Share,
                    OldHWM = share.HWM,
                    NewShare = share.Share,
                    NewHWM = Math.Max(share.HWM ?? 0, shareMoney),
                    ShareOwner = share.ShareOwner,
                    ShareAmount = shareMoney
                };

            share.HWM = hist.NewHWM;
            if ((hist.OldHWM ?? 0) == 0)
                return hist;
            if (shareMoney <= hist.OldHWM)
                return hist;
            if (serviceWithFeeScale == null)
                return hist;

            // был установлен новый HWM?
            var aboveHwm = shareMoney - hist.OldHWM.Value;
            // посчитать сумму комиссии
            var fee = serviceWithFeeScale.CalculateFee(shareMoney, aboveHwm);
            if (fee < 0.01M) return hist;

            feeWasTaken = true;

            // этот самый кусочек приписать владельцу и списать его с пайщика
            ownersMoney += fee;
            shareMoney -= fee;
            ownerShare.Share = ownersMoney*100M/equity;
            share.Share = shareMoney*100M/equity;

            var newHwm = shareMoney;
            if (newHwm > share.HWM)
            {
                share.HWM = newHwm;
                hist.NewHWM = newHwm;
            }
            return hist;
        }
Esempio n. 4
0
        public void TestGetUserOwnAndSharedAccounts()
        {
            List<AccountShared> accounts;
            var status = testManager.GetUserOwnAndSharedAccounts(shareOwner.Login,
                                                                 ProtectedOperationContext.MakeServerSideContext(),
                                                                 out accounts);
            Assert.AreEqual(RequestStatus.OK, status, "GetUserOwnAndSharedAccounts() - должна завершиться успешно");
            Assert.IsNotNull(accounts, "GetUserOwnAndSharedAccounts() - список счетов не должен быть NULL");
            Assert.AreEqual(1, accounts.Count,
                            "GetUserOwnAndSharedAccounts() - должен вернуться ровно один счет (владельца)");
            Assert.IsTrue(accounts[0].IsOwnAccount, "GetUserOwnAndSharedAccounts() - счетом владеет управляющий");
            Assert.AreEqual(50, accounts[0].SharePercent,
                            "GetUserOwnAndSharedAccounts() - доля управляющего должна быть 50%");
            Assert.Greater(accounts[0].ShareMoneyWallet, 0,
                           "GetUserOwnAndSharedAccounts() - доля управляющего в валюте кошелька должна быть расчитана");

            var ownerNewShare = new ACCOUNT_SHARE
                {
                    Account = eurAccount.ID,
                    Share = 11,
                    ShareOwner = shareOwner.ID
                };
            conn.ACCOUNT_SHARE.Add(ownerNewShare);
            conn.SaveChanges();

            status = testManager.GetUserOwnAndSharedAccounts(shareOwner.Login,
                                                             ProtectedOperationContext.MakeServerSideContext(),
                                                             out accounts);
            Assert.AreEqual(RequestStatus.OK, status, "GetUserOwnAndSharedAccounts(2) - должна завершиться успешно");
            Assert.AreEqual(2, accounts.Count,
                            "GetUserOwnAndSharedAccounts() - должно вернуться два счета - владельца и вкладчика");
            Assert.AreEqual(ownerNewShare.Share, accounts[1].SharePercent,
                            "GetUserOwnAndSharedAccounts() - вкладчику одлжно принадлежать N% счета");
            Assert.Greater(accounts[1].ShareMoneyWallet, 0,
                           "GetUserOwnAndSharedAccounts() - доля вкладчика в валюте кошелька должна быть расчитана");
        }
        private void UpdateShares(List<AccountShare> sharesNew, int subscriberId)
        {
            foreach (var share in sharesNew)
            {
                var shareOwner = share.UserId;
                var existShare =
                    ctx.ACCOUNT_SHARE.FirstOrDefault(s => s.ShareOwner == shareOwner && s.Account == accountId);

                if (existShare != null && existShare.ShareOwner == subscriberId && withdrawNotInvest && withdrawAll)
                {
                    ctx.ACCOUNT_SHARE.Remove(existShare);
                    continue;
                }

                if (existShare != null)
                    existShare.Share = share.SharePercent;
                else
                {
                    var newShare = new ACCOUNT_SHARE
                    {
                        Account = accountId,
                        Share = share.SharePercent,
                        ShareOwner = share.UserId,
                        HWM = share.HWM
                    };
                    ctx.ACCOUNT_SHARE.Add(newShare);
                }
            }
        }