public ActionResult DeleteConfirmed(int id)
        {
            Trace.WriteLine("POST /TraineeCommuting/Delete/" + id);

            // 教習生データを取得
            T_TraineeCommuting trainee = db.TraineeCommuting.Find(id);

            if (trainee != null)
            {
                // 削除
                db.TraineeCommuting.Remove(trainee);
                db.SaveChanges();
            }

            // 一覧へリダイレクト
            return(RedirectToAction("List"));
        }
        /// <summary>
        /// 詳細表示
        /// </summary>
        /// <param name="id">教習生ID</param>
        /// <returns></returns>
        public ActionResult Details(int?id)
        {
            Trace.WriteLine("GET /TraineeCommuting/Details/" + id);

            // IDが空の場合、エラー
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            // 教習生情報を取得
            T_TraineeCommuting trainee = db.TraineeCommuting.Find(id);

            if (trainee == null)
            {
                return(HttpNotFound());
            }

            return(View(trainee));
        }
Example #3
0
        /// <summary>
        /// グラフデータ取得(予測値算出ロジック)
        /// </summary>
        /// <param name="db">DBコンテキスト</param>
        /// <param name="dateFrom">日付From</param>
        /// <param name="dateTo">日付To</param>
        /// <param name="targetTraineeLodging">合宿教習生情報(登録/更新時)</param>
        /// <param name="targetTraineeCommuting">通学教習生情報(登録/更新時)</param>
        /// <returns>グラフデータ</returns>
        public List <V_ChartData> GetChartData(MyDatabaseContext db, DateTime dateFrom, DateTime dateTo
                                               , List <T_TraineeLodging> targetTraineeLodging, T_TraineeCommuting targetTraineeCommuting)
        {
            List <V_ChartData> chartData = new List <V_ChartData>();

            /*
             * [処理説明]
             * 繰り返し処理の開始を日曜、終了を土曜にするため、
             * 「日付Fromの直近の日曜」と「日付Toの直後の土曜」を取得する。
             * DayOfWeek:日曜=0~土曜=6
             * [目的]
             * 週平均の在籍可能数を算出するため、検索範囲外の日曜~土曜の範囲で算出する必要がある。
             */
            // 日付Fromの直近の日曜を取得
            DateTime sunFrom = dateFrom.AddDays(-1 * (int)dateFrom.DayOfWeek);
            // 日付Toの直後の土曜を取得
            DateTime satTo = dateTo.AddDays((int)DayOfWeek.Saturday - (int)dateTo.DayOfWeek);

            // 合宿教習生の取得
            List <T_TraineeLodging> traineeLodging;

            // 引数の教習生がnullの場合(受入予測管理)
            if (targetTraineeLodging == null)
            {
                // 対象期間の教習生データを全て取得
                traineeLodging = db.TraineeLodging.Where(
                    x => x.CancelFlg == false &&
                    (sunFrom <= x.EntrancePlanDate && x.EntrancePlanDate <= satTo ||
                     sunFrom <= x.GraduatePlanDate && x.GraduatePlanDate <= satTo ||
                     x.EntrancePlanDate < sunFrom && satTo < x.GraduatePlanDate)).ToList();
            }
            // 引数の教習生がnullでない場合(教習生管理(登録/更新))
            else
            {
                // 0以外の教習生IDを取得
                List <int> traineeIdList = targetTraineeLodging.Where(x => !x.TraineeId.Equals(0)).Select(x => x.TraineeId).ToList();
                // 対象教習生ID以外を取得
                traineeLodging = db.TraineeLodging.Where(
                    x => !traineeIdList.Contains(x.TraineeId) &&
                    x.CancelFlg == false &&
                    (sunFrom <= x.EntrancePlanDate && x.EntrancePlanDate <= satTo ||
                     sunFrom <= x.GraduatePlanDate && x.GraduatePlanDate <= satTo ||
                     x.EntrancePlanDate < sunFrom && satTo < x.GraduatePlanDate)).ToList();
                // 対象教習生を追加
                traineeLodging.AddRange(targetTraineeLodging.Where(x => x.CancelFlg == false));
            }

            // 通学教習生の取得
            List <T_TraineeCommuting> traineeCommuting;

            // 引数の教習生がnullの場合(受入予測管理)
            if (targetTraineeCommuting == null)
            {
                // 対象期間の教習生データを全て取得
                traineeCommuting = db.TraineeCommuting.Where(
                    x => x.CancelFlg == false &&
                    sunFrom <= x.EntrancePlanDate && x.EntrancePlanDate <= satTo ||
                    sunFrom <= x.GraduatePlanDate && x.GraduatePlanDate <= satTo ||
                    x.EntrancePlanDate < sunFrom && satTo < x.GraduatePlanDate).ToList();
            }
            // 引数の教習生がnullでない場合(教習生管理(登録/更新))
            else
            {
                // 対象教習生IDを取得
                int traineeId = targetTraineeCommuting.TraineeId;
                // 対象教習生ID以外を取得
                traineeCommuting = db.TraineeCommuting.Where(
                    x => !x.TraineeId.Equals(traineeId) &&
                    x.CancelFlg == false &&
                    (sunFrom <= x.EntrancePlanDate && x.EntrancePlanDate <= satTo ||
                     sunFrom <= x.GraduatePlanDate && x.GraduatePlanDate <= satTo ||
                     x.EntrancePlanDate < sunFrom && satTo < x.GraduatePlanDate)).ToList();
                // 対象教習生を追加
                if (targetTraineeCommuting.CancelFlg == false)
                {
                    traineeCommuting.Add(targetTraineeCommuting);
                }
            }

            // 対象期間の日別コマ数データを取得
            List <T_DailyClasses> dailyClassesList = db.DailyClasses.Where(x => sunFrom <= x.Date && x.Date <= satTo).ToList();
            // 対象期間の指導員データを取得
            List <T_DailyClassesByTrainer> trainerList = db.DailyClassesByTrainer.Where(x => x.Date >= sunFrom && x.Date <= satTo).ToList();

            // 受入可能人数/期間
            double acceptLodgingMaxAmt   = 0;
            double acceptCommutingMaxAmt = 0;
            // 受入累積数
            Dictionary <DateTime, int> acceptLodgingTotalAmtDic   = new Dictionary <DateTime, int>();
            Dictionary <DateTime, int> acceptCommutingTotalAmtDic = new Dictionary <DateTime, int>();
            // 在籍可能数/週
            double weeklyLodgingSumAmt   = 0;
            double weeklyCommutingSumAmt = 0;
            // 在籍可能数/日(週平均)
            Dictionary <DateTime, double> dailyLodgingMaxAmtDic   = new Dictionary <DateTime, double>();
            Dictionary <DateTime, double> dailyCommutingMaxAmtDic = new Dictionary <DateTime, double>();
            // 残コマ数/日
            double dailyRemClasses = 0;
            // 残コマ数/週
            double weeklyRemClasses = 0;
            Dictionary <DateTime, double> weeklyRemClassesDic = new Dictionary <DateTime, double>();

            for (DateTime day = sunFrom; day <= satTo; day = day.AddDays(1))
            {
                // 日別予測条件
                T_DailyClasses dailyClasses = dailyClassesList.Where(x => ((DateTime)x.Date).Equals(day)).FirstOrDefault();
                if (dailyClasses == null)
                {
                    dailyClasses = new T_DailyClasses()
                    {
                        Date = day
                    };
                }
                // 総コマ数/日
                double dailySumClasses = trainerList.Where(x => x.Date.Equals(day)).Select(x => x.Classes).Sum();

                // [20210416リリース対応] Add Start 各業務の割合から実車教習コマ数を算出
                // 実車教習総コマ数/日の算出
                dailySumClasses = ((100 - (dailyClasses.DepartExamRatio + dailyClasses.OtherVehicleRatio + dailyClasses.SeminarRatio + dailyClasses.OtherRatio)) / 100) * dailySumClasses;
                // [20210416リリース対応] Add End

                // --------------------
                // 在籍可能数/日
                // --------------------
                // ①-1.【合宿】教習生一人が実車教習に必要なコマ数/日
                //     = 合宿生のAT一段階コマ数/日 × 合宿生のAT一段階比率[%] ÷ 100 + 合宿生のAT二段階コマ数/日 × 合宿生のAT二段階比率[%] ÷ 100
                //       + 合宿生のMT一段階コマ数/日 × 合宿生のMT一段階比率[%] ÷ 100 + 合宿生のMT二段階コマ数/日 × 合宿生のMT二段階比率[%] ÷ 100
                double ldgDailyReqClasses = dailyClasses.LdgAtFstClassDay * dailyClasses.LdgAtFstRatio / 100 + dailyClasses.LdgAtSndClassDay * dailyClasses.LdgAtSndRatio / 100
                                            + dailyClasses.LdgMtFstClassDay * dailyClasses.LdgMtFstRatio / 100 + dailyClasses.LdgMtSndClassDay * dailyClasses.LdgMtSndRatio / 100;
                // ①-2.【通学】教習生一人が実車教習に必要なコマ数/日
                //     = 通学生のAT一段階コマ数/日 × 通学生のAT一段階比率[%] ÷ 100 + 通学生のAT二段階コマ数/日 × 通学生のAT二段階比率[%] ÷ 100
                //       + 通学生のMT一段階コマ数/日 × 通学生のMT一段階比率[%] ÷ 100 + 通学生のMT二段階コマ数/日 × 通学生のMT二段階比率[%] ÷ 100
                double cmtDailyReqClasses = dailyClasses.CmtAtFstClassDay * dailyClasses.CmtAtFstRatio / 100 + dailyClasses.CmtAtSndClassDay * dailyClasses.CmtAtSndRatio / 100
                                            + dailyClasses.CmtMtFstClassDay * dailyClasses.CmtMtFstRatio / 100 + dailyClasses.CmtMtSndClassDay * dailyClasses.CmtMtSndRatio / 100;

                // ②-1.【合宿】在籍可能人数/日  ※①-1が0の場合は算出しない
                if (ldgDailyReqClasses != 0)
                {
                    // 週合計に加算
                    weeklyLodgingSumAmt += (dailySumClasses / ldgDailyReqClasses) * (dailyClasses.LodgingRatio / 100);
                }
                // ②-2.【通学】在籍可能人数/日  ※①-2が0の場合は算出しない
                if (cmtDailyReqClasses != 0)
                {
                    // 週合計に加算
                    weeklyCommutingSumAmt += (dailySumClasses / cmtDailyReqClasses) * (dailyClasses.CommutingRatio / 100);
                }

                // --------------------
                // 在籍数
                // --------------------
                // 合宿在籍数(MT-一段階)(教習がMTかつ、入校予定日が対象日以上かつ、仮免予定日が対象日未満)
                int lodgingMtFstRegAmt =
                    traineeLodging.Where(
                        x => x.TrainingCourseCd.Equals(AppConstant.TRAINING_COURSE_CD_MT) &&
                        x.EntrancePlanDate <= day && day < x.TmpLicencePlanDate).Count();
                // [20210205リリース対応] Mod Start 卒業日以下を卒業日未満に修正
                //// 合宿在籍数(MT-二段階)(教習がMTかつ、仮免予定日が対象日以上かつ、卒業予定日が対象日以下)
                //int lodgingMtSndRegAmt =
                //    traineeLodging.Where(
                //        x => x.TrainingCourseCd.Equals(AppConstant.TRAINING_COURSE_CD_MT)
                //        && x.TmpLicencePlanDate <= day && day <= x.GraduatePlanDate).Count();
                // 合宿在籍数(MT-二段階)(教習がMTかつ、仮免予定日が対象日以上かつ、卒業予定日が対象日未満)
                int lodgingMtSndRegAmt =
                    traineeLodging.Where(
                        x => x.TrainingCourseCd.Equals(AppConstant.TRAINING_COURSE_CD_MT) &&
                        x.TmpLicencePlanDate <= day && day < x.GraduatePlanDate).Count();
                // [20210205リリース対応] Mod End
                // [20210205リリース対応] Del Start
                //// 合宿在籍数(MT-二段階)(教習がMTかつ、仮免予定日が対象日以上かつ、卒業予定日が対象日未満)※卒業予定者を含まない
                //int lodgingMtRegAmtExceptGraduate =
                //    traineeLodging.Where(
                //        x => x.TrainingCourseCd.Equals(AppConstant.TRAINING_COURSE_CD_MT)
                //        && x.TmpLicencePlanDate <= day && day < x.GraduatePlanDate).Count();
                // [20210205リリース対応] Del End
                // 合宿在籍数(AT-一段階)(教習がATかつ、入校予定日が対象日以上かつ、仮免予定日が対象日未満)
                int lodgingAtFstRegAmt =
                    traineeLodging.Where(
                        x => x.TrainingCourseCd.Equals(AppConstant.TRAINING_COURSE_CD_AT) &&
                        x.EntrancePlanDate <= day && day < x.TmpLicencePlanDate).Count();
                // [20210205リリース対応] Mod Start 卒業日以下を卒業日未満に修正
                //// 合宿在籍数(AT-二段階)(教習がATかつ、仮免予定日が対象日以上かつ、卒業予定日が対象日以下)
                //int lodgingAtSndRegAmt =
                //    traineeLodging.Where(
                //        x => x.TrainingCourseCd.Equals(AppConstant.TRAINING_COURSE_CD_AT)
                //        && x.TmpLicencePlanDate <= day && day <= x.GraduatePlanDate).Count();
                // 合宿在籍数(AT-二段階)(教習がATかつ、仮免予定日が対象日以上かつ、卒業予定日が対象日未満)
                int lodgingAtSndRegAmt =
                    traineeLodging.Where(
                        x => x.TrainingCourseCd.Equals(AppConstant.TRAINING_COURSE_CD_AT) &&
                        x.TmpLicencePlanDate <= day && day < x.GraduatePlanDate).Count();
                // [20210205リリース対応] Mod End
                // [20210205リリース対応] Del Start
                //// 合宿在籍数(AT-二段階)(教習がATかつ、仮免予定日が対象日以上かつ、卒業予定日が対象日未満)※卒業予定者を含まない
                //int lodgingAtRegAmtExceptGraduate =
                //    traineeLodging.Where(
                //        x => x.TrainingCourseCd.Equals(AppConstant.TRAINING_COURSE_CD_AT)
                //        && x.TmpLicencePlanDate <= day && day < x.GraduatePlanDate).Count();
                // [20210205リリース対応] Del End
                // 通学在籍数(MT-一段階)(教習がMTかつ、入校予定日が対象日以上かつ、仮免予定日が対象日未満)
                int commutingMtFstRegAmt =
                    traineeCommuting.Where(
                        x => x.TrainingCourseCd.Equals(AppConstant.TRAINING_COURSE_CD_MT) &&
                        x.EntrancePlanDate <= day && day < x.TmpLicencePlanDate).Count();
                // [20210205リリース対応] Mod Start 卒業日以下を卒業日未満に修正
                //// 通学在籍数(MT-二段階)(教習がMTかつ、仮免予定日が対象日以上かつ、卒業予定日が対象日以下)
                //int commutingMtSndRegAmt =
                //    traineeCommuting.Where(
                //        x => x.TrainingCourseCd.Equals(AppConstant.TRAINING_COURSE_CD_MT)
                //        && x.TmpLicencePlanDate <= day && day <= x.GraduatePlanDate).Count();
                // 通学在籍数(MT-二段階)(教習がMTかつ、仮免予定日が対象日以上かつ、卒業予定日が対象日未満)
                int commutingMtSndRegAmt =
                    traineeCommuting.Where(
                        x => x.TrainingCourseCd.Equals(AppConstant.TRAINING_COURSE_CD_MT) &&
                        x.TmpLicencePlanDate <= day && day < x.GraduatePlanDate).Count();
                // [20210205リリース対応] Mod End
                // 通学在籍数(AT-一段階)(教習がATかつ、入校予定日が対象日以上かつ、仮免予定日が対象日未満)
                int commutingAtFstRegAmt =
                    traineeCommuting.Where(
                        x => x.TrainingCourseCd.Equals(AppConstant.TRAINING_COURSE_CD_AT) &&
                        x.EntrancePlanDate <= day && day < x.TmpLicencePlanDate).Count();
                // [20210205リリース対応] Mod Start 卒業日以下を卒業日未満に修正
                //// 通学在籍数(AT-二段階)(教習がATかつ、仮免予定日が対象日以上かつ、卒業予定日が対象日以下)
                //int commutingAtSndRegAmt =
                //    traineeCommuting.Where(
                //        x => x.TrainingCourseCd.Equals(AppConstant.TRAINING_COURSE_CD_AT)
                //        && x.TmpLicencePlanDate <= day && day <= x.GraduatePlanDate).Count();
                // 通学在籍数(AT-二段階)(教習がATかつ、仮免予定日が対象日以上かつ、卒業予定日が対象日未満)
                int commutingAtSndRegAmt =
                    traineeCommuting.Where(
                        x => x.TrainingCourseCd.Equals(AppConstant.TRAINING_COURSE_CD_AT) &&
                        x.TmpLicencePlanDate <= day && day < x.GraduatePlanDate).Count();
                // [20210205リリース対応] Mod End

                // --------------------
                // 当日の合宿生消化コマ数
                // --------------------
                // [20210205リリース対応] Mod Start 卒業日以下をlodgingMtSndRegAmt/lodgingAtSndRegAmtに統一
                //// 合宿生のMT一段階コマ数/日 × 合宿生のMT一段階在籍数
                //// + 合宿生のMT二段階コマ数/日 × 合宿生のMT二段階在籍数(卒業予定者を含まない)
                //// + 合宿生のAT一段階コマ数/日 × 合宿生のAT一段階在籍数
                //// + 合宿生のAT二段階コマ数/日 × 合宿生のAT二段階在籍数(卒業予定者を含まない)
                //double sumClasses =
                //    dailyClasses.LdgMtFstClassDay * lodgingMtFstRegAmt
                //    + dailyClasses.LdgMtSndClassDay * lodgingMtRegAmtExceptGraduate
                //    + dailyClasses.LdgAtFstClassDay * lodgingAtFstRegAmt
                //    + dailyClasses.LdgAtSndClassDay * lodgingAtRegAmtExceptGraduate;

                // 合宿生のMT一段階コマ数/日 × 合宿生のMT一段階在籍数
                // + 合宿生のMT二段階コマ数/日 × 合宿生のMT二段階在籍数
                // + 合宿生のAT一段階コマ数/日 × 合宿生のAT一段階在籍数
                // + 合宿生のAT二段階コマ数/日 × 合宿生のAT二段階在籍数
                double sumClasses =
                    dailyClasses.LdgMtFstClassDay * lodgingMtFstRegAmt
                    + dailyClasses.LdgMtSndClassDay * lodgingMtSndRegAmt
                    + dailyClasses.LdgAtFstClassDay * lodgingAtFstRegAmt
                    + dailyClasses.LdgAtSndClassDay * lodgingAtSndRegAmt;
                // [20210205リリース対応] Mod End
                // 残コマ数/日
                dailyRemClasses = dailySumClasses - sumClasses;
                // 残コマ数/週
                weeklyRemClasses += dailyRemClasses;

                // 土曜の場合
                if (day.DayOfWeek.Equals(DayOfWeek.Saturday))
                {
                    // 過去7日分を繰り返し
                    for (DateTime tmpDay = day.AddDays(-6); tmpDay <= day; tmpDay = tmpDay.AddDays(1))
                    {
                        // 週平均の在籍可能数を設定(在籍可能数/週 ÷ 7)
                        dailyLodgingMaxAmtDic.Add(tmpDay, weeklyLodgingSumAmt / 7);
                        dailyCommutingMaxAmtDic.Add(tmpDay, weeklyCommutingSumAmt / 7);
                        // 対象の日付に残コマ数/週を設定
                        weeklyRemClassesDic.Add(tmpDay, weeklyRemClasses);
                    }

                    // 各変数をリセット
                    weeklyRemClasses      = 0; // 残コマ数/週
                    weeklyLodgingSumAmt   = 0; // 合宿在籍可能数/週
                    weeklyCommutingSumAmt = 0; // 通学在籍可能数/週
                }

                // 日付が検索範囲内の場合、グラフデータを生成
                if (dateFrom <= day && day <= dateTo)
                {
                    // --------------------
                    // 受入可能数/期間
                    // --------------------
                    // ①-1.【合宿】教習生一人が卒業までに必要なコマ数/日
                    //     = (合宿生のAT一段階コマ数 + 合宿生のAT二段階コマ数) × (合宿生のAT一段階比率[%] + 合宿生のAT二段階比率[%]) ÷ 100
                    //       + (合宿生のMT一段階コマ数 + 合宿生のMT二段階コマ数) × (合宿生のMT一段階比率[%] + 合宿生のMT二段階比率[%]) ÷ 100
                    double ldgTraineeReqClasses = (dailyClasses.LdgAtFstClass + dailyClasses.LdgAtSndClass) * (dailyClasses.LdgAtFstRatio + dailyClasses.LdgAtSndRatio) / 100
                                                  + (dailyClasses.LdgMtFstClass + dailyClasses.LdgMtSndClass) * (dailyClasses.LdgMtFstRatio + dailyClasses.LdgMtSndRatio) / 100;
                    // ①-2.【通学】教習生一人が卒業までに必要なコマ数/日
                    //     = (通学生のAT一段階コマ数 + 通学生のAT二段階コマ数) × (通学生のAT一段階比率[%] + 通学生のAT二段階比率[%]) ÷ 100
                    //       + (通学生のMT一段階コマ数 + 通学生のMT二段階コマ数) × (通学生のMT一段階比率[%] + 通学生のMT二段階比率[%]) ÷ 100
                    double cmtTraineeReqClasses = (dailyClasses.CmtAtFstClass + dailyClasses.CmtAtSndClass) * (dailyClasses.CmtAtFstRatio + dailyClasses.CmtAtSndRatio) / 100
                                                  + (dailyClasses.CmtMtFstClass + dailyClasses.CmtMtSndClass) * (dailyClasses.CmtMtFstRatio + dailyClasses.CmtMtSndRatio) / 100;

                    // ②-1.【合宿】受入可能人数/日を加算  ※①-1が0の場合は加算しない
                    if (ldgTraineeReqClasses != 0)
                    {
                        acceptLodgingMaxAmt += (dailySumClasses / ldgTraineeReqClasses) * (dailyClasses.LodgingRatio / 100);
                    }
                    // ②-2.【通学】受入可能人数/日を加算  ※①-2が0の場合は加算しない
                    if (cmtTraineeReqClasses != 0)
                    {
                        acceptCommutingMaxAmt += (dailySumClasses / cmtTraineeReqClasses) * (dailyClasses.CommutingRatio / 100);
                    }

                    // --------------------
                    // 受入累積数
                    // --------------------
                    // 前日までの受入累計数
                    int beforeLodgingTotalAmt   = acceptLodgingTotalAmtDic.ContainsKey(day.AddDays(-1)) ? acceptLodgingTotalAmtDic[day.AddDays(-1)] : 0;
                    int beforeCommutingTotalAmt = acceptCommutingTotalAmtDic.ContainsKey(day.AddDays(-1)) ? acceptCommutingTotalAmtDic[day.AddDays(-1)] : 0;
                    // 受入累積数を加算
                    acceptLodgingTotalAmtDic.Add(day, beforeLodgingTotalAmt + traineeLodging.Where(x => x.EntrancePlanDate.Equals(day)).Count());
                    acceptCommutingTotalAmtDic.Add(day, beforeCommutingTotalAmt + traineeCommuting.Where(x => x.EntrancePlanDate.Equals(day)).Count());

                    // グラフデータのインスタンスを生成
                    V_ChartData data = new V_ChartData {
                        Date = day
                    };

                    // --------------------
                    // 在籍数
                    // --------------------
                    // 合宿在籍数(MT-一段階)
                    data.LodgingMtFstRegAmt = lodgingMtFstRegAmt;
                    // 合宿在籍数(MT-二段階)
                    data.LodgingMtSndRegAmt = lodgingMtSndRegAmt;
                    // 合宿在籍数(AT-一段階)
                    data.LodgingAtFstRegAmt = lodgingAtFstRegAmt;
                    // 合宿在籍数(AT-二段階)
                    data.LodgingAtSndRegAmt = lodgingAtSndRegAmt;
                    // 通学在籍数(MT-一段階)
                    data.CommutingMtFstRegAmt = commutingMtFstRegAmt;
                    // 通学在籍数(MT-二段階)
                    data.CommutingMtSndRegAmt = commutingMtSndRegAmt;
                    // 通学在籍数(AT-一段階)
                    data.CommutingAtFstRegAmt = commutingAtFstRegAmt;
                    // 通学在籍数(AT-二段階)
                    data.CommutingAtSndRegAmt = commutingAtSndRegAmt;

                    // [20210205リリース対応] Add Start 総コマ数/日を追加
                    // --------------------
                    // 総コマ数/日
                    // --------------------
                    // 教習総コマ数/日
                    data.DailySumClasses = Math.Round(dailySumClasses, 1);
                    // [20210205リリース対応] Add End
                    // --------------------
                    // 残コマ数/日
                    // --------------------
                    // 教習総コマ数/日 - 消化コマ数/日
                    data.DailyRemClasses = Math.Round(dailyRemClasses, 1);

                    chartData.Add(data);
                }
            }

            chartData.ForEach(x => {
                // 受入残数を全てのデータに設定
                x.AcceptLodgingRemAmt   = Math.Round(acceptLodgingMaxAmt - acceptLodgingTotalAmtDic[x.Date], 1);
                x.AcceptCommutingRemAmt = Math.Round(acceptCommutingMaxAmt - acceptCommutingTotalAmtDic[x.Date], 1);
                // 在籍可能数/日の週平均を全てのデータに設定
                x.DailyLodgingMaxAmt   = Math.Round(dailyLodgingMaxAmtDic[x.Date], 1);
                x.DailyCommutingMaxAmt = Math.Round(dailyCommutingMaxAmtDic[x.Date], 1);
                // 残コマ数/週を全てのデータに設定
                x.WeeklyRemClasses = Math.Round(weeklyRemClassesDic[x.Date], 1);
            });

            return(chartData);
        }