using Telogis.Platform.Cache;
using Telogis.Platform.Core;
using Telogis.Platform.Extensions;
using Telogis.Platform.Options;
using Telogis.Platform.Transactions;
namespace Telogis.Fleet.Core.Stores {
public abstract class AbstractSharableMemberStore<TEntity, TEntityFields>
: AbstractPartialUpdateEntityStore<TEntity, TEntityFields>
where TEntity : class, ISharableMember
where TEntityFields : IEntityFields {
private static readonly ILogger __logger = Logger.GetInstance(typeof(AbstractSharableMemberStore<TEntity, TEntityFields>));
private static readonly string[] __featuresNeedingDeleted = { "HasJobsUI", "QuickRoute" };
protected AbstractSharableMemberStore(IEntityCache cache, IExtensionManager extensionManager, ITransactionManager transactionManager)
: base(cache, extensionManager, transactionManager) {
protected override QueryBehaviour QueryBehaviour {
OptionsManager optionsManager;
if (Cache.Extensions.TryGetExtension(OptionsManager.ID, out optionsManager)) {
return Cache.CustomerIds.Keys.Any(
customerId => __featuresNeedingDeleted.Any(option => HasOption(optionsManager, customerId, option)))
? base.QueryBehaviour & ~QueryBehaviour.ExcludeDeleted
__logger.WriteLine(LogLevel.Warning, "OptionsManager cache extension has not been initialized");
return base.QueryBehaviour;
private static bool HasOption(OptionsManager optionsManager, Id customerId, string option) {
optionsManager.TryGetOptionValue(customerId, option, out hasFeature);