/// <summary>
        /// ロードイベント
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CustomCalender_Load(object sender, EventArgs e)
        {
            //TODO 残タスク:支出データの表示されない場合がある⇒原因を調査して修正
            DateTime      firstDate  = new DateTime(calenderDate.Year, calenderDate.Month, 1);
            int           first_time = firstDate.Day;
            int           lastdays   = DateTime.DaysInMonth(firstDate.Year, firstDate.Month); // その月の日数
            DateTime      lastDay    = new DateTime(firstDate.Year, firstDate.Month, lastdays);
            Configuration config     = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            int           userId     = int.Parse(config.AppSettings.Settings["UserId"].Value);

            List <Control> dateList     = new List <Control>();
            List <Control> incomeList   = new List <Control>();
            List <Control> spendingList = new List <Control>();
            List <Control> panelList    = new List <Control>();

            for (int i = 0; i < lastdays; i++)
            {
                dateList.AddRange(Controls.Find("label" + (3 * i + 1), true));
                incomeList.AddRange(Controls.Find("label" + (3 * i + 2), true));
                spendingList.AddRange(Controls.Find("label" + (3 * i + 3), true));
                panelList.AddRange(Controls.Find("panel" + (i + 1), true));
            }

            //カレンダーDBからデータ取得してデータ存在した場合、そのデータを表示する
            //ない場合はベースDBから情報を取得して、カレンダーDBにデータ更新して画面表示
            List <Calender> calenderList = new List <Calender>();

            int[]    incomeDataList   = new int[lastdays];
            int[]    spendingDataList = new int[lastdays];
            DateTime registerDate     = new DateTime();

            calenderList = Calender.SelectCalender(firstDate, firstDate.AddMonths(1), out registerDate, userId);

            //そもそもデータが一件もない場合は新規データ作成
            if (calenderList == null)
            {
                if (!Calender.InsertInitCalender(lastdays, calenderDate, userId))
                {
                    return;
                }
            }
            //ベースDBからデータ取得
            List <int[]> dataList = HouseholdABookBase.SelectHouseholdABooks(firstDate, lastDay.AddDays(1), userId);

            //収入と支出がある場合はそのデータを取得
            if (calenderList != null)
            {
                //最新データか確認
                if (!Calender.IsNewCalenderData(calenderList, dataList))
                {
                    if (dataList == null)
                    {
                        return;
                    }
                    incomeDataList   = dataList[0];
                    spendingDataList = dataList[1];

                    //カレンダーDB更新or登録
                    calenderList = Calender.CreateCalenderList(lastdays, incomeDataList, spendingDataList, calenderDate, userId);
                    if (!Calender.UpdateCalender(calenderList, registerDate))
                    {
                        return;
                    }
                }

                //最新データはそのまま取得
                calenderList.ForEach(data =>
                {
                    incomeDataList[data.Id - 1]   = data.Income > 0 ? data.Income : 0;
                    spendingDataList[data.Id - 1] = data.Spending > 0 ? data.Spending : 0;
                });
            }
            //収入と支出がない場合ベースDBからデータ作成
            else if (dataList != null)
            {
                incomeDataList   = dataList[0];
                spendingDataList = dataList[1];

                //カレンダーDB更新or登録
                calenderList = Calender.CreateCalenderList(lastdays, incomeDataList, spendingDataList, calenderDate, userId);
                if (!Calender.UpdateCalender(calenderList, registerDate))
                {
                    return;
                }
            }

            for (int i = 0; i < lastdays; i++)
            {
                //日付制御
                if (dateList.Count() > 0 && panelList.Count() > 0)
                {
                    Control panel = panelList.Where(data => data.Name == "panel" + (i + 1))?.First();
                    panel.Visible = true;
                    Control label = dateList.Where(data => data.Name == "label" + (3 * i + AppConst.CALENDER_DAY))?.First();
                    label.Text    = (i + 1).ToString();
                    label.Font    = new Font(label.Font, FontStyle.Bold);
                    label.Visible = true;
                }

                //支出の制御
                if (incomeDataList.Length > 0)
                {
                    Control label = incomeList.Where(data => data.Name == "label" + (3 * i + AppConst.CALENDER_INCOME)).First();
                    label.Text      = incomeDataList[i].ToString();
                    label.ForeColor = System.Drawing.Color.Blue;
                }
                else
                {
                    if (i == 0)
                    {
                        Control label = incomeList.Where(data => data.Name == "label" + AppConst.CALENDER_INCOME).First();
                        label.Text      = incomeDataList[0].ToString();
                        label.ForeColor = System.Drawing.Color.Blue;
                    }
                    else
                    {
                        Control label = incomeList.Where(data => data.Name == "label" + (i * AppConst.CALENDER_INCOME)).First();
                        label.Text      = 0.ToString();
                        label.ForeColor = System.Drawing.Color.Blue;
                    }
                }

                //収入の制御
                if (spendingDataList.Length > 0)
                {
                    if (spendingList.Count() > 0)
                    {
                        Control label = spendingList.Where(data => data.Name == "label" + (3 * i + AppConst.CALENDER_SPENDING)).First();
                        label.Text      = spendingDataList[i].ToString();
                        label.ForeColor = System.Drawing.Color.Red;
                    }
                    else
                    {
                        Control label = incomeList.Where(data => data.Name == "label" + (3 * i + AppConst.CALENDER_SPENDING)).First();
                        label.Text      = 0.ToString();
                        label.ForeColor = System.Drawing.Color.Red;
                    }
                }
                else
                {
                    Control label = incomeList.Where(data => data.Name == "label" + (3 * i + AppConst.CALENDER_SPENDING)).First();
                    label.Text      = 0.ToString();
                    label.ForeColor = Color.Red;
                }
            }
        }
Пример #2
0
        /// <summary>
        /// 週の項目作成
        /// </summary>
        /// <returns></returns>
        private List <ListViewItem> WeekCreateItems()
        {
            List <ListViewItem> viewItems = new List <ListViewItem>();

            DateTime startDate = new DateTime(DTPickerBreakdown.Value.Year
                                              , DTPickerBreakdown.Value.Month, 1);
            DateTime endDate = new DateTime(DTPickerBreakdown.Value.Year
                                            , DTPickerBreakdown.Value.Month, DateTime.DaysInMonth(startDate.Year, startDate.Month));

            //データ取得
            Configuration       config        = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            int                 userId        = int.Parse(config.AppSettings.Settings["UserId"].Value);
            List <WeekDataList> weekDataLists = WeekDataList.SelectDisplayList(startDate, endDate.AddDays(1), userId);

            //データが存在しない場合、データ集計して週ごとの収入と支出データ作成
            if (weekDataLists == null)
            {
                //月始めから月終わりまでのベースデータ取得
                List <int[]> dataLists = HouseholdABookBase.SelectHouseholdABooks(startDate, endDate.AddDays(1), userId);
                if (dataLists == null)
                {
                    OriginMBox.MBoxInfoOK("当月のデータが作成されていません。データ作成画面でデータ作成してください。");
                    return(new List <ListViewItem>());
                }

                weekDataLists = WeekDataList.CreateWeekDataList(dataLists, WeekDataList.GetDateTimes(startDate, endDate), userId);
                if (!WeekDataList.InsertWeekDataList(weekDataLists))
                {
                    OriginMBox.MBoxErrorOK("週ごとの収入と支出データ作成に失敗しました。");
                    return(null);
                }
            }
            else
            {
                //月ごとのベースデータ取得
                List <int[]> dataLists = HouseholdABookBase.SelectHouseholdABooks(startDate, endDate.AddDays(1), userId);
                if (dataLists == null)
                {
                    OriginMBox.MBoxInfoOK("当月のデータが作成されていません。データ作成画面でデータ作成してください。");
                    return(new List <ListViewItem>());
                }

                // 二度目以降は最新データかによって処理分け
                weekDataLists = WeekDataList.CreateWeekDataList(dataLists, WeekDataList.GetDateTimes(startDate, endDate), userId);
                if (!WeekDataList.UpdateWeekDataList(weekDataLists))
                {
                    OriginMBox.MBoxErrorOK("週ごとの収入と支出データ更新に失敗しました。");
                    return(new List <ListViewItem>());
                }
            }

            List <string[]> dataStrList = WeekDataList.GetDisplayDataList(weekDataLists);

            for (int i = 0; i < dataStrList.Count; i++)
            {
                ListViewItem listView = new ListViewItem(dataStrList[i])
                {
                    //フォント設定使用出来るようにする
                    UseItemStyleForSubItems = false
                };

                //収入と支出データで色分け
                listView.SubItems[1].ForeColor = System.Drawing.Color.Blue;
                listView.SubItems[2].ForeColor = System.Drawing.Color.Red;

                viewItems.Add(listView);
            }

            return(viewItems);
        }