/// <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); }