Ejemplo n.º 1
0
        private void btnSetGrades_Click(object sender, RoutedEventArgs e)
        {
            btnCalcPlaces_Click(sender, e);

            if (GlobalDefines.IsRoundFinished(DBManagerApp.m_Entities.groups.First(arg => arg.id_group == m_GroupId).round_finished_flags, enRounds.Final))
            {   // Можно расставить разряды, т.к. соревы закончились
                List <participations> Members = (from member in DBManagerApp.m_Entities.members
                                                 join part in DBManagerApp.m_Entities.participations on member.id_member equals part.member
                                                 where part.Group == m_GroupId
                                                 orderby part.result_place
                                                 select part).ToList();
                if (chkOnly75PercentForCalcGrades.IsChecked.Value)
                {
                    Members = new List <participations>(Members.Take((int)Math.Floor(Members.Count * 0.75)));
                }
                byte PlaceInYear = 1;

                foreach (participations part in Members)
                {
                    part.result_grade = null;

                    if (part.result_place.HasValue && part.members.year_of_birth.HasValue && SelectedYears.Contains(part.members.year_of_birth.Value))
                    {   // Участник подходит по возрасту
                        for (int i = 0; i < m_MinPlaceForNewGrade.Count; i++)
                        {
                            if (PlaceInYear <= m_MinPlaceForNewGrade[i].Value)
                            {
                                part.result_grade = (byte)m_MinPlaceForNewGrade[i].Key;
                                break;
                            }
                        }

                        PlaceInYear++;
                    }
                }

                DBManagerApp.m_Entities.SaveChanges();

                GradesChangedFromOpen = true;
            }
            else
            {
                MessageBox.Show(this, Properties.Resources.resCantSetGrades, Title, MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
Ejemplo n.º 2
0
        private void btnCalcPlaces_Click(object sender, RoutedEventArgs e)
        {
            // Присвоение разрядов
            IEnumerable <CMemberInTotal> MembersForGradesCalc = from member in m_CompMembers
                                                                where member.MemberInfo.InitGrade.HasValue && SelectedYears.Contains(member.MemberInfo.YearOfBirth.Value)
                                                                where member.Place.HasValue
                                                                select member;

            if (chkOnly75PercentForCalcGrades.IsChecked.Value)
            {   // Учитываем только 75% участников
                MembersForGradesCalc = (from member in MembersForGradesCalc
                                        orderby member.Place
                                        select member).Take((int)(Math.Floor(MembersForGradesCalc.Count() * 0.75)));
            }
            Dictionary <enGrade?, int> GradesStat = (from member in MembersForGradesCalc
                                                     group member by member.MemberInfo.InitGrade into MembersGrades
                                                     select new Scanning.CGroupResultsManager.CGradeStat
            {
                Grade = (enGrade?)MembersGrades.Key,
                MembersWithGrade = MembersGrades.Count(arg => arg.MemberInfo.InitGrade == MembersGrades.Key)
            }).ToDictionary(key => key.Grade, item => item.MembersWithGrade);
            int tmp = 0;

            for (enGrade grade = enGrade.WithoutGrade; grade <= enGrade.Master; grade++)
            {
                if (!GradesStat.TryGetValue(grade, out tmp))
                {
                    GradesStat[grade] = 0;
                }
            }

            m_MinPlaceForNewGrade.Clear();

            // 1 разряд
            tmp = GlobalDefines.CalcMinPlaceForNewGrade((enResultGradeCalcMethod)cmbResultGradeCalcMethod.SelectedIndex,
                                                        1.0 * GradesStat[enGrade.Master] +
                                                        0.8 * GradesStat[enGrade.BeforeMaster] +
                                                        0.4 * GradesStat[enGrade.Adult1] +
                                                        0.2 * GradesStat[enGrade.Adult2]);
            m_MinPlaceForNewGrade.Add(new KeyValuePair <enGrade, int>(enGrade.Adult1, tmp));
            m_dictLblsPlaces[enGrade.Adult1].Content = tmp == 0 ? null : tmp.ToString();

            // 2 разряд
            tmp += GlobalDefines.CalcMinPlaceForNewGrade((enResultGradeCalcMethod)cmbResultGradeCalcMethod.SelectedIndex,
                                                         0.2 * GradesStat[enGrade.Adult1] +
                                                         0.4 * GradesStat[enGrade.Adult2] +
                                                         0.2 * GradesStat[enGrade.Adult3]);
            m_MinPlaceForNewGrade.Add(new KeyValuePair <enGrade, int>(enGrade.Adult2, tmp));
            m_dictLblsPlaces[enGrade.Adult2].Content = tmp == 0 ? null : tmp.ToString();

            // 3 разряд
            tmp += GlobalDefines.CalcMinPlaceForNewGrade((enResultGradeCalcMethod)cmbResultGradeCalcMethod.SelectedIndex,
                                                         0.2 * GradesStat[enGrade.Adult2] +
                                                         0.4 * GradesStat[enGrade.Adult3] +
                                                         0.3 * GradesStat[enGrade.Young1]);
            m_MinPlaceForNewGrade.Add(new KeyValuePair <enGrade, int>(enGrade.Adult3, tmp));
            m_dictLblsPlaces[enGrade.Adult3].Content = tmp == 0 ? null : tmp.ToString();

            // 1 ю разряд
            tmp += GlobalDefines.CalcMinPlaceForNewGrade((enResultGradeCalcMethod)cmbResultGradeCalcMethod.SelectedIndex,
                                                         0.2 * GradesStat[enGrade.Adult3] +
                                                         0.4 * GradesStat[enGrade.Young1] +
                                                         0.2 * GradesStat[enGrade.Young2]);
            m_MinPlaceForNewGrade.Add(new KeyValuePair <enGrade, int>(enGrade.Young1, tmp));
            m_dictLblsPlaces[enGrade.Young1].Content = tmp == 0 ? null : tmp.ToString();

            // 2 ю разряд
            tmp += GlobalDefines.CalcMinPlaceForNewGrade((enResultGradeCalcMethod)cmbResultGradeCalcMethod.SelectedIndex,
                                                         0.2 * GradesStat[enGrade.Young1] +
                                                         0.4 * GradesStat[enGrade.Young2] +
                                                         0.2 * GradesStat[enGrade.Young3]);
            m_MinPlaceForNewGrade.Add(new KeyValuePair <enGrade, int>(enGrade.Young2, tmp));
            m_dictLblsPlaces[enGrade.Young2].Content = tmp == 0 ? null : tmp.ToString();

            // 3 ю разряд
            tmp += GlobalDefines.CalcMinPlaceForNewGrade((enResultGradeCalcMethod)cmbResultGradeCalcMethod.SelectedIndex,
                                                         0.2 * GradesStat[enGrade.Young2] +
                                                         0.4 * GradesStat[enGrade.Young3] +
                                                         0.3 * GradesStat[enGrade.WithoutGrade]);
            m_MinPlaceForNewGrade.Add(new KeyValuePair <enGrade, int>(enGrade.Young3, tmp));
            m_dictLblsPlaces[enGrade.Young3].Content = tmp == 0 ? null : tmp.ToString();
        }