Created
May 25, 2017 12:56
-
-
Save jackinf/f4fb7d5997889694a008626ba0e4bec8 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using ETIS.Core.Documents; | |
using ETIS.Core.Documents.Classifiers; | |
using ETIS.Core.Extensions; | |
using ETIS.Core.Indexes.DocumentSearchIndexes; | |
using ETIS.RavenBundle; | |
using Lucene.Net.Analysis; | |
using Raven.Abstractions.Indexing; | |
using Raven.Client; | |
using Raven.Client.Indexes; | |
using Raven.Client.Linq; | |
using ETIS.Core.Documents.Reviews; | |
using ETIS.Core.Indexes.DocumentSearchIndexes.InfoInterfaces; | |
using ETIS.Core.Views; | |
namespace ETIS.Core.Indexes.AcceptanceDocumentSearchIndexes.Applications | |
{ | |
/// <summary> | |
/// Taotluste otsingu peaindeks | |
/// </summary> | |
public class ApplicationSearchIndex : AbstractMultiMapIndexCreationTask<ApplicationSearchIndex.Info> | |
{ | |
public static string StaticIndexName = string.Format("ETIS/{0}", typeof (ApplicationSearchIndex).Name); | |
public ApplicationSearchIndex() | |
{ | |
AddMapForAll<ApplicationBaseDocument>(docs => from doc in docs | |
let financeRound = LoadDocument<FinanceRoundView>(doc.FinanceRound.DocumentId + "/view") | |
let programme = LoadDocument<ProgrammeView>(financeRound.Programme.DocumentId + "/view") | |
let workflow = LoadDocument<WorkflowDocument>(doc.Workflow.DocumentId) | |
let review = LoadDocument<ReviewDocument>(doc.Review.DocumentId) | |
let workflowConfirmers = workflow != null ? workflow.ConfirmerInfos.Where(x => x.Confirmer != null).Select(c => LoadDocument<PersonView>(c.Confirmer.DocumentId + "/view")) : null | |
let docInstitution = LoadDocument<InstitutionView>(doc.Institution.DocumentId + "/view") | |
let frascatis = doc.ResearchAreas.Select(r => r.AreaOfStudyFrascati.View).Select(r => new {r.Name, r.NameEng, r.Code}) | |
let cercses = doc.ResearchAreas.Select(r => r.AreaOfStudyCercs.View).Select(r => new {r.Name, r.NameEng, r.Code}) | |
let reasearchAreas = doc.ResearchAreas.Select(r => r.AreaOfStudy.View).Select(r => new {r.Name, r.NameEng, r.Code}) | |
let aosChildren = doc.ResearchAreas.Select(r => r.AreaOfStudyChild.View).Select(r => new {r.Name, r.NameEng, r.Code}) | |
let responsibleExecutor = doc.ResponsibleExecutor != null ? LoadDocument<PersonView>(doc.ResponsibleExecutor.DocumentId + "/view") : null | |
let roles = doc.AllExecutors.Select(x => x.RoleReference).Where(x => x != null && x.View != null).Select(x => new {x.Id, x.View}) | |
//let executorRoleId = roles.Any(r => r.View.Code == PersonRoleInProject.executor) ? roles.First(r => r.View.Code == PersonRoleInProject.executor).Id : Guid.Empty | |
//let mainRoleId = roles.Any(r => r.View.Code == PersonRoleInProject.main) ? roles.First(r => r.View.Code == PersonRoleInProject.main).Id : Guid.Empty | |
//let responsibleRoleId = roles.Any(r => r.View.Code == PersonRoleInProject.responsible) ? roles.First(r => r.View.Code == PersonRoleInProject.responsible).Id : Guid.Empty | |
let allExecutors = doc.AllExecutors.Select(x => new {Person = LoadDocument<PersonView>(x.Person.DocumentId + "/view") , RoleId = x.RoleReference.Id}) | |
let allExecutorDocs = allExecutors.Select(x => x.Person) | |
//let executors = allExecutors.Where(x => executorRoleId.ToString() == x.RoleId.ToString()).Select(x => x.Person) | |
//let mainExecutors = allExecutors.Where(x => mainRoleId.ToString() == x.RoleId.ToString()).Select(x => x.Person) | |
//let responsibleExecutors = allExecutors.Where(x => responsibleRoleId.ToString() == x.RoleId.ToString()).Select(x => x.Person) | |
let expertiseGroups = doc.Expertise != null && doc.Expertise.ExpertGroupPersons != null ? doc.Expertise.ExpertGroupPersons.Select(x => x.ExpertGroup) : null | |
where doc.FinanceRoundType == FinanceRoundType.Application || | |
doc.FinanceRoundType == FinanceRoundType.ContinuedApplication || doc.FinanceRoundType == FinanceRoundType.OverallApplication | |
select new Info | |
{ | |
IndexId = doc.Id.ToString(), | |
IsActive = doc.IsActive, | |
IsPublic = doc.IsPublic, | |
FinanceRoundId = doc.FinanceRound != null ? doc.FinanceRound.Id : Guid.Empty, | |
WorkflowDocumentId = doc.Workflow.DocumentId, | |
ProgrammeId = financeRound != null && financeRound.Programme != null ? financeRound.Programme.Id : Guid.Empty, | |
ProgrammeCode = programme.Code, | |
ProgrammeName = programme.Name, | |
Number = doc.Number, | |
ProjectId = doc.Project != null ? doc.Project.Id : Guid.Empty, | |
StartDate = doc.StartDate, | |
EndDate = doc.EndDate, | |
Title = doc.FullName, | |
FinanceRoundYear = financeRound != null ? financeRound.Year : 0, | |
ResponsibleExecutorId = doc.ResponsibleExecutor != null ? doc.ResponsibleExecutor.Id : Guid.Empty, | |
ResponsibleExecutorName = responsibleExecutor != null ? responsibleExecutor.Name : null, | |
ResponsibleExecutorUsername = responsibleExecutor != null ? responsibleExecutor.UserName : null, | |
FinanceRoundType = doc.FinanceRoundType, | |
StaticFinanceRoundType = doc.StaticFinanceRoundType, | |
InstitutionId = doc.Institution.Id.ToString(), | |
InstitutionNameEst = docInstitution.FullName, | |
InstitutionNameEng = docInstitution.FullNameEng, | |
InstitutionRegNo = docInstitution.BusinessRegNo, | |
InstitutionIdTree = docInstitution.FullPath, | |
ProcessStatus = doc.ProcessStatus, | |
ProcessStatusInt = (int) doc.ProcessStatus, | |
ConfirmationStatusUpdatedDateString = doc.ConfirmationStatusUpdatedDate.HasValue ? doc.ConfirmationStatusUpdatedDate.Value.ToString(DateTimeExtension.DatePattern) : "", | |
Confirmers = workflowConfirmers.Select(x => x.Name), | |
CandidatesAndConfirmersDisplay = // ReSharper disable once RedundantTypeArgumentsOfMethod | |
workflowConfirmers != null | |
? string.Join("; ", workflowConfirmers.Select(x => x.Name).ToList<string>()) | |
: null, | |
SearchWords = new[] | |
{ | |
doc.Id.ToString(), | |
doc.Number, | |
doc.Name, | |
doc.NameEng, | |
doc.Annotation, | |
doc.AnnotationEng, | |
docInstitution != null ? docInstitution.Name : "", | |
doc.ResponsibleExecutor != null && responsibleExecutor != null ? responsibleExecutor.Name : "" | |
}.Where(x => !string.IsNullOrWhiteSpace(x)).Distinct(), | |
PersonIds = doc.AllExecutors.Where(e => e.Person != null && e.RoleReference != null && e.RoleReference.View != null && e.RoleReference.View.Code != PersonRoleInProject.noaccess).Select(ex => ex.Person.Id), //removed search for people in "Juurdepääs" (Access), ETISII-5191 | |
PersonIdCodes = allExecutorDocs != null ? allExecutorDocs.Select(ex => ex.IDCode) : null, | |
PersonNames = allExecutorDocs != null ? allExecutorDocs.Select(ex => ex.Name) : null, | |
PersonRoleIds = roles != null ? roles.Select(ex => ex.Id) : null, | |
PersonRoleNames = roles != null ? roles.Select(ex => ex.View.Name) : null, | |
ResearchAreaEtisCodes = reasearchAreas.Select(r => r.Code), | |
ResearchAreaEtisNames = reasearchAreas.Select(r => r.Name), | |
ResearchAreaEtisNamesTokenized = reasearchAreas.Select(r => r.Name), | |
ResearchAreaEtisNamesEng = reasearchAreas.Select(r => r.NameEng), | |
ResearchAreaEtisNamesEngTokenized = reasearchAreas.Select(r => r.NameEng), | |
ResearchAreaCercsCodes = cercses.Select(r => r.Code), | |
ResearchAreaCercsNames = cercses.Select(r => r.Name), | |
ResearchAreaCercsNamesTokenized = cercses.Select(r => r.Name), | |
ResearchAreaCercsNamesEngTokenized = cercses.Select(r => r.NameEng), | |
ResearchAreaFrascatiCodes = frascatis.Select(r => r.Code), | |
ResearchAreaFrascatiNames = frascatis.Select(r => r.Name), | |
ResearchAreaFrascatiNamesTokenized = frascatis.Select(r => r.Name), | |
ResearchAreaFrascatiNamesEngTokenized = frascatis.Select(r => r.NameEng), | |
ResearchAreaChildCodes = aosChildren.Select(r => r.Code), | |
ResearchAreaChildNames = aosChildren.Select(r => r.Name), | |
ResearchAreaChildNamesTokenized = aosChildren.Select(r => r.Name), | |
ResearchAreaChildNamesEng = aosChildren.Select(r => r.NameEng), | |
ResearchAreaChildNamesEngTokenized = aosChildren.Select(r => r.NameEng), | |
SubmissionDateTime = doc.DatePresented, | |
// ReSharper disable once ConditionIsAlwaysTrueOrFalse - baasis on nullid siin kohati | |
ProjectStartYear = doc.ProjectStartYear != null ? doc.ProjectStartYear : 0, | |
ProjectEndYear = doc.ProjectEndYear, | |
Name = doc.Name, | |
NameTokenized = doc.Name, | |
NameEng = doc.NameEng, | |
NameEngTokenized = doc.NameEng, | |
HasReviewsSubmitted = review != null && review.HasReviewsSubmitted, | |
StartProject = ((bool?)doc.SendToMyFirstGrandCompetition != null && doc.SendToMyFirstGrandCompetition), | |
ExpertGroupNumbersDisplay = expertiseGroups != null ? | |
string.Join("; ", expertiseGroups.Where(x => x.View != null && !string.IsNullOrWhiteSpace(x.View.Number)) | |
.Select(x => x.View.Number).Distinct().ToList<string>()) : | |
null | |
}); | |
Index(x => x.ResponsibleExecutorId, FieldIndexing.NotAnalyzed); | |
Analyzers.Add(x => x.NameTokenized, typeof (SimpleAnalyzer).AssemblyQualifiedName); | |
Analyzers.Add(x => x.NameEngTokenized, typeof (SimpleAnalyzer).AssemblyQualifiedName); | |
Analyzers.Add(x => x.ResearchAreaCercsNamesTokenized, typeof (SimpleAnalyzer).AssemblyQualifiedName); | |
Analyzers.Add(x => x.ResearchAreaCercsNamesEngTokenized, typeof (SimpleAnalyzer).AssemblyQualifiedName); | |
Analyzers.Add(x => x.ResearchAreaEtisNamesTokenized, typeof (SimpleAnalyzer).AssemblyQualifiedName); | |
Analyzers.Add(x => x.ResearchAreaEtisNamesEngTokenized, typeof (SimpleAnalyzer).AssemblyQualifiedName); | |
Analyzers.Add(x => x.ResearchAreaFrascatiNamesTokenized, typeof (SimpleAnalyzer).AssemblyQualifiedName); | |
Analyzers.Add(x => x.ResearchAreaFrascatiNamesEngTokenized, typeof (SimpleAnalyzer).AssemblyQualifiedName); | |
Analyzers.Add(x => x.ResearchAreaChildNamesTokenized, typeof (SimpleAnalyzer).AssemblyQualifiedName); | |
Analyzers.Add(x => x.ResearchAreaChildNamesEngTokenized, typeof (SimpleAnalyzer).AssemblyQualifiedName); | |
Index(x => x.ExpertGroupNumbersDisplay, FieldIndexing.NotAnalyzed); | |
Store(x => x.ExpertGroupNumbersDisplay, FieldStorage.Yes); | |
} | |
public override string IndexName | |
{ | |
get { return StaticIndexName; } | |
} | |
/// <summary> | |
/// Lae query tulemustega ka seotud dokumendid | |
/// </summary> | |
/// <param name="session"></param> | |
/// <returns></returns> | |
public IRavenQueryable<Info> BuildQueryWithDependencies(IDocumentSession session) | |
{ | |
var q = BuildQuery(session).Customize( | |
x => | |
{ | |
x.Include<ApplicationBaseDocument>(d => d.Institution.DocumentId); | |
x.Include<ApplicationBaseDocument>(d => d.Workflow.DocumentId); | |
x.Include<ApplicationBaseDocument>(d => d.ResponsibleExecutor.DocumentId); | |
x.Include<ApplicationBaseDocument>(p => p.Programme.DocumentId); | |
x.Include<ApplicationBaseDocument>(p => p.FinanceRound.DocumentId); | |
x.Include<ApplicationBaseDocument>(p => p.AllExecutors.Select(e => e.Person.DocumentId)); | |
} | |
); | |
return q; | |
} | |
public IRavenQueryable<Info> BuildQuery(IDocumentSession session) | |
{ | |
return session.Query<Info, ApplicationSearchIndex>(); | |
} | |
/// <summary> | |
/// Indeksisse salvestatava info wrapper | |
/// </summary> | |
public class Info : ExecutorsDocumentInfo, IProgrammeSearchableInfo // ProcessDocumentInfo | |
{ | |
/// <summary> | |
/// Taotluse programmi Id | |
/// </summary> | |
public Guid ProgrammeId { get; set; } | |
/// <summary> | |
/// Taotluse programmi kood | |
/// </summary> | |
public string ProgrammeCode { get; set; } | |
/// <summary> | |
/// Taotluse programmi nimi | |
/// </summary> | |
public string ProgrammeName { get; set; } | |
/// <summary> | |
/// Taotluse programmi number | |
/// </summary> | |
public string Number { get; set; } | |
/// <summary> | |
/// Taotluse pealkiri | |
/// </summary> | |
public string Title { get; set; } | |
/// <summary> | |
/// Rahastusvooru aasta | |
/// </summary> | |
public int? FinanceRoundYear { get; set; } | |
/// <summary> | |
/// Taotluse tüüp | |
/// </summary> | |
public FinanceRoundType FinanceRoundType { get; set; } | |
/// <summary> | |
/// Rahastusvooru staatil | |
/// </summary> | |
public StaticFinanceRoundType StaticFinanceRoundType { get; set; } | |
/// <summary> | |
/// Asutuse id stringina | |
/// </summary> | |
public string InstitutionId { get; set; } | |
/// <summary> | |
/// Asutuse eestikeelne nimi | |
/// </summary> | |
public string InstitutionNameEst { get; set; } | |
/// <summary> | |
/// Asutuse eestikeelne nimi | |
/// </summary> | |
public string InstitutionNameEng { get; set; } | |
/// <summary> | |
/// Tegemist on Stardiprojektiga | |
/// </summary> | |
public bool StartProject { get; set; } | |
public Guid ProjectId { get; set; } | |
public DateTime? StartDate { get; set; } | |
public DateTime? EndDate { get; set; } | |
public string ConfirmationStatusUpdatedDateString { get; set; } | |
public string InstitutionIdTree { get; set; } | |
/// <summary> | |
/// Taotlusega seotud isikud - täitjad ja isikud kellele on määratud õigus Juurdepääsu sakil | |
/// AllExecutors + AccessList | |
/// </summary> | |
public IEnumerable<Guid> PersonIds { get; set; } | |
public IEnumerable<string> PersonIdCodes { get; set; } | |
public IEnumerable<string> PersonNames { get; set; } | |
public string InstitutionRegNo { get; set; } | |
public IEnumerable<Guid> PersonRoleIds { get; set; } | |
public IEnumerable<string> PersonRoleNames { get; set; } | |
public string ApplicationType { get; set; } | |
public DateTime SubmissionDateTime { get; set; } | |
public IEnumerable<string> ResearchAreaEtisCodes { get; set; } | |
public IEnumerable<string> ResearchAreaEtisNames { get; set; } | |
public IEnumerable<string> ResearchAreaEtisNamesTokenized { get; set; } | |
public IEnumerable<string> ResearchAreaEtisNamesEng { get; set; } | |
public IEnumerable<string> ResearchAreaEtisNamesEngTokenized { get; set; } | |
public IEnumerable<string> ResearchAreaCercsCodes { get; set; } | |
public IEnumerable<string> ResearchAreaCercsNames { get; set; } | |
public IEnumerable<string> ResearchAreaCercsNamesTokenized { get; set; } | |
public IEnumerable<string> ResearchAreaCercsNamesEngTokenized { get; set; } | |
public IEnumerable<string> ResearchAreaFrascatiCodes { get; set; } | |
public IEnumerable<string> ResearchAreaFrascatiNames { get; set; } | |
public IEnumerable<string> ResearchAreaFrascatiNamesTokenized { get; set; } | |
public IEnumerable<string> ResearchAreaFrascatiNamesEngTokenized { get; set; } | |
public IEnumerable<string> ResearchAreaChildCodes { get; set; } | |
public IEnumerable<string> ResearchAreaChildNames { get; set; } | |
public IEnumerable<string> ResearchAreaChildNamesTokenized { get; set; } | |
public IEnumerable<string> ResearchAreaChildNamesEng { get; set; } | |
public IEnumerable<string> ResearchAreaChildNamesEngTokenized { get; set; } | |
public int ProjectStartYear { get; set; } | |
public int? ProjectEndYear { get; set; } | |
public string Name { get; set; } | |
public string NameTokenized { get; set; } | |
public string NameEng { get; set; } | |
public string NameEngTokenized { get; set; } | |
/// <summary> | |
/// Kas kõik retsensioonid on kinnitatud | |
/// </summary> | |
public bool HasReviewsSubmitted { get; set; } | |
/// <summary> | |
/// Ekseprtrühma numbrid | |
/// </summary> | |
public string ExpertGroupNumbersDisplay { get; set; } | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment