Exemple #1
0
        public List <CommissionEdit> SplitCommission(CommissionEdit commission, Policy policy, ImportCommission sourceData, List <CommissionSplitRule> commissionSplitRules, List <CommissionSplitRulePolicy> commissionSplitRulePolicies)
        {
            var commissions = new List <CommissionEdit>();

            var splits = GetCommissionSplit(policy, commissionSplitRules, commissionSplitRulePolicies);

            var splitGroupId = splits.Count > 1 ? (Guid?)Guid.NewGuid() : null;

            foreach (var split in splits)
            {
                var c = new CommissionEdit();

                c.Id       = Guid.NewGuid();
                c.PolicyId = policy.Id;
                c.UserId   = split.UserId;
                c.CommissionStatementId = commission.CommissionStatementId;
                c.CommissionTypeId      = commission.CommissionTypeId;
                c.AmountIncludingVAT    = commission.AmountIncludingVAT * (split.Percentage / 100);
                c.VAT          = commission.VAT * (split.Percentage / 100);
                c.SourceData   = sourceData;
                c.SplitGroupId = splitGroupId;

                commissions.Add(c);
            }

            return(commissions);
        }
        public async Task Get()
        {
            var commission = new CommissionEdit()
            {
                Id = Guid.NewGuid(),
                AmountIncludingVAT = 100,
                VAT = 20,
                CommissionStatementId = Guid.NewGuid(),
                CommissionTypeId      = Guid.NewGuid(),
                PolicyId   = Guid.NewGuid(),
                SourceData = null
            };

            var service     = new Mock <ICommissionService>();
            var authService = TestHelper.MockAuthenticationService(Scope.Branch);

            service.Setup(c => c.GetCommission(It.IsAny <ScopeOptions>(), It.Is <Guid>(m => m == commission.Id.Value)))
            .ReturnsAsync(commission);

            var controller = new CommissionsController(service.Object, authService.Object);

            var result = await controller.Get(commission.Id.Value);

            var okResult    = Assert.IsType <OkObjectResult>(result);
            var returnValue = Assert.IsType <CommissionEdit>(okResult.Value);

            Assert.Same(commission, returnValue);
        }
Exemple #3
0
        public async Task <Result> UpdateCommission(ScopeOptions scope, CommissionEdit commission)
        {
            var validator = new CommissionValidator(_context, scope, false);
            var result    = validator.Validate(commission).GetResult();

            if (!result.Success)
            {
                return(result);
            }

            var entity = await GetCommissionEntityQuery(scope).FirstOrDefaultAsync(c => c.Id == commission.Id);

            if (entity == null)
            {
                return(new Result());
            }

            var commissionEntity = MapModelToEntity(commission, entity);

            await _context.SaveChangesAsync();

            await _auditService.InsertAuditLog(scope, AuditLog.ACTION_UPDATE, "Commission", entity.Id, commission);

            return(result);
        }
        public async Task <IActionResult> Insert([FromBody] CommissionEdit commission)
        {
            var scope = AuthenticationService.GetScope(User);

            var result = await CommissionService.InsertCommission(scope, commission);

            if (!result.Success)
            {
                return(BadRequest(result.ValidationFailures));
            }

            return(Ok(result));
        }
        private CommissionEdit LoadCommissionEdit(Guid commissionStatementId, Policy policy, CommissionType commissionType, ImportCommission importCommission)
        {
            var commission = new CommissionEdit();

            commission.Id       = Guid.NewGuid();
            commission.PolicyId = policy.Id;
            commission.UserId   = policy.UserId;
            commission.CommissionStatementId = commissionStatementId;
            commission.CommissionTypeId      = commissionType.Id.Value;
            commission.AmountIncludingVAT    = Convert.ToDecimal(importCommission.AmountIncludingVAT);
            commission.VAT        = Convert.ToDecimal(importCommission.VAT);
            commission.SourceData = importCommission;

            return(commission);
        }
        public async Task <IActionResult> Update(Guid commissionId, [FromBody] CommissionEdit commission)
        {
            commission.Id = commissionId;

            var scope = AuthenticationService.GetScope(User);

            var result = await CommissionService.UpdateCommission(scope, commission);

            if (!result.Success)
            {
                return(BadRequest(result.ValidationFailures));
            }

            return(Ok(result));
        }
        private CommissionEntity MapCommissionToEntity(CommissionEdit commission)
        {
            var c = new CommissionEntity();

            c.Id       = commission.Id.Value;
            c.PolicyId = commission.PolicyId.Value;
            c.UserId   = commission.UserId.Value;
            c.CommissionStatementId = commission.CommissionStatementId.Value;
            c.CommissionTypeId      = commission.CommissionTypeId.Value;
            c.AmountIncludingVAT    = commission.AmountIncludingVAT.Value;
            c.VAT          = commission.VAT.Value;
            c.SourceData   = commission.SourceData;
            c.SplitGroupId = commission.SplitGroupId;

            return(c);
        }
Exemple #8
0
        private CommissionEntity MapModelToEntity(CommissionEdit model, CommissionEntity entity = null)
        {
            if (entity == null)
            {
                entity = new CommissionEntity();
            }

            entity.CommissionTypeId   = model.CommissionTypeId.Value;
            entity.AmountIncludingVAT = model.AmountIncludingVAT.Value;
            entity.VAT          = model.VAT.Value;
            entity.PolicyId     = model.PolicyId.Value;
            entity.SourceData   = model.SourceData;
            entity.UserId       = model.UserId.Value;
            entity.SplitGroupId = model.SplitGroupId;

            return(entity);
        }
        public async Task Update()
        {
            var commission = new CommissionEdit()
            {
                Id = Guid.NewGuid(),
                AmountIncludingVAT = 100,
                VAT = 20,
                CommissionStatementId = Guid.NewGuid(),
                CommissionTypeId      = Guid.NewGuid(),
                PolicyId   = Guid.NewGuid(),
                SourceData = null
            };

            var service     = new Mock <ICommissionService>();
            var authService = TestHelper.MockAuthenticationService(Scope.Branch);

            var result = new Result()
            {
                Success = true
            };

            ScopeOptions   options = null;
            CommissionEdit updated = null;

            service.Setup(c => c.UpdateCommission(It.IsAny <ScopeOptions>(), It.IsAny <CommissionEdit>()))
            .Callback((ScopeOptions o, CommissionEdit i) =>
            {
                updated = i;
                options = o;
            })
            .ReturnsAsync(result);

            var controller = new CommissionsController(service.Object, authService.Object);

            var actual = await controller.Update(commission.Id.Value, commission);

            Assert.Same(commission, updated);
            Assert.Equal(Scope.Branch, options.Scope);

            var okResult    = Assert.IsType <OkObjectResult>(actual);
            var returnValue = Assert.IsType <Result>(okResult.Value);

            Assert.Same(result, returnValue);
        }
Exemple #10
0
        public async Task <Result> InsertCommission(ScopeOptions scope, CommissionEdit commission)
        {
            var validator = new CommissionValidator(_context, scope, true);
            var result    = validator.Validate(commission).GetResult();

            if (!result.Success)
            {
                return(result);
            }

            var entity = MapModelToEntity(commission);

            entity.CommissionStatementId = commission.CommissionStatementId.Value;
            await _context.Commission.AddAsync(entity);

            await _context.SaveChangesAsync();

            commission.Id = entity.Id;
            result.Tag    = commission;

            await _auditService.InsertAuditLog(scope, AuditLog.ACTION_INSERT, "Commission", entity.Id, commission);

            return(result);
        }
        public async Task UpdateCommission()
        {
            var options = TestHelper.GetDbContext("UpdateCommission");

            var user1   = TestHelper.InsertUserDetailed(options);
            var client1 = TestHelper.InsertClient(options, user1.Organisation);

            var user2 = TestHelper.InsertUserDetailed(options, user1.Organisation);

            var user3 = TestHelper.InsertUserDetailed(options);

            var policy1 = new PolicyEntity
            {
                Id        = Guid.NewGuid(),
                CompanyId = Guid.NewGuid(),
                ClientId  = client1.Client.Id,
                UserId    = user1.User.Id
            };

            var commission = new CommissionEntity
            {
                Id                    = Guid.NewGuid(),
                PolicyId              = policy1.Id,
                UserId                = policy1.UserId,
                CommissionTypeId      = Guid.NewGuid(),
                AmountIncludingVAT    = 99,
                VAT                   = 14,
                CommissionStatementId = Guid.NewGuid(),
                SourceData            = new Model.Commission.Model.ImportCommission.ImportCommission()
                {
                    PolicyNumber       = "123",
                    AmountIncludingVAT = "50",
                    VAT = "10"
                }
            };

            using (var context = new DataContext(options))
            {
                context.Policy.Add(policy1);
                context.Commission.Add(commission);

                context.SaveChanges();
            }

            var commission1 = new CommissionEdit
            {
                Id                    = commission.Id,
                PolicyId              = policy1.Id,
                UserId                = policy1.UserId,
                CommissionTypeId      = Guid.NewGuid(),
                AmountIncludingVAT    = 109,
                VAT                   = 15,
                CommissionStatementId = commission.CommissionStatementId,
                SourceData            = new Model.Commission.Model.ImportCommission.ImportCommission()
                {
                    PolicyNumber       = "123",
                    AmountIncludingVAT = "55",
                    VAT = "11"
                }
            };

            using (var context = new DataContext(options))
            {
                var auditService = new AuditServiceMock();
                var service      = new CommissionService(context, auditService);

                //When
                var scopeOptions = TestHelper.GetScopeOptions(user1);
                var result       = await service.UpdateCommission(scopeOptions, commission1);

                //Then
                Assert.True(result.Success);

                var actual = await context.Commission.FindAsync(commission.Id);

                Assert.Equal(commission1.Id, actual.Id);
                Assert.Equal(commission1.PolicyId, actual.PolicyId);
                Assert.Equal(commission1.CommissionTypeId, actual.CommissionTypeId);
                Assert.Equal(commission1.AmountIncludingVAT, actual.AmountIncludingVAT);
                Assert.Equal(commission1.VAT, actual.VAT);
                Assert.Equal(commission1.CommissionStatementId, actual.CommissionStatementId);
                Assert.Equal(commission1.SourceData, actual.SourceData);

                //Out of scope
                scopeOptions = TestHelper.GetScopeOptions(user2, Scope.User);
                result       = await service.UpdateCommission(scopeOptions, commission1);

                Assert.False(result.Success);

                scopeOptions = TestHelper.GetScopeOptions(user3, Scope.Organisation);
                result       = await service.UpdateCommission(scopeOptions, commission1);

                Assert.False(result.Success);
            }
        }
Exemple #12
0
        public async Task <Result> ResolveMappingError(ScopeOptions scope, CommissionErrorEdit error)
        {
            var validator = new CommissionErrorValidator();
            var result    = validator.Validate(error).GetResult();

            if (!result.Success)
            {
                return(result);
            }

            var commission = new CommissionEdit();

            commission.PolicyId = error.PolicyId;
            commission.CommissionStatementId = error.CommissionStatementId;
            commission.CommissionTypeId      = error.CommissionTypeId;
            commission.AmountIncludingVAT    = Convert.ToDecimal(error.Data.AmountIncludingVAT);
            commission.VAT        = Convert.ToDecimal(error.Data.VAT);
            commission.SourceData = error.Data;

            var policyQueryOptions = new PolicyQueryOptions(scope, "", "", 0, 0);

            policyQueryOptions.Id = error.PolicyId;
            var policy = (await _policyService.GetPolicies(policyQueryOptions)).Items.Single();

            var commissionSplitRulesOptions = new CommissionSplitRuleQueryOptions(scope, "", "", 0, 0);
            var commissionSplitRules        = (await _commissionSplitService.GetCommissionSplitRules(commissionSplitRulesOptions)).Items.ToList();

            var commissionSplitRulePolicyQueryOptions = new CommissionSplitRulePolicyQueryOptions(scope, "", "", 0, 0);
            var commissionSplitRulePolicies           = (await _commissionSplitRulePolicyService.GetCommissionSplitRulePolicies(commissionSplitRulePolicyQueryOptions)).Items.ToList();

            var commissions = _commissionSplitService.SplitCommission(commission, policy, error.Data, commissionSplitRules, commissionSplitRulePolicies);

            foreach (var c in commissions)
            {
                result = await _commissionService.InsertCommission(scope, c);
            }

            //Update client details (if none exist)
            try
            {
                var client = await _clientService.GetClient(scope, error.ClientId.Value);

                client.FirstName   = string.IsNullOrEmpty(client.FirstName) ? error.Data.FirstName ?? "" : client.FirstName;
                client.LastName    = string.IsNullOrEmpty(client.LastName) ? error.Data.FullName ?? "" : client.LastName;
                client.LastName    = string.IsNullOrEmpty(client.LastName) ? error.Data.LastName ?? "" : client.LastName;
                client.Initials    = string.IsNullOrEmpty(client.Initials) ? error.Data.Initials ?? "" : client.Initials;
                client.DateOfBirth = !client.DateOfBirth.HasValue ? DateTime.Parse(error.Data.DateOfBirth) : client.DateOfBirth;

                if (!string.IsNullOrEmpty(error.Data.IdNumber))
                {
                    var idNumber = new IdNumber(error.Data.IdNumber);
                    if (idNumber.IsValid)
                    {
                        client.IdNumber = string.IsNullOrEmpty(client.IdNumber) ? error.Data.IdNumber : client.IdNumber;
                    }
                    else
                    {
                        client.AlternateIdNumber = string.IsNullOrEmpty(client.AlternateIdNumber) ? error.Data.IdNumber ?? "" : client.AlternateIdNumber;
                    }
                }
                await _clientService.UpdateClient(scope, client);

                //Add policy alias if policy number doesnt match policy id
                if (!policy.Number.IgnoreCaseEquals(error.Data.PolicyNumber))
                {
                    //First check if its not already and alias
                    if (!policy.NumberAliases.Any(n => n.IgnoreCaseEquals(error.Data.PolicyNumber)))
                    {
                        var policyEdit = await _policyService.GetPolicy(scope, policy.Id);

                        policyEdit.NumberAliases.Add(error.Data.PolicyNumber);
                        await _policyService.UpdatePolicy(scope, policyEdit);
                    }
                }
            }
            catch { }


            if (!result.Success)
            {
                return(result);
            }

            await DeleteError(scope, error.Id);

            result.Tag = commission;

            return(result);
        }