Пример #1
0
        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);
        }
Пример #2
0
        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);
        }