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); }
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); }
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); }
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); } }
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); }