public override Dictionary <Guid, List <ValidationMessage> > ValidateEntity(Guid?language) { var generalDescriptionId = entity.StatutoryServiceGeneralDescriptionId; foreach (var entitylanguageId in entityOrPublishedLanguagesAvailabilityIds) { SetValidationLanguage(entitylanguageId); var organizationStatus = VersioningManager.ApplyPublishingStatusFilterFallback(entity.Organization.Versions)?.PublishingStatusId; NotBeTrue("organization", x => organizationStatus != typesCache.Get <PublishingStatusType>(PublishingStatus.Published.ToString())); NotEmptyGuid("fundingType", x => x.FundingTypeId); NotEmptyString("name", x => x.ServiceNames .Where(y => y.TypeId == typesCache.Get <NameType>(NameTypeEnum.Name.ToString()) && y.LocalizationId == entitylanguageId) .Select(y => y.Name) .FirstOrDefault()); NotEmptyList("languages", x => x.ServiceLanguages); NotEmptyString("shortDescription", x => x.ServiceDescriptions .Where(y => y.TypeId == typesCache.Get <DescriptionType>(DescriptionTypeEnum.ShortDescription.ToString()) && y.LocalizationId == entitylanguageId) .Select(y => y.Description) .FirstOrDefault()); if (!generalDescriptionId.IsAssigned()) { NotEmptyGuid("serviceType", x => x.TypeId); NotEmptyTextEditorString("description", x => x.ServiceDescriptions .Where(y => y.TypeId == typesCache.Get <DescriptionType>(DescriptionTypeEnum.Description.ToString()) && y.LocalizationId == entitylanguageId) .Select(y => y.Description) .FirstOrDefault()); NotEmptyList("targetGroups", x => x.ServiceTargetGroups.Where(y => y.TargetGroup.ParentId == null)); NotEmptyList("serviceClasses", x => x.ServiceServiceClasses); NotEmptyList("ontologyTerms", x => x.ServiceOntologyTerms); } else { var gdTargetGroup = VersioningManager.ApplyPublishingStatusFilterFallback(entity.StatutoryServiceGeneralDescription.Versions).TargetGroups.Where(x => x.TargetGroup.ParentId == null); var serviceOverrideTargetGroup = entity.ServiceTargetGroups.Where(y => y.Override && y.TargetGroup.ParentId == null); var gdTargetGroupsChecked = gdTargetGroup.Where(x => !serviceOverrideTargetGroup.Any(y => y.TargetGroupId == x.TargetGroupId)); var serviceTargetGroupsChecked = entity.ServiceTargetGroups.Where(y => !y.Override && y.TargetGroup.ParentId == null); NotBeTrue("targetGroups", z => !gdTargetGroupsChecked.Any() && !serviceTargetGroupsChecked.Any()); } //Service producers if (!NotEmptyList("serviceProducers", x => x.ServiceProducers)) { foreach (var serviceProducer in entity.ServiceProducers) { CheckEntityWithMergeResult(serviceProducer); } } //NotBeTrue("serviceProducers", x => !x.ServiceProducers.Any() || entity.ServiceProducers.Any(y => y.ProvisionTypeId == typesCache.Get<ProvisionType>(ProvisionTypeEnum.SelfProduced.ToString()) && !y.Organizations.Any())); //Service vouchers foreach (var serviceWebPage in entity.ServiceWebPages.Where(x => x.WebPage?.LocalizationId == entitylanguageId)) { CheckEntityWithMergeResult(serviceWebPage.WebPage); } //Laws foreach (var serviceLaw in entity.ServiceLaws) { CheckEntityWithMergeResult(serviceLaw.Law); } if (!NotEmptyGuid("areaInformationType", x => x.AreaInformationTypeId)) { if (entity.AreaInformationTypeId == typesCache.Get <AreaInformationType>(AreaInformationTypeEnum.AreaType.ToString())) { NotBeTrue("areaType", x => !(x.Areas.Any() || x.AreaMunicipalities.Any())); } } } return(validationMessagesDictionary); }
public VmConnectableServiceSearchResult GetConnectableService(VmConnectableServiceSearch search) { search.Name = search.Name != null ? search.Name.Trim() : search.Name; return(ContextManager.ExecuteReader(unitOfWork => { var languageCode = SetTranslatorLanguage(search); var selectedLanguageId = languageCache.Get(languageCode.ToString()); var nameTypeId = typesCache.Get <NameType>(NameTypeEnum.Name.ToString()); var publishedStatusId = PublishingStatusCache.Get(PublishingStatus.Published); var draftStatusId = PublishingStatusCache.Get(PublishingStatus.Draft); var notCommonId = typesCache.Get <ServiceChannelConnectionType>(ServiceChannelConnectionTypeEnum.NotCommon.ToString()); var languagesIds = new List <Guid>() { selectedLanguageId }; var serviceRep = unitOfWork.CreateRepository <IServiceVersionedRepository>(); var generalDescriptionRep = unitOfWork.CreateRepository <IStatutoryServiceGeneralDescriptionVersionedRepository>(); var resultTemp = serviceRep.All(); #region SearchByFilterParam if (search.Type == DomainEnum.Channels) { var channelRep = unitOfWork.CreateRepository <IServiceChannelVersionedRepository>(); var channel = channelRep.All().FirstOrDefault(x => x.Id == search.Id); if (channel?.ConnectionTypeId == notCommonId) { resultTemp = resultTemp .Where(x => (x.OrganizationId == channel.OrganizationId)); } var languageAvaliabilitiesRep = unitOfWork.CreateRepository <IServiceChannelLanguageAvailabilityRepository>(); languagesIds = languageAvaliabilitiesRep.All() .Where(x => x.ServiceChannelVersionedId == search.Id) .Select(x => x.LanguageId).ToList(); } if (search.OrganizationId.HasValue) { resultTemp = resultTemp .Where( x => x.OrganizationServices .Any(o => o.OrganizationId == search.OrganizationId) || x.OrganizationId == search.OrganizationId.Value ); } if (!string.IsNullOrEmpty(search.Name)) { var rootId = GetRootIdFromString(search.Name); if (!rootId.HasValue) { var searchText = search.Name.ToLower(); resultTemp = resultTemp .Where( x => x.ServiceNames.Any(y => y.Name.ToLower().Contains(searchText)) ); } else { resultTemp = resultTemp .Where(service => service.UnificRootId == rootId ); } } else { resultTemp = resultTemp.Where( x => x.ServiceNames.Any( y => !string.IsNullOrEmpty(y.Name))); } if (search.ServiceTypeId.HasValue) { var generalDescIds = generalDescriptionRep.All() .Where(x => x.TypeId == search.ServiceTypeId && x.PublishingStatusId == publishedStatusId) .Select(x => x.UnificRootId); resultTemp = resultTemp .Where(x => (x.TypeId == search.ServiceTypeId.Value && x.StatutoryServiceGeneralDescriptionId == null) || generalDescIds.Any(d => d == x.StatutoryServiceGeneralDescriptionId)); } //commonService.ExtendPublishingStatusesByEquivalents(search.SelectedPublishingStatuses); resultTemp = resultTemp.WherePublishingStatusIn(new List <Guid>() { publishedStatusId, draftStatusId }); resultTemp = resultTemp.Where(x => x.LanguageAvailabilities.Select(y => y.LanguageId).Any(l => languagesIds.Contains(l))); #endregion SearchByFilterParam resultTemp = resultTemp // .Include(sv => sv.OrganizationServices) // .Include(sv => sv.ServiceNames) .Include(sv => sv.StatutoryServiceGeneralDescription) .ThenInclude(ssgd => ssgd.Versions) // .Include(sv => sv.Type) .Include(sv => sv.LanguageAvailabilities) .ThenInclude(sla => sla.Language); var rowCount = resultTemp.Count(); var pageNumber = search.PageNumber.PositiveOrZero(); var resultTempData = resultTemp.Select(i => new { Id = i.Id, ServiceVersioned = i, UnificRootId = i.UnificRootId, // Name = i.ServiceNames // .OrderBy(x => x.Localization.OrderNumber) // .FirstOrDefault(x => selectedLanguageId == x.LocalizationId && x.TypeId == nameTypeId).Name, // AllNames = i.ServiceNames // .Where(x => x.TypeId == typesCache.Get<NameType>(NameTypeEnum.Name.ToString())) // .Select(x => new { x.LocalizationId, x.Name }), Modified = i.Modified, // required for sorting ModifiedBy = i.ModifiedBy // required for sorting }) .OrderByDescending(i => i.Modified) .ApplyPaging(pageNumber); var serviceIds = resultTempData.Data.Select(i => i.Id).ToList(); var serviceNameRep = unitOfWork.CreateRepository <IServiceNameRepository>(); var serviceNames = serviceNameRep.All().Where(x => serviceIds.Contains(x.ServiceVersionedId) && x.TypeId == nameTypeId).OrderBy(i => i.Localization.OrderNumber).Select(i => new { i.ServiceVersionedId, i.Name, i.LocalizationId }).ToList().GroupBy(i => i.ServiceVersionedId) .ToDictionary(i => i.Key, i => i.ToDictionary(x => languageCache.GetByValue(x.LocalizationId), x => x.Name)); var result = resultTempData.Data.Select(i => { Guid?typeId = null; if (i.ServiceVersioned?.TypeId != null) { typeId = i.ServiceVersioned.TypeId.Value; } else if (i.ServiceVersioned.StatutoryServiceGeneralDescription?.Versions?.Count > 0) { var ssgdv = versioningManager.ApplyPublishingStatusFilterFallback(i.ServiceVersioned.StatutoryServiceGeneralDescription.Versions); typeId = ssgdv?.TypeId; } return new VmConnectableService { Id = i.Id, UnificRootId = i.UnificRootId, Name = serviceNames.TryGetOrDefault(i.Id, new Dictionary <string, string>()), ServiceTypeId = typeId, ServiceType = typeId == null ? string.Empty : typesCache.GetByValue <ServiceType>(typeId.Value), LanguagesAvailabilities = TranslationManagerToVm.TranslateAll <ILanguageAvailability, VmLanguageAvailabilityInfo>(i.ServiceVersioned.LanguageAvailabilities), OrganizationId = i.ServiceVersioned.OrganizationId, Modified = i.ServiceVersioned.Modified.ToEpochTime(), ModifiedBy = i.ServiceVersioned.ModifiedBy }; }) .ToList(); return new VmConnectableServiceSearchResult() { Data = result, MoreAvailable = resultTempData.MoreAvailable, Count = rowCount, PageNumber = pageNumber }; })); }
public override Dictionary <Guid, List <ValidationMessage> > ValidateEntity(Guid?language) { foreach (var entityLanguageId in entityOrPublishedLanguagesAvailabilityIds) { SetValidationLanguage(entityLanguageId); var organizationStatus = VersioningManager.ApplyPublishingStatusFilterFallback(entity.Organization.Versions)?.PublishingStatusId; NotBeTrue("organization", x => organizationStatus != typesCache.Get <PublishingStatusType>(PublishingStatus.Published.ToString())); NotEmptyString("name", x => x.ServiceChannelNames .Where(y => y.TypeId == typesCache.Get <NameType>(NameTypeEnum.Name.ToString()) && y.LocalizationId == entityLanguageId) .Select(y => y.Name) .FirstOrDefault()); NotEmptyString("shortDescription", x => x.ServiceChannelDescriptions .Where(y => y.TypeId == typesCache.Get <DescriptionType>(DescriptionTypeEnum.ShortDescription.ToString()) && y.LocalizationId == entityLanguageId) .Select(y => y.Description) .FirstOrDefault()); NotEmptyTextEditorString("description", x => x.ServiceChannelDescriptions .Where(y => y.TypeId == typesCache.Get <DescriptionType>(DescriptionTypeEnum.Description.ToString()) && y.LocalizationId == entityLanguageId) .Select(y => y.Description) .FirstOrDefault()); ValidateEmails(entityLanguageId); //channels if (entity.TypeId == typesCache.Get <ServiceChannelType>(ServiceChannelTypeEnum.EChannel.ToString()) && entity.ElectronicChannels.Any()) { ValidateAreaInformations(); ValidatePhonesByPhoneType(entityLanguageId); ValidateAttachments(entityLanguageId); CheckEntityWithMergeResult(entity.ElectronicChannels.First()); } else if (entity.TypeId == typesCache.Get <ServiceChannelType>(ServiceChannelTypeEnum.WebPage.ToString()) && entity.WebpageChannels.Any()) { NotEmptyList("languages", x => x.Languages); ValidatePhonesByPhoneType(entityLanguageId); CheckEntityWithMergeResult(entity.WebpageChannels.First()); } else if (entity.TypeId == typesCache.Get <ServiceChannelType>(ServiceChannelTypeEnum.PrintableForm.ToString()) && entity.PrintableFormChannels.Any()) { ValidateAreaInformations(); ValidatePhonesByPhoneType(entityLanguageId); ValidateAttachments(entityLanguageId); CheckEntityWithMergeResult(entity.PrintableFormChannels.First()); } else if (entity.TypeId == typesCache.Get <ServiceChannelType>(ServiceChannelTypeEnum.Phone.ToString())) { ValidateAreaInformations(); NotEmptyList("languages", x => x.Languages); if (!NotEmptyListFunc("phoneNumbers", x => x.Phones.Where(y => y.Phone?.LocalizationId == entityLanguageId))) { ValidateAllPhones(entityLanguageId); } } else if (entity.TypeId == typesCache.Get <ServiceChannelType>(ServiceChannelTypeEnum.ServiceLocation.ToString()) && entity.ServiceLocationChannels.Any()) { ValidateAreaInformations(); NotEmptyList("languages", x => x.Languages); ValidatePhonesByPhoneType(entityLanguageId); ValidatePhonesByFaxType(entityLanguageId); ValidateWebpages(entityLanguageId); CheckEntityWithMergeResult(entity.ServiceLocationChannels.First()); } } return(validationMessagesDictionary); }