Example #1
0
 /// <summary>
 /// Compose a PERSREP query.
 /// </summary>
 private string ComposePersrepQuery(bool hasCompanyFilter, JFilter j1, JFilter j2)
 {
     return("SELECT " + (hasCompanyFilter ? "Logi2.Ryhm" : "Logi2.Kompanii") + @",
                 SUM(IIF(Yksus.KKV = 'O', 1, 0)) AS Ohvitsere,
                 SUM(IIF(Yksus.KKV = 'AO', 1, 0)) AS Allohvitsere,
                 SUM(IIF(Yksus.KKV = 'S', 1, 0)) AS Sodureid,
                 SUM(IIF(Yksus.KKV = 'TSIV', 1, 0)) AS Tsiviliste
             FROM (SELECT
                         Yksus.Isikukood, Yksus.Eesnimi, Yksus.Perekonnanimi,
                         Yksus.Kompanii, Yksus.Ryhm, Yksus.KKV, COUNT(Logi.Kellaaeg) AS Kohal
                     FROM Yksus
                     LEFT OUTER JOIN Logi
                         ON Logi.Isikukood = Yksus.Isikukood
                     WHERE Logi.Kellaaeg >= @start
                       AND Logi.Kellaaeg <= @end
                       " + (hasCompanyFilter ? " AND Yksus.Kompanii = @company" : "")
            + (j1.enabled ? (j1.desiredValue == null ? " AND (Yksus.J1 IS NULL)" : " AND Yksus.J1 = @j1") : "")
            + (j2.enabled ? (j2.desiredValue == null ? " AND (Yksus.J2 IS NULL)" : " AND Yksus.J2 = @j2") : "")
            + @" GROUP BY Yksus.Isikukood, Yksus.Eesnimi, Yksus.Perekonnanimi,
                             Yksus.Kompanii, Yksus.Ryhm, Yksus.Ametikoht, Yksus.KKV
                     ORDER BY Yksus.Kompanii, Yksus.Ryhm ASC) Logi2 
             WHERE Logi2.Kohal > 0 
             GROUP BY " + (hasCompanyFilter ? "Logi2.Ryhm" : "Logi2.Kompanii") + ";");
 }
Example #2
0
        /// <summary>
        /// Collect personnel file data and feed them to the ReportWriter.
        /// For PERSREP (settings.reportType == PERSREP), the filter is a name of a company.
        /// For ATTENDANCE, the filter is the name of a platoon.
        /// Respectively, only members of the company / platoon are included.
        /// </summary>
        /// <seealso cref="IReportWriter"/>
        /// <seealso cref="PersrepReportWriter"/>
        /// <seealso cref="AttendanceReportWriter"/>
        private bool GenerateReport()
        {
            Debug.Assert(conn != null, "Database connection was null in GenerateReport()");
            Debug.Assert(personnelReader != null, "personnel reader not initialized in generateReport()");

            reportReady   = false;
            reportLoading = true;
            UpdateValidity();


            if (timeFilterEnabledCheckbox.Checked)
            {
                settings.startOfReport = dataSelectionStartDate.Value;
                settings.endOfReport   = dataSelectionEndDate.Value;
            }
            else
            {
                settings.startOfReport = DateTime.MinValue;
                settings.endOfReport   = DateTime.MaxValue;
            }

            if (reportWriter != null)
            {
                reportWriter.CloseExcel();
                reportWriter = null;
            }

            DestroyAllExcel();

            if (!File.Exists(settings.reportTemplate))
            {
                progressStatusLabel.Text = "Raporti põhi on puudu.";
                Debug.Print("Report template missing. {0}", settings.reportTemplate);
                reportReady   = false;
                reportLoading = false;
                UpdateValidity();
                return(false);
            }

            // Support J1 and J2 filters
            JFilter j1 = new JFilter();

            j1.enabled = false;

            if (j1FilterEnabled.Checked)
            {
                int x;
                j1.enabled = true;
                if (j1Filter.Text != J_EMPTY_VALUE)
                {
                    if (int.TryParse(j1Filter.Text, out x))
                    {
                        j1.desiredValue = x;
                    }
                    else
                    {
                        MessageBox.Show("J1 parameetris on viga. Ei saanud teisendada numbriks. Jätan arvestamata.", "Viga raporti genereerimisel");
                    }
                }
                else
                {
                    j1.desiredValue = null;
                    Debug.Print("J1 must be empty");
                }
            }

            JFilter j2 = new JFilter();

            j2.enabled = false;
            if (j2FilterEnabled.Checked)
            {
                j2.enabled = true;
                int x;
                if (j2Filter.Text != J_EMPTY_VALUE)
                {
                    if (int.TryParse(j2Filter.Text, out x))
                    {
                        j2.desiredValue = x;
                    }
                    else
                    {
                        MessageBox.Show("J2 parameetris on viga. Ei saanud teisendada numbriks. Jätan arvestamata.", "Viga raporti genereerimisel");
                    }
                }
                else
                {
                    Debug.Print("J2 must be empty");
                    j2.desiredValue = null;
                }
            }

            // Support Company filter
            if (companyFilterEnabled.Enabled && companyFilterEnabled.Checked && settings.companyFilter == null)
            {
                settings.companyFilter = companyFilter.Text;
            }

            // Support Platoon filter

            bool success = false;

            if (settings.reportType == ReportType.PERSREP)
            {
                progressStatusLabel.Text = "Koostan PERSREPi...";
                reportWriter             = new PersrepReportWriter(settings.reportTemplate);
                success = reportWriter.WriteReport(cardLogReader.ReadPersrepData(settings.startOfReport, settings.endOfReport, j1, j2, settings.companyFilter));
                if (success)
                {
                    progressStatusLabel.Text = "PERSREP koostatud!";
                }
            }
            else if (settings.reportType == ReportType.ATTENDANCE)
            {
                progressStatusLabel.Text = "Koostan kohalolekukontrolli...";
                reportWriter             = new AttendanceReportWriter(settings.reportTemplate);
                success = reportWriter.WriteReport(cardLogReader.ReadAttendanceData(settings.startOfReport, settings.endOfReport, j1, j2, settings.companyFilter, settings.platoonFilter));
                if (success)
                {
                    progressStatusLabel.Text = "Kohalolekukontroll koostatud!";
                }
            }

            // Collect unknown people if no other filters than time are enabled
            if (settings.companyFilter == null && settings.platoonFilter == null && !j2.enabled && !j1.enabled)
            {
                progressStatusLabel.Text = "Leian tundmatud inimesed...";
                var unknowns = cardLogReader.ReadUnknownPeople(settings.startOfReport, settings.endOfReport);
                reportWriter.HandleUnknownPeople(unknowns);
                progressStatusLabel.Text = "Tundmatud leitud!";
            }

            reportReady            = true;
            reportLoading          = false;
            settings.companyFilter = settings.platoonFilter = null;
            UpdateValidity();

            progressStatusLabel.Text = "Raport on valmis salvestamiseks.";

            return(success);
        }
Example #3
0
        public List <AttendanceItem> ReadAttendanceData(DateTime start, DateTime end, JFilter j1, JFilter j2, string companyFilter = null, string platoonFilter = null)
        {
            Debug.Assert(start != null, "ReadAttendanceData: start time was null");
            Debug.Assert(end != null, "ReadAttendanceData: end time was null");
            var cursor = databaseConnection.CreateCommand();

            cursor.CommandText = ComposeAttendanceQuery(companyFilter != null, platoonFilter != null, j1, j2);

            Debug.Print("ReadAttendanceData: {0}", cursor.CommandText);
            Debug.Print("ReadAttendanceData: Start: {0}, End: {1} ", start, end);
            Debug.Print("ReadAttendanceData: company filter: {0}", companyFilter);
            Debug.Print("ReadAttendanceData: platoon filter: {0}", platoonFilter);
            Debug.Print("ReadAttendanceData: j1 filter: {0}", j1.enabled);
            Debug.Print("ReadAttendanceData: j2 filter: {0}", j2.enabled);

            cursor.Parameters.Add(new OleDbParameter("@start", OleDbType.Date));
            cursor.Parameters[0].Value = start;

            cursor.Parameters.Add(new OleDbParameter("@end", OleDbType.Date));
            cursor.Parameters[1].Value = end;

            var data = new List <AttendanceItem>();

            if (companyFilter != null)
            {
                Debug.Print("ReadAttendanceData: Using company filter");
                var param = new OleDbParameter("@company", OleDbType.VarWChar, companyFilter.Length);
                param.Value = companyFilter;
                cursor.Parameters.Add(param);
            }

            if (platoonFilter != null)
            {
                Debug.Assert(companyFilter != null, "Company filter cannot be null when platoon filter is active");
                Debug.Print("ReadAttendanceData: Using attendance for platoon: '{0}'", platoonFilter);
                var param = new OleDbParameter("@platoon", OleDbType.VarWChar, platoonFilter.Length);
                param.Value = platoonFilter;
                cursor.Parameters.Add(param);
            }

            if (j1.enabled && j1.desiredValue != null)
            {
                Debug.Print("Using J1 filter in attendance");
                var param = new OleDbParameter("@j1", OleDbType.Integer);
                if (j1.desiredValue == null)
                {
                    param.Value = DBNull.Value;
                }
                else
                {
                    param.Value = j1.desiredValue;
                }

                cursor.Parameters.Add(param);
            }

            if (j2.enabled && j2.desiredValue != null)
            {
                Debug.Print("Using J2 filter in attendance");
                var param = new OleDbParameter("@j2", OleDbType.Integer);
                if (j2.desiredValue == null)
                {
                    param.Value = DBNull.Value;
                }
                else
                {
                    param.Value = j2.desiredValue;
                }
                cursor.Parameters.Add(param);
            }

            CardLogEntry    entry  = null;
            OleDbDataReader reader = null;

            try
            {
                cursor.Prepare();
                reader = cursor.ExecuteReader();
            }
            catch (InvalidOperationException ex)
            {
                Debug.Print(ex.ToString());
                return(data);
            }
            catch (OleDbException ex)
            {
                if ((uint)ex.HResult == 0x80040E37)
                {
                    MessageBox.Show("Logide tabelit '" + TABLE_NAME + "' ei eksisteeri.\nVeateade:\n" + ex.Message, "Viga Accessi andmebaasis");
                }
                Debug.Print(ex.ToString());
                return(data);
            }

            if (reader == null)
            {
                Debug.Print("Something went wrong while reading.");
                return(data);
            }

            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    string name    = reader.GetString(reader.GetOrdinal("Eesnimi")) + " " + reader.GetString(reader.GetOrdinal("Perekonnanimi"));
                    string platoon = reader.GetString(reader.GetOrdinal("Ryhm"));

                    if (data.Exists((item) => item.name == name))
                    {
                        Debug.Print("{0} on juba nimekirjas", name);
                        continue;
                    }

                    data.Add(new AttendanceItem()
                    {
                        name    = name,
                        platoon = platoon
                    });
                }
            }
            return(data);
        }
Example #4
0
        /// <summary>
        /// Read data for the PERSREP.
        /// Uses the PERSREP_QUERY.
        /// The PERSREP report can be limited by the start & end dates, and by string matching a company.
        /// </summary>
        /// <param name="start">The minimum signin date, inclusive</param>
        /// <param name="end">The maximum signin date, exclusive</param>
        /// <param name="companyFilter">If present, limit people to only one company.</param>
        /// <returns>List of PERSREP columns.</returns>
        public List <PersrepItem> ReadPersrepData(DateTime start, DateTime end, JFilter j1, JFilter j2, string companyFilter = null)
        {
            Debug.Assert(start != null, "ReadPersrepData: start time was null");
            Debug.Assert(end != null, "ReadPersrepData: end time was null");
            var cursor = databaseConnection.CreateCommand();

            Debug.Print("ReadPersrepData: start");

            var data = new List <PersrepItem>();

            cursor.CommandText = ComposePersrepQuery(companyFilter != null, j1, j2);


            Debug.Print(cursor.CommandText);
            Debug.Print("company filter: {0}", companyFilter);
            Debug.Print("j1 filter: {0}", j1.enabled);
            Debug.Print("j2 filter: {0}", j2.enabled);

            // NOTE: Parameters are order-specific only in access SQL. the @names don't matter, but are good for clarification.

            cursor.Parameters.Add(new OleDbParameter("@start", OleDbType.Date));
            cursor.Parameters[0].Value = start;

            cursor.Parameters.Add(new OleDbParameter("@end", OleDbType.Date));
            cursor.Parameters[1].Value = end;

            if (companyFilter != null)
            {
                Debug.Print("Company filter active");
                var param = new OleDbParameter("@company", OleDbType.VarWChar, companyFilter.Length);
                param.Value = companyFilter;
                cursor.Parameters.Add(param);
            }

            if (j1.enabled && j1.desiredValue != null)
            {
                Debug.Print("J1 filter active");
                var param = new OleDbParameter("@j1", OleDbType.Integer);
                param.Value = j1.desiredValue;
                cursor.Parameters.Add(param);
            }

            if (j2.enabled && j2.desiredValue != null)
            {
                Debug.Print("J2 filter active");
                var param = new OleDbParameter("@j1", OleDbType.Integer);
                if (j2.desiredValue == null)
                {
                    param.Value = DBNull.Value;
                }
                else
                {
                    param.Value = j2.desiredValue;
                }
                cursor.Parameters.Add(param);
            }

            CardLogEntry    entry  = null;
            OleDbDataReader reader = null;

            try
            {
                cursor.Prepare();
                reader = cursor.ExecuteReader();
            }
            catch (InvalidOperationException ex)
            {
                Debug.Print(ex.ToString());
                return(data);
            }
            catch (OleDbException ex)
            {
                if ((uint)ex.HResult == 0x80040E37)
                {
                    MessageBox.Show("Logide tabelit '" + TABLE_NAME + "' ei eksisteeri.\nVeateade:\n" + ex.Message, "Viga Accessi andmebaasis");
                }
                Debug.Print(ex.ToString());
                return(data);
            }

            if (reader == null)
            {
                Debug.Print("Something went wrong while reading.");
                return(data);
            }

            if (reader.HasRows)
            {
                Debug.Print("ReadPersrepData: has rows");
                while (reader.Read())
                {
                    string company;
                    if (companyFilter == null)
                    {
                        company = reader.GetString(reader.GetOrdinal("Kompanii"));
                    }
                    else
                    {
                        company = reader.GetString(reader.GetOrdinal("Ryhm"));
                    }
                    int ohvitsere    = (int)Math.Round(reader.GetDouble(reader.GetOrdinal("Ohvitsere")));
                    int allohvitsere = (int)Math.Round(reader.GetDouble(reader.GetOrdinal("Allohvitsere")));
                    int sodureid     = (int)Math.Round(reader.GetDouble(reader.GetOrdinal("Sodureid")));
                    int tsiviliste   = (int)Math.Round(reader.GetDouble(reader.GetOrdinal("Tsiviliste")));

                    Debug.Print("PERSREP Kompanii: {0} O {1} AO {2} S {3} TSIV {4}", company, ohvitsere, allohvitsere, sodureid, tsiviliste);
                    data.Add(new PersrepItem()
                    {
                        company      = company,
                        ohvitsere    = ohvitsere,
                        allohvitsere = allohvitsere,
                        sodureid     = sodureid,
                        tsiviliste   = tsiviliste
                    });
                }
            }
            else
            {
                Debug.Print("ReadPersrepData: no rows");
                return(data);
            }
            return(data);
        }
Example #5
0
 /// <summary>
 /// Compose an attendance query.
 /// </summary>
 private string ComposeAttendanceQuery(bool hasCompanyFilter, bool hasPlatoonFilter, JFilter j1, JFilter j2)
 {
     return(@"SELECT 
                 Yksus.Eesnimi, Yksus.Perekonnanimi, Yksus.Ryhm
             FROM Yksus
             INNER JOIN Logi
                 ON Logi.Isikukood = Yksus.Isikukood
             WHERE Logi.Kellaaeg >= @start 
               AND Logi.Kellaaeg <= @end"
            + (hasCompanyFilter ? " AND Yksus.Kompanii = @company" : "")
            + (hasPlatoonFilter ? " AND Yksus.Ryhm = @platoon" : "")
            + (j1.enabled ? (j1.desiredValue == null ? " AND Yksus.J1 IS NULL" : " AND Yksus.J1 = @j1") : "")
            + (j2.enabled ? (j2.desiredValue == null ? " AND Yksus.J2 IS NULL" : " AND Yksus.J2 = @j2") : "")
            + " ORDER BY Logi.Kellaaeg ASC;");
 }