示例#1
0
        /// <exception cref="DbException" />
        public void Upgrade(MembershipPack pack)
        {
            if (this.Membership.Name == pack.Membership.Name)
            {
                //The same bought, lets sum up
                DateTime Expires = (DateTime)this.MembershipExpires;
                setMembership(pack.Membership, AppSettings.ServerTime, Expires.AddDays(pack.TimeDays));
            }
            else
            {
                setMembership(pack.Membership, AppSettings.ServerTime, AppSettings.ServerTime.AddDays(pack.TimeDays));
            }
            ResolveReferralLimits(pack.Membership);

            if (AppSettings.Misc.SpilloverEnabled)
            {
                SpilloverManager spillover = new SpilloverManager(this);
                spillover.ResolveReferrals();
            }
        }
示例#2
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);
        }
示例#3
0
        protected Money CreditReferersMainAndPointBalance(Money input, String note, BalanceLogType balanceLogType, int level = 1,
                                                          Member forcedUser = null, bool forceSave = true)
        {
            if (level == 1)
            {
                MoneySpent = Money.Zero;
            }

            if (AppSettings.Referrals.AreIndirectReferralsEnabled && level > AppSettings.Referrals.ReferralEarningsUpToTier)
            {
                return(MoneySpent);
            }

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

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

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

                Money calculated       = CalculateRefEarnings(referer, input, level);
                var   points           = CalculateRefPointsEarnings(referer, input, level);
                Money calculatedPoints = PointsConverter.ToMoney(points);

                //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 + calculatedPoints);
                }

                if (!adminCommissionPoolCredited)
                {
                    if (AppSettings.Misc.SpilloverEnabled && referer.Membership.Id == Membership.Standard.Id)
                    {
                        //Add commission to Revenue Pool instead of crediting member
                        SpilloverManager.AddMoneyToRevenuePool(calculated);
                    }
                    //Credit
                    else if (!AppSettings.Payments.CommissionBalanceEnabled)
                    {
                        CreditMainBalanceHelper(ref referer, calculated, note, balanceLogType);
                        refererCredited = true;
                    }
                    else
                    {
                        CreditCommissionBalanceHelper(ref referer, calculated, note, balanceLogType);
                        refererCredited = true;
                    }
                    if (calculatedPoints > Money.Zero)
                    {
                        CreditPointsHelper(ref referer, PointsConverter.ToPoints(calculatedPoints), note, BalanceLogType.AdPackPurchase);
                    }
                }


                if (refererCredited)
                {
                    referer.IncreaseAdPackEarningsFromDR(calculated + calculatedPoints);
                    referer.IncreaseDirectRefPointsEarnings(points);
                    referer.IncreaseEarningsFromDirectReferral(calculated);
                    User.TotalAdPacksToDReferer += calculated + calculatedPoints;

                    referer.SaveStatisticsAndBalances();

                    User.TotalPointsEarnedToDReferer += points;
                    User.TotalEarnedToDReferer       += calculated;
                }

                User.LastDRActivity = DateTime.Now;

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


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


                //increase Money spent
                MoneySpent += calculated + calculatedPoints;

                //Indirect referrals don't get paid for CashLinks
                if (AppSettings.Referrals.AreIndirectReferralsEnabled)
                {
                    return(CreditReferersMainAndPointBalance(input, note, balanceLogType, level + 1, referer));
                }
            }
            return(MoneySpent);
        }