public async Task Arrange()
        {
            var fixture = new Fixture();

            _orgStandardResponse = fixture.Create <OrganisationStandard>();
            _orgStandardResponse.Versions.First().Version = "1.0";

            ApiClient.Setup(c => c.GetOrganisationStandard(It.IsAny <int>()))
            .ReturnsAsync(_orgStandardResponse);

            Sut = new RegisterController(ControllerSession.Object, ApiClient.Object, ApplyApiClient.Object, ContactsApiClient.Object, Env.Object);
        }
Beispiel #2
0
 private static RegisterViewAndEditOrganisationStandardViewModel MapOrganisationStandardToViewModel(OrganisationStandard organisationStandard)
 {
     return(new RegisterViewAndEditOrganisationStandardViewModel
     {
         OrganisationStandardId = organisationStandard.Id,
         StandardId = organisationStandard.StandardId,
         StandardTitle = organisationStandard.StandardTitle,
         OrganisationId = organisationStandard.OrganisationId,
         Ukprn = organisationStandard.Ukprn,
         EffectiveFrom = organisationStandard.EffectiveFrom,
         EffectiveTo = organisationStandard.EffectiveTo,
         DateStandardApprovedOnRegister = organisationStandard.DateStandardApprovedOnRegister,
         StandardEffectiveFrom = organisationStandard.StandardEffectiveFrom,
         StandardEffectiveTo = organisationStandard.StandardEffectiveTo,
         StandardLastDateForNewStarts = organisationStandard.StandardLastDateForNewStarts,
         Comments = organisationStandard.Comments,
         Status = organisationStandard.Status,
         ContactId = organisationStandard.ContactId,
         Contact = organisationStandard.Contact,
         DeliveryAreas = organisationStandard.DeliveryAreas,
         OrganisationName = organisationStandard.OrganisationName,
         OrganisationStatus = organisationStandard.OrganisationStatus,
         DeliveryAreasDetails = organisationStandard.DeliveryAreasDetails,
         DeliveryAreasComments = organisationStandard.OrganisationStandardData?.DeliveryAreasComments
     });
 }
        public void When_Constructed_From_OrganisationStandard_Then_Values_Should_Be_Copied(OrganisationStandard sourceObject)
        {
            var objectUnderTest = new MergeOrganisationStandard(sourceObject, "Before");

            objectUnderTest.Replicates.Should().Be("Before");
            objectUnderTest.EndPointAssessorOrganisationId.Should().Be(sourceObject.EndPointAssessorOrganisationId);
            objectUnderTest.StandardCode.Should().Be(sourceObject.StandardCode);
            objectUnderTest.StandardReference.Should().Be(sourceObject.StandardReference);
            objectUnderTest.EffectiveFrom.Should().Be(sourceObject.EffectiveFrom);
            objectUnderTest.EffectiveTo.Should().Be(sourceObject.EffectiveTo);
            objectUnderTest.DateStandardApprovedOnRegister.Should().Be(sourceObject.DateStandardApprovedOnRegister);
            objectUnderTest.Comments.Should().Be(sourceObject.Comments);
            objectUnderTest.Status.Should().Be(sourceObject.Status);
            objectUnderTest.ContactId.Should().Be(sourceObject.ContactId);
            objectUnderTest.OrganisationStandardData.Should().Be(sourceObject.OrganisationStandardData);
            objectUnderTest.OrganisationStandardId.Should().Be(sourceObject.Id);
        }
        public RegisterBase()
        {
            EpaOrganisation organisation = new EpaOrganisation
            {
                Id                 = OrganisationOneId,
                OrganisationId     = OrganisationOneOrganisationId,
                OrganisationTypeId = 1
            };

            List <OrganisationType> organisationTypes = new List <OrganisationType>
            {
                new OrganisationType
                {
                    Id = 1
                }
            };

            List <ContactResponse> contacts = new List <ContactResponse>
            {
                new ContactResponse {
                    Id = ContactOneId
                },
                new ContactResponse {
                    Id = ContactTwoId
                }
            };

            List <ContactIncludePrivilegesResponse> users = new List <ContactIncludePrivilegesResponse>
            {
                new ContactIncludePrivilegesResponse {
                    Contact = new ContactResponse {
                        Id = UserOneId
                    }
                },
                new ContactIncludePrivilegesResponse {
                    Contact = new ContactResponse {
                        Id = UserTwoId
                    }
                },
                new ContactIncludePrivilegesResponse {
                    Contact = new ContactResponse {
                        Id = UserThreeId
                    }
                },
            };

            List <ContactResponse> contactsWhoCanBePrimary = new List <ContactResponse>
            {
                new ContactResponse {
                    Id = ContactOneId
                },
                new ContactResponse {
                    Id = ContactTwoId
                },
                new ContactResponse {
                    Id = UserOneId
                },
                new ContactResponse {
                    Id = UserTwoId
                },
                new ContactResponse {
                    Id = UserThreeId
                }
            };

            List <OrganisationStandardSummary> organisationStandards = new List <OrganisationStandardSummary>();

            for (int standard = 0; standard < 20; standard++)
            {
                organisationStandards.Add(new OrganisationStandardSummary
                {
                    Id = standard,
                    StandardCollation = new StandardCollation
                    {
                        ReferenceNumber = string.Format("ST{0:4}", standard),
                        StandardId      = standard,
                        Title           = string.Format("{0} Gravyboat Maker", NumberToAlpha(standard / 10))
                    },
                    DateStandardApprovedOnRegister = DateTime.Now.AddDays(-100)
                });;
            }

            List <DeliveryArea> deliveryAreas = new List <DeliveryArea>
            {
                new DeliveryArea {
                    Id = 1
                }
            };

            var organisationStandard = new OrganisationStandard()
            {
                OrganisationId = OrganisationOneOrganisationId, Id = organisationStandardId
            };

            List <ApplicationSummaryItem> standardApplications = new List <ApplicationSummaryItem>
            {
                new ApplicationSummaryItem
                {
                    ApplicationId     = Guid.NewGuid(),
                    StandardReference = "ST0002",
                    StandardName      = "Senior Gravyboat Maker"
                }
            };

            PaginatedList <ApplicationSummaryItem> standardApplicationPaginatedList
                = new PaginatedList <ApplicationSummaryItem>(standardApplications, standardApplications.Count, 1, short.MaxValue, 6);

            int    itemsPerPage  = 10;
            int    pageIndex     = 1;
            string sortColumn    = OrganisationStandardSortColumn.StandardName;
            string sortDirection = SortOrder.Asc;

            ApprovedStandards = new Mock <IPagingState>();

            ApprovedStandards.SetupGet(s => s.ItemsPerPage).Returns(itemsPerPage);
            ApprovedStandards.SetupSet(p => p.ItemsPerPage = It.IsAny <int>()).Callback <int>(r =>
            {
                itemsPerPage = r;
                ApprovedStandards.SetupGet(s => s.ItemsPerPage).Returns(itemsPerPage);
            });

            ApprovedStandards.SetupGet(s => s.PageIndex).Returns(pageIndex);
            ApprovedStandards.SetupSet(p => p.PageIndex = It.IsAny <int>()).Callback <int>(r =>
            {
                pageIndex = r;
                ApprovedStandards.SetupGet(s => s.PageIndex).Returns(pageIndex);
            });

            ApprovedStandards.SetupGet(s => s.SortColumn).Returns(sortColumn);
            ApprovedStandards.SetupSet(p => p.SortColumn = It.IsAny <string>()).Callback <string>(r =>
            {
                sortColumn = r;
                ApprovedStandards.SetupGet(s => s.SortColumn).Returns(sortColumn);
            });

            ApprovedStandards.SetupGet(s => s.SortDirection).Returns(sortDirection);
            ApprovedStandards.SetupSet(p => p.SortDirection = It.IsAny <string>()).Callback <string>(r =>
            {
                sortDirection = r;
                ApprovedStandards.SetupGet(s => s.SortDirection).Returns(sortDirection);
            });

            ControllerSession = new Mock <IControllerSession>();
            ControllerSession.Setup(p => p.Register_SessionValid).Returns(true);
            ControllerSession.Setup(p => p.Register_ApprovedStandards).Returns(ApprovedStandards.Object);

            ApiClient = new Mock <IApiClient>();
            ApiClient.Setup(p => p.GetEpaOrganisation(OrganisationOneOrganisationId)).ReturnsAsync(organisation);
            ApiClient.Setup(p => p.GetOrganisationTypes()).ReturnsAsync(organisationTypes);
            ApiClient.Setup(p => p.GetEpaOrganisationStandards(OrganisationOneOrganisationId)).ReturnsAsync(organisationStandards);
            ApiClient.Setup(p => p.GetOrganisationStandard(organisationStandardId)).ReturnsAsync(organisationStandard);
            ApiClient.Setup(p => p.GetDeliveryAreas()).ReturnsAsync(deliveryAreas);

            ApplyApiClient = new Mock <IApplicationApiClient>();
            ApplyApiClient.Setup(p => p.GetStandardApplications(It.IsAny <StandardApplicationsRequest>())).ReturnsAsync(standardApplicationPaginatedList);

            ContactsApiClient = new Mock <IContactsApiClient>();
            ContactsApiClient.Setup(p => p.GetAllContactsForOrganisation(OrganisationOneOrganisationId, null)).ReturnsAsync(contacts);
            ContactsApiClient.Setup(p => p.GetAllContactsForOrganisation(OrganisationOneOrganisationId, false)).ReturnsAsync(contacts);
            ContactsApiClient.Setup(p => p.GetAllContactsForOrganisationIncludePrivileges(OrganisationOneOrganisationId, true)).ReturnsAsync(users);
            ContactsApiClient.Setup(p => p.GetAllContactsWhoCanBePrimaryForOrganisation(OrganisationOneOrganisationId)).ReturnsAsync(contactsWhoCanBePrimary);

            StandardServiceClient = new Mock <IStandardServiceClient>();
            Env = new Mock <IHostingEnvironment>();
        }
        private RegisterEditOrganisationStandardVersionViewModel MapOrganisationStandardToEditStandardVersionViewModel(OrganisationStandard standard, string version)
        {
            var selectedVersion = standard.Versions.FirstOrDefault(v => v.Version == version);

            return(new RegisterEditOrganisationStandardVersionViewModel
            {
                OrganisationStandardId = standard.Id,
                Standard = standard.StandardTitle,
                Reference = standard.IFateReferenceNumber,
                Version = selectedVersion.Version,
                EffectiveFrom = selectedVersion.EffectiveFrom,
                EffectiveTo = selectedVersion.EffectiveTo,
                DateApprovedOnRegister = selectedVersion.DateVersionApproved,
                Status = selectedVersion.Status,
                EffectiveFromDay = selectedVersion.EffectiveFrom.HasValue ? selectedVersion.EffectiveFrom.Value.Day.ToString() : null,
                EffectiveFromMonth = selectedVersion.EffectiveFrom.HasValue ? selectedVersion.EffectiveFrom.Value.Month.ToString() : null,
                EffectiveFromYear = selectedVersion.EffectiveFrom.HasValue ? selectedVersion.EffectiveFrom.Value.Year.ToString() : null,
                EffectiveToDay = selectedVersion.EffectiveTo.HasValue ? selectedVersion.EffectiveTo.Value.Day.ToString() : null,
                EffectiveToMonth = selectedVersion.EffectiveTo.HasValue ? selectedVersion.EffectiveTo.Value.Month.ToString() : null,
                EffectiveToYear = selectedVersion.EffectiveTo.HasValue ? selectedVersion.EffectiveTo.Value.Year.ToString() : null,
            });
        }
        private void MergeOrganisationStandardsAndVersions(Organisation primaryOrganisation, Organisation secondaryOrganisation, string createdByUser, DateTime secondaryStandardsEffectiveTo)
        {
            // Grab the primary contact for the primary organisation because we're going to need it.
            var primaryContact = _dbContext.Contacts.FirstOrDefault(c => c.EndPointAssessorOrganisationId == primaryOrganisation.EndPointAssessorOrganisationId && c.Email == primaryOrganisation.PrimaryContact);

            // Read all the standards from the secondary organisation.

            foreach (var secondaryOrganisationStandard in secondaryOrganisation.OrganisationStandards)
            {
                // Does the primary organisation have this standard already?
                var primaryOrganisationStandard = primaryOrganisation.OrganisationStandards.FirstOrDefault(pos => pos.StandardCode == secondaryOrganisationStandard.StandardCode);

                if (null == primaryOrganisationStandard)
                {
                    // No - so add the standard to the primary organisation.

                    primaryOrganisationStandard = new OrganisationStandard()
                    {
                        DateStandardApprovedOnRegister = secondaryOrganisationStandard.DateStandardApprovedOnRegister,
                        OrganisationStandardData       = secondaryOrganisationStandard.OrganisationStandardData,
                        Comments      = $"This standard/version has been acquired from a merge with {secondaryOrganisation.EndPointAssessorOrganisationId} on {DateTime.UtcNow.ToString("dd MMM yyyy")}. {secondaryOrganisationStandard.Comments}",
                        ContactId     = primaryContact?.Id,
                        EffectiveFrom = secondaryOrganisationStandard.EffectiveFrom,
                        EffectiveTo   = secondaryOrganisationStandard.EffectiveTo,
                        EndPointAssessorOrganisationId = primaryOrganisation.EndPointAssessorOrganisationId,
                        StandardCode      = secondaryOrganisationStandard.StandardCode,
                        StandardReference = secondaryOrganisationStandard.StandardReference,
                        Status            = secondaryOrganisationStandard.Status,

                        OrganisationStandardVersions      = new List <OrganisationStandardVersion>(),
                        OrganisationStandardDeliveryAreas = new List <OrganisationStandardDeliveryArea>(),
                    };
                    primaryOrganisationStandard.Comments = primaryOrganisationStandard.Comments.Substring(0, Math.Min(primaryOrganisationStandard.Comments.Length, 500));
                    primaryOrganisation.OrganisationStandards.Add(primaryOrganisationStandard);
                }

                // Now read all the versions for this standard for the secondary organisation.

                foreach (var secondaryOrganisationStandardVersion in secondaryOrganisationStandard.OrganisationStandardVersions)
                {
                    // Does the standard version exist for this standard in the primary organisation?

                    var primaryOrganisationStandardVersion = primaryOrganisationStandard.OrganisationStandardVersions.FirstOrDefault(posv => posv.StandardUId == secondaryOrganisationStandardVersion.StandardUId && posv.Version == secondaryOrganisationStandardVersion.Version);
                    if (null == primaryOrganisationStandardVersion)
                    {
                        // No - so add the standard version to the standard for the primary organisation.

                        primaryOrganisationStandardVersion = new OrganisationStandardVersion()
                        {
                            DateVersionApproved = secondaryOrganisationStandardVersion.DateVersionApproved,
                            Comments            = $"This standard/version has been acquired from a merge with {secondaryOrganisation.EndPointAssessorOrganisationId} on {DateTime.UtcNow.ToString("dd MMM yyyy")}. {secondaryOrganisationStandardVersion.Comments}",
                            EffectiveFrom       = secondaryOrganisationStandardVersion.EffectiveFrom,
                            EffectiveTo         = secondaryOrganisationStandardVersion.EffectiveTo,
                            StandardUId         = secondaryOrganisationStandardVersion.StandardUId,
                            Status  = secondaryOrganisationStandardVersion.Status,
                            Version = secondaryOrganisationStandardVersion.Version,
                        };
                        primaryOrganisationStandardVersion.Comments = primaryOrganisationStandardVersion.Comments.Substring(0, Math.Min(primaryOrganisationStandardVersion.Comments.Length, 500));
                        primaryOrganisationStandard.OrganisationStandardVersions.Add(primaryOrganisationStandardVersion);
                    }

                    // Mark the secondary standard version as ending
                    secondaryOrganisationStandardVersion.EffectiveTo = secondaryStandardsEffectiveTo;
                    secondaryOrganisationStandardVersion.Comments    = $"This standard version has been merged in to {primaryOrganisation.EndPointAssessorOrganisationId} on {DateTime.UtcNow.ToString("dd MMM yyyy")}. ${secondaryOrganisationStandardVersion.Comments}";
                    secondaryOrganisationStandardVersion.Comments    = secondaryOrganisationStandardVersion.Comments.Substring(0, Math.Min(secondaryOrganisationStandardVersion.Comments.Length, 500));
                }

                foreach (var secondaryOrganisationStandardDeliveryArea in secondaryOrganisationStandard.OrganisationStandardDeliveryAreas)
                {
                    // Does the primary organisation standard have this delivery area?
                    var primaryOrganisationStandardDeliveryArea = primaryOrganisationStandard.OrganisationStandardDeliveryAreas.FirstOrDefault(posda => posda.DeliveryAreaId == secondaryOrganisationStandardDeliveryArea.DeliveryAreaId);

                    if (null == primaryOrganisationStandardDeliveryArea)
                    {
                        // No - so add the area

                        primaryOrganisationStandardDeliveryArea = new OrganisationStandardDeliveryArea()
                        {
                            DeliveryAreaId       = secondaryOrganisationStandardDeliveryArea.DeliveryAreaId,
                            Comments             = $"This delivery area has been acquired from a merge with {secondaryOrganisation.EndPointAssessorOrganisationId} on {DateTime.UtcNow.ToString("dd MMM yyyy")}. {secondaryOrganisationStandardDeliveryArea.Comments}",
                            Status               = secondaryOrganisationStandardDeliveryArea.Status,
                            OrganisationStandard = primaryOrganisationStandard,
                            DeliveryArea         = secondaryOrganisationStandardDeliveryArea.DeliveryArea,
                        };
                        primaryOrganisationStandardDeliveryArea.Comments = primaryOrganisationStandardDeliveryArea.Comments.Substring(0, Math.Min(primaryOrganisationStandardDeliveryArea.Comments.Length, 500));
                        primaryOrganisationStandard.OrganisationStandardDeliveryAreas.Add(primaryOrganisationStandardDeliveryArea);
                    }

                    secondaryOrganisationStandardDeliveryArea.Comments = $"This delivery area has been merged in to {primaryOrganisation.EndPointAssessorOrganisationId} on {DateTime.UtcNow.ToString("dd MMM yyyy")}. {secondaryOrganisationStandardDeliveryArea.Comments}";
                    secondaryOrganisationStandardDeliveryArea.Comments = secondaryOrganisationStandardDeliveryArea.Comments.Substring(0, Math.Min(secondaryOrganisationStandardDeliveryArea.Comments.Length, 500));
                }

                // Now set the effectiveTo and comments @ToDo: need content

                secondaryOrganisationStandard.EffectiveTo = secondaryStandardsEffectiveTo;
                secondaryOrganisationStandard.Comments    = $"This standard has been merged in to Organisation {primaryOrganisation.EndPointAssessorOrganisationId} on {DateTime.UtcNow.ToString("dd MMM yyyy")}. {secondaryOrganisationStandard.Comments}";
                secondaryOrganisationStandard.Comments    = secondaryOrganisationStandard.Comments.Substring(0, Math.Min(secondaryOrganisationStandard.Comments.Length, 500));
            }
        }