Пример #1
0
        /// <summary>
        /// Calculates a fee and end date for a membership based on the
        /// provided membership's start date. This will take into account the
        /// ProRate settings on the membership's parent template. ProRate
        /// settings can use either the day, the month or the month/day
        /// combination. This will NOT ProRate memberships that do not have
        /// a prior membership.
        ///
        /// This will add the startup fees for each member at the end.
        /// </summary>
        /// <param name="membership">The membership to calculate.</param>
        private void calcMembership(DojoMembership membership, MembershipBuilder builder)
        {
            DateTime               now      = builder.BuildTime;
            DojoMember             member   = membership.member;
            DojoMembershipTemplate template = membership.MembershipTemplate;

            if (membership.priorMembership == null)
            {
                membership.StartDate =
                    calcDate(now, template.MembershipStart);
            }
            else
            {
                membership.StartDate = DateManipulator.FirstOfNextDay(
                    membership.PriorMembership.EndDate);
            }

            membership.EndDate =
                calcDate(membership.StartDate,
                         template.MembershipEnd);
            membership.Fee = template.Fee;

            if (membership.PriorMembership == null)
            {
                // PRO RATE A ==================================
                if (template.ProRateMonthA > 0 &&
                    template.ProRateMonthA <= now.Month)
                {
                    if (template.ProRateDayA > 0)
                    {
                        if (template.ProRateDayA <= now.Day)
                        {
                            membership.EndDate =
                                calcDate(membership.StartDate,
                                         template.ProRateEndA);
                            membership.Fee =
                                template.ProRateFeeA;
                            membership.IsProRated = true;
                        }
                    }
                    else
                    {
                        membership.EndDate =
                            calcDate(membership.StartDate,
                                     template.ProRateEndA);
                        membership.Fee =
                            template.ProRateFeeA;
                        membership.IsProRated = true;
                    }

                    // PRO RATE B ==================================
                    if (template.ProRateMonthB > 0 &&
                        template.ProRateMonthB <= now.Month)
                    {
                        if (template.ProRateDayB > 0)
                        {
                            if (template.ProRateDayB <= now.Day)
                            {
                                membership.EndDate =
                                    calcDate(membership.StartDate,
                                             template.ProRateEndB);
                                membership.Fee =
                                    template.ProRateFeeB;
                                membership.IsProRated = true;
                            }
                        }
                        else
                        {
                            membership.EndDate =
                                calcDate(membership.StartDate,
                                         template.ProRateEndB);
                            membership.Fee =
                                template.ProRateFeeB;
                            membership.IsProRated = true;
                        }

                        // PRO RATE C ==================================
                        if (template.ProRateMonthC > 0 &&
                            template.ProRateMonthC <= now.Month)
                        {
                            if (template.ProRateDayC > 0)
                            {
                                if (template.ProRateDayC <= now.Day)
                                {
                                    membership.EndDate =
                                        calcDate(membership.StartDate,
                                                 template.ProRateEndC);
                                    membership.Fee =
                                        template.ProRateFeeC;
                                    membership.IsProRated = true;
                                }
                            }
                            else
                            {
                                membership.EndDate =
                                    calcDate(membership.StartDate,
                                             template.ProRateEndC);
                                membership.Fee =
                                    template.ProRateFeeC;
                                membership.IsProRated = true;
                            }
                        }
                        else if (template.ProRateDayC > 0 &&
                                 template.ProRateDayC <= now.Day)
                        {
                            membership.EndDate =
                                calcDate(membership.StartDate,
                                         template.ProRateEndC);
                            membership.Fee =
                                template.ProRateFeeC;
                            membership.IsProRated = true;
                        }
                    }
                    else if (template.ProRateDayB > 0 &&
                             template.ProRateDayB <= now.Day)
                    {
                        membership.EndDate =
                            calcDate(membership.StartDate,
                                     template.ProRateEndB);
                        membership.Fee =
                            template.ProRateFeeB;
                        membership.IsProRated = true;
                    }
                }
                else if (template.ProRateDayA > 0 &&
                         template.ProRateDayA <= now.Day)
                {
                    membership.EndDate =
                        calcDate(membership.StartDate,
                                 template.ProRateEndA);
                    membership.Fee =
                        template.ProRateFeeA;
                    membership.IsProRated = true;
                }
            }

            if (membership.PriorMembership == null)
            {
                membership.Fee += template.StartupFee;
            }
        }