Пример #1
0
 public CalendarControl(ReportView form, ChartSelect val, List <int[]> data)
 {
     inData     = data;
     chartEnum  = val;
     parentView = form;
     _calendar  = parentView.chartCalendar;
 }
Пример #2
0
 public ChartControl(ReportView form, ChartSelect val, List <int[]> data)
 {
     _parser   = new DataParser();
     mainChart = form.MainChart;
     subChart  = form.SubChart;
     chartEnum = val;
     inData    = data;
     readyFlag = false;
 }
Пример #3
0
        public ReportView(ChartSelect chart, List <int[]> data)
        {
            InitializeComponent();

            chartEnum     = chart;
            inData        = data;
            _editChart    = new ChartControl(this, chartEnum, inData);
            _editCalendar = new CalendarControl(this, chartEnum, inData);

            initReportChart();
            drawReportChart();
        }
Пример #4
0
        public List <int[]> getCumulativeData(List <int[]> data, ChartSelect chart, DateTime fD, DateTime eD)
        {
            List <int[]> rtnData    = new List <int[]>();
            List <int[]> parsedData = new List <int[]>();

            int[] inData;
            int[] outData;

            int[] getData = new int[4];
            int[] tempData = new int[4];
            int   baseInCnt = 0, baseOutCnt = 0, baseTime = 0;
            int   firstIdx = 0, lastIdx = 0, getIdx = 0;

            switch (chart)
            {
            case ChartSelect.E_CHART_HOURLY:
                #region HOUR_CUMUL
                int HourRange = 0;
                /* find first element on selected date */
                getData = data.Find(
                    delegate(int[] dt)
                {
                    firstIdx = data.IndexOf(dt);
                    return(dt[0] == Int32.Parse(fD.ToString("yyyyMMdd")));
                }
                    );
                HourRange = 24;                 /* temporary 24 */

                baseTime  = getData[1] / 10000; /* get Hour from time(HHmmss) */
                baseInCnt = getData[2];         /* get IN cnt */

                /* 선택한 날짜가 시작날짜가 아닐 경우 baseCnt는 이전날의 마지막 Cnt로 잡혀야 한다. */
                if (baseInCnt != 0)
                {
                    DateTime prevDate = fD.AddDays(-1);
                    tempData = getData;
                    getData  = data.FindLast(
                        delegate(int[] dt)
                    {
                        getIdx = data.IndexOf(dt);
                        return(dt[0] == Int32.Parse(prevDate.ToString("yyyyMMdd")));
                    }
                        );
                    if (getData == null)
                    {
                        getData = tempData;
                    }
                    baseInCnt = getData[2];
                }

                baseOutCnt = getData[3];     /* get OUT cnt */

                getData = data.FindLast(
                    delegate(int[] dt)
                {
                    lastIdx = data.IndexOf(dt);
                    return(dt[0] == Int32.Parse(fD.ToString("yyyyMMdd")));
                }
                    );

                inData  = new int[HourRange];
                outData = new int[HourRange];

                /* find data hourly */
                for (int i = baseTime; i < HourRange; i++)
                {
                    getIdx = data.FindIndex(firstIdx, lastIdx - firstIdx + 1,
                                            delegate(int[] dt)
                    {
                        int hour = dt[1] / 10000;             /* get HH from HHmmss */
                        return(hour > baseTime);
                    }
                                            );
                    if (getIdx >= 0)
                    {
                        getData = data[getIdx];

                        baseTime++;

                        inData[i]  = getData[2] - baseInCnt;
                        outData[i] = getData[3] - baseOutCnt;

                        firstIdx = getIdx;
                    }
                    else
                    {
                        getData    = data[lastIdx];
                        inData[i]  = getData[2] - baseInCnt;
                        outData[i] = getData[3] - baseOutCnt;
                        break;
                    }
                }

                rtnData.Add(inData);
                rtnData.Add(outData);
                #endregion
                break;

            case ChartSelect.E_CHART_WEEKLY:
                #region WEEK_COMUL
                int WeekRange = 7;
                /* find first element on selected date */
                getData = data.Find(
                    delegate(int[] dt)
                {
                    firstIdx = data.IndexOf(dt);
                    return(dt[0] == Int32.Parse(fD.ToString("yyyyMMdd")));
                }
                    );

                baseInCnt = getData[2];     /* get IN cnt */
                /* 선택한 날짜가 시작날짜가 아닐 경우 baseCnt는 이전날의 마지막 Cnt로 잡혀야 한다. */
                if (baseInCnt != 0)
                {
                    DateTime prevDate = fD.AddDays(-1);
                    tempData = getData;
                    getData  = data.FindLast(
                        delegate(int[] dt)
                    {
                        getIdx = data.IndexOf(dt);
                        return(dt[0] == Int32.Parse(prevDate.ToString("yyyyMMdd")));
                    }
                        );
                    if (getData == null)
                    {
                        getData = tempData;
                    }
                    baseInCnt = getData[2];
                }
                baseOutCnt = getData[3];     /* get OUT cnt */

                getData = data.FindLast(
                    delegate(int[] dt)
                {
                    lastIdx = data.IndexOf(dt);
                    return(dt[0] == Int32.Parse(eD.ToString("yyyyMMdd")));
                }
                    );

                inData  = new int[WeekRange];
                outData = new int[WeekRange];

                DateTime currentDate;
                currentDate = fD;     /* get search date */
                /* find data hourly */
                for (int i = 0; i < WeekRange; i++)
                {
                    /* 각 날짜의 firstIdx - lastIdx의 데이터값을 저장하고 하루씩 이동, 1주일 치 기재 */
                    /* 해당 날짜의 마지막 data를 구한다 */
                    getData = data.FindLast(
                        delegate(int[] dt)
                    {
                        getIdx = data.IndexOf(dt);
                        return(dt[0] == Int32.Parse(currentDate.ToString("yyyyMMdd")));
                    }
                        );
                    if (getData != null)     /* find data */
                    {
                        inData[i]   = getData[2];
                        outData[i]  = getData[3];
                        currentDate = currentDate.AddDays(1);
                        firstIdx    = getIdx;
                    }
                }
                rtnData.Add(inData);
                rtnData.Add(outData);
                #endregion
                break;

            default:
                break;
            }

            return(rtnData);
        }