public async Task <bool> UpdateOrganisation(UpdateOrganisationCommand command)
        {
            var organisationId                 = command.OrganisationId;
            var providerTypeId                 = command.ProviderTypeId;
            var organisationTypeId             = command.OrganisationTypeId;
            var legalName                      = command.LegalName;
            var tradingName                    = command.TradingName;
            var companyNumber                  = command.CompanyNumber;
            var charityNumber                  = command.CharityNumber;
            var updatedBy                      = command.Username;
            var applicationDeterminedDateValue = command.ApplicationDeterminedDate.ToString(RoatpDateTimeFormat);

            using (var connection = _dbConnectionHelper.GetDatabaseConnection())
            {
                var updatedAt = DateTime.Now;

                const string sql = "update [Organisations] SET LegalName = @legalName,organisationTypeId=@organisationTypeId, providerTypeId=@providerTypeId, tradingName= @tradingName," +
                                   " OrganisationData = JSON_MODIFY(JSON_MODIFY(JSON_MODIFY(OrganisationData, '$.ApplicationDeterminedDate', @applicationDeterminedDateValue),'$.CompanyNumber',@companyNumber),'$.CharityNumber',@CharityNumber), " +
                                   " UpdatedBy = @updatedBy, UpdatedAt = @updatedAt " +
                                   " WHERE Id = @organisationId";
                int recordsAffected = await connection.ExecuteAsync(sql, new { legalName, organisationTypeId, providerTypeId, tradingName, companyNumber,
                                                                               charityNumber, applicationDeterminedDateValue, updatedBy, updatedAt, organisationId });

                return(recordsAffected > 0);
            }
        }
Example #2
0
        public async void Handle_BCouldNotDeleteOrganisationResearchers_Test()
        {
            Organisation organisationNull = new Organisation();

            this._unitOfUnitMock.Setup(mock => mock.OrganisationRepository.Update(It.IsAny <Organisation>()))
            .Returns(organisationNull);
            this._unitOfUnitMock
            .Setup(mock => mock.RelationsRepository.DeleteAllOrganisationResearchers(It.IsAny <int>()))
            .Returns(false);

            UpdateOrganisationCommand command = new UpdateOrganisationCommand(new OrganisationWithChildren()
            {
                Created            = DateTime.Now,
                OrganisationName   = "s",
                Address            = "s",
                MainOrganisationId = 1,
                ZipCode            = "6700",
                City    = "es",
                Country = "sad"
            });
            var handler = new UpdateOrganisationHandler(this._unitOfUnitMock.Object);

            var result = await handler.Handle(command, new CancellationTokenSource().Token);

            Assert.Null(result);
        }
        public async Task <bool> Handle(UpdateOrganisationRequest request, CancellationToken cancellationToken)
        {
            request.LegalName   = _textSanitiser.SanitiseInputText(request.LegalName);
            request.TradingName = _textSanitiser.SanitiseInputText(request.TradingName);

            var command = new UpdateOrganisationCommand
            {
                OrganisationId            = request.OrganisationId,
                OrganisationTypeId        = request.OrganisationTypeId,
                ApplicationDeterminedDate = request.ApplicationDeterminedDate,
                CharityNumber             = request.CharityNumber,
                CompanyNumber             = request.CompanyNumber,
                LegalName      = request.LegalName,
                ProviderTypeId = request.ProviderTypeId,
                TradingName    = request.TradingName,
                Username       = request.Username
            };

            _logger.LogInformation($@"Handling Update organisation for Organisation ID [{request.OrganisationId}]");

            var errorMessage = _organisationValidator.ValidateOrganisation(command);

            if (!string.IsNullOrEmpty(errorMessage?.Message))
            {
                _logger.LogInformation($@"Update organisation for Organisation ID [{request.OrganisationId}] failed validation because {errorMessage.Message}");
                throw new BadRequestException(errorMessage.Message);
            }

            var auditChanges = _auditLogService.AuditOrganisation(command);

            if (auditChanges is null)
            {
                _logger.LogInformation($@"Update organisation for Organisation ID [{request.OrganisationId}] not applied as no differences found");
                return(true);
            }

            var success = await _updateOrganisationRepository.UpdateOrganisation(command);

            if (!success)
            {
                _logger.LogInformation($@"Update organisation for Organisation ID [{request.OrganisationId}] not applied as no update made on an existing record");
                return(false);
            }

            var fieldsAuditWritten = await _updateOrganisationRepository.WriteFieldChangesToAuditLog(auditChanges);

            if (!fieldsAuditWritten)
            {
                _logger.LogInformation($@"Update organisation  audit for Organisation ID [{request.OrganisationId}] not applied as no insertion made on Audit table");
                return(await Task.FromResult(false));
            }



            return(true);
        }
Example #4
0
 public bool IsValidUpdateOrganisation(UpdateOrganisationCommand command)
 {
     return(IsValidLegalName(command.LegalName) &&
            IsValidTradingName(command.TradingName) &&
            IsValidProviderTypeId(command.ProviderTypeId) &&
            IsValidOrganisationTypeId(command.OrganisationTypeId) &&
            IsValidApplicationDeterminedDate(command.ApplicationDeterminedDate) &&
            IsValidCompanyNumber(command.CompanyNumber) &&
            IsValidCharityNumber(command.CharityNumber));
 }
Example #5
0
        public ValidationErrorMessage ValidateOrganisation(UpdateOrganisationCommand command)
        {
            if (IsValidUpdateOrganisation(command))
            {
                return(new ValidationErrorMessage());
            }

            var invalidOrganisationError = "Invalid Organisation data";

            if (!IsValidLegalName(command.LegalName))
            {
                invalidOrganisationError = $"{invalidOrganisationError}: Invalid Legal Name [{command.LegalName}]";
            }

            if (!IsValidTradingName(command.TradingName))
            {
                invalidOrganisationError = $"{invalidOrganisationError}: Invalid Trading Name [{command.TradingName}]";
            }

            if (!IsValidProviderTypeId(command.ProviderTypeId))
            {
                invalidOrganisationError =
                    $"{invalidOrganisationError}: Invalid Provider Type Id [{command.ProviderTypeId}]";
            }

            if (!IsValidOrganisationTypeId(command.OrganisationTypeId))
            {
                invalidOrganisationError =
                    $"{invalidOrganisationError}: Invalid Organisation Type Id [{command.OrganisationTypeId}]";
            }


            if (!IsValidCompanyNumber(command.CompanyNumber))
            {
                invalidOrganisationError = $"{invalidOrganisationError}: Invalid company number [{command.CompanyNumber}]";
            }

            if (!IsValidApplicationDeterminedDate(command.ApplicationDeterminedDate))
            {
                invalidOrganisationError =
                    $"{invalidOrganisationError}: Invalid Application Determined Date [{command.ApplicationDeterminedDate}]";
            }

            if (!IsValidCharityNumber(command.CharityNumber))
            {
                invalidOrganisationError =
                    $"{invalidOrganisationError}: Invalid charity registration number [{command.CharityNumber}]";
            }

            return(new ValidationErrorMessage {
                Message = invalidOrganisationError
            });
        }
Example #6
0
        public async void Handle_FSucces_Test()
        {
            Organisation organisationNull = new Organisation();

            this._unitOfUnitMock.Setup(mock => mock.OrganisationRepository.Update(It.IsAny <Organisation>()))
            .Returns(organisationNull);
            this._unitOfUnitMock
            .Setup(mock => mock.RelationsRepository.DeleteAllOrganisationResearchers(It.IsAny <int>()))
            .Returns(true);

            OrganisationResearcher nullItem = new OrganisationResearcher();

            this._unitOfUnitMock.Setup(mock =>
                                       mock.RelationsRepository.CreateOrganisationResearcher(It.IsAny <OrganisationResearcher>()))
            .Returns(nullItem);

            this._unitOfUnitMock.Setup(mock => mock.RelationsRepository.DeleteAllOrganisationsProjects(It.IsAny <int>()))
            .Returns(true);

            OrganisationProject nullProejct = new OrganisationProject();

            this._unitOfUnitMock
            .Setup(mock => mock.RelationsRepository.CreateOrganisationProject(It.IsAny <OrganisationProject>()))
            .Returns(nullProejct);

            UpdateOrganisationCommand command = new UpdateOrganisationCommand(new OrganisationWithChildren()
            {
                Created            = DateTime.Now,
                OrganisationName   = "s",
                Address            = "s",
                MainOrganisationId = 1,
                ZipCode            = "6700",
                City        = "es",
                Country     = "sad",
                Researchers = new List <ResearcherModel>()
                {
                    new ResearcherModel()
                },
                Projects = new List <ProjectModel>()
                {
                    new ProjectModel()
                }
            });

            var handler = new UpdateOrganisationHandler(this._unitOfUnitMock.Object);

            var result = await handler.Handle(command, new CancellationTokenSource().Token);

            Assert.True((bool)result);
        }
        public void Organisation_Validation_checks()
        {
            var command = new UpdateOrganisationCommand();

            command.LegalName                 = "legal name";
            command.TradingName               = null;
            command.ProviderTypeId            = 1;
            command.ApplicationDeterminedDate = DateTime.Today;
            command.OrganisationTypeId        = 1;
            command.CompanyNumber             = "12345678";
            command.CharityNumber             = null;
            var result = _validator.IsValidUpdateOrganisation(command);

            Assert.AreEqual(result, true);
        }
        public void Organisation_Validation_checks_passes_validation()
        {
            var command = new UpdateOrganisationCommand
            {
                OrganisationId            = Guid.NewGuid(),
                LegalName                 = "legal name",
                TradingName               = null,
                ProviderTypeId            = 1,
                ApplicationDeterminedDate = DateTime.Today,
                OrganisationTypeId        = 1,
                CompanyNumber             = "12345678",
                CharityNumber             = null
            };
            var result = _validator.ValidateOrganisation(command);

            Assert.IsNull(result.Message);
        }
        public void Organisation_Validation_checks_fails_invalid_provider_type()
        {
            var command = new UpdateOrganisationCommand
            {
                OrganisationId            = Guid.NewGuid(),
                LegalName                 = "name",
                TradingName               = null,
                ProviderTypeId            = 2,
                ApplicationDeterminedDate = DateTime.Today,
                OrganisationTypeId        = 1,
                CompanyNumber             = "12345678",
                CharityNumber             = null
            };
            var result = _validator.ValidateOrganisation(command);

            Assert.IsNotNull(result.Message);
            Assert.IsTrue(result.Message.ToLower().Contains("provider type"));
        }
        public async Task <IActionResult> UpdateOrganisation([FromBody] OrganisationWithChildren organisation)
        {
            if (organisation == null)
            {
                return(new BadRequestObjectResult("Invalid Model"));
            }

            var command = new UpdateOrganisationCommand(organisation);

            var result = await this._mediator.Send(command);

            if (result == null)
            {
                return(new BadRequestObjectResult("Something went wrong"));
            }

            return(new OkObjectResult(result));
        }
        public AuditData AuditOrganisation(UpdateOrganisationCommand command)
        {
            var auditChanges     = new List <AuditData>();
            var auditChangesMade = AuditLegalName(command.OrganisationId, command.Username, command.LegalName);

            if (auditChangesMade.ChangesMade)
            {
                auditChanges.Add(auditChangesMade);
            }

            auditChangesMade = AuditTradingName(command.OrganisationId, command.Username, command.TradingName);
            if (auditChangesMade.ChangesMade)
            {
                auditChanges.Add(auditChangesMade);
            }

            auditChangesMade = AuditProviderType(command.OrganisationId, command.Username,
                                                 command.ProviderTypeId, command.OrganisationTypeId);
            if (auditChangesMade.ChangesMade)
            {
                auditChanges.Add(auditChangesMade);
            }

            auditChangesMade = AuditCompanyNumber(command.OrganisationId, command.Username, command.CompanyNumber);
            if (auditChangesMade.ChangesMade)
            {
                auditChanges.Add(auditChangesMade);
            }

            auditChangesMade = AuditCharityNumber(command.OrganisationId, command.Username, command.CharityNumber);
            if (auditChangesMade.ChangesMade)
            {
                auditChanges.Add(auditChangesMade);
            }

            auditChangesMade = AuditApplicationDeterminedDate(command.OrganisationId, command.Username,
                                                              command.ApplicationDeterminedDate);
            if (auditChangesMade.ChangesMade)
            {
                auditChanges.Add(auditChangesMade);
            }

            var auditDetailsReturned = new AuditData {
                FieldChanges = new List <AuditLogEntry>()
            };

            if (auditChanges.Any())
            {
                auditDetailsReturned.OrganisationId = command.OrganisationId;
                auditDetailsReturned.UpdatedAt      = DateTime.Now;
                auditDetailsReturned.UpdatedBy      = command.Username;

                foreach (var auditChange in auditChanges)
                {
                    foreach (var fieldChange in auditChange.FieldChanges)
                    {
                        auditDetailsReturned.FieldChanges.Add(fieldChange);
                    }
                }

                return(auditDetailsReturned);
            }

            return(null);
        }