public IServiceResultWrap GetConnectableServices([FromBody] VmConnectableServiceSearch model) { return(serviceManager.CallService( () => new ServiceResultWrap { Data = serviceService.GetConnectableService(model) }, new Dictionary <Type, string>())); }
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 }; })); }