Beispiel #1
0
        /// <summary>
        /// Used to get the next 
        /// </summary>
        /// <param name="businessId">Business so we can see colour id correctly</param>
        /// <param name="cultureCode">culture for names</param>
        /// <param name="periodType">type to get colour for</param>
        /// <returns>Period colour of type specified</returns>
        public PeriodColor GetNextPeriodColorForPeriodType(long businessId, PeriodTypeEnum periodType, string cultureCode)
        {
            // Count % max of sequence is done so that it will keep going through the colours
            // as more seasons are added
            const string SQL_STATEMENT = SQL_GET_STATEMENT + @"
                        -- Get next colour id for the period type                        
                        WHERE pc.Sequence = 
                            (SELECT COUNT(PC.Id) % 
                                   (SELECT MAX(Sequence) FROM Pricing.PeriodColor WHERE PeriodTypeCode = @PeriodTypeCode)
                                   + 1
                                   AS nextSeq
                             FROM Pricing.Period AS P 
                                INNER JOIN Pricing.PeriodColor AS PC ON P.PeriodColorId = PC.Id 
                                WHERE P.BusinessId = @BusinessId AND PC.PeriodTypeCode = @PeriodTypeCode)
                        AND pc.PeriodTypeCode = @PeriodTypeCode";

            var parameters = new List<SqlParameter>
            {
                DbHelper.CreateParameter(PeriodColorMapper.Parameters.PeriodTypeCode, periodType.GetCode()),
                DbHelper.CreateParameter(CultureMapper.Parameters.CultureCode, cultureCode),
                DbHelper.CreateParameter(PeriodMapper.Parameters.BusinessId, businessId)
            };

            return DbHelper.CreateInstance(SQL_STATEMENT, PeriodColorMapper.MapReader, parameters: parameters);
        }
Beispiel #2
0
 public bool Equals(PeriodTypeEnum obj)
 {
     if ((object)obj == null)
     {
         return(false);
     }
     return(StringComparer.OrdinalIgnoreCase.Equals(this.Value, obj.Value));
 }
        public static PeriodType FromTypeEnum(PeriodTypeEnum typeEnum)
        {
            switch (typeEnum)
            {
            case PeriodTypeEnum.Day: return(DailySummary);

            case PeriodTypeEnum.Week: return(WeeklySummary);

            case PeriodTypeEnum.Month: return(MonthlySummary);

            default: throw new ArgumentOutOfRangeException(nameof(typeEnum), typeEnum, "Invalid period type enum value");
            }
        }
Beispiel #4
0
 /// <summary>
 /// Set up a period with one date range and values sent in, only id is required
 /// </summary>
 /// <param name="id">period id</param>
 /// <param name="businessId">business id</param>
 /// <param name="name">name of period</param>
 /// <param name="periodType">type of period default of season</param>
 /// <param name="setPeriodDateRangePeriodIdToZero">true will set period date range period id to 0</param>
 /// <param name="periodDateRangeId">id for date range created</param>
 /// <returns>Period of your desires</returns>
 private static Period CreateValidPeriod(int id, long businessId = 500, string name = "Name",
                                  PeriodTypeEnum periodType = PeriodTypeEnum.Season,
                                  bool setPeriodDateRangePeriodIdToZero = true,
                                  int periodDateRangeId = default(int))
 {
     return new Period
     {
         Id = id,
         BusinessId = businessId,
         Name = name,
         PeriodColor = new PeriodColor(),
         PeriodType = new PeriodType { PeriodTypeEnum = periodType, Name = Enum.GetName(typeof(PeriodTypeEnum), periodType) },
         PeriodDateRanges = new List<PeriodDateRange>
             {
                 new PeriodDateRange
                 {
                     Id = periodDateRangeId,
                     PeriodId = setPeriodDateRangePeriodIdToZero ? 0 : id,
                     StartDate = DateTime.Now,
                     EndDate = DateTime.Now.AddDays(50)
                 }
             }
     };
 }
Beispiel #5
0
 /// <summary>
 /// Get overlap error type
 /// </summary>
 /// <remarks>
 /// This will need fixing if overlap rules get more complex
 /// </remarks>
 /// <param name="periodTypeEnum">type that had error</param>
 /// <returns>overlap type needed</returns>
 private PricingPeriodError? GetOverlapError(PeriodTypeEnum periodTypeEnum)
 {
     switch (periodTypeEnum)
     {
         case PeriodTypeEnum.Season:
             return PricingPeriodError.SeasonOverSeason;
         case PeriodTypeEnum.Event:
             return PricingPeriodError.EventOverEvent;
         case PeriodTypeEnum.Closure:
             return PricingPeriodError.ClosureOverClosure;
         default:
             return PricingPeriodError.Unknown;
     }
 }
Beispiel #6
0
        /// <summary>
        /// Get the business event for the period type and action
        /// </summary>
        /// <param name="periodTypeEnum">period type</param>
        /// <param name="isCreate">true to get added event, default to false</param>
        /// <param name="isEdit">true to get edit event, default to false</param>
        /// <param name="isDelete">true to get delete event, default to false</param>
        /// <returns>business event to fetch</returns>
        private BusinessEventTypesEnum GetBusinessEventForPeriodType(PeriodTypeEnum periodTypeEnum, bool isCreate = false, bool isEdit = false, bool isDelete = false)
        {
            switch (periodTypeEnum)
            {
                case PeriodTypeEnum.Season:
                    {
                        if (isCreate)
                        {
                            return BusinessEventTypesEnum.SeasonPeriodAdded;
                        }
                        if (isEdit)
                        {
                            return BusinessEventTypesEnum.SeasonPeriodModified;
                        }
                        if (isDelete)
                        {
                            return BusinessEventTypesEnum.SeasonPeriodDeleted;
                        }

                        // if they sent all bools as false, return this
                        return BusinessEventTypesEnum.SeasonPeriodAdded;                        
                    }
                case PeriodTypeEnum.Event:
                    {
                        if (isCreate)
                        {
                            return BusinessEventTypesEnum.EventPeriodAdded;
                        }
                        if (isEdit)
                        {
                            return BusinessEventTypesEnum.EventPeriodModified;
                        }
                        if (isDelete)
                        {
                            return BusinessEventTypesEnum.EventPeriodDeleted;
                        }

                        // if they sent all bools as false, return this
                        return BusinessEventTypesEnum.EventPeriodAdded;
                    }
                case PeriodTypeEnum.Closure:
                    {
                        if (isCreate)
                        {
                            return BusinessEventTypesEnum.ClosurePeriodAdded;
                        }
                        if (isEdit)
                        {
                            return BusinessEventTypesEnum.ClosurePeriodModified;
                        }
                        if (isDelete)
                        {
                            return BusinessEventTypesEnum.ClosurePeriodDeleted;
                        }

                        // if they sent all bools as false, return this
                        return BusinessEventTypesEnum.ClosurePeriodAdded;
                    }
                default: // Which should never happen, but just in case
                    {
                        return BusinessEventTypesEnum.SeasonPeriodAdded;
                    }
            }
        }
Beispiel #7
0
        /// <summary>
        /// Delete a period date range, if no date ranges after, delete the period
        /// </summary>
        /// <param name="businessId">business to delete period from</param>
        /// <param name="periodType">type of period being deleted</param>
        /// <param name="periodId">period to potentially delete</param>
        /// <param name="periodDateRangeId">date range id to delete</param>
        public void DeletePeriod(long businessId, PeriodTypeEnum periodType, int periodId, int periodDateRangeId)
        {
            // Add tracked event for date range removal
            BusinessEventTypesEnum businessEventType = GetBusinessEventForPeriodType(periodType, isDelete: true);
            PeriodDateRange pdrDeleted = null;
            string reference = string.Empty;

            using (var bex = new BusinessTransaction())
            {
                // Actual delete time
                List<PeriodDateRange> dateRangesLeft = periodDateRangeDao.GetAllByPeriodId(periodId);
                if (dateRangesLeft.Any(d => d.Id == periodDateRangeId))
                {
                    pdrDeleted = dateRangesLeft.First(d => d.Id == periodDateRangeId);
                }

                periodDateRangeDao.Remove(periodDateRangeId);

                if (dateRangesLeft == null ||
                    dateRangesLeft.Count == 1) // last one deleted
                {
                    // this is where rates are killed since period is actually killed
                    // Delete all rates associated with the period
                    variantRatePlanDao.DeleteRatePlanRatesAssociatedWithPeriod(periodId);

                    // Delete the period when no date ranges left
                    periodDao.Remove(periodId);
                }

                bex.Commit();
            }

            if (pdrDeleted != null)
            {
                reference = reference + pdrDeleted.StartDate.ToString(StandardDateTimeFormatProvider.GetShortDBFormat()) + ",";
                reference = reference + pdrDeleted.EndDate.ToString(StandardDateTimeFormatProvider.GetShortDBFormat()) + ",";
            }

            // event for modify of period / date range here
            eventTrackingManager.CreateBusinessEventAsync(businessId, businessEventType, reference.TrimEnd(','));
        }
 private PeriodType(string name, PeriodTypeEnum type, Func <DateRange, string> dateFormat)
 {
     Type       = type;
     Name       = name;
     DateFormat = dateFormat;
 }
Beispiel #9
0
        /// <summary>
        /// Returns true if the date range in question overlaps any other date ranges for the business
        /// </summary>
        /// <param name="periodType">type of event to look in</param>
        /// <param name="businessId">business Id</param>
        /// <param name="periodDateRange">date range to check</param>
        /// <returns>true if it overlaps, false if it doesn't</returns>
        public bool IsDateRangeForPeriodTypeOverlapping(PeriodTypeEnum periodType, long businessId, PeriodDateRange periodDateRange)
        {
            const string SQL_SELECT = @"
                        SELECT @doesItOverlap =
                            CASE WHEN (COUNT(pdr.id) > 0) 
                                THEN 1
                                ELSE 0
                            END
                        FROM Pricing.PeriodDateRange pdr
                        JOIN Pricing.Period p on p.Id = pdr.PeriodId
                        WHERE p.PeriodTypeCode = @PeriodTypeCode
                        AND p.BusinessId = @BusinessId
                        AND ((@StartDate between pdr.StartDate AND pdr.EndDate) OR
                             (@EndDate between pdr.StartDate AND pdr.EndDate) OR
                             (pdr.StartDate between @StartDate AND @EndDate) OR
                             (pdr.EndDate between @StartDate AND @EndDate))
                        AND (@Id = 0 OR pdr.id <> @Id)
                        ";
            var parameters = new List<SqlParameter>
            {
                DbHelper.CreateParameter(PeriodDateRangeMapper.Parameters.StartDate, periodDateRange.StartDate.Date),
                DbHelper.CreateParameter(PeriodDateRangeMapper.Parameters.EndDate, periodDateRange.EndDate.Date),
                DbHelper.CreateParameter(PeriodDateRangeMapper.Parameters.Id, periodDateRange.Id),
                DbHelper.CreateParameter(PeriodMapper.Parameters.PeriodTypeCode, periodType.GetCode()),
                DbHelper.CreateParameter(PeriodMapper.Parameters.BusinessId, businessId)
            };

            SqlParameter outputKey;
            parameters.Add(outputKey = DbHelper.CreateParameterOut<bool>(PeriodDateRangeMapper.Parameters.DoesItOverlap, SqlDbType.Bit));

            DbHelper.ExecuteNonQueryCommand(SQL_SELECT, CommandType.Text, parameters);
            return DbHelper.ParameterValue<bool>(outputKey);
        }