Example #1
0
        /// <summary>
        /// The ensure dates passed from the <see cref="OfferSettingsDisplay"/> are applied safely
        /// </summary>
        /// <param name="offerSettings">
        /// The offer settings.
        /// </param>
        /// <param name="settings">
        /// The settings.
        /// </param>
        /// <returns>
        /// The <see cref="IOfferSettings"/>.
        /// </returns>
        public static void ApplySafeDates(this IOfferSettings offerSettings, OfferSettingsDisplay settings)
        {
            if (!settings.OfferExpires)
            {
                offerSettings.OfferStartsDate = DateTime.MinValue;
                offerSettings.OfferEndsDate   = DateTime.MaxValue;
            }
            else
            {
                //// TODO figure out a better way to do this.
                //// This is a hack fix for the possible difference between the date format configured in the back office
                //// and the datetime format configured on the server.
                //if (!string.IsNullOrEmpty(settings.DateFormat))
                //{
                //    var format = settings.DateFormat.Replace("-", "/");
                //    var startDate = settings.OfferStartsDate.ToShortDateString();
                //    var expiresDate = settings.OfferEndsDate.ToShortDateString();

                //    settings.OfferStartsDate = DateTime.ParseExact(startDate, format, CultureInfo.InvariantCulture);
                //    settings.OfferEndsDate = DateTime.ParseExact(expiresDate, format, CultureInfo.InvariantCulture);
                //}

                // make sure the ends date is after the start date
                if (settings.OfferEndsDate < settings.OfferStartsDate)
                {
                    var temp = settings.OfferEndsDate;
                    settings.OfferEndsDate   = settings.OfferStartsDate;
                    settings.OfferStartsDate = temp;
                }

                offerSettings.OfferStartsDate = settings.OfferStartsDate;
                offerSettings.OfferEndsDate   = settings.OfferEndsDate;
            }
        }
Example #2
0
        /// <summary>
        /// Creates an <see cref="IOfferRedeemed"/> record
        /// </summary>
        /// <param name="offerSettings">
        /// The offer settings.
        /// </param>
        /// <param name="invoice">
        /// The invoice.
        /// </param>
        /// <param name="raiseEvents">
        /// Optional boolean indicating whether or not to raise events
        /// </param>
        /// <returns>
        /// The <see cref="IOfferRedeemed"/>.
        /// </returns>
        public IOfferRedeemed CreateOfferRedeemedWithKey(IOfferSettings offerSettings, IInvoice invoice, bool raiseEvents = true)
        {
            var redemption = new OfferRedeemed(
                offerSettings.OfferCode,
                offerSettings.OfferProviderKey,
                invoice.Key,
                offerSettings.Key);

            if (raiseEvents)
            {
                if (Creating.IsRaisedEventCancelled(new Events.NewEventArgs <IOfferRedeemed>(redemption), this))
                {
                    redemption.WasCancelled = true;
                    return(redemption);
                }
            }

            using (new WriteLock(Locker))
            {
                var uow = UowProvider.GetUnitOfWork();
                using (var repository = RepositoryFactory.CreateOfferRedeemedRepository(uow))
                {
                    repository.AddOrUpdate(redemption);
                    uow.Commit();
                }
            }

            if (raiseEvents)
            {
                Created.RaiseEvent(new Events.NewEventArgs <IOfferRedeemed>(redemption), this);
            }

            return(redemption);
        }
Example #3
0
        /// <summary>
        /// Deletes a single of <see cref="IOfferSettings"/>.
        /// </summary>
        /// <param name="offerSettings">
        /// The offer settings.
        /// </param>
        /// <param name="raiseEvents">
        /// Optional boolean indicating whether or not to raise events
        /// </param>
        public void Delete(IOfferSettings offerSettings, bool raiseEvents = true)
        {
            if (raiseEvents)
            {
                if (Deleting.IsRaisedEventCancelled(new DeleteEventArgs <IOfferSettings>(offerSettings), this))
                {
                    return;
                }
            }


            using (new WriteLock(Locker))
            {
                var uow = UowProvider.GetUnitOfWork();
                using (var repository = RepositoryFactory.CreateOfferSettingsRepository(uow))
                {
                    repository.Delete(offerSettings);
                    uow.Commit();
                }
            }

            if (raiseEvents)
            {
                Deleted.RaiseEvent(new DeleteEventArgs <IOfferSettings>(offerSettings), this);
            }
        }
Example #4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="OfferBase"/> class.
        /// </summary>
        /// <param name="settings">
        /// The <see cref="IOfferSettings"/>.
        /// </param>
        protected OfferBase(IOfferSettings settings)
        {
            Mandate.ParameterNotNull(settings, "settings");

            this.Settings = settings;

            // set the offer component resolver
            this.Initialize();
        }
Example #5
0
 /// <summary>
 /// Maps a <see cref="OfferSettingsDisplay"/> to a <see cref="IOfferSettings"/>
 /// </summary>
 /// <param name="settings">
 /// The settings.
 /// </param>
 /// <param name="destination">
 /// The destination.
 /// </param>
 /// <returns>
 /// The <see cref="IOfferSettings"/>.
 /// </returns>
 public static IOfferSettings ToOfferSettings(this OfferSettingsDisplay settings, IOfferSettings destination)
 {
     destination.Active = settings.Active;
     destination.Name = settings.Name;
     destination.OfferCode = settings.OfferCode;
     destination.ApplySafeDates(settings);
     destination.ComponentDefinitions = settings.ComponentDefinitions.AsOfferComponentDefinitionCollection();
     return destination;
 }
Example #6
0
 public TestOffer(IOfferSettings settings)
     : base(settings)
 {
 }
Example #7
0
        /// <summary>
        /// Creates an <see cref="IOfferRedeemed"/> record
        /// </summary>
        /// <param name="offerSettings">
        /// The offer settings.
        /// </param>
        /// <param name="invoice">
        /// The invoice.
        /// </param>
        /// <param name="raiseEvents">
        /// Optional boolean indicating whether or not to raise events
        /// </param>
        /// <returns>
        /// The <see cref="IOfferRedeemed"/>.
        /// </returns>
        public IOfferRedeemed CreateOfferRedeemedWithKey(IOfferSettings offerSettings, IInvoice invoice, bool raiseEvents = true)
        {
            var redemption = new OfferRedeemed(
                offerSettings.OfferCode,
                offerSettings.OfferProviderKey,
                invoice.Key,
                offerSettings.Key);
            if (raiseEvents)
            if (Creating.IsRaisedEventCancelled(new Events.NewEventArgs<IOfferRedeemed>(redemption), this))
            {
                redemption.WasCancelled = true;
                return redemption;
            }

            using (new WriteLock(Locker))
            {
                var uow = UowProvider.GetUnitOfWork();
                using (var repository = RepositoryFactory.CreateOfferRedeemedRepository(uow))
                {
                    repository.AddOrUpdate(redemption);
                    uow.Commit();
                }
            }

            if (raiseEvents)
            Created.RaiseEvent(new Events.NewEventArgs<IOfferRedeemed>(redemption), this);

            return redemption;
        }
Example #8
0
 public TestOffer(IOfferSettings settings)
     : base(settings)
 {
 }
        /// <summary>
        /// Deletes a single of <see cref="IOfferSettings"/>.
        /// </summary>
        /// <param name="offerSettings">
        /// The offer settings.
        /// </param>
        /// <param name="raiseEvents">
        /// Optional boolean indicating whether or not to raise events
        /// </param>
        public void Delete(IOfferSettings offerSettings, bool raiseEvents = true)
        {
            if (raiseEvents)
            if (Deleting.IsRaisedEventCancelled(new DeleteEventArgs<IOfferSettings>(offerSettings), this)) return;

            using (new WriteLock(Locker))
            {
                var uow = _uowProvider.GetUnitOfWork();
                using (var repository = _repositoryFactory.CreateOfferSettingsRepository(uow))
                {
                    repository.Delete(offerSettings);
                    uow.Commit();
                }
            }

            if (raiseEvents)
            Deleted.RaiseEvent(new DeleteEventArgs<IOfferSettings>(offerSettings), this);
        }
Example #10
0
 /// <summary>
 /// Maps <see cref="IOfferSettings"/> to <see cref="OfferSettingsDisplay"/>.
 /// </summary>
 /// <param name="settings">
 /// The settings.
 /// </param>
 /// <returns>
 /// The <see cref="OfferSettingsDisplay"/>.
 /// </returns>
 public static OfferSettingsDisplay ToOfferSettingsDisplay(this IOfferSettings settings)
 {
     return(AutoMapper.Mapper.Map <IOfferSettings, OfferSettingsDisplay>(settings));
 }
Example #11
0
 protected override TestOffer GetInstance(IOfferSettings offerSettings)
 {
     return(new TestOffer(offerSettings));
 }
Example #12
0
 /// <summary>
 /// Gets an instance of a coupon from the <see cref="IOfferSettings"/>
 /// /// </summary>
 /// <param name="offerSettings">
 /// The offer settings.
 /// </param>
 /// <returns>
 /// The <see cref="Coupon"/>.
 /// </returns>
 protected override Coupon GetInstance(IOfferSettings offerSettings)
 {
     return(new Coupon(offerSettings));
 }
Example #13
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Coupon"/> class.
 /// </summary>
 /// <param name="settings">
 /// The <see cref="IOfferSettings"/>.
 /// </param>
 public Coupon(IOfferSettings settings)
     : base(settings)
 {
 }
Example #14
0
 /// <summary>
 /// Instantiates an offer given it's settings
 /// </summary>
 /// <param name="offerSettings">
 /// The offer settings.
 /// </param>
 /// <returns>
 /// The <see cref="TOffer"/>.
 /// </returns>
 protected abstract TOffer GetInstance(IOfferSettings offerSettings);
Example #15
0
        /// <summary>
        /// Saves a single <see cref="IOfferSettings"/>.
        /// </summary>
        /// <param name="offerSettings">
        /// The offer settings.
        /// </param>
        /// <param name="raiseEvents">
        /// Optional boolean indicating whether or not to raise events
        /// </param>
        public void Save(IOfferSettings offerSettings, bool raiseEvents = true)
        {
            if (raiseEvents)
            if (Saving.IsRaisedEventCancelled(new SaveEventArgs<IOfferSettings>(offerSettings), this))
            {
                return;
            }

            using (new WriteLock(Locker))
            {
                var uow = UowProvider.GetUnitOfWork();
                using (var repository = RepositoryFactory.CreateOfferSettingsRepository(uow))
                {
                    repository.AddOrUpdate(offerSettings);
                    uow.Commit();
                }
            }

            if (raiseEvents)
            Saved.RaiseEvent(new SaveEventArgs<IOfferSettings>(offerSettings), this);
        }
Example #16
0
 /// <summary>
 /// Maps a <see cref="OfferSettingsDisplay"/> to a <see cref="IOfferSettings"/>
 /// </summary>
 /// <param name="settings">
 /// The settings.
 /// </param>
 /// <param name="destination">
 /// The destination.
 /// </param>
 /// <returns>
 /// The <see cref="IOfferSettings"/>.
 /// </returns>
 public static IOfferSettings ToOfferSettings(this OfferSettingsDisplay settings, IOfferSettings destination)
 {
     destination.Active    = settings.Active;
     destination.Name      = settings.Name;
     destination.OfferCode = settings.OfferCode;
     destination.ApplySafeDates(settings);
     destination.ComponentDefinitions = settings.ComponentDefinitions.AsOfferComponentDefinitionCollection();
     return(destination);
 }
        /// <summary>
        /// The resolve core.
        /// </summary>
        /// <param name="source">
        /// The source.
        /// </param>
        /// <returns>
        /// The <see cref="IEnumerable{OfferComponentDefinitionDisplay}"/>.
        /// </returns>
        protected override IEnumerable <OfferComponentDefinitionDisplay> ResolveCore(IOfferSettings source)
        {
            var components = _resolver.Value.GetOfferComponents(source.ComponentDefinitions).Where(x => x != null);

            return(components.Select(Mapper.Map <OfferComponentBase, OfferComponentDefinitionDisplay>));
        }