private void CreateStandardsSnapshot(MergeOrganisation mo, Organisation organisation, string replicates)
        {
            // Make sure the standards are loaded.
            _dbContext.Entry(organisation)
            .Collection(os => os.OrganisationStandards)
            .Load();

            foreach (var os in organisation.OrganisationStandards)
            {
                mo.MergeOrganisationStandards.Add(new MergeOrganisationStandard(os, replicates));

                // Make sure the versions are loaded.
                _dbContext.Entry(os)
                .Collection(osv => osv.OrganisationStandardVersions)
                .Load();

                foreach (var osv in os.OrganisationStandardVersions)
                {
                    mo.MergeOrganisationStandardVersions.Add(new MergeOrganisationStandardVersion(osv, replicates));
                }

                // Make sure the areas are loaded.
                _dbContext.Entry(os)
                .Collection(osv => osv.OrganisationStandardDeliveryAreas)
                .Load();
                foreach (var osda in os.OrganisationStandardDeliveryAreas)
                {
                    mo.MergeOrganisationStandardDeliveryAreas.Add(new MergeOrganisationStandardDeliveryArea(osda, replicates));
                }
            }
        }
        private MergeOrganisation CreateMergeOrganisations(Organisation primaryOrganisation, Organisation secondaryOrganisation, DateTime secondaryStandardsEffectiveTo, string createdByUser)
        {
            var primaryContactName   = _dbContext.Contacts.AsNoTracking().FirstOrDefault(c => c.Email == primaryOrganisation.PrimaryContact)?.DisplayName;
            var secondaryContactName = _dbContext.Contacts.AsNoTracking().FirstOrDefault(c => c.Email == secondaryOrganisation.PrimaryContact)?.DisplayName;

            var mo = new MergeOrganisation()
            {
                PrimaryEndPointAssessorOrganisationId   = primaryOrganisation.EndPointAssessorOrganisationId,
                PrimaryEndPointAssessorOrganisationName = primaryOrganisation.EndPointAssessorName,
                PrimaryOrganisationEmail = primaryOrganisation.PrimaryContact,
                PrimaryContactName       = primaryContactName,
                SecondaryEndPointAssessorOrganisationId   = secondaryOrganisation.EndPointAssessorOrganisationId,
                SecondaryEndPointAssessorOrganisationName = secondaryOrganisation.EndPointAssessorName,
                SecondaryOrganisationEmail = secondaryOrganisation.PrimaryContact,
                SecondaryContactName       = secondaryContactName,
                SecondaryEPAOEffectiveTo   = secondaryStandardsEffectiveTo,
                CreatedBy = createdByUser,
                CreatedAt = DateTime.UtcNow,
                Status    = MergeOrganisationStatus.InProgress,
            };

            _dbContext.MergeOrganisations.Add(mo);

            return(mo);
        }
        private void CreateApplySnapshot(MergeOrganisation mergeOrganisation, string endpointAssessorOrganisationId, string replicates)
        {
            var applications = _dbContext.Applications.Include("Organisation").Where(e => e.Organisation.EndPointAssessorOrganisationId == endpointAssessorOrganisationId);

            foreach (var application in applications)
            {
                var mergeApplication = MergeApply.CreateFrom(application);
                mergeApplication.Replicates = replicates;
                mergeOrganisation.MergeSecondaryApplications.Add(mergeApplication);
            }
        }
 private void CompleteMerge(MergeOrganisation mo, string completedByUser)
 {
     mo.CompletedBy = completedByUser;
     mo.CompletedAt = DateTime.UtcNow;
     mo.Status      = MergeOrganisationStatus.Completed;
 }
 private void ApproveMerge(MergeOrganisation mo, string approvedByUser)
 {
     mo.ApprovedBy = approvedByUser;
     mo.ApprovedAt = DateTime.UtcNow;
     mo.Status     = MergeOrganisationStatus.Approved;
 }