/// <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; } }
/// <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); }
/// <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); } }
/// <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(); }
/// <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; }
public TestOffer(IOfferSettings settings) : base(settings) { }
/// <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; }
/// <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); }
/// <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)); }
protected override TestOffer GetInstance(IOfferSettings offerSettings) { return(new TestOffer(offerSettings)); }
/// <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)); }
/// <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) { }
/// <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);
/// <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); }
/// <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>)); }