private void CreateOrUpdateReport(ReportViewModel reportViewModel, int stepIndex)
        {
            var allPublications = db.Publication.ToList();

            if (reportViewModel.ID == null && !db.Reports.Any(x => x.ID == reportViewModel.ID))
            {
                var reportToCreate = ReportConverter.ConvertToEntity(reportViewModel);
                reportToCreate.User = db.Users.Find(User.Identity.GetUserId());
                reportToCreate.ThemeOfScientificWork      = db.ThemeOfScientificWork.Where(x => x.ID == reportViewModel.ThemeOfScientificWorkId).FirstOrDefault();
                reportToCreate.PrintedPublication         = allPublications.Where(x => reportViewModel.PrintedPublication.Any(y => y.Id == x.ID && y.Checked)).ToList();
                reportToCreate.RecomendedPublication      = allPublications.Where(x => reportViewModel.RecomendedPublication.Any(y => y.Id == x.ID && y.Checked)).ToList();
                reportToCreate.AcceptedToPrintPublication = allPublications.Where(x => reportViewModel.AcceptedToPrintPublication.Any(y => y.Id == x.ID && y.Checked)).ToList();
                db.Reports.Add(reportToCreate);
                db.SaveChanges();
            }
            else
            {
                var report = db.Reports.Find(reportViewModel.ID);
                switch (stepIndex)
                {
                case 0:
                    report.PrintedPublication         = allPublications.Where(x => reportViewModel.PrintedPublication.Any(y => y.Id == x.ID && y.Checked)).ToList();
                    report.RecomendedPublication      = allPublications.Where(x => reportViewModel.RecomendedPublication.Any(y => y.Id == x.ID && y.Checked)).ToList();
                    report.AcceptedToPrintPublication = allPublications.Where(x => reportViewModel.AcceptedToPrintPublication.Any(y => y.Id == x.ID && y.Checked)).ToList();
                    break;

                case 1:
                    report.ThemeOfScientificWork            = db.ThemeOfScientificWork.Where(x => x.ID == reportViewModel.ThemeOfScientificWorkId).FirstOrDefault();
                    report.ThemeOfScientificWorkDescription = reportViewModel.ThemeOfScientificWorkDescription;
                    break;

                case 2:
                    report.MembershipInCouncils = reportViewModel.MembershipInCouncils;
                    report.Other = reportViewModel.Other;
                    report.ParticipationInGrands         = reportViewModel.ParticipationInGrands;
                    report.PatentForInevention           = reportViewModel.PatentForInevention;
                    report.ApplicationForInevention      = reportViewModel.ApplicationForInevention;
                    report.ReviewForTheses               = reportViewModel.ReviewForTheses;
                    report.ScientificControlDoctorsWork  = reportViewModel.ScientificControlDoctorsWork;
                    report.ScientificControlStudentsWork = reportViewModel.ScientificControlStudentsWork;
                    report.ScientificTrainings           = reportViewModel.ScientificTrainings;
                    break;

                case 3:
                    report.Date     = reportViewModel.Date;
                    report.Protocol = reportViewModel.Protocol;
                    break;

                default:
                    return;
                }
                db.SaveChanges();
            }
        }
        private void CreateOrUpdateReport(CathedraReportViewModel reportViewModel, int stepIndex)
        {
            var allPublications = db.Publication.ToList();

            if (reportViewModel.ID == null && !db.Reports.Any(x => x.ID == reportViewModel.ID))
            {
                var reportToCreate = ReportConverter.ConvertToEntity(reportViewModel);
                reportToCreate.User = db.Users.Find(User.Identity.GetUserId());

                reportToCreate.BudgetTheme = db.ThemeOfScientificWork.Where(x => x.ID == reportViewModel.BudgetThemeId).FirstOrDefault();
                if (reportViewModel.PrintedPublicationBudgetTheme != null)
                {
                    reportToCreate.PrintedPublicationBudgetTheme = allPublications
                                                                   .Where(x => reportViewModel.PrintedPublicationBudgetTheme.Any(y => y.Id == x.ID && y.Checked)).ToList();
                }

                db.CathedraReport.Add(reportToCreate);
                db.SaveChanges();
            }
            else
            {
                var report = db.CathedraReport.Find(reportViewModel.ID);
                switch (stepIndex)
                {
                case 0:
                    report.BudgetTheme = db.ThemeOfScientificWork.Where(x => x.ID == reportViewModel.BudgetThemeId).FirstOrDefault();
                    if (reportViewModel.PrintedPublicationBudgetTheme != null)
                    {
                        report.PrintedPublicationBudgetTheme = allPublications
                                                               .Where(x => reportViewModel.PrintedPublicationBudgetTheme.Any(y => y.Id == x.ID && y.Checked)).ToList();
                    }
                    report.AllDescriptionBudgetTheme = reportViewModel.AllDescriptionBudgetTheme;
                    report.CVBudgetTheme             = reportViewModel.CVBudgetTheme;
                    report.ApplicationAndPatentsOnInventionBudgetTheme = reportViewModel.ApplicationAndPatentsOnInventionBudgetTheme;
                    report.OtherBudgetTheme = reportViewModel.OtherBudgetTheme;
                    report.DefensesOfCoworkersBudgetTheme = reportViewModel.DefensesOfCoworkersBudgetTheme;
                    break;

                case 1:
                    report.ThemeInWorkTime = db.ThemeOfScientificWork.Where(x => x.ID == reportViewModel.ThemeInWorkTimeId).FirstOrDefault();
                    if (reportViewModel.PrintedPublicationThemeInWorkTime != null)
                    {
                        report.PrintedPublicationThemeInWorkTime = allPublications
                                                                   .Where(x => reportViewModel.PrintedPublicationThemeInWorkTime.Any(y => y.Id == x.ID && y.Checked)).ToList();
                    }
                    report.AllDescriptionThemeInWorkTime = reportViewModel.AllDescriptionThemeInWorkTime;
                    report.CVThemeInWorkTime             = reportViewModel.CVThemeInWorkTime;
                    report.ApplicationAndPatentsOnInventionThemeInWorkTime = reportViewModel.ApplicationAndPatentsOnInventionThemeInWorkTime;
                    report.OtherThemeInWorkTime = reportViewModel.OtherThemeInWorkTime;
                    report.DefensesOfCoworkersThemeInWorkTime = reportViewModel.DefensesOfCoworkersThemeInWorkTime;
                    break;

                case 2:
                    report.HospDohovirTheme = db.ThemeOfScientificWork.Where(x => x.ID == reportViewModel.HospDohovirThemeId).FirstOrDefault();
                    if (reportViewModel.PrintedPublicationHospDohovirTheme != null)
                    {
                        report.PrintedPublicationHospDohovirTheme = allPublications
                                                                    .Where(x => reportViewModel.PrintedPublicationHospDohovirTheme.Any(y => y.Id == x.ID && y.Checked)).ToList();
                    }
                    report.AllDescriptionHospDohovirTheme = reportViewModel.AllDescriptionHospDohovirTheme;
                    report.CVHospDohovirTheme             = reportViewModel.CVHospDohovirTheme;
                    report.ApplicationAndPatentsOnInventionHospDohovirTheme = reportViewModel.ApplicationAndPatentsOnInventionHospDohovirTheme;
                    report.OtherHospDohovirTheme = reportViewModel.OtherHospDohovirTheme;
                    report.DefensesOfCoworkersHospDohovirTheme = reportViewModel.DefensesOfCoworkersHospDohovirTheme;
                    break;

                case 3:
                    report.AchivementSchool                            = reportViewModel.AchivementSchool;
                    report.OtherFormsOfScientificWork                  = reportViewModel.OtherFormsOfScientificWork;
                    report.CooperationWithAcadamyOfScience             = reportViewModel.CooperationWithAcadamyOfScience;
                    report.CooperationWithForeignScientificInstitution = reportViewModel.CooperationWithForeignScientificInstitution;
                    report.StudentsWorks           = reportViewModel.StudentsWorks;
                    report.ConferencesInUniversity = reportViewModel.ConferencesInUniversity;
                    report.ApplicationOnInvention  = reportViewModel.ApplicationOnInvention;
                    report.Patents   = reportViewModel.Patents;
                    report.Materials = reportViewModel.Materials;
                    report.PropositionForNewForms = reportViewModel.PropositionForNewForms;
                    break;

                case 4:
                    report.Date     = reportViewModel.Date;
                    report.Protocol = reportViewModel.Protocol;
                    break;

                default:
                    return;
                }
                db.SaveChanges();
            }
        }