示例#1
0
        public async Task <Result> UpdateCommissionAllocation(ScopeOptions scope, CommissionAllocationEdit commissionAllocation)
        {
            var validator = new CommissionAllocationValidator(_context, scope, false);
            var result    = validator.Validate(commissionAllocation).GetResult();

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

            var entity = await GetCommissionAllocationEntityQuery(scope).FirstOrDefaultAsync(c => c.Id == commissionAllocation.Id);

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

            var allocationEntity = MapModelToEntity(commissionAllocation, entity);

            await _context.SaveChangesAsync();

            await DeleteCommissionAllocationPolicies(commissionAllocation.Id.Value);
            await InsertCommissionAllocationPolicies(commissionAllocation);

            await _auditService.InsertAuditLog(scope, AuditLog.ACTION_UPDATE, "CommissionAllocation", entity.Id, commissionAllocation);

            return(result);
        }
示例#2
0
        public async Task Get()
        {
            var allocation = new CommissionAllocationEdit()
            {
                Id           = Guid.NewGuid(),
                FromClientId = Guid.NewGuid(),
                ToClientId   = Guid.NewGuid(),
                PolicyIds    = new List <Guid>()
                {
                    Guid.NewGuid()
                }
            };

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

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

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

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

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

            Assert.Same(allocation, returnValue);
        }
示例#3
0
        private async Task InsertCommissionAllocationPolicies(CommissionAllocationEdit commissionAllocation)
        {
            foreach (var policyId in commissionAllocation.PolicyIds)
            {
                var allocationPolicy = BuildCommissionAllocationPolicyEntity(commissionAllocation.Id.Value, policyId);
                await _context.CommissionAllocationPolicy.AddAsync(allocationPolicy);
            }

            await _context.SaveChangesAsync();
        }
示例#4
0
        private CommissionAllocationEntity MapModelToEntity(CommissionAllocationEdit model, CommissionAllocationEntity entity = null)
        {
            if (entity == null)
            {
                entity = new CommissionAllocationEntity();
            }

            entity.FromClientId = model.FromClientId.Value;
            entity.ToClientId   = model.ToClientId.Value;

            return(entity);
        }
        public async Task <IActionResult> Insert([FromBody] CommissionAllocationEdit commissionAllocation)
        {
            var scope = AuthenticationService.GetScope(User);

            var result = await CommissionAllocationService.InsertCommissionAllocation(scope, commissionAllocation);

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

            return(Ok(result));
        }
示例#6
0
        public async Task Update()
        {
            var allocation = new CommissionAllocationEdit()
            {
                Id           = Guid.NewGuid(),
                FromClientId = Guid.NewGuid(),
                ToClientId   = Guid.NewGuid(),
                PolicyIds    = new List <Guid>()
                {
                    Guid.NewGuid()
                }
            };

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

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

            ScopeOptions             options = null;
            CommissionAllocationEdit updated = null;

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

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

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

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

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

            Assert.Same(result, returnValue);
        }
示例#7
0
        public async Task <Result> InsertCommissionAllocation(ScopeOptions scope, CommissionAllocationEdit commissionAllocation)
        {
            var validator = new CommissionAllocationValidator(_context, scope, true);
            var result    = validator.Validate(commissionAllocation).GetResult();

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

            var entity = MapModelToEntity(commissionAllocation);
            await _context.CommissionAllocation.AddAsync(entity);

            await _context.SaveChangesAsync();

            commissionAllocation.Id = entity.Id;
            result.Tag = commissionAllocation;

            await InsertCommissionAllocationPolicies(commissionAllocation);

            await _auditService.InsertAuditLog(scope, AuditLog.ACTION_INSERT, "CommissionAllocation", entity.Id, commissionAllocation);

            return(result);
        }
示例#8
0
        public async Task UpdateCommissionAllocation()
        {
            var options = TestHelper.GetDbContext("UpdateCommissionAllocation");

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

            var user2 = TestHelper.InsertUserDetailed(options);

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

            var policy2 = new PolicyEntity
            {
                Id       = Guid.NewGuid(),
                ClientId = client2.Client.Id,
                UserId   = user1.User.Id
            };

            var policy3 = new PolicyEntity
            {
                Id       = Guid.NewGuid(),
                ClientId = client2.Client.Id,
                UserId   = user1.User.Id
            };

            var ca1 = new CommissionAllocationEntity
            {
                Id           = Guid.NewGuid(),
                FromClientId = client1.Client.Id,
                ToClientId   = client2.Client.Id
            };

            var cap1 = new CommissionAllocationPolicyEntity
            {
                Id = Guid.NewGuid(),
                CommissionAllocationId = ca1.Id,
                PolicyId = Guid.NewGuid()
            };

            var ca2 = new CommissionAllocationEntity
            {
                Id           = Guid.NewGuid(),
                FromClientId = client1.Client.Id,
                ToClientId   = client3.Client.Id
            };

            var cap2 = new CommissionAllocationPolicyEntity
            {
                Id = Guid.NewGuid(),
                CommissionAllocationId = ca2.Id,
                PolicyId = policy1.Id
            };

            using (var context = new DataContext(options))
            {
                context.Policy.Add(policy1);
                context.Policy.Add(policy2);
                context.Policy.Add(policy3);

                context.CommissionAllocation.Add(ca1);
                context.CommissionAllocation.Add(ca2);

                context.CommissionAllocationPolicy.Add(cap2);
                context.CommissionAllocationPolicy.Add(cap1);

                context.SaveChanges();
            }

            using (var context = new DataContext(options))
            {
                var ca2Updated = new CommissionAllocationEdit
                {
                    Id           = ca2.Id,
                    FromClientId = client2.Client.Id,
                    ToClientId   = client4.Client.Id,
                    PolicyIds    = new List <Guid>()
                    {
                        policy2.Id, policy3.Id
                    }
                };

                var auditService = new AuditServiceMock();
                var service      = new CommissionAllocationService(context, auditService);

                //When
                var scope  = TestHelper.GetScopeOptions(user1);
                var result = await service.UpdateCommissionAllocation(scope, ca2Updated);

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

                var actual = await context.CommissionAllocation.FindAsync(ca2Updated.Id);

                Assert.Equal(ca2Updated.Id, actual.Id);
                Assert.Equal(ca2Updated.FromClientId, actual.FromClientId);
                Assert.Equal(ca2Updated.ToClientId, actual.ToClientId);

                var policyIds = await context.CommissionAllocationPolicy.Where(p => p.CommissionAllocationId == actual.Id).Select(p => p.PolicyId).ToListAsync();

                Assert.Equal(ca2Updated.PolicyIds, policyIds);

                //Out of scope
                scope  = TestHelper.GetScopeOptions(user2, Scope.User);
                result = await service.UpdateCommissionAllocation(scope, ca2Updated);

                Assert.False(result.Success);
                Assert.Equal("'Client' does not exist.", result.ValidationFailures.First().ErrorMessage);
            }
        }