Newer
Older
PrismSoftware / EcomAnalysis / FormCompareLogs.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;

namespace EcomAnalysis {

    public partial class FormCompareLogs : Form {

        private List<LogFileInfo> _LogFiles;

        public FormCompareLogs() {
            InitializeComponent();
        }

        public void SetData(List<LogFileInfo> logs) {
            _LogFiles = logs;
            MakeTable();
            MakeChart(0);
        }

        private void MakeTable() {
            listView1.Items.Clear();

            foreach (var log in _LogFiles.OrderBy(s => s.ExecDate)) {
                listView1.Items.Add(new ListViewItem(new string[] {
                    log.ExecDate.ToString("yyyy/MM/dd HH:mm"),
                    log.Visit.ToString(),
                    $"{log.FB.Count(Feedback.FBITEM.TOTAL)} 回",
                    $"{log.FB.Point(Feedback.FBITEM.TOTAL)} pts",
                    $"{log.FB.Count(Feedback.FBITEM.OK)} 回",
                    $"{log.FB.Count(Feedback.FBITEM.GOOD)} 回",
                    $"{log.FB.Count(Feedback.FBITEM.NICE)} 回",
                    $"{log.FB.Count(Feedback.FBITEM.GREAT)} 回",
                    $"{log.FB.Count(Feedback.FBITEM.EXCELLENT)} 回"}));
            }
        }

        private void MakeChart(int type) {
            chart1.Series[0].Points.Clear();
            foreach (var log in _LogFiles.OrderBy(s => s.ExecDate)) {
                var val = 0;
                switch (type) {
                    case 0: val = log.FB.Count(Feedback.FBITEM.TOTAL); break;
                    case 1: val = log.FB.Point(Feedback.FBITEM.TOTAL); break;
                    case 2: val = log.FB.Count(Feedback.FBITEM.OK); break;
                    case 3: val = log.FB.Count(Feedback.FBITEM.GOOD); break;
                    case 4: val = log.FB.Count(Feedback.FBITEM.NICE); break;
                    case 5: val = log.FB.Count(Feedback.FBITEM.GREAT); break;
                    case 6: val = log.FB.Count(Feedback.FBITEM.EXCELLENT); break;
                }

                chart1.Series[0].Points.AddXY(
                    $"visit {log.Visit}\r\n{log.ExecDate.ToString("MM/dd")}", val);
            }

            var titles = new string[] {"合計フィードバック回数", "獲得ポイント", "OK回数",
                "Good回数", "Nice回数", "Great回数", "Excellent回数"};
            chart1.Titles[0].Text = titles[type];

            var colors = new Color[] { Color.Orange, Color.Blue, Color.PaleGreen,
                Color.MediumPurple, Color.Gold, Color.Red, Color.Brown};
            chart1.Series[0].Color = colors[type];
            chart1.Series[0].MarkerColor = colors[type];
        }

        private void RadioFBTotal_CheckedChanged(object sender, EventArgs e) {
            MakeChart(0);
        }

        private void RadioPoint_CheckedChanged(object sender, EventArgs e) {
            MakeChart(1);
        }

        private void RadioOK_CheckedChanged(object sender, EventArgs e) {
            MakeChart(2);
        }

        private void RadioGood_CheckedChanged(object sender, EventArgs e) {
            MakeChart(3);
        }

        private void RadioNice_CheckedChanged(object sender, EventArgs e) {
            MakeChart(4);
        }

        private void RadioGreat_CheckedChanged(object sender, EventArgs e) {
            MakeChart(5);
        }

        private void RadioExcellent_CheckedChanged(object sender, EventArgs e) {
            MakeChart(6);
        }

        private void BtnClose_Click(object sender, EventArgs e) {
            Close();
        }
    }
}