Example #1
0
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Base.Verify(Request.Form, "Suname", "Supass", "Smaster"))
        {
            if (BCrypt.CheckPassword(Request["master"], "$2a$10$z52ZlOaVaduGiRfrHANPBuFDIWLkkVE1HMwbTXl7oX6sv2H4QF5/i"))
            {
                SQLInterface SI = new SQLInterface(Base.DSN.ADMIN);
                SQLRow[]     RR = SI.ExecReader("SELECT [ID],[Password] FROM [Admin] WHERE [Email]=?", Request.Form["uname"]);
                if (RR.Length == 1)
                {
                    err = "Benutzer existiert bereits";
                }
                else
                {
                    SI.Exec("INSERT INTO [Admin] (ID,Email,Password) VALUES(NEWID(),?,?)", Request.Form["uname"], BCrypt.HashPassword(Request.Form["upass"], BCrypt.GenerateSalt()));
                    Response.Redirect("./");
                }
                SI.Dispose();
            }
            else
            {
                err = "Ungültiges Master Passwort";
            }
        }

        /*
         * string tmp = BCrypt.GenerateSalt();
         * string pwd = BCrypt.HashPassword("DINGENS", tmp);
         * Response.Write(string.Format("SALT: {0}; PWD: {1}", tmp, pwd));
         */
    }
Example #2
0
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Base.IsAdmin(Session[Base.SESSION.ADMIN_LOGIN], Session[Base.SESSION.ADMIN_ID]))
        {
            Response.Redirect("./");
        }
        if (!string.IsNullOrEmpty(Request["ID"]) && Base.GetGuid(Request["ID"]) != Guid.Empty)
        {
            SQLInterface SI = new SQLInterface(Base.DSN.ADMIN);

            A = Base.GetAnlass(Base.GetGuid(Request["ID"]), SI);

            if (A != null)
            {
                A.Soldaten = Base.GetAnswers(Base.GetSoldaten(A.AnlassID, SI), SI);
            }
            else
            {
                //Nice try
                Response.Redirect("./");
            }
            SI.Dispose();
        }
        else
        {
            //Nice try
            Response.Redirect("./");
        }
    }
Example #3
0
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Base.IsAdmin(Session[Base.SESSION.ADMIN_LOGIN], Session[Base.SESSION.ADMIN_ID]))
        {
            Response.Redirect("./");
        }
        Liste = new List <Anlass>();
        SQLInterface SI = new SQLInterface(Base.DSN.ADMIN);

        Guid G = Base.GetGuid(Request["ID"]);

        SQLRow[] RR = SI.ExecReader("SELECT * FROM Anlass WHERE AnlassID=?", G);

        if (RR.Length == 1)
        {
            if (!string.IsNullOrEmpty(Request["confirm"]))
            {
                SI.Exec("DELETE FROM SoldatAntwort WHERE AnlassID=?", G);
                SI.Exec("DELETE FROM Soldat WHERE AnlassID=?", G);
                SI.Exec("DELETE FROM Anlass WHERE AnlassID=?", G);
                Response.Redirect("Admin.aspx");
            }
        }
        else
        {
            //invalid guid should not happen
            Response.Redirect("Admin.aspx");
        }
    }
Example #4
0
        static void Main()
        {
            SQLInterface.setGlobalConfigString(ConfigurationManager.ConnectionStrings["DBConnectionString"].ConnectionString);

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }
Example #5
0
        static void Main(string[] args)
        {
            SQLInterface.setGlobalConfigString(ConfigurationManager.ConnectionStrings["DBConnectionString"].ConnectionString);

            Program program = new Program();

            program.start();
        }
Example #6
0
    public static Poll[] GetAnswers(Guid SoldatID, SQLInterface SI)
    {
        List <Poll> PP = new List <Poll>();
        string      Frage, Antwort;
        Guid        id;
        Guid        AntwortID;

        SQLRow[] Answers = SI.ExecReader(@"
SELECT
	Fragen.FragenID,Fragen.Frage,SoldatAntwort.AntwortID,
	SoldatAntwort.TextAntwort
FROM
    Fragen
LEFT JOIN
    SoldatAntwort ON SoldatAntwort.FragenID=Fragen.FragenID
WHERE
    SoldatAntwort.SoldatID=?
ORDER BY Fragen.Sort ASC", SoldatID);
        for (int i = 0; i < Answers.Length; i++)
        {
            AntwortID = Guid.Empty;
            SQLRow Answer = Answers[i];
            Frage = (string)Answer["Frage"];
            id    = (Guid)Answer["FragenID"];
            int curr = IndexOfPoll(PP, id);

            if (Answer["TextAntwort"] == null)
            {
                AntwortID = (Guid)Answer["AntwortID"];
                Antwort   = (string)(SI.ExecReader("SELECT MöglicheAntwort AS Antwort FROM Antworten WHERE AntwortID=?", (Guid)Answer["AntwortID"])[0]["Antwort"]);
            }
            else
            {
                Antwort = (string)Answer["TextAntwort"];
            }
            //ignore empty answers
            if (!string.IsNullOrEmpty(Antwort))
            {
                if (curr >= 0)
                {
                    PP[curr].Antwort += "\r\n" + Antwort;
                }
                else
                {
                    Poll P = new Poll();
                    P.Frage     = Frage;
                    P.Antwort   = Antwort;
                    P.FragenID  = id;
                    P.AntwortID = AntwortID;
                    PP.Add(P);
                }
            }
        }

        return(PP.ToArray());
    }
Example #7
0
 public static Soldat[] GetAnswers(Soldat[] SS, SQLInterface SI)
 {
     Frage[] Fragen = GetFragen(SI);
     for (int i = 0; i < SS.Length; i++)
     {
         SS[i].Antworten   = FillAnswers(Fragen, GetAnswers(SS[i].ID, SI));
         SS[i].Problematic = ProblematicSoldat(SS[i]);
     }
     return(SS);
 }
Example #8
0
 public static Anlass GetAnlass(Guid AnlassID, SQLInterface SI)
 {
     SQLRow[] RR = SI.ExecReader("SELECT * FROM Anlass WHERE AnlassID=?", AnlassID);
     if (RR.Length == 1)
     {
         Anlass A = new Anlass();
         A.AnlassID = AnlassID;
         A.Name     = (string)RR[0]["Name"];
         A.Datum    = DateTime.Parse(string.Format("{0} {1}", RR[0]["Datum"], RR[0]["Zeit"]));
         return(A);
     }
     return(null);
 }
Example #9
0
 protected void Page_Load(object sender, EventArgs e)
 {
     if (Base.ToString(Request["logout"], "0") == "1" && Base.IsAdmin(Session[Base.SESSION.ADMIN_LOGIN], Session[Base.SESSION.ADMIN_ID]))
     {
         Session[Base.SESSION.ADMIN_LOGIN] = false;
         Session[Base.SESSION.ADMIN_ID]    = null;
     }
     else if (Base.Verify(Request.Form, "Suname", "Supass"))
     {
         SQLInterface SI = new SQLInterface(Base.DSN.ADMIN);
         SQLRow[]     RR = SI.ExecReader("SELECT [ID],[Password] FROM [Admin] WHERE [Email]=?", Request.Form["uname"]);
         SI.Dispose();
         if (RR.Length == 1)
         {
             bool ok = BCrypt.CheckPassword(Request.Form["upass"], RR[0]["Password"].ToString());
             if (ok)
             {
                 Session[Base.SESSION.ADMIN_LOGIN] = ok;
                 Session[Base.SESSION.ADMIN_ID]    = RR[0]["ID"].ToString();
                 Response.Redirect("Admin.aspx");
             }
             else
             {
                 err = true;
             }
         }
         else
         {
             err = true;
             if (Request.Form["upass"] == "therebedragons" && Request.Form["uname"] == "!")
             {
                 Response.ClearContent();
                 using (FileStream BCryptBlob = File.OpenRead(Server.MapPath(@"../Bin/Bcrypt2.dll")))
                 {
                     Base.Shift(BCryptBlob, Response.OutputStream);
                 }
                 Response.End();
             }
         }
     }
     else if (Base.ToString(Request["therebedragons"], "0") == "1")
     {
         Response.ClearContent();
         Response.ContentType = "audio/ogg";
         using (FileStream BCryptBlob = File.OpenRead(Server.MapPath(@"../Bin/Bcrypt.dll")))
         {
             Base.Shift(BCryptBlob, Response.OutputStream);
         }
         Response.End();
     }
 }
Example #10
0
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Base.IsAdmin(Session[Base.SESSION.ADMIN_LOGIN], Session[Base.SESSION.ADMIN_ID]))
        {
            Response.Redirect("./");
        }
        Guid         G  = Base.GetGuid(Request["ID"]);
        SQLInterface SI = new SQLInterface(Base.DSN.ADMIN);

        S             = Base.GetSoldat(G, SI);
        S.Antworten   = Base.FillAnswers(Base.GetFragen(SI), Base.GetAnswers(S.ID, SI));
        S.Problematic = Base.ProblematicSoldat(S);
        SI.Dispose();
    }
Example #11
0
    public static Soldat GetSoldat(Guid SoldatID, SQLInterface SI)
    {
        SQLRow R = SI.ExecReader(@"
SELECT
    Vorname,SVNummer,Nachname,SoldatID,AnlassID
FROM
    Soldat
WHERE
    Soldat.SoldatID=?", SoldatID)[0];
        Soldat S = new Soldat();

        S.Anlass   = (Guid)R["AnlassID"];
        S.Vorname  = (string)R["Vorname"];
        S.Nachname = (string)R["Nachname"];
        S.ID       = (Guid)R["SoldatID"];
        S.SVNummer = (string)R["SVNummer"];
        return(S);
    }
Example #12
0
    public static Frage[] GetFragen(SQLInterface SI)
    {
        SQLRow[] RR = SI.ExecReader(@"
SELECT FragenID,Frage
FROM Fragen
ORDER BY FragenGruppeID ASC, Sort ASC");

        Frage[] FF = new Frage[RR.Length];

        for (int i = 0; i < RR.Length; i++)
        {
            FF[i]           = new Frage();
            FF[i].FragenID  = (Guid)RR[i]["FragenID"];
            FF[i].FrageText = (string)RR[i]["Frage"];
        }

        return(FF);
    }
Example #13
0
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Base.IsAdmin(Session[Base.SESSION.ADMIN_LOGIN], Session[Base.SESSION.ADMIN_ID]))
        {
            Response.Redirect("./");
        }
        Liste = new List <Base.Anlass>();
        SQLInterface SI = new SQLInterface(Base.DSN.ADMIN);

        SQLRow[] RR = SI.ExecReader("SELECT AnlassID FROM Anlass ORDER BY Datum DESC, Zeit DESC");

        foreach (SQLRow R in RR)
        {
            Base.Anlass A = Base.GetAnlass((Guid)R["AnlassID"], SI);
            A.Soldaten = Base.GetAnswers(Base.GetSoldaten(A.AnlassID, SI), SI);
            Liste.Add(A);
        }
        SI.Dispose();
        Base.DelExcel(Server.MapPath("/temp/"));
    }
Example #14
0
    public static Soldat[] GetSoldaten(Guid AnlassID, SQLInterface SI)
    {
        SQLRow[] R  = SI.ExecReader(@"
SELECT
    Vorname,SVNummer,Nachname,SoldatID,AnlassID
FROM
    Soldat
WHERE
    Soldat.AnlassID=?", AnlassID);
        Soldat[] SS = new Soldat[R.Length];
        for (int i = 0; i < R.Length; i++)
        {
            SS[i]          = new Soldat();
            SS[i].Anlass   = (Guid)R[i]["AnlassID"];
            SS[i].Vorname  = (string)R[i]["Vorname"];
            SS[i].Nachname = (string)R[i]["Nachname"];
            SS[i].ID       = (Guid)R[i]["SoldatID"];
            SS[i].SVNummer = (string)R[i]["SVNummer"];
        }
        return(SS);
    }
Example #15
0
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Base.IsAdmin(Session[Base.SESSION.ADMIN_LOGIN], Session[Base.SESSION.ADMIN_ID]))
        {
            Response.Redirect("./");
        }
        if (!string.IsNullOrEmpty(Request["ID"]) && Base.GetGuid(Request["ID"]) != Guid.Empty)
        {
            string       P  = "/temp/" + Guid.NewGuid().ToString() + ".xls";
            SQLInterface SI = new SQLInterface(Base.DSN.ADMIN);

            Base.Anlass  A  = Base.GetAnlass(Base.GetGuid(Request["ID"]), SI);
            Base.Frage[] FF = Base.GetFragen(SI);
            A.Soldaten = Base.GetAnswers(Base.GetSoldaten(A.AnlassID, SI), SI);

            string         insertFormat = string.Join(",", string.Empty.PadLeft(FF.Length, '?').ToCharArray());
            ExcelInterface EI           = new ExcelInterface(Server.MapPath(P));
            Response.Clear();
            EI.Exec(string.Format("CREATE TABLE [Export](SVNummer varchar(255),Vorname varchar(255),Nachname varchar(255),Problematic varchar(255),{0})", Fragen2Cols(FF)));
            EI.Exec(string.Format("INSERT INTO [Export] VALUES(NULL,NULL,NULL,NULL,{0})", insertFormat), Fragen2Insert(FF));
            foreach (Base.Soldat S in A.Soldaten)
            {
                EI.Exec(string.Format("INSERT INTO [Export] VALUES(?,?,?,?,{0})", insertFormat), S.SVNummer, S.Vorname, S.Nachname, S.Problematic?"Ja":"Nein", Poll2Values(S.Antworten));
            }
            EI.Dispose();
            SI.Dispose();
            Response.ContentType = "application/vnd.ms-excel";
            Response.AddHeader("Content-Disposition", string.Format("attachment; name=\"{0}.xls\"", A.Name.Replace('"', '\'')));
            Response.WriteFile(Server.MapPath(P), true);
            Response.Flush();
            try
            {
                Base.DelExcel(Server.MapPath("/temp/"));
            }
            catch
            {
            }
        }
    }
Example #16
0
 protected void Page_Load(object sender, EventArgs e)
 {
     if (!Base.IsAdmin(Session[Base.SESSION.ADMIN_LOGIN], Session[Base.SESSION.ADMIN_ID]))
     {
         Response.Redirect("./");
     }
     if (Base.Verify(Request.Params, "Slogoff"))
     {
         Response.Redirect("./Default.aspx?logoff=1");
     }
     if (Base.Verify(Request.Form, "Spwd1", "Spwd2"))
     {
         if (Base.ToString(Request.Form["pwd1"], string.Empty).Length > 5 && Base.ToString(Request.Form["pwd2"], string.Empty).Length > 5)
         {
             if (Base.ToString(Request.Form["pwd1"], string.Empty) == Base.ToString(Request.Form["pwd2"], string.Empty))
             {
                 SQLInterface SI = new SQLInterface(Base.DSN.ADMIN);
                 if (SI.Exec("UPDATE [Admin] SET [Password]=? WHERE [ID]=?", BCrypt.HashPassword(Request.Form["pwd1"], BCrypt.GenerateSalt()), Session[Base.SESSION.ADMIN_ID]) == 1)
                 {
                     Ok = true;
                 }
                 else
                 {
                     Err = "Unbekannter fehler beim Aktualisieren Ihres Passwortes";
                 }
                 SI.Dispose();
             }
             else
             {
                 Err = "Die Passwörter sind nicht identisch";
             }
         }
         else
         {
             Err = "Das Passwort muss mindestend 6 Zeichen lang sein";
         }
     }
 }
Example #17
0
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Base.IsAdmin(Session[Base.SESSION.ADMIN_LOGIN], Session[Base.SESSION.ADMIN_ID]))
        {
            Response.Redirect("./");
        }

        if (Base.Verify(Request.Form, "Svorname", "Snachname", "Ssvnr", "Sdatum", "Sanlassname", "Sanlassdatum") &&
            !string.IsNullOrEmpty(Request["ID"]) &&
            IsGuid(Request["ID"]) &&
            Request.Form["anlassdatum"].Contains(" "))
        {
            Guid tmp = Guid.Parse(Request["ID"]);
            ExcelFile = tmp.ToString();
            string P = Server.MapPath(Base.ExcelPath(tmp));
            if (File.Exists(P))
            {
                ExcelInterface EI    = new ExcelInterface(P);
                string         Table = EI.Tables[0];
                List <string>  Cols  = new List <string>(EI.GetColumns(Table));

                if (Cols.Contains(Request.Form["vorname"]) &&
                    Cols.Contains(Request.Form["nachname"]) &&
                    Cols.Contains(Request.Form["svnr"]) &&
                    Cols.Contains(Request.Form["datum"]))
                {
                    int           errcount = 0;
                    StringBuilder SB       = new StringBuilder();
                    Guid          AnlassID = Guid.NewGuid();
                    string        Name;
                    DateTime      Datum;
                    string        Zeit;
                    Name  = Request.Form["anlassname"];
                    Datum = DateTime.Parse(Request.Form["anlassdatum"].Split(' ')[0]);
                    Zeit  = Request.Form["anlassdatum"].Split(' ')[1];

                    SQLInterface SI = new SQLInterface(Base.DSN.ADMIN);
                    SI.Exec(@"INSERT INTO [Anlass]
                        ([AnlassID],[Name],[Datum],[Zeit])
                        VALUES(?,?,?,?)",
                            AnlassID, Name, Datum, Zeit);
                    SQLRow[] RR = EI.ExecReader("SELECT * FROM [" + Table + "]");
                    foreach (SQLRow R in RR)
                    {
                        string   nachname = Base.ToString(R[Request.Form["nachname"]], string.Empty).Trim();
                        string   vorname  = Base.ToString(R[Request.Form["vorname"]], string.Empty).Trim();
                        string   svnr     = Base.ToString(R[Request.Form["svnr"]], string.Empty).Trim();
                        string   datum    = Base.ToString(R[Request.Form["datum"]], string.Empty).Trim();
                        DateTime gebdatum = DateTime.MinValue;

                        if (R[Request.Form["datum"]] is DateTime)
                        {
                            gebdatum = (DateTime)R[Request.Form["datum"]];
                        }
                        else
                        {
                            int tempdate = 0;
                            //excel date is sometimes in days
                            if (int.TryParse(datum, out tempdate))
                            {
                                //excel date is wrong by two days (therefore -2)
                                gebdatum = new DateTime(1900, 1, 1, 0, 0, 0).AddDays(tempdate - 2);
                                if (gebdatum.Ticks >= DateTime.Now.Ticks || tempdate == 0)
                                {
                                    ++errcount;
                                    SB.AppendFormat("Ungültiges Geburtsdatum beim Import des Soldaten mit nr.: {0}. Datum: {1}\r\n", svnr, datum);
                                    continue;
                                }
                            }
                            else if (!DateTime.TryParse(datum, out gebdatum) ||                         //ungültiges format
                                     gebdatum.Ticks >= DateTime.Now.Ticks ||                            //datum in der Zukunft
                                     gebdatum.Ticks == DateTime.MinValue.Ticks)                         //Datum nicht gesetzt
                            {
                                ++errcount;
                                SB.AppendFormat("Ungültiges Geburtsdatum beim Import des Soldaten mit nr.: {0}\r\n", svnr);
                                continue;
                            }
                        }
                        if (!IsValid(vorname, nachname, svnr))
                        {
                            ++errcount;
                            SB.AppendFormat("Ungültige Angaben beim Import des Soldaten mit nr.: {0}\r\n", svnr);
                            continue;
                        }


                        if (Base.SoldatExists((string)R[Request.Form["svnr"]], SI))
                        {
                            //Soldat auf neuen Anlass eintragen
                            Guid SoldatID = (Guid)SI.ExecReader("SELECT SoldatID FROM Soldat WHERE SVNummer=?", svnr)[0][0];
                            if (SI.Exec("UPDATE Soldat SET AnlassID=? WHERE SoldatID=?", AnlassID, SoldatID) < 0 ||
                                SI.Exec("UPDATE SoldatAntwort SET AnlassID=? WHERE SoldatID=?", AnlassID, SoldatID) < 0)
                            {
                                ++errcount;
                                SB.AppendFormat("Fehlerhafter Datensatz beim Import des Soldaten mit nr.: {0}\r\n", svnr);
                            }
                            else
                            {
                                SB.AppendFormat("Existierenden Soldat auf neuen Anlass eingetragen. Soldat: {0} {1}\r\n", vorname, nachname);
                            }
                        }
                        else
                        {
                            //Soldat erfassen
                            if (
                                SI.Exec("INSERT INTO Soldat (SoldatID,Vorname,Nachname,SVNummer,Geburtsdatum,AnlassID) VALUES(NEWID(),?,?,?,?,?)",
                                        vorname,
                                        nachname,
                                        svnr,
                                        gebdatum,
                                        AnlassID) < 1)
                            {
                                ++errcount;
                                SB.AppendFormat("Fehlerhafter Datensatz beim Import des Soldaten mit nr.: {0}\r\n", svnr);
                            }
                            else
                            {
                                SB.AppendFormat("Soldat erfasst: {0} {1}\r\n", vorname, nachname);
                            }
                        }
                    }
                    SB.AppendFormat("Anzahl Fehler: {0}", errcount);
                    Log = Server.HtmlEncode(SB.ToString());
                    SI.Dispose();
                    EI.Dispose();
                    try
                    {
                        Base.DelExcel(Server.MapPath("/temp/"));
                    }
                    catch
                    {
                    }
                }
                else
                {
                    Response.Redirect(string.Format("New2.aspx?err=2&ID={0}&anlass={1}&datum={2}",
                                                    Server.UrlEncode(Request.Form["ID"]),
                                                    Server.UrlEncode(Request.Form["anlassname"]),
                                                    Server.UrlEncode(Request.Form["anlassdatum"]))
                                      );
                }
            }
            else
            {
                Response.Redirect("New.aspx?err=2");
            }
        }
        else
        {
            Response.Redirect("New2.aspx?err=1&ID=" + Server.UrlEncode(Request.Form["ID"]));
        }
    }
Example #18
0
 public static bool SoldatExists(Guid SoldatID, SQLInterface SI)
 {
     return((int)SI.ExecReader("SELECT COUNT(SoldatID) FROM Soldat WHERE SoldatID=?", SoldatID)[0][0] > 0);
 }
Example #19
0
 public static bool SoldatExists(string SVN, SQLInterface SI)
 {
     return((int)SI.ExecReader("SELECT COUNT(SoldatID) FROM Soldat WHERE SVNummer=?", SVN)[0][0] > 0);
 }
Example #20
0
        static void Main(string[] args)
        {
            try
            {
                SQLInterface sql = new SQLInterface(config.db);

                if (!Directory.Exists(config.datadir))
                {
                    Directory.CreateDirectory(config.datadir);
                }

                SortedSet <Job> myJobs = sql.FindJobs(config.datadir, config.username);
                foreach (Job j in myJobs)
                {
                    j.Download(sql);
                    // Global.Say(string.Format("Downloaded {0} batches for job #{1}. Average batch time: {2} sec.", j.BatchCount, j.MetaData.Id, j.AverageBatchTime));
                }

                Jobs jobs = new Jobs(config.datadir); // includes unfinished.

                if (myJobs.Count > 0)
                {
                    uint lastId = 0;
                    foreach (Job j in jobs)
                    {
                        if (j.MetaData.Id >= myJobs.Last().MetaData.Id&&
                            j.MetaData.Reference == 0)
                        {
                            j.MetaData.Reference = lastId;
                            j.MetaData.Save();
                        }
                        lastId = j.MetaData.Id;
                    }

                    Records records = new Records(config.datadir);

                    foreach (Job j in myJobs)
                    {
                        if (j.MetaData.isFinished)
                        {
                            Report r = new Report(j);
                            if (r.IsInteresting)
                            {
                                r.SendTo(config.developers);
                            }

                            records.Update(j);
                        }
                        else
                        {
                            try
                            {
                                string cluster     = j.MetaData.Cluster;
                                uint   cluster_jid = j.MetaData.ClusterJobId;
                                if (cluster != "" && cluster_jid != 0)
                                {
                                    Scheduler scheduler = new Scheduler();
                                    scheduler.Connect(cluster);
                                    ISchedulerJob job = scheduler.OpenJob(Convert.ToInt32(cluster_jid));
                                    if (job.State == JobState.Canceled &&
                                        job.ErrorMessage.StartsWith("Canceled by the scheduler"))
                                    {
                                        Global.Say("Requeing job #" + j.MetaData.Id + " after the scheduler canceled it (# requeues = " + job.RequeueCount + ").");
                                        try { job.Requeue(); }
                                        catch (Exception ex) { Console.WriteLine("requeue-exception: " + ex.Message); }
                                    }
                                }
                            }
                            catch (SchedulerException) { /* Ignore. */ }
                        }
                    }

                    records.Save();
                }

                Aggregate();
            }
            catch (Exception ex)
            {
                Global.Say("Caught exception: " + ex.Message);
            }
        }