private static void AddCitation(CitationUniSofiaContext db) { var sequence = db.Citations.Count() + 1; var citType = db.CitationTypes.FirstOrDefault(); var author = db.Authors.FirstOrDefault(); var institution = db.Institutions.FirstOrDefault(); var publication = db.Publications.FirstOrDefault(); var citation = new Citation { Sequence = sequence, Name = "Българско наказателно-процесуално право : Т. 2", Year = "1937", Detail = "София : Печ. Художник", Pages = "с. 434", CitationTypeId = citType.Id, CitationType = citType, AuthorId = author.Id, Author = author, InstitutionId = institution.Id, Institution = institution }; var publCitation = new PublicationCitation { Publication = publication, Citation = citation }; citation.PublicationsCitations.Add(publCitation); db.Citations.Add(citation); db.SaveChanges(); }
//Other reference of same author(s)/editor(s)/organization(s) cited BEFORE public bool IsTemplateForReference(ConditionalTemplate template, Citation citation) { var testEqualityBy = PersonIdentityTest.ByInternalID; //adjust here to your needs //e.g. PersonIdentityTest.ByLastNameFirstName //e.g. PersonIdentityText.ByFullName //e.g. PersonIdentityTest.ByInternalID <- recommended for most cases bool considerNoBibInBibliographyCitations = false; bool considerNoBibInInTextCitations = false; bool considerNoBibInFootnoteCitations = false; if (citation == null) { return(false); } CitationManager citationManager = citation.CitationManager; if (citationManager == null) { return(false); } Reference currentReference = citation.Reference; if (currentReference == null) { return(false); } IEnumerable <Person> currentPersons = currentReference.AuthorsOrEditorsOrOrganizations; if (currentPersons == null || currentPersons.Count() == 0) { return(false); } IEnumerable <PublicationCitation> allCitations = null; PublicationCitation currentPublicationCitation = citation as PublicationCitation; if (currentPublicationCitation == null) { return(false); } #region InTextCitations InTextCitation currentInTextCitation = citation as InTextCitation; if (currentInTextCitation != null) { if (currentInTextCitation.BibOnly) { return(false); } allCitations = considerNoBibInInTextCitations ? citationManager.InTextCitations.Where(item => !item.BibOnly).Cast <PublicationCitation>() : citationManager.InTextCitations.Where(item => !item.BibOnly && item.CorrespondingBibliographyCitation != null && !item.CorrespondingBibliographyCitation.NoBib.GetValueOrDefault(false)); } #endregion #region FootnoteCitations if (allCitations == null) { FootnoteCitation currentFootnoteCitation = citation as FootnoteCitation; if (currentFootnoteCitation != null) { if (currentFootnoteCitation.BibOnly) { return(false); } allCitations = considerNoBibInFootnoteCitations ? citationManager.FootnoteCitations.Where(item => !item.BibOnly).Cast <PublicationCitation>() : citationManager.FootnoteCitations.Where(item => !item.BibOnly && item.CorrespondingBibliographyCitation != null && !item.CorrespondingBibliographyCitation.NoBib.GetValueOrDefault(false)); } } #endregion #region BibliographyCitations if (allCitations == null) { BibliographyCitation currentBibliographyCitation = citation as BibliographyCitation; if (currentBibliographyCitation.NoBib.GetValueOrDefault(false)) { return(false); } if (currentBibliographyCitation != null) { allCitations = citationManager.BibliographyCitations.Where(item => !item.NoBib.GetValueOrDefault(false)).Cast <PublicationCitation>(); } } #endregion IEnumerable <string> currentIdentifiers = GetPersonIdentifiers(currentPersons, testEqualityBy); foreach (PublicationCitation otherPublicationCitation in allCitations) { if (otherPublicationCitation == null) { continue; } if (otherPublicationCitation == currentPublicationCitation) { break; } var otherReference = otherPublicationCitation.Reference; if (otherReference == null) { continue; } if (otherReference == currentReference) { continue; } var otherPersons = otherReference.AuthorsOrEditorsOrOrganizations; if (otherPersons == null || otherPersons.Count() == 0) { continue; } var otherIdentifiers = GetPersonIdentifiers(otherPersons, testEqualityBy); if (testEqualityBy == PersonIdentityTest.ByInternalID) { //object identity if (otherPersons.SequenceEqual(currentPersons)) { return(true); } } else { if (otherIdentifiers.SequenceEqual(currentIdentifiers)) { return(true); } } } return(false); }