Beispiel #1
0
 public MarkupPolicyData(MarkupPolicyTarget target, MarkupPolicySettings settings,
                         MarkupPolicyScope scope)
 {
     Target   = target;
     Settings = settings;
     Scope    = scope;
 }
Beispiel #2
0
        private Task <List <MarkupPolicy> > GetAgentPolicies(AgentContext agentContext, AgentUserSettings userSettings,
                                                             MarkupPolicyTarget policyTarget)
        {
            var(agentId, counterpartyId, agencyId, _) = agentContext;

            return(_flow.GetOrSetAsync(BuildKey(),
                                       GetOrderedPolicies,
                                       AgentPoliciesCachingTime));


            string BuildKey()
            => _flow.BuildKey(nameof(MarkupService),
                              nameof(GetAgentPolicies),
                              agentId.ToString());


            async Task <List <MarkupPolicy> > GetOrderedPolicies()
            {
                var policiesFromDb = await GetPoliciesFromDb();

                return(policiesFromDb.Where(FilterBySettings)
                       .OrderBy(SortByScope)
                       .ThenBy(p => p.Order)
                       .ToList());
            }

            bool FilterBySettings(MarkupPolicy policy)
            {
                if (policy.ScopeType == MarkupPolicyScopeType.EndClient && !userSettings.IsEndClientMarkupsEnabled)
                {
                    return(false);
                }

                return(true);
            }

            int SortByScope(MarkupPolicy policy) => (int)policy.ScopeType;


            Task <List <MarkupPolicy> > GetPoliciesFromDb()
            {
                return(_context.MarkupPolicies
                       .Where(p => p.Target == policyTarget)
                       .Where(p =>
                              p.ScopeType == MarkupPolicyScopeType.Global ||
                              p.ScopeType == MarkupPolicyScopeType.Counterparty && p.CounterpartyId == counterpartyId ||
                              p.ScopeType == MarkupPolicyScopeType.Agency && p.AgencyId == agencyId ||
                              p.ScopeType == MarkupPolicyScopeType.Agent && p.AgentId == agentId ||
                              p.ScopeType == MarkupPolicyScopeType.EndClient && p.AgentId == agentId
                              )
                       .ToListAsync());
            }
        }
Beispiel #3
0
        public async Task <Markup> Get(AgentContext agentContext, MarkupPolicyTarget policyTarget)
        {
            var searchSettings = await _accommodationBookingSettingsService.Get(agentContext);

            if (searchSettings.IsMarkupDisabled)
            {
                return(Markup.Empty);
            }

            var agentSettings = await GetAgentSettings(agentContext);

            var agentPolicies = await GetAgentPolicies(agentContext, agentSettings, policyTarget);

            var markupFunction = CreateAggregatedMarkupFunction(agentPolicies);

            return(new Markup
            {
                Policies = agentPolicies,
                Function = markupFunction
            });
        }
        public List<MarkupPolicy> Get(MarkupSubjectInfo subjectInfo, MarkupDestinationInfo destinationInfo, MarkupPolicyTarget policyTarget)
        {
            var agencyId = subjectInfo.AgencyId;
            var agencyTreeIds = subjectInfo.AgencyAncestors;
            agencyTreeIds.Add(agencyId);
            
            var policies = _markupPolicyStorage.Get(policy =>
                IsApplicableBySubject(policy, subjectInfo) && IsApplicableByObject(policy, destinationInfo)
            );

            return policies
                .OrderBy(p => p.SubjectScopeType)
                .ThenBy(p => p.DestinationScopeType)
                .ThenBy(p => p.SubjectScopeType == SubjectMarkupScopeTypes.Agency && p.SubjectScopeId != string.Empty ? agencyTreeIds.IndexOf(int.Parse(p.SubjectScopeId)) : 0)
                .ThenBy(p => p.Order)
                .ToList();