예제 #1
0
        public string ImportSemesterJSON(Guid semId, Guid orgId, string formatId)
        {
            var db = new TimeTableDbContext();

            var tempDir = Path.GetTempPath();

            var semester = db.Semesters.SingleOrDefault(s => s.Id == semId);
            var org      = db.Organisers.SingleOrDefault(o => o.Id == orgId);

            if (semester != null && org != null)
            {
                tempDir = Path.Combine(tempDir, semester.Name);
                tempDir = Path.Combine(tempDir, org.ShortName);
            }


            var msg   = "Sammle Daten";
            var perc1 = 0;

            Clients.Caller.updateProgress(msg, perc1);

            if (semester == null)
            {
                msg   = "Semester existiert nicht";
                perc1 = 100;

                Clients.Caller.updateProgress(msg, perc1);
                return(String.Empty);
            }

            if (!Directory.Exists(tempDir))
            {
                msg   = string.Format("Verzeichnis für {0} existiert nicht", semester.Name);
                perc1 = 100;
                Clients.Caller.updateProgress(msg, perc1);
                return(String.Empty);
            }

            DataServices.IO.Json.FileReader reader = new DataServices.IO.Json.FileReader();

            try
            {
                reader.ReadFiles(tempDir);
            }
            catch (Exception ex)
            {
                msg   = string.Format("FEHLER bei Datei einlesen: {0}", ex.Message);
                perc1 = 100;
                Clients.Caller.updateProgress(msg, perc1);
                return(String.Empty);
            }



            // fehler hier ignorieren => muss noch an anderer Stelle besser gelöst werden
            // Annahme: Fehler sind dem Anwender bekannt, da vorher ein Check durchgeführt wurde
            // daher können die Checks oben auch entfallen
            var importer = new DataServices.IO.Json.SemesterImport(reader.Context, semId, orgId);

            importer.CheckFaculty();

            var n      = reader.Context.ValidCourses.Count;
            var i      = 0;
            var errLog = "";

            foreach (var k in reader.Context.ValidCourses)
            {
                var course = db.Activities.FirstOrDefault(x =>
                                                          x.ExternalSource.Equals(formatId) &&
                                                          x.ExternalId.Equals(k.CourseId) &&
                                                          x.Organiser.Id == org.Id);
                try
                {
                    if (course != null)
                    {
                        if (course is Course)
                        {
                            msg = importer.UpdateCourse(course as Course, k);
                        }
                    }
                    else
                    {
                        msg = importer.ImportActivity(k);
                    }
                }
                catch (Exception e)
                {
                    msg     = "FEHLER bei " + k.ShortName;
                    errLog += k.ShortName + ": " + e.Message;
                    if (e.InnerException != null)
                    {
                        errLog += " Inner: " + e.InnerException.Message;
                        if (e.InnerException.InnerException != null)
                        {
                            errLog += " InnerInner: " + e.InnerException.InnerException.Message;
                        }
                    }
                }
                i++;

                perc1 = (i * 100) / n;

                Clients.Caller.updateProgress(msg, perc1);
            }

            msg   = "Alle Kurse importiert";
            perc1 = 100;
            Clients.Caller.updateProgress(msg, perc1);


            // Jetzt noch die Lotterien
            msg   = "Importie Lotterien";
            perc1 = 0;
            Clients.Caller.updateProgress(msg, perc1);


            if (reader.Context.Model.Lotteries != null)
            {
                n = reader.Context.Model.Lotteries.Count;
                i = 0;

                foreach (var k in reader.Context.Model.Lotteries)
                {
                    msg = importer.ImportLottery(k);
                    i++;

                    perc1 = (i * 100) / n;

                    Clients.Caller.updateProgress(msg, perc1);
                }
            }

            msg = "Alle Kurse und Lotterien importiert. " + errLog;



            perc1 = 100;
            Clients.Caller.updateProgress(msg, perc1);


            string tmpFileName = "Import_" + semester.Name + "_" + org.ShortName + "_" + DateTime.Now.ToString("yyyyMMdd_hhmmss");

            var path = Path.Combine(Path.GetTempPath(), tmpFileName);

            var html = importer.GetReport();

            File.WriteAllText(path, html, Encoding.UTF8);

            return(tmpFileName);
        }
예제 #2
0
        public ActionResult Upload(SemesterImportModel model)
        {
            string tempDir = GetTempPath(model.OrganiserId, model.SemesterId);

            // Speichern der Config-Dateien
            if (model.AttachmentDays != null)
            {
                model.AttachmentDays.SaveAs(Path.Combine(tempDir, "import.json"));
            }

            BaseImportContext ctx = null;

            if (model.FormatId.Equals("CIE"))
            {
                // Dateien prüfen
                var reader = new DataServices.IO.Cie.FileReader();
                reader.ReadFiles(tempDir);
                var importer = new DataServices.IO.Cie.SemesterImport(reader.Context, model.SemesterId);

                // Die Fakultät muss existieren
                importer.CheckFaculty();

                // Räume sollten existieren => Warnung
                // Zuordnungen zu Räumen sollten existieren => Warnung
                importer.CheckRooms();

                // Dozenten sollten existieren => Warnung
                importer.CheckLecturers();

                reader.Context.AddErrorMessage("Zusammenfassung", string.Format("Von {0} Kursen werden {1} importiert",
                                                                                reader.Context.Model.Courses.Count, reader.Context.ValidCourses.Count), false);

                ctx = reader.Context;
            }
            else
            {
                // Dateien prüfen
                var reader = new DataServices.IO.Json.FileReader();
                reader.ReadFiles(tempDir);
                var importer = new DataServices.IO.Json.SemesterImport(reader.Context, model.SemesterId, model.OrganiserId);

                // Die Fakultät muss existieren
                importer.CheckFaculty();

                // Räume sollten existieren => Warnung
                // Zuordnungen zu Räumen sollten existieren => Warnung
                importer.CheckRooms();

                // Dozenten sollten existieren => Warnung
                importer.CheckLecturers();

                reader.Context.AddErrorMessage("Zusammenfassung", string.Format("Von {0} Kursen werden {1} importiert",
                                                                                reader.Context.Model.Courses.Count, reader.Context.ValidCourses.Count), false);

                ctx = reader.Context;
            }

            model.Context   = ctx;
            model.Organiser = GetMyOrganisation();
            model.Semester  = SemesterService.GetSemester(model.SemesterId);


            return(View(model));
        }