public async Task <Result> InsertOrganisation(ScopeOptions scope, OrganisationEdit organisation)
        {
            var validator = new OrganisationValidator(_context, true, organisation.Id);
            var result    = validator.Validate(organisation).GetResult();

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

            //Only for super admins
            if (!scope.IgnoreScope)
            {
                return(new Result());
            }

            var entity = MapModelToEntity(organisation);
            await _context.Organisation.AddAsync(entity);

            await _context.SaveChangesAsync();

            organisation.Id = entity.Id;
            result.Tag      = organisation;

            return(result);
        }
        public async Task Get()
        {
            var organisation = new OrganisationEdit()
            {
                Id     = Guid.NewGuid(),
                Name   = "organisation_1",
                Config = new Config()
            };

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

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

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

            controller.ControllerContext = TestHelper.GetControllerContext(new ClaimsPrincipal());

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

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

            Assert.Same(organisation, returnValue);
        }
        public async Task <Result> UpdateOrganisation(ScopeOptions scope, OrganisationEdit organisation)
        {
            var validator = new OrganisationValidator(_context, false, organisation.Id);
            var result    = validator.Validate(organisation).GetResult();

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

            //Only organisation scope
            if (scope.Scope == Scope.Branch || scope.Scope == Scope.User)
            {
                return(new Result());
            }

            var entity = await ScopeQuery
                         .GetOrganisationEntityQuery(_context, scope)
                         .FirstOrDefaultAsync(o => o.Id == organisation.Id);

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

            entity = MapModelToEntity(organisation, entity);
            await _context.SaveChangesAsync();

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

            TestHelper.InsertApplications(options);
            var company1 = TestHelper.InsertCompany(options);

            var config1 = new Config()
            {
                CompanyIds = new List <Guid>()
                {
                    company1.Id
                },
                VATRegistered       = true,
                VATRegistrationDate = DateTime.Now,
            };

            //Given
            var organisation = new OrganisationEdit()
            {
                Name           = "Organsation 1",
                ApplicationIds = new List <Guid>()
                {
                    Application.CLIENT_ID
                },
                Config = config1
            };

            using (var context = new DataContext(options))
            {
                var service = new OrganisationService(context);

                //When
                var scope = TestHelper.GetScopeOptions(Guid.NewGuid());
                scope.IgnoreScope = true;
                var result = await service.InsertOrganisation(scope, organisation);

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

                var actual = await context.Organisation.FindAsync(((OrganisationEdit)result.Tag).Id);

                Assert.Equal(organisation.Name, actual.Name);
                Assert.Single(actual.ApplicationIds);
                Assert.Equal(organisation.ApplicationIds.Single(), actual.ApplicationIds.Single());
                Assert.Equal(organisation.Config.VATRegistered, actual.Config.VATRegistered);
                Assert.Equal(organisation.Config.VATRegistrationDate, actual.Config.VATRegistrationDate);
                Assert.Single(actual.Config.CompanyIds);
                Assert.Equal(organisation.Config.CompanyIds.Single(), actual.Config.CompanyIds.Single());

                //Scope check
                scope  = TestHelper.GetScopeOptions(Guid.NewGuid());
                result = await service.InsertOrganisation(scope, organisation);

                Assert.False(result.Success);
            }
        }
Beispiel #5
0
        public async Task <IActionResult> Insert([FromBody] OrganisationEdit organisation)
        {
            var scope = AuthenticationService.GetScope(User, User.IsSuperAdmin());

            var result = await OrganisationService.InsertOrganisation(scope, organisation);

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

            return(Ok(result));
        }
        private OrganisationEntity MapModelToEntity(OrganisationEdit model, OrganisationEntity enity = null)
        {
            if (enity == null)
            {
                enity = new OrganisationEntity();
            }

            enity.Name           = model.Name;
            enity.ApplicationIds = model.ApplicationIds;
            enity.Config         = model.Config;

            return(enity);
        }
        public async Task <Result> SendImportCommissionUnknownCommissionTypesEmail(
            string environment,
            OrganisationEdit organisation,
            UserEdit user,
            Company company,
            CommissionStatementEdit statement,
            CommissionStatementTemplateEdit template,
            List <string> unknownCommissionTypes,
            Attachment attachment)
        {
            var result = new Result();

            var response = await _email
                           .To(_options.Emails.CommissionImportAlerts.To)
                           .Subject("One Advisor - ALERT: Unknown Commission Types Found")
                           .UsingTemplate(ImportUnknownCommissionTypes.Template,
                                          new
            {
                Environment           = environment,
                OrganisationName      = organisation.Name,
                UserFirstName         = user.FirstName,
                UserLastName          = user.LastName,
                Username              = user.UserName,
                UserEmail             = user.Email,
                CompanyName           = company.Name,
                StatementDate         = statement.Date.Value.ToLongDateString(),
                StatementStatus       = statement.Processed.Value ? "Processed" : "Processing",
                StatementTemplateName = template.Name,
                CommissionTypes       = unknownCommissionTypes
            }
                                          )
                           .Attach(new FluentEmail.Core.Models.Attachment()
            {
                Filename    = attachment.FileName,
                ContentType = attachment.ContentType,
                Data        = attachment.Data
            })
                           .SendAsync();

            result.Success = response.Successful;

            if (!result.Success)
            {
                result.Errors = response.ErrorMessages;
                return(result);
            }

            return(result);
        }
        public async Task Update()
        {
            var organisation = new OrganisationEdit()
            {
                Id     = Guid.NewGuid(),
                Name   = "organisation_1",
                Config = new Config()
            };

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

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

            ScopeOptions     options = null;
            OrganisationEdit updated = null;

            service.Setup(c => c.UpdateOrganisation(It.IsAny <ScopeOptions>(), It.Is <OrganisationEdit>(m => m == organisation)))
            .Callback((ScopeOptions o, OrganisationEdit u) =>
            {
                updated = u;
                options = o;
            })
            .ReturnsAsync(result);

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

            controller.ControllerContext = TestHelper.GetControllerContext(new ClaimsPrincipal());

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

            Assert.Same(organisation, 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 UpdateOrganisation()
        {
            var options = TestHelper.GetDbContext("UpdateOrganisation");

            TestHelper.InsertApplications(options);

            var company1 = TestHelper.InsertCompany(options);
            var company2 = TestHelper.InsertCompany(options);

            var config1 = new Config()
            {
                CompanyIds = new List <Guid>()
                {
                    company1.Id
                },
                VATRegistered       = false,
                VATRegistrationDate = null
            };

            var config2 = new Config()
            {
                CompanyIds = new List <Guid>()
                {
                    company1.Id
                },
                VATRegistered       = false,
                VATRegistrationDate = null
            };

            //Given
            var org1 = new OrganisationEntity {
                Id = Guid.NewGuid(), Name = "Org 1", Config = config1, ApplicationIds = new List <Guid>()
                {
                    Application.CLIENT_ID
                }
            };
            var org2 = new OrganisationEntity {
                Id = Guid.NewGuid(), Name = "Org 2", Config = config2, ApplicationIds = new List <Guid>()
                {
                    Application.CLIENT_ID
                }
            };

            using (var context = new DataContext(options))
            {
                context.Organisation.Add(org1);
                context.Organisation.Add(org2);

                context.SaveChanges();
            }

            var user1 = TestHelper.InsertUserDetailed(options, org2);

            var config2Updated = new Config()
            {
                CompanyIds = new List <Guid>()
                {
                    company2.Id
                },
                VATRegistered       = true,
                VATRegistrationDate = DateTime.Now,
            };

            var organisation = new OrganisationEdit()
            {
                Id             = org2.Id,
                Name           = "Org 2 Updated",
                ApplicationIds = new List <Guid>()
                {
                    Application.CLIENT_ID, Application.COMMISSION_ID
                },
                Config = config2Updated
            };

            using (var context = new DataContext(options))
            {
                var service = new OrganisationService(context);

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

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

                var actual = await context.Organisation.FindAsync(organisation.Id);

                Assert.Equal(organisation.Name, actual.Name);
                Assert.Equal(2, organisation.ApplicationIds.Count());
                Assert.Contains(Application.CLIENT_ID, organisation.ApplicationIds);
                Assert.Contains(Application.COMMISSION_ID, organisation.ApplicationIds);
                Assert.Equal(organisation.Config.VATRegistered, actual.Config.VATRegistered);
                Assert.Equal(organisation.Config.VATRegistrationDate, actual.Config.VATRegistrationDate);
                Assert.Single(actual.Config.CompanyIds);
                Assert.Equal(organisation.Config.CompanyIds.Single(), actual.Config.CompanyIds.Single());


                //Scope check
                organisation.Id = org1.Id;
                result          = await service.UpdateOrganisation(scope, organisation);

                //Then
                Assert.False(result.Success);
            }
        }