Exemplo n.º 1
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);
        }