Exemplo n.º 1
0
 public ActionResult Create(ScientificPublishing model)
 {
     using (ApplicationDbContext db = new ApplicationDbContext())
     {
         model.UserId = user.Id;
         db.ScientificPublishings.Add(model);
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
 }
Exemplo n.º 2
0
        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);
            }
        }