public async Task ResolveMappingError_Fail() { var options = TestHelper.GetDbContext("ResolveMappingError_Fail"); var user1 = TestHelper.InsertUserDetailed(options); var statement = TestHelper.InsertCommissionStatement(options, user1.Organisation); using (var context = new DataContext(options)) { var error1 = new CommissionErrorEdit { Id = Guid.NewGuid(), CommissionStatementId = statement.Id, Data = new ImportCommission() }; var commissionService = new CommissionService(context, null); var service = new CommissionErrorService(context, commissionService, null, null, null, null, null); //When var scope = TestHelper.GetScopeOptions(user1); var result = await service.ResolveMappingError(scope, error1); //Then Assert.False(result.Success); Assert.Equal(3, result.ValidationFailures.Count); Assert.Equal("'Policy' must not be empty.", result.ValidationFailures[0].ErrorMessage); } }
public async Task Get() { var error = new CommissionErrorEdit() { Id = Guid.NewGuid(), CommissionStatementId = Guid.NewGuid(), CommissionTypeId = Guid.NewGuid(), ClientId = Guid.NewGuid(), PolicyId = Guid.NewGuid(), Data = new OneAdvisor.Model.Commission.Model.ImportCommission.ImportCommission() { PolicyNumber = "123", AmountIncludingVAT = "50", VAT = "5" }, }; var service = new Mock <ICommissionErrorService>(); var authService = TestHelper.MockAuthenticationService(Scope.Branch); ScopeOptions options = null; service.Setup(c => c.GetError(It.IsAny <ScopeOptions>(), It.Is <Guid>(m => m == error.Id))) .Callback((ScopeOptions scopeOptions, Guid a) => options = scopeOptions) .ReturnsAsync(error); var controller = new CommissionErrorController(service.Object, authService.Object); var result = await controller.Get(error.Id); Assert.Equal(Scope.Branch, options.Scope); var okResult = Assert.IsType <OkObjectResult>(result); var returnValue = Assert.IsType <CommissionErrorEdit>(okResult.Value); Assert.Same(error, returnValue); }
public async Task ResolveMappingError() { var error = new CommissionErrorEdit() { Id = Guid.NewGuid(), CommissionStatementId = Guid.NewGuid(), CommissionTypeId = Guid.NewGuid(), ClientId = Guid.NewGuid(), PolicyId = Guid.NewGuid(), Data = new OneAdvisor.Model.Commission.Model.ImportCommission.ImportCommission() { PolicyNumber = "123", AmountIncludingVAT = "50", VAT = "5" }, }; var service = new Mock <ICommissionErrorService>(); var authService = TestHelper.MockAuthenticationService(Scope.Branch); var result = new Result() { Success = true, Tag = new CommissionEdit() { CommissionStatementId = error.CommissionStatementId, PolicyId = error.PolicyId } }; ScopeOptions options1 = null; CommissionErrorEdit resolved = null; service.Setup(c => c.ResolveMappingError(It.IsAny <ScopeOptions>(), It.Is <CommissionErrorEdit>(e => e == error))) .Callback((ScopeOptions o, CommissionErrorEdit e) => { resolved = e; options1 = o; }) .ReturnsAsync(result); ScopeOptions options2 = null; service.Setup(c => c.AutoResolveMappingErrors(It.IsAny <ScopeOptions>(), It.Is <Guid>(m => m == error.CommissionStatementId), It.Is <Guid>(m => m == error.PolicyId))) .Callback((ScopeOptions o, Guid a, Guid b) => { options2 = o; }) .Returns(() => Task.CompletedTask); var controller = new CommissionErrorController(service.Object, authService.Object); var actual = await controller.ResolveMappingError(error); Assert.Equal(Scope.Branch, options1.Scope); Assert.Equal(Scope.Branch, options2.Scope); Assert.Same(error, resolved); var okResult = Assert.IsType <OkObjectResult>(actual); var returnValue = Assert.IsType <Result>(okResult.Value); Assert.Same(result, returnValue); }
public async Task ResolveMappingError_Pass_UpdatePolicyAlias() { var options = TestHelper.GetDbContext("ResolveMappingError_Pass_UpdatePolicyAlias"); var user1 = TestHelper.InsertUserDetailed(options); var client1 = TestHelper.InsertClient(options, user1.Organisation); var statement = TestHelper.InsertCommissionStatement(options, user1.Organisation); var company1 = TestHelper.InsertCompany(options); var policy1 = new PolicyEntity { Id = Guid.NewGuid(), Number = Guid.NewGuid().ToString(), CompanyId = company1.Id, ClientId = client1.Client.Id, UserId = user1.User.Id, NumberAliases = new List <string>() { "987654" } //Existing alias }; var ic1 = new ImportCommission { PolicyNumber = "123456", // Policy number is different CommissionTypeCode = "gap_cover", AmountIncludingVAT = "22", VAT = "33", }; var err1 = new CommissionErrorEntity { Id = Guid.NewGuid(), CommissionStatementId = statement.Id, Data = ic1 }; using (var context = new DataContext(options)) { context.CommissionError.Add(err1); context.Policy.Add(policy1); context.SaveChanges(); var error1 = new CommissionErrorEdit { Id = err1.Id, CommissionStatementId = statement.Id, PolicyId = policy1.Id, ClientId = policy1.ClientId, CommissionTypeId = Guid.NewGuid(), Data = ic1 }; var auditService = new AuditServiceMock(); var commissionService = new CommissionService(context, auditService); var clientService = new ClientService(context, auditService); var policyService = new PolicyService(context, auditService); var commissionSplitService = new CommissionSplitService(context, auditService); var commissionSplitRulePolicyService = new CommissionSplitRulePolicyService(context, commissionSplitService, auditService); var service = new CommissionErrorService(context, commissionService, clientService, commissionSplitService, policyService, commissionSplitRulePolicyService, auditService); //When var scope = TestHelper.GetScopeOptions(user1); var result = await service.ResolveMappingError(scope, error1); //Then Assert.True(result.Success); var actual = context.Commission.Single(); Assert.Equal(error1.PolicyId, actual.PolicyId); Assert.Equal(error1.Data, actual.SourceData); var actualPolicy = context.Policy.Single(); Assert.Equal(2, actualPolicy.NumberAliases.Count()); Assert.NotNull(actualPolicy.NumberAliases.SingleOrDefault(n => n == "123456")); //New alias Assert.NotNull(actualPolicy.NumberAliases.SingleOrDefault(n => n == "987654")); //Existing alias } }
public async Task ResolveMappingError_Pass_UpdateMemberDetails() { var options = TestHelper.GetDbContext("ResolveMappingError_Pass_UpdateMemberDetails"); var user1 = TestHelper.InsertUserDetailed(options); var statement = TestHelper.InsertCommissionStatement(options, user1.Organisation); var company1 = TestHelper.InsertCompany(options); var client1 = new ClientEntity { Id = Guid.NewGuid(), ClientTypeId = ClientType.CLIENT_TYPE_INDIVIDUAL, FirstName = "", LastName = "", IdNumber = "", OrganisationId = user1.Organisation.Id, Initials = "", DateOfBirth = null, TaxNumber = Guid.NewGuid().ToString() }; var policy1 = new PolicyEntity { Id = Guid.NewGuid(), CompanyId = company1.Id, ClientId = client1.Id, UserId = user1.User.Id }; var ic1 = new ImportCommission { PolicyNumber = "123456", CommissionTypeCode = "gap_cover", AmountIncludingVAT = "22", VAT = "33", FirstName = "Dean", LastName = "van Niekerk", IdNumber = "8210035032082", DateOfBirth = "1982-10-03", Initials = "DJ" }; var err1 = new CommissionErrorEntity { Id = Guid.NewGuid(), CommissionStatementId = statement.Id, Data = ic1 }; using (var context = new DataContext(options)) { context.Client.Add(client1); context.CommissionError.Add(err1); context.Policy.Add(policy1); context.SaveChanges(); var error1 = new CommissionErrorEdit { Id = err1.Id, CommissionStatementId = statement.Id, PolicyId = policy1.Id, ClientId = policy1.ClientId, CommissionTypeId = Guid.NewGuid(), Data = ic1 }; var auditService = new AuditServiceMock(); var commissionService = new CommissionService(context, auditService); var clientService = new ClientService(context, auditService); var policyService = new PolicyService(context, auditService); var commissionSplitService = new CommissionSplitService(context, auditService); var commissionSplitRulePolicyService = new CommissionSplitRulePolicyService(context, commissionSplitService, auditService); var service = new CommissionErrorService(context, commissionService, clientService, commissionSplitService, policyService, commissionSplitRulePolicyService, auditService); //When var scope = TestHelper.GetScopeOptions(user1); var result = await service.ResolveMappingError(scope, error1); //Then Assert.True(result.Success); var actual = context.Commission.Single(); Assert.Equal(error1.PolicyId, actual.PolicyId); Assert.Equal(error1.CommissionStatementId, actual.CommissionStatementId); Assert.Equal(error1.CommissionTypeId, actual.CommissionTypeId); Assert.Equal(22, actual.AmountIncludingVAT); Assert.Equal(33, actual.VAT); Assert.Equal(error1.Data, actual.SourceData); var actualClient = context.Client.Single(); Assert.Equal(ic1.Initials, actualClient.Initials); Assert.Equal(ic1.FirstName, actualClient.FirstName); Assert.Equal(ic1.LastName, actualClient.LastName); Assert.Equal(ic1.IdNumber, actualClient.IdNumber); Assert.Equal(DateTime.Parse(ic1.DateOfBirth), actualClient.DateOfBirth); } }
public async Task ResolveMappingError_Pass() { var options = TestHelper.GetDbContext("ResolveMappingError_Pass"); var user1 = TestHelper.InsertUserDetailed(options); var client1 = TestHelper.InsertClient(options, user1.Organisation); var statement = TestHelper.InsertCommissionStatement(options, user1.Organisation); var company1 = TestHelper.InsertCompany(options); var policy1 = new PolicyEntity { Id = Guid.NewGuid(), CompanyId = company1.Id, ClientId = client1.Client.Id, UserId = user1.User.Id }; var ic1 = new ImportCommission { PolicyNumber = "123456", CommissionTypeCode = "gap_cover", AmountIncludingVAT = "22", VAT = "33", //These should get ignored as values already exist in db FirstName = "Dean", LastName = "van Niekerk", IdNumber = "8210035032082", DateOfBirth = "1982-10-03", Initials = "DJ" }; var err1 = new CommissionErrorEntity { Id = Guid.NewGuid(), CommissionStatementId = statement.Id, Data = ic1 }; var err2 = new CommissionErrorEntity { Id = Guid.NewGuid(), CommissionStatementId = statement.Id, Data = new ImportCommission() }; using (var context = new DataContext(options)) { context.CommissionError.Add(err1); context.CommissionError.Add(err2); context.Policy.Add(policy1); context.SaveChanges(); var error1 = new CommissionErrorEdit { Id = err1.Id, CommissionStatementId = statement.Id, PolicyId = policy1.Id, ClientId = policy1.ClientId, CommissionTypeId = Guid.NewGuid(), Data = ic1 }; var auditService = new AuditServiceMock(); var commissionService = new CommissionService(context, auditService); var clientService = new ClientService(context, auditService); var policyService = new PolicyService(context, auditService); var commissionSplitService = new CommissionSplitService(context, auditService); var commissionSplitRulePolicyService = new CommissionSplitRulePolicyService(context, commissionSplitService, auditService); var service = new CommissionErrorService(context, commissionService, clientService, commissionSplitService, policyService, commissionSplitRulePolicyService, auditService); //When var scope = TestHelper.GetScopeOptions(user1); var result = await service.ResolveMappingError(scope, error1); //Then Assert.True(result.Success); var actualError = context.CommissionError.Single(); Assert.Equal(err2.Id, actualError.Id); var actual = context.Commission.Single(); Assert.Equal(error1.PolicyId, actual.PolicyId); Assert.Equal(error1.CommissionStatementId, actual.CommissionStatementId); Assert.Equal(error1.CommissionTypeId, actual.CommissionTypeId); Assert.Equal(22, actual.AmountIncludingVAT); Assert.Equal(33, actual.VAT); Assert.Equal(error1.Data, actual.SourceData); //These details should not have changed var actualClient = context.Client.Single(); Assert.Equal(client1.Client.Initials, actualClient.Initials); Assert.Equal(client1.Client.FirstName, actualClient.FirstName); Assert.Equal(client1.Client.LastName, actualClient.LastName); Assert.Equal(client1.Client.IdNumber, actualClient.IdNumber); Assert.Equal(client1.Client.DateOfBirth, actualClient.DateOfBirth); } }
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); }