public MarkupPolicyData(MarkupPolicyTarget target, MarkupPolicySettings settings, MarkupPolicyScope scope) { Target = target; Settings = settings; Scope = scope; }
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()); } }
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();