public async Task <List <MarkupPolicyData> > Get(MarkupPolicyScope scope)
 {
     return((await GetPoliciesForScope(scope))
            .Select(GetPolicyData)
            .Where(p => p.IsSuccess)
            .Select(p => p.Value)
            .ToList());
 }
Beispiel #2
0
 private Task <List <MarkupPolicy> > GetPoliciesForScope(MarkupPolicyScope scope)
 {
     var(type, counterpartyId, agencyId, agentId) = scope;
     return(type switch
     {
         MarkupPolicyScopeType.Global => _context.MarkupPolicies.Where(p => p.ScopeType == MarkupPolicyScopeType.Global).ToListAsync(),
         MarkupPolicyScopeType.Counterparty => _context.MarkupPolicies
         .Where(p => p.ScopeType == MarkupPolicyScopeType.Counterparty && p.CounterpartyId == counterpartyId)
         .ToListAsync(),
         MarkupPolicyScopeType.Agency => _context.MarkupPolicies.Where(p => p.ScopeType == MarkupPolicyScopeType.Counterparty && p.AgencyId == agencyId)
         .ToListAsync(),
         MarkupPolicyScopeType.Agent => _context.MarkupPolicies.Where(p => p.ScopeType == MarkupPolicyScopeType.Counterparty && p.AgentId == agentId)
         .ToListAsync(),
         _ => Task.FromResult(new List <MarkupPolicy>(0))
     });
Beispiel #3
0
        public async Task <Result> Modify(int policyId, MarkupPolicySettings settings, AgentContext agent)
        {
            var policy = await _context.MarkupPolicies.SingleOrDefaultAsync(p => p.Id == policyId);

            if (policy == null)
            {
                return(Result.Failure("Could not find policy"));
            }

            return(await Result.Success()
                   .Bind(CheckPermissions)
                   .Bind(UpdatePolicy));


            Task <Result> CheckPermissions()
            {
                var scopeData = new MarkupPolicyScope(policy.ScopeType,
                                                      policy.CounterpartyId ?? policy.AgencyId ?? policy.AgentId);

                return(CheckUserManagePermissions(scopeData, agent));
            }

            async Task <Result> UpdatePolicy()
            {
                policy.Description      = settings.Description;
                policy.Order            = settings.Order;
                policy.TemplateId       = settings.TemplateId;
                policy.TemplateSettings = settings.TemplateSettings;
                policy.Currency         = settings.Currency;
                policy.Modified         = _dateTimeProvider.UtcNow();

                var validateResult = await ValidatePolicy(GetPolicyData(policy));

                if (validateResult.IsFailure)
                {
                    return(validateResult);
                }

                _context.Update(policy);
                await _context.SaveChangesAsync();

                return(Result.Success());
            }
        }
 private Task <List <MarkupPolicy> > GetPoliciesForScope(MarkupPolicyScope scope)
 {
     var(agentScopeType, agencyId, agentId, agentScopeId) = scope;
     return(agentScopeType switch
     {
         SubjectMarkupScopeTypes.Global => _context.MarkupPolicies
         .Where(p => p.SubjectScopeType == SubjectMarkupScopeTypes.Global)
         .ToListAsync(),
         SubjectMarkupScopeTypes.Country => _context.MarkupPolicies
         .Where(p => p.SubjectScopeType == SubjectMarkupScopeTypes.Country)
         .ToListAsync(),
         SubjectMarkupScopeTypes.Locality => _context.MarkupPolicies
         .Where(p => p.SubjectScopeType == SubjectMarkupScopeTypes.Locality)
         .ToListAsync(),
         SubjectMarkupScopeTypes.Agency => _context.MarkupPolicies
         .Where(p => p.SubjectScopeType == SubjectMarkupScopeTypes.Agency && p.SubjectScopeId == agentScopeId)
         .ToListAsync(),
         SubjectMarkupScopeTypes.Agent => _context.MarkupPolicies
         .Where(p => p.SubjectScopeType == SubjectMarkupScopeTypes.Agent && p.SubjectScopeId == agentScopeId)
         .ToListAsync(),
         _ => Task.FromResult(new List <MarkupPolicy>(0))
     });
Beispiel #5
0
        public Task <Result> Remove(int policyId, AgentContext agent)
        {
            return(GetPolicy()
                   .Bind(CheckPermissions)
                   .Bind(DeletePolicy));


            async Task <Result <MarkupPolicy> > GetPolicy()
            {
                var policy = await _context.MarkupPolicies.SingleOrDefaultAsync(p => p.Id == policyId);

                return(policy == null
                    ? Result.Failure <MarkupPolicy>("Could not find policy")
                    : Result.Success(policy));
            }

            async Task <Result <MarkupPolicy> > CheckPermissions(MarkupPolicy policy)
            {
                var scopeType = policy.ScopeType;
                var scope     = new MarkupPolicyScope(scopeType,
                                                      policy.CounterpartyId ?? policy.AgencyId ?? policy.AgentId);

                var(_, isFailure, error) = await CheckUserManagePermissions(scope, agent);

                return(isFailure
                    ? Result.Failure <MarkupPolicy>(error)
                    : Result.Success(policy));
            }

            async Task <Result> DeletePolicy(MarkupPolicy policy)
            {
                _context.Remove(policy);
                await _context.SaveChangesAsync();

                return(Result.Success());
            }
        }
        public async Task <IActionResult> GetPolicies(MarkupPolicyScopeType scopeType, int?scopeId)
        {
            var scope = new MarkupPolicyScope(scopeType, scopeId);

            return(Ok(await _policyManager.Get(scope)));
        }
Beispiel #7
0
 public async Task <List <MarkupPolicyData> > Get(MarkupPolicyScope scope)
 {
     return((await GetPoliciesForScope(scope))
            .Select(GetPolicyData)
            .ToList());
 }