Example #1
0
 public void SubtractFromMarketplaceBalance(Money value, String note, BalanceLogType balanceLogType = BalanceLogType.Other)
 {
     value = value.Positify();
     MarketplaceBalance -= value;
     BalanceLog.Add(this, BalanceType.MarketplaceBalance, value.Negatify().ToDecimal(), note, balanceLogType);
     MarketplaceBalanceLogManager.MoneySpent(this.Id, value);
 }
Example #2
0
        protected override void CreditReferersPoints(int input, string note, BalanceLogType balanceLogType, int level = 1, Member forcedUser = null)
        {
            if (AppSettings.Referrals.AreIndirectReferralsEnabled && level > AppSettings.Referrals.ReferralEarningsUpToTier)
            {
                return;
            }

            if (forcedUser != null)
            {
                User = forcedUser;
            }

            if (User.HasReferer)
            {
                Member referer = new Member(User.ReferrerId);

                //Credit
                CreditPointsHelper(ref referer, input, note, balanceLogType);

                referer.IncreaseDirectRefPointsEarnings(input);
                referer.SaveStatisticsAndBalances();

                User.TotalPointsEarnedToDReferer += input;
                User.SaveStatisticsAndBalances();

                if (AppSettings.Referrals.AreIndirectReferralsEnabled)
                {
                    CreditReferersPoints(input, note, balanceLogType, level + 1, referer);
                }
            }
        }
Example #3
0
        public void SubstractFromLoginAdsCredits(int value, string note, BalanceLogType balanceLogType = BalanceLogType.Other)
        {
            if (value < 0)
            {
                throw new MsgException("You cannot add negative value.");
            }

            LoginAdsCredits -= value;

            BalanceLog.Add(this, BalanceType.LoginAdsCredits, -value, note, balanceLogType);
        }
Example #4
0
        protected static void CreditPoints(Member User, int Input, String note, BalanceLogType balanceLogType)
        {
            //Credit
            CreditPointsHelper(ref User, Input, note, balanceLogType);

            //Save
            User.SaveStatisticsAndBalances();

            //Achievements
            User.TryToAddAchievements(
                Prem.PTC.Achievements.Achievement.GetProperAchievements(
                    Prem.PTC.Achievements.AchievementType.AfterGettingPointsInOneDay, User.PointsToday));
        }
Example #5
0
        public void CreditPlan(Money amount, BalanceType balancetype, string note, BalanceLogType logType)
        {
            switch (balancetype)
            {
            case BalanceType.MainBalance:
                base.CreditMainBalance(amount, note, logType);
                break;

            case BalanceType.InvestmentBalance:
                //TO DO
                break;
            }
        }
Example #6
0
        public void SubtractFromPointsBalance(Int32 value, String note, BalanceLogType balanceLogType = BalanceLogType.Other, bool setMinPoints = true)
        {
            if (value < 0)
            {
                value = -value;
            }

            if (value != 0)
            {
                PointsBalance -= value;
                BalanceLog.Add(this, BalanceType.PointsBalance, -value, note, balanceLogType);
                LevelManager.PointsChanged(this, setMinPoints);
            }
        }
Example #7
0
 public void AddToPointsBalance(Int32 value, String note, BalanceLogType balanceLogType = BalanceLogType.Other, bool triggerActions = true, bool checkLeadershipSystem = true)
 {
     if (value != 0)
     {
         PointsBalance += value;
         BalanceLog.Add(this, BalanceType.PointsBalance, value, note, balanceLogType);
         LevelManager.PointsChanged(this, true, triggerActions);
         if (checkLeadershipSystem)
         {
             var list = new List <RestrictionKind>();
             list.Add(RestrictionKind.Points);
             LeadershipSystem.CheckSystem(list, this);
         }
     }
 }
Example #8
0
        protected virtual void CreditReferersPoints(int input, String note, BalanceLogType balanceLogType, int level = 1, Member forcedUser = null)
        {
            if (AppSettings.Referrals.AreIndirectReferralsEnabled && level > AppSettings.Referrals.ReferralEarningsUpToTier)
            {
                return;
            }

            if (level == 1)
            {
                MoneySpent   = Money.Zero;
                OriginalUser = User;
            }

            if (forcedUser != null)
            {
                User = forcedUser;
            }

            if (User.HasReferer)
            {
                Member referer = new Member(User.ReferrerId);

                if (referer.HasClickedEnoughToProfitFromReferrals())
                {
                    int calculated = PointsConverter.ToPoints(CalculateRefEarnings(referer, PointsConverter.ToMoney(input), level));

                    //Credit
                    CreditPointsHelper(ref referer, calculated, note, balanceLogType);

                    referer.IncreaseDirectRefPointsEarnings(calculated);
                    referer.SaveStatisticsAndBalances();

                    User.TotalPointsEarnedToDReferer += calculated;
                    User.SaveStatisticsAndBalances();

                    if (AppSettings.Referrals.AreIndirectReferralsEnabled)
                    {
                        CreditReferersPoints(input, note, balanceLogType, level + 1, referer);

                        //change to Original user when leaving recurrence
                        if (level == 1 && User.Id != OriginalUser.Id)
                        {
                            User = OriginalUser;
                        }
                    }
                }
            }
        }
Example #9
0
 protected static void CreditPointsHelper(ref Member User, int Input, string note, BalanceLogType balanceLogType)
 {
     User.AddToPointsBalance(Input, note, balanceLogType);
     User.PointsToday          += Input;
     User.TotalPointsGenerated += Input;
     User.IncreasePointsEarnings(Input);
 }
Example #10
0
        public void AddToBalance(BalanceType balanceType, Money value, String note, BalanceLogType balanceLogType = BalanceLogType.Other)
        {
            switch (balanceType)
            {
            case BalanceType.MainBalance:
                AddToMainBalance(value, note, balanceLogType);
                break;

            case BalanceType.PurchaseBalance:
                AddToPurchaseBalance(value, note, balanceLogType);
                break;

            case BalanceType.TrafficBalance:
                AddToTrafficBalance(value, note, balanceLogType);
                break;

            case BalanceType.PointsBalance:
                AddToPointsBalance((int)value.ToDecimal(), note, balanceLogType);
                break;

            case BalanceType.CommissionBalance:
                AddToCommissionBalance(value, note, balanceLogType);
                break;

            case BalanceType.PTCCredits:
                AddToPTCCredits(value.ToDecimal(), note);
                break;

            case BalanceType.CashBalance:
                AddToCashBalance(value, note, balanceLogType);
                break;

            case BalanceType.InvestmentBalance:
                AddToInvestmentBalance(value, note, balanceLogType);
                break;

            case BalanceType.MarketplaceBalance:
                AddToMarketplaceBalance(value, note, balanceLogType);
                break;

            case BalanceType.BTC:
                AddToCryptocurrencyBalance(CryptocurrencyType.BTC, value.ToDecimal(), note, balanceLogType);
                break;

            case BalanceType.ETH:
                AddToCryptocurrencyBalance(CryptocurrencyType.ETH, value.ToDecimal(), note, balanceLogType);
                break;

            case BalanceType.XRP:
                AddToCryptocurrencyBalance(CryptocurrencyType.XRP, value.ToDecimal(), note, balanceLogType);
                break;

            case BalanceType.Token:
                AddToCryptocurrencyBalance(CryptocurrencyType.ERC20Token, value.ToDecimal(), note, balanceLogType);
                break;

            case BalanceType.FreezedToken:
                AddToCryptocurrencyBalance(CryptocurrencyType.ERCFreezed, value.ToDecimal(), note, balanceLogType);
                break;

            case BalanceType.LoginAdsCredits:
                AddToLoginAdsCredits((int)value.ToDecimal(), note, balanceLogType);
                break;
            }
        }
Example #11
0
        protected virtual Money CreditReferersMainBalance(Money input, String note, BalanceLogType balanceLogType, int level = 1,
                                                          Member forcedUser = null, bool forceSave = true)
        {
            if (AppSettings.Referrals.AreIndirectReferralsEnabled && level > AppSettings.Referrals.ReferralEarningsUpToTier ||
                TitanFeatures.IsGambinos && User.MembershipId == 1)
            {
                return(Money.Zero);
            }

            if (level == 1)
            {
                MoneySpent   = Money.Zero;
                OriginalUser = User;
            }

            if (forcedUser != null)
            {
                User = forcedUser;
            }

            if (User.HasReferer)
            {
                Member referer = new Member(User.ReferrerId);

                if (referer.HasClickedEnoughToProfitFromReferrals())
                {
                    if (!MatrixBase.CanCreditReferer(User, referer))
                    {
                        return(MoneySpent);
                    }

                    Money calculated = CalculateRefEarnings(referer, input, level);

                    //Representatives bonus
                    calculated += Representative.IncreaseAmountForRepresentative(input, User, referer.Id, level);

                    bool refererCredited             = false;
                    bool adminCommissionPoolCredited = false;

                    if (AppSettings.RevShare.IsRevShareEnabled && referer.Id == AppSettings.RevShare.AdminUserId)
                    {
                        adminCommissionPoolCredited = PoolDistributionManager.AddProfit(ProfitSource.RevenueAdminCommissions, calculated);
                    }

                    if (!adminCommissionPoolCredited)
                    {
                        //Add commission to Revenue Pool instead of crediting member
                        if (AppSettings.Misc.SpilloverEnabled && referer.Membership.Id == Membership.Standard.Id)
                        {
                            SpilloverManager.AddMoneyToRevenuePool(calculated);
                        }
                        //Credit
                        else
                        {
                            if (!AppSettings.Payments.CommissionBalanceEnabled)
                            {
                                CreditMainBalanceHelper(ref referer, calculated, note, balanceLogType);
                            }
                            else
                            {
                                CreditCommissionBalanceHelper(ref referer, calculated, note, balanceLogType);
                            }

                            refererCredited = true;
                            AddToCommissionsIncomeStatistics(referer, calculated);
                        }
                    }

                    if (refererCredited)
                    {
                        if (this is AdPackCrediter)
                        {
                            referer.IncreaseAdPackEarningsFromDR(calculated);
                            User.TotalAdPacksToDReferer += calculated;
                        }

                        if (this is CashLinkCrediter)
                        {
                            referer.IncreaseDRCashLinksEarnings(calculated);
                            User.TotalCashLinksToDReferer += calculated;
                        }

                        referer.IncreaseEarningsFromDirectReferral(calculated);
                        referer.SaveStatisticsAndBalances();

                        User.TotalEarnedToDReferer += calculated;
                    }

                    User.LastDRActivity = DateTime.Now;

                    if (forceSave)
                    {
                        User.SaveStatisticsAndBalances();
                    }


                    try
                    {
                        if (AppSettings.Emails.NewReferralCommisionEnabled && calculated != Money.Zero)
                        {
                            Mailer.SendNewReferralCommisionMessage(referer.Name, User.Name, calculated, referer.Email, note);
                        }
                    }
                    catch (Exception ex)
                    {
                        ErrorLogger.Log(ex);
                    }
                    //Mailer

                    //increase Money spent
                    MoneySpent += calculated;

                    //Indirect referrals don't get paid for CashLinks
                    if (AppSettings.Referrals.AreIndirectReferralsEnabled && !(this is CashLinkCrediter))
                    {
                        var referralsMoneySpent = CreditReferersMainBalance(input, note, balanceLogType, level + 1, referer);

                        //change to Original user when leaving recurrence
                        if (level == 1 && User.Id != OriginalUser.Id)
                        {
                            User = OriginalUser;
                        }

                        return(referralsMoneySpent);
                    }
                }
            }
            return(MoneySpent);
        }
Example #12
0
 public void AddToPurchaseBalance(Money value, String note, BalanceLogType balanceLogType = BalanceLogType.Other)
 {
     PurchaseBalance += value;
     BalanceLog.Add(this, BalanceType.PurchaseBalance, value.ToDecimal(), note, balanceLogType);
 }
Example #13
0
 public static void AddRange(string dataTableCommand, string note, BalanceType target, BalanceLogType balanceLogType)
 {
     using (var parser = ParserPool.Acquire(Database.Client))
     {
         AddRange(parser.Instance, dataTableCommand, note, target, balanceLogType);
     }
 }
Example #14
0
 protected void CreditMainBalance(Money Input, String note, BalanceLogType balanceLogType, bool forceSave = true)
 {
     CreditMainBalance(this.User, Input, note, balanceLogType, forceSave);
 }
Example #15
0
        protected static void CreditMainBalance(Member User, Money Input, String note, BalanceLogType balanceLogType, bool forceSave = true)
        {
            //Credit
            CreditMainBalanceHelper(ref User, Input, note, balanceLogType);

            if (forceSave)
            {
                //Save
                User.SaveStatisticsAndBalances();
            }

            //Achievements
            User.TryToAddAchievements(
                Prem.PTC.Achievements.Achievement.GetProperAchievements(
                    Prem.PTC.Achievements.AchievementType.AfterEarning, User.MainBalance.GetRealTotals()));
        }
Example #16
0
        private static void ChargeBalance(Member user, Money amount, PurchaseBalances balance, string note, string feature = null, BalanceLogType balanceLogType = BalanceLogType.Other)
        {
            if (feature != null)
            {
                Features targetFeature = GetFeatureFromString(feature);
                ValidateChosenBalance(targetFeature, balance);
            }

            switch (balance)
            {
            case PurchaseBalances.Cash:
                if (amount > user.CashBalance)
                {
                    throw new MsgException(L1.NOTENOUGHFUNDS);
                }
                user.SubtractFromCashBalance(amount, note, balanceLogType);
                break;

            case PurchaseBalances.Purchase:
                if (amount > user.PurchaseBalance)
                {
                    throw new MsgException(L1.NOTENOUGHFUNDS);
                }
                user.SubtractFromPurchaseBalance(amount, note, balanceLogType);
                break;

            case PurchaseBalances.Traffic:
                if (amount > user.TrafficBalance)
                {
                    throw new MsgException(L1.NOTENOUGHFUNDS);
                }
                user.SubtractFromTrafficBalance(amount, note, balanceLogType);
                break;

            case PurchaseBalances.LoginAdsCredits:
                if (amount.AsPoints() > user.LoginAdsCredits)
                {
                    throw new MsgException(L1.NOTENOUGHFUNDS);
                }
                user.SubstractFromLoginAdsCredits(amount.AsPoints(), note, balanceLogType);
                break;
            }

            user.SaveBalances();
        }
Example #17
0
    protected static void ConstructInsertQuery(ref StringBuilder sb, int userId, DateTime date, string note, BalanceType type, Money amount, BalanceLogType balanceLogType)
    {
        sb.Append(" (")
        .Append(userId)
        .Append(", '")
        .Append(date.ToDBString())
        .Append("', '")
        .Append(note)
        .Append("', ")
        .Append(amount.ToClearString())
        .Append(", ")
        .Append((int)type)
        .Append(", ")
        .Append((int)balanceLogType)
        .Append(")");

        sb.Append(",");
    }
Example #18
0
 public void AddToMarketplaceBalance(Money value, String note, BalanceLogType balanceLogType = BalanceLogType.Other)
 {
     MarketplaceBalance += value;
     BalanceLog.Add(this, BalanceType.MarketplaceBalance, value.ToDecimal(), note, balanceLogType);
     MarketplaceBalanceLog.Add(this.Id, value);
 }
Example #19
0
 public void SubtractFromRentalBalance(Money value, String note, BalanceLogType balanceLogType = BalanceLogType.Other)
 {
     SubtractFromTrafficBalance(value, note, balanceLogType);
 }
Example #20
0
 public void AddToInvestmentBalance(Money value, String note, BalanceLogType balanceLogType = BalanceLogType.Other)
 {
     InvestmentBalance += value;
     BalanceLog.Add(this, BalanceType.InvestmentBalance, value.ToDecimal(), note, balanceLogType);
 }
Example #21
0
    //MERGED FROM TRAFFICUNITY
    public static void FastAddLogs(List <KeyValuePair <int, Money> > listIdsDifference, BalanceType type, string note, List <KeyValuePair <int, Money> > ActualBalances, BalanceLogType balanceLogType)
    {
        using (var bridge = ParserPool.Acquire(Database.Client))
        {
            //Executing in 800 batches for good performance
            DateTime now    = AppSettings.ServerTime;
            bool     Active = true;
            int      j      = 0;

            while (Active)
            {
                bool AreRecordsInQuery = false;

                //Batch start
                var Query = ConstructInsertQueryStart();
                int i     = 0;

                while (j < listIdsDifference.Count && i < 800)
                {
                    AreRecordsInQuery = true;

                    ConstructInsertQuery(ref Query, listIdsDifference[j].Key, now, note, type, listIdsDifference[j].Value, ActualBalances[j].Value, balanceLogType);

                    i++;
                    j++;
                }

                if (AreRecordsInQuery)
                {
                    if (Query[Query.Length - 1] == ',')
                    {
                        Query[Query.Length - 1] = ';';
                    }

                    bridge.Instance.ExecuteRawCommandNonQuery(Query.ToString());
                }
                else
                {
                    Active = false;
                }
            }
        }
    }
Example #22
0
 public void AddToCommissionBalance(Money value, String note, BalanceLogType balanceLogType = BalanceLogType.Other)
 {
     CommissionBalance += value;
     BalanceLog.Add(this, BalanceType.CommissionBalance, value.ToDecimal(), note, balanceLogType);
 }
Example #23
0
 protected static void CreditCommissionBalanceHelper(ref Member User, Money Input, string note, BalanceLogType balanceLogType)
 {
     User.AddToCommissionBalance(Input, note, balanceLogType);
     User.IncreaseEarnings(Input);
 }
Example #24
0
    public static void AddRange(Parser parser, string dataTableCommand, string note, BalanceType target, BalanceLogType balanceLogType)
    {
        //You need to provide DataTable with the following variables (User Ids must be unique):
        //userId => UserId
        //amount => money that will be added to the balance
        //state => current account state (AFTER the operation)

        var List = new List <KeyValuePair <int, Money> >();
        var ListActualBalance = new List <KeyValuePair <int, Money> >();

        var dt = parser.ExecuteRawCommandToDataTable(dataTableCommand);

        foreach (DataRow row in dt.Rows)
        {
            if (new Money((Decimal)row["amount"]) != Money.Zero)
            {
                List.Add(new KeyValuePair <int, Money>((int)row["userId"], new Money((Decimal)row["amount"])));
                ListActualBalance.Add(new KeyValuePair <int, Money>((int)row["userId"], new Money((Decimal)row["state"])));
            }
        }

        BalanceLogManager.FastAddLogs(List, target, note, ListActualBalance, balanceLogType);
    }
Example #25
0
 protected void CreditPoints(int Input, String note, BalanceLogType balanceLogType)
 {
     CreditPoints(this.User, Input, note, balanceLogType);
 }
Example #26
0
 /// <summary>
 /// Do NOT require Save() on member
 /// </summary>
 /// <param name="cryptocurrencyType"></param>
 /// <param name="value"></param>
 /// <param name="note"></param>
 /// <param name="logType"></param>
 public void SubtractFromCryptocurrencyBalance(CryptocurrencyType cryptocurrencyType, decimal value, string note, BalanceLogType logType = BalanceLogType.Other)
 {
     SubtractFromCryptocurrencyBalance(cryptocurrencyType, new CryptocurrencyMoney(cryptocurrencyType, value), note, logType);
 }
Example #27
0
    public static void GlobalMemberAdjustHelper(Parser parser, string selectCommand, string updateCommand, string whereCommand, string note, Money amount, BalanceLogType balanceLogType)
    {
        //Add logs FAST
        var InactivityUsersDataTable = parser.ExecuteRawCommandToDataTable(selectCommand + whereCommand);
        var InactivityUsers          = TableHelper.GetListFromDataTable <Member>(InactivityUsersDataTable, 100, true);
        var List = new List <KeyValuePair <int, Money> >();
        var ListActuaiBalance = new List <KeyValuePair <int, Money> >();

        foreach (var member in InactivityUsers)
        {
            List.Add(new KeyValuePair <int, Money>(member.Id, amount * -1));
            ListActuaiBalance.Add(new KeyValuePair <int, Money>(member.Id, member.MainBalance - amount));
        }

        BalanceLogManager.FastAddLogs(List, BalanceType.MainBalance, note, ListActuaiBalance, balanceLogType);

        //Update all
        parser.ExecuteRawCommandNonQuery(updateCommand + whereCommand);
    }
Example #28
0
 private void SubtractFromCryptocurrencyBalance(CryptocurrencyType cryptocurrencyType, CryptocurrencyMoney value, string note, BalanceLogType logType = BalanceLogType.Other)
 {
     UserCryptocurrencyBalance.Remove(this.Id, value, cryptocurrencyType);
     //Works on ONE crypto balance at the moment
     BalanceLog.Add(this, CryptocurrencyTypeHelper.ConvertToBalanceType(cryptocurrencyType), value.ToDecimal() * -1, note, logType);
 }
Example #29
0
 public void SubtractFromCommissionBalance(Money value, String note, BalanceLogType balanceLogType = BalanceLogType.Other)
 {
     value              = value.Positify();
     CommissionBalance -= value;
     BalanceLog.Add(this, BalanceType.CommissionBalance, value.Negatify().ToDecimal(), note, balanceLogType);
 }
Example #30
0
 public void AddToRentalBalance(Money value, String note, BalanceLogType balanceLogType = BalanceLogType.Other)
 {
     AddToTrafficBalance(value, note, balanceLogType);
 }