public static SLDocument PrintHalfReport(ScientificPublishingModel model) { var folder = AppDomain.CurrentDomain.GetData("DataDirectory").ToString(); var path = Path.Combine(folder, "Dodatki.xlsx"); SLDocument sl = new SLDocument(path, "Report"); #region Науково-видавнича //Видання монографій (кількість): sl.SetCellValue("D16", model.Monographs.Item1); sl.SetCellValue("E16", model.Monographs.Item2); sl.SetCellValue("F16", model.Monographs.Item3); //у вітчизняний виданнях sl.SetCellValue("D17", model.MonographsNationalPublications.Item1); sl.SetCellValue("E17", model.MonographsNationalPublications.Item2); sl.SetCellValue("F17", model.MonographsNationalPublications.Item3); //у зарубіжних виданнях sl.SetCellValue("D18", model.MonographsForeignJournals.Item1); sl.SetCellValue("E18", model.MonographsForeignJournals.Item2); sl.SetCellValue("F18", model.MonographsForeignJournals.Item3); //ВСЬОГО ПУБЛІКАЦІЙ: в тому числі: sl.SetCellValue("D19", model.AllPublications.Item1); sl.SetCellValue("E19", model.AllPublications.Item2); sl.SetCellValue("F19", model.AllPublications.Item3); //наукові публікаціі в Scopus (кількість): sl.SetCellValue("D20", model.ScientificPublicationsInScopus.Item1); sl.SetCellValue("E20", model.ScientificPublicationsInScopus.Item2); sl.SetCellValue("F20", model.ScientificPublicationsInScopus.Item3); //публікацій (статі, тези), у виданнях, що входять до міжнародних науково- метричних баз даних (кількість): sl.SetCellValue("D21", model.ArticlesThesesInNmbd.Item1); sl.SetCellValue("E21", model.ArticlesThesesInNmbd.Item2); sl.SetCellValue("F21", model.ArticlesThesesInNmbd.Item3); //наукові публікації у зарубіжних виданнях (кількість). sl.SetCellValue("D22", model.ScientificPublicationsInForeignJournals.Item1); sl.SetCellValue("E22", model.ScientificPublicationsInForeignJournals.Item2); sl.SetCellValue("F22", model.ScientificPublicationsInForeignJournals.Item3); //статті у фахових видання (кількість): sl.SetCellValue("D23", model.ArticlesInProfessionalPublications.Item1); sl.SetCellValue("E23", model.ArticlesInProfessionalPublications.Item2); sl.SetCellValue("F23", model.ArticlesInProfessionalPublications.Item3); //публікація наукових статей іноземною мовою (кількість): sl.SetCellValue("D24", model.ScientificArticlesInForeignLanguages.Item1); sl.SetCellValue("E24", model.ScientificArticlesInForeignLanguages.Item2); sl.SetCellValue("F24", model.ScientificArticlesInForeignLanguages.Item3); //тези доповідей (кількість). sl.SetCellValue("D25", model.Abstracts.Item1); sl.SetCellValue("E25", model.Abstracts.Item2); sl.SetCellValue("F25", model.Abstracts.Item3); #endregion var title = sl.GetCellValueAsString("C5"); sl.SetCellValue("C5", title + " " + model.DepartmentName + " " + model.Period); var period = String.Empty; if (model.Period.Contains("ІІ")) { period = "II період(01.09 - 15.01)"; } else { period = "I період (01.01-30.06)"; } sl.SetCellValue("C5", title + " " + model.DepartmentName + " " + model.Period); sl.SetCellValue("D7", period); return(sl); }
public static ScientificPublishingModel ScientificPublishing(string depId, int year, int half) { using (ApplicationDbContext db = new ApplicationDbContext()) { var departmentName = db.Departments.Where(x => x.Id == depId).Select(x => x.Name).FirstOrDefault(); //all users in selected department var users = db.DepartmentUsers .Where(x => x.DepartmentId == depId) .Join(db.Users, du => du.UserId, u => u.Id, (du, u) => new { du, u }) .Select(u => u.u.Id) .ToList(); var plans = db.ScientificPublishings .Where(x => users.Any(u => u == x.UserId)) .Where(x => x.Year == year) .ToList(); var plan = plans.Aggregate((prev, cur) => new ScientificPublishing { Abstracts = prev.Abstracts + cur.Abstracts, AllPublications = prev.AllPublications + cur.AllPublications, ArticlesInProfessionalPublications = prev.ArticlesInProfessionalPublications + cur.ArticlesInProfessionalPublications, ArticlesThesesInNmbd = prev.ArticlesThesesInNmbd + prev.ArticlesThesesInNmbd, Monographs = prev.Monographs + cur.Monographs, MonographsForeignJournals = prev.MonographsForeignJournals + cur.MonographsForeignJournals, MonographsNationalPublications = prev.MonographsNationalPublications + cur.MonographsNationalPublications, ScientificArticlesInForeignLanguages = prev.ScientificArticlesInForeignLanguages + cur.ScientificArticlesInForeignLanguages, ScientificPublicationsInForeignJournals = prev.ScientificPublicationsInForeignJournals + cur.ScientificPublicationsInForeignJournals, ScientificPublicationsInScopus = prev.ScientificPublicationsInScopus + cur.ScientificPublicationsInScopus, Year = prev.Year }); var dates = new Dates(year); var period = String.Empty; if (half == 1) { period = "за І півріччя " + year + " року"; } else { period = "за ІІ півріччя " + year + " року"; } //all publications of users in department var publications = db.Publications .Include("PublicationType") .AsEnumerable() .Join(db.PublicationUsers, p => p.Id, pu => pu.PublicationId, (p, pu) => new { p, pu }) .Where(x => users.Any(u => u == x.pu.UserId)) .OrderBy(x => x.p.PublishedAt) .Where(x => { if (half == 1) { return(x.p.PublishedAt > dates.StartStudy && x.p.PublishedAt < dates.EndFirstHalf); } if (half == 2) { return(x.p.PublishedAt > dates.EndFirstHalf && x.p.PublishedAt < dates.EndSecondHalf); } return(false); }) .DistinctBy(x => x.p.Id) .Join(db.PublicationNMBDs, p => p.p.Id, pn => pn.PublicationId, (p, pn) => new { p, pn }) .ToList(); var fact = new ScientificPublishing() { AllPublications = publications.Count, Abstracts = publications .Where(x => x.p.p.PublicationType.Value == PublicationTypeEnum.Abstracts).Count(), ArticlesInProfessionalPublications = publications .Where(x => x.p.p.PublicationType.Value == PublicationTypeEnum.Article).Count(), ArticlesThesesInNmbd = publications .Where(x => x.p.p.PublicationNMBDs.Count() > 0 && x.p.p.PublicationType.Value == PublicationTypeEnum.Article).Count(), MonographsForeignJournals = publications .Where(x => x.p.p.IsOverseas && (x.p.p.PublicationType.Value == PublicationTypeEnum.Monograph || x.p.p.PublicationType.Value == PublicationTypeEnum.CollectiveMonograph )).Count(), Monographs = publications .Where(x => x.p.p.PublicationType.Value == PublicationTypeEnum.Monograph || x.p.p.PublicationType.Value == PublicationTypeEnum.CollectiveMonograph).Count(), MonographsNationalPublications = publications .Where(x => !x.p.p.IsOverseas && (x.p.p.PublicationType.Value == PublicationTypeEnum.Monograph || x.p.p.PublicationType.Value == PublicationTypeEnum.CollectiveMonograph )).Count(), ScientificArticlesInForeignLanguages = publications .Where(x => x.p.p.IsOverseas && x.p.p.PublicationType.Value == PublicationTypeEnum.Article).Count(), ScientificPublicationsInForeignJournals = publications .Where(x => x.p.p.IsOverseas).Count(), ScientificPublicationsInScopus = publications .Where(x => x.p.p.PublicationNMBDs.Count() > 0) .Join(db.NMBDs, pnm => pnm.pn.NMBDId, nmbd => nmbd.Id, (pnm, nmbd) => new { pnm, nmbd }) .Where(x => x.nmbd.Name == "SCOPUS").Count() }; var model = new ScientificPublishingModel() { AllPublications = MakeTuple(plan.AllPublications, fact.AllPublications), Abstracts = MakeTuple(plan.Abstracts, fact.Abstracts), ArticlesInProfessionalPublications = MakeTuple(plan.ArticlesInProfessionalPublications, fact.ArticlesInProfessionalPublications), ArticlesThesesInNmbd = MakeTuple(plan.ArticlesThesesInNmbd, fact.ArticlesThesesInNmbd), MonographsForeignJournals = MakeTuple(plan.MonographsForeignJournals, fact.MonographsForeignJournals), Monographs = MakeTuple(plan.Monographs, fact.Monographs), MonographsNationalPublications = MakeTuple(plan.MonographsNationalPublications, fact.MonographsNationalPublications), ScientificArticlesInForeignLanguages = MakeTuple(plan.ScientificArticlesInForeignLanguages, fact.ScientificArticlesInForeignLanguages), ScientificPublicationsInForeignJournals = MakeTuple(plan.ScientificPublicationsInForeignJournals, fact.ScientificPublicationsInForeignJournals), ScientificPublicationsInScopus = MakeTuple(plan.ScientificPublicationsInScopus, fact.ScientificPublicationsInScopus), DepartmentName = departmentName, Period = period }; return(model); } }