using log4net; using System.Windows; using System.Windows.Controls; using Agent.Models; using Agent.Services; using WinForms = System.Windows.Forms; using System; using System.Collections.Generic; using System.Windows.Data; using System.Linq; namespace Agent.Views { /// /// Interaction logic for ReportPage.xaml /// public partial class ReportPage : Page { private static readonly ILog log = LogManager.GetLogger(typeof(ReportPage)); private readonly ReportService _reportService = new ReportService(); private readonly CsvService _csvService = new CsvService(); private readonly CollectionViewSource _searchViewSource = new CollectionViewSource(); public ReportPage() { InitializeComponent(); ReportList.ItemsSource = _searchViewSource.View; DatePicker.CustomFormat = "yyyy-MM-dd"; DatePicker.Format = WinForms.DateTimePickerFormat.Custom; DatePicker.TextChanged += DatePicker_TextChanged; DatePicker2.CustomFormat = "yyyy-MM-dd"; DatePicker2.Format = WinForms.DateTimePickerFormat.Custom; DatePicker2.TextChanged += DatePicker_TextChanged; FetchList(); } private void DatePicker_TextChanged(object sender, EventArgs e) { FetchList(); } public void FetchList() { RP_serarch_cb.SelectedIndex = 0; RP_search_tb.Text = ""; _searchViewSource.Source = _reportService.GetDailyReports(DatePicker.Value.ToString("yyyy-MM-dd"), DatePicker2.Value.ToString("yyyy-MM-dd")); ReportList.ItemsSource = _searchViewSource.View; RP_title_tb.Text = $"{_searchViewSource.View.Cast().Count()} 개의 레포트가 있습니다."; } private void RP_ex_btn_Click(object sender, RoutedEventArgs e) { var dialog = new WinForms.SaveFileDialog { FileName = DateTime.Now.ToString("yyyy-MM-dd") + "_레포트", DefaultExt = ".csv", Filter = "csv files|*.csv" }; if (dialog.ShowDialog() == WinForms.DialogResult.Cancel) { return; } _csvService.SetHeader(new List{ "번호", "감시대상", "감시경로", "작업종류", "성공여부", "작업일자" }); var report = ReportList.Items; for (int i = 0; i < report.Count; i++) { var item = report[i] as Report; _csvService.SetColumn(new List { i + 1, item.Name, item.Path, item.Work_Type, (item.Is_Fail ? "성공" : "실패"), item.Create_Date }); } _csvService.CreateCsv(dialog.FileName); MessageBox.Show("저장되었습니다.", "확인", MessageBoxButton.OK, MessageBoxImage.Information); } private void TextBox_TextChanged(object sender, TextChangedEventArgs e) { var idx = RP_serarch_cb.SelectedIndex; var view = CollectionViewSource.GetDefaultView(_searchViewSource.View); if (0 == idx) { view.Filter = _NameFiltered; } if (1 == idx) { view.Filter = _WorkTypeFiltered; } if (2 == idx) { view.Filter = _IsFalidFiltered; } RP_title_tb.Text = $"{ReportList.Items.Count} 개의 레포트가 있습니다."; return; } private bool _NameFiltered(object item) { return (item as Report).Name.Contains(RP_search_tb.Text.Trim()); } private bool _WorkTypeFiltered(object item) { return (item as Report).Work_Type.Contains(RP_search_tb.Text.Trim()); } private bool _IsFalidFiltered(object item) { var failString = (item as Report).Is_Fail ? "성공" : "실패"; return failString.Contains(RP_search_tb.Text.Trim()); } private void RP_serarch_cb_DropDownClosed(object sender, EventArgs e) { RP_search_tb.Text = ""; } } }