public void DeleteOverriddenIndicatorMetadataTextValue(IndicatorMetadataTextValue indicatorMetadataTextValue)
        {
            var profileId = indicatorMetadataTextValue.ProfileId;

            // Profile will only be defined if overridden metadata is defined
            if (profileId.HasValue)
            {
                var fromDatabase = GetMetadataTextValueForAnIndicatorById(
                    indicatorMetadataTextValue.IndicatorId, profileId.Value);
                DeleteObject(fromDatabase);
            }
        }
        public ActionResult ConfirmCopyIndicators(CopyIndicatorsModel cim, List<int> selectedDomainId,
            int selectedAreaTypeId, string indicatorTransferDetails, bool copyMetadataOption, string targetProfile)
        {
            var groupId = GetSelectedGroupIdUsingProfileKeyDomainAndAreaTypeId(cim.UrlKey, cim.DomainId, cim.AreaTypeId);
            var modelCount = 0;

            var indicatorSpecifierStrings = indicatorTransferDetails.Split(',').ToList();
            var indicatorSpecifiers = IndicatorSpecifierParser.Parse(indicatorSpecifierStrings);

            
            string targetProfileId = string.Empty;
            int targetDomain=0, targetAreaTypeId=0;
            if (copyMetadataOption)
            {
                var targetProfileData = targetProfile.Split('~');
                targetProfileId = targetProfileData[0];
                targetDomain = Convert.ToInt32(targetProfileData[1]);
                targetAreaTypeId = Convert.ToInt32(targetProfileData[2]);
            }

            foreach (var indicatorSpecifier in indicatorSpecifiers)
            {
                var indicatorId = indicatorSpecifier.IndicatorId;
                var sexId = indicatorSpecifier.SexId;
                var ageId = indicatorSpecifier.AgeId;

                // Don't copy if identical indicator (including age and sex Id) already exists in destination.
                if (!_profileRepository.IndicatorGroupingsExist(indicatorId, Convert.ToInt32(selectedDomainId[0]),
                    selectedAreaTypeId, Convert.ToInt32(ageId), Convert.ToInt32(sexId)))
                {
                    var currentIndicator = cim.IndicatorsToTransfer[modelCount];

                    _profileRepository.CopyIndicatorToDomain(indicatorId, groupId, cim.AreaTypeId,
                        currentIndicator.SexId, currentIndicator.AgeId,
                        Convert.ToInt32(selectedDomainId[0]), selectedAreaTypeId, sexId,
                        ageId);

                    // Copy indicator meta data
                    if (copyMetadataOption)
                    {

                        var targetProfileDetails = CommonUtilities.GetProfile(targetProfileId, targetDomain, targetAreaTypeId, _profileRepository);
                        var indicatorMetadataTextValue = _reader.GetMetadataTextValueForAnIndicatorById(indicatorId, cim.Profile.Id);
                        if (indicatorMetadataTextValue != null)
                        {
                            var indicatorMetadataTextValuesCopy = new IndicatorMetadataTextValue
                            {
                                IndicatorId = indicatorId,
                                ProfileId = targetProfileDetails.Id,
                                Name = indicatorMetadataTextValue.Name,
                                NameLong = indicatorMetadataTextValue.NameLong,
                                Definition = indicatorMetadataTextValue.Definition,
                                Rationale = indicatorMetadataTextValue.Rationale,
                                Policy = indicatorMetadataTextValue.Policy,
                                DataSource = indicatorMetadataTextValue.DataSource,
                                Producer = indicatorMetadataTextValue.Producer,
                                IndMethod = indicatorMetadataTextValue.IndMethod,
                                StandardPop = indicatorMetadataTextValue.StandardPop,
                                CIMethod = indicatorMetadataTextValue.CIMethod,
                                CountSource = indicatorMetadataTextValue.CountSource,
                                CountDefinition = indicatorMetadataTextValue.CountDefinition,
                                DenomSource = indicatorMetadataTextValue.DenomSource,
                                DenomDefinition = indicatorMetadataTextValue.DenomDefinition,
                                DiscControl = indicatorMetadataTextValue.DiscControl,
                                Caveats = indicatorMetadataTextValue.Caveats,
                                Copyright = indicatorMetadataTextValue.Copyright,
                                Reuse = indicatorMetadataTextValue.Reuse,
                                Links = indicatorMetadataTextValue.Links,
                                RefNum = indicatorMetadataTextValue.RefNum,
                                Notes = indicatorMetadataTextValue.Notes,
                                Frequency = indicatorMetadataTextValue.Frequency,
                                Rounding = indicatorMetadataTextValue.Rounding,
                                DataQuality = indicatorMetadataTextValue.DataQuality
                            };

                            _writer.NewIndicatorMetadataTextValue(indicatorMetadataTextValuesCopy);
                        }
                    }

                    _profileRepository.LogAuditChange("Indicator " + indicatorId + " copied from [" +
                        cim.DomainName + " (Area: " + cim.AreaTypeId + ", SexId:" + currentIndicator.SexId +
                        ", AgeId:" + currentIndicator.AgeId + " )] Into " +
                        "[" + _reader.GetGroupingMetadataList(selectedDomainId)[0].GroupName +
                        " (Area: " + selectedAreaTypeId + ", SexId:" + sexId + ", AgeId:" + ageId + " )]",
                        indicatorId, null, _userName, DateTime.Now, CommonUtilities.AuditType.Copy.ToString());
                }
                modelCount++;
            }

            return Redirect(Request.UrlReferrer.AbsoluteUri);
        }
        public void TestCopyIndicatorMetadataTextValue()
        {
            var reader = ReaderFactory.GetProfilesReader();
            var writer = ReaderFactory.GetProfilesWriter();
            const int targetProfile = ProfileIds.Diabetes;
            const int indicatorId = IndicatorIds.ChildrenInPoverty;

            // get an indicator metadata text values from database
            var indicatorTextValues = reader.GetMetadataTextValueForAnIndicatorById(
                indicatorId, ProfileIds.HealthProfiles);

            // make a copy
            var copy = new IndicatorMetadataTextValue
            {
                IndicatorId = indicatorId,
                ProfileId = targetProfile,
                Name = indicatorTextValues.Name,
                NameLong = indicatorTextValues.NameLong,
                Definition = indicatorTextValues.Definition,
                Rationale = indicatorTextValues.Rationale,
                Policy = indicatorTextValues.Policy,
                DataSource = indicatorTextValues.DataSource,
                Producer = indicatorTextValues.Producer,
                IndMethod = indicatorTextValues.IndMethod,
                StandardPop = indicatorTextValues.StandardPop,
                CIMethod = indicatorTextValues.CIMethod,
                CountSource = indicatorTextValues.CountSource,
                CountDefinition = indicatorTextValues.CountDefinition,
                DenomSource = indicatorTextValues.DenomSource,
                DenomDefinition = indicatorTextValues.DenomDefinition,
                DiscControl = indicatorTextValues.DiscControl,
                Caveats = indicatorTextValues.Caveats,
                Copyright = indicatorTextValues.Copyright,
                Reuse = indicatorTextValues.Reuse,
                Links = indicatorTextValues.Links,
                RefNum = indicatorTextValues.RefNum,
                Notes = indicatorTextValues.Notes,
                Frequency = indicatorTextValues.Frequency,
                Rounding = indicatorTextValues.Rounding,
                DataQuality = indicatorTextValues.DataQuality
            };

            // Delete existing metadata text values
            writer.DeleteOverriddenIndicatorMetadataTextValue(copy);

            // write copy to db
            writer.NewIndicatorMetadataTextValue(copy);

            // get copy from db
            var copyFromDb = reader.GetMetadataTextValueForAnIndicatorById(indicatorId, targetProfile);

            Assert.AreNotEqual(copy,copyFromDb);
            Assert.AreEqual(copy.IndicatorId, copyFromDb.IndicatorId);
            Assert.AreEqual(copy.ProfileId, copyFromDb.ProfileId);
            Assert.AreEqual(copy.NameLong, copyFromDb.NameLong);
        }
        public void CreateIndicator(IEnumerable<IndicatorMetadataTextProperty> allPropertiesToAdd, int indicatorId)
        {
            var indicatorMetaDataTextValue = new IndicatorMetadataTextValue();

            try
            {
                transaction = CurrentSession.BeginTransaction();

                allPropertiesToAdd.ForEach(
                   p => indicatorMetaDataTextValue.SetPropertyValue(p.ColumnName, p.Text));

                indicatorMetaDataTextValue.IndicatorId = indicatorId;

                CurrentSession.Save(indicatorMetaDataTextValue);

                transaction.Commit();
            }
            catch (Exception exception)
            {
                HandleException(exception);
            }
        }
        public void CreateNewOverriddenIndicator(IndicatorMetadataTextProperty property, string text, int indicatorId,
            int? profileId)
        {
            var indicatorMetaDataTextValue = new IndicatorMetadataTextValue()
            {
                IndicatorId = indicatorId,
                ProfileId = profileId,
            };

            indicatorMetaDataTextValue.SetPropertyValue(property.ColumnName, text);

            CurrentSession.Save(indicatorMetaDataTextValue);
        }
 public int NewIndicatorMetadataTextValue(IndicatorMetadataTextValue indicatorMetadataTextValue)
 {
     var id = SaveNewObject(indicatorMetadataTextValue);
     return id;
 }