/// <summary>
        /// dtoからviewModelの新しいインスタンスを生成します。
        /// </summary>
        public RequestContinuedPlayersInputViewModel(RequestContinuedPlayersDto dto)
        {
            this.PlayerId       = dto.PlayerId;
            this.PlayerName     = dto.PlayerName.Value;
            this.PlayerNameKana = dto.PlayerNameKana.Value;
            this.CategoryId     = dto.Category.Id;
            this.CategoryName   = dto.Category.Name;
            this.Gender         = dto.Gender.Name;
            this.BirthDate      = dto.BirthDate.DisplayValue;
            this.IsRequested    = dto.IsRequested;
            this.IsSelected     = false;
            var select    = MvcViewHelper.CreateSelectListItem <Category>();
            var extracted = select.Where(o => int.Parse(o.Value) <= this.CategoryId).ToArray();

            this.CategorySelect = extracted.ToList();
        }
Example #2
0
        public async Task <List <RequestContinuedPlayersDto> > GetRequestContinuedPlayers(int teamId)
        {
            // 過去3年分の年度を取得
            var seasonIds    = new List <int>();
            var thisSeasonId = 0;

            for (var i = 0; i < RequestContinuedPlayersSearchPeriod; i++)
            {
                var day    = new DateTime(DateTime.Now.Year - i, DateTime.Now.Month, DateTime.Now.Day);
                var season = await this.seasonRepository.FindByDate(day);

                seasonIds.Add(season.Id);
                if (i == 0)
                {
                    thisSeasonId = season.Id;
                }
            }

            // 新しい順に登録選手を取得
            var requestPlayers = new List <RequestPlayer>();

            foreach (var seasonId in seasonIds)
            {
                var list = await this.requestPlayerRepository.FindAllByTeamIdAndSeasonId(teamId, seasonId);

                requestPlayers.AddRange(list);
            }

            // 前々年度まで登録していた17歳以下の選手を取得
            var requestContinuedPlayers = new List <RequestContinuedPlayersDto>();

            foreach (var requestPlayer in requestPlayers)
            {
                var playerId = requestPlayer.PlayerId;
                if (!requestContinuedPlayers.Any(o => o.PlayerId == playerId))
                {
                    continue;
                }
                var player    = requestPlayer.Player;
                var seasonAge = player.GetSeasonAge();
                if (seasonAge > RegisterableUpperLimitAge)
                {
                    continue;
                }

                var requestContinuedPlayer = new RequestContinuedPlayersDto();
                requestContinuedPlayer.PlayerId       = playerId;
                requestContinuedPlayer.PlayerName     = new PlayerName(player.PlayerFamilyName, player.PlayerFirstName);
                requestContinuedPlayer.PlayerNameKana = new PlayerNameKana(player.PlayerFamilyNameKana, player.PlayerFirstNameKana);
                requestContinuedPlayer.Gender         = player.Gender;
                requestContinuedPlayer.BirthDate      = player.BirthDate;

                if (requestPlayer.SeasonId == thisSeasonId)
                {
                    // 今年度の登録が済の場合
                    requestContinuedPlayer.IsRequested = true;
                    requestContinuedPlayer.Category    = player.Category;
                }
                else
                {
                    // 別団体の所属歴がある場合は対象外とする
                    if (await this.requestPlayerRepository.ExistsInOtherTeamAsync(teamId, playerId))
                    {
                        continue;
                    }
                    // 今年度の登録が未の場合、年齢基準のカテゴリーと過去に登録していたカテゴリーの大きい方を渡す
                    requestContinuedPlayer.Category = player.GetAvailableLowestCategory();
                }
                requestContinuedPlayers.Add(requestContinuedPlayer);
            }

            return(requestContinuedPlayers);
        }