コード例 #1
0
        private bool classesDifferent()
        {
            // Check removed one
            foreach (var c2 in _dm.GetParticipantClasses())
            {
                ParticipantClass c1 = null;
                _class2Class.TryGetValue(c2, out c1);
                if (c1 == null || ClassViewModel.Items.FirstOrDefault(i => i == c1) == null)
                {
                    return(true);
                }
            }

            // Check update & new ones
            uint curSortPos = 1;

            foreach (var c1 in ClassViewModel.Items)
            {
                var found = _class2Class.FirstOrDefault(i => i.Value == c1);
                var c2    = found.Key;
                c2 = _dm.GetParticipantClasses().FirstOrDefault(i => i == c2);

                var g2   = _group2Group.FirstOrDefault(i => i.Value == c1.Group);
                var cat2 = _category2Category.FirstOrDefault(i => i.Value == c1.Sex);

                if (c2 != null)
                { // Update existing one
                    if (c2.Name != c1.Name ||
                        c2.Group != g2.Key ||
                        c2.Sex != cat2.Key ||
                        c2.Year != c1.Year ||
                        c2.SortPos != curSortPos)
                    {
                        return(true);
                    }
                }
                else
                {
                    return(true);
                }

                curSortPos++;
            }

            return(false);
        }
コード例 #2
0
        /// <summary>
        /// Determines the default class based on Year and Sex of the participant
        /// </summary>
        /// <param name="p">The participant</param>
        /// <returns>The default class</returns>
        public ParticipantClass DetermineClass(Participant p)
        {
            ParticipantClass cFound = null;

            foreach (var c in _classesByYear)
            {
                if (c.Sex == p.Sex)
                {
                    if (c.Year < p.Year)
                    {
                        break;
                    }

                    cFound = c;
                }
            }

            return(cFound);
        }
コード例 #3
0
 public void RemoveClass(ParticipantClass c)
 {
 }
コード例 #4
0
 public void CreateOrUpdateClass(ParticipantClass c)
 {
 }
コード例 #5
0
        public void Import(AppDataModel srcModel)
        {
            var srcGroups     = srcModel.GetParticipantGroups();
            var srcClasses    = srcModel.GetParticipantClasses();
            var srcCategories = srcModel.GetParticipantCategories();


            // TODO: only really added items are allowed to be in _x2x maps otherwise, class becomes inconsistent or points to a wrong group/category

            foreach (var g1 in srcGroups)
            {
                if (!GroupViewModel.ContainsSimilar(g1))
                {
                    ParticipantGroup g2 = null;
                    if (!_group2Group.TryGetValue(g1, out g2))
                    {
                        g2 = new ParticipantGroup(g1.Id, g1.Name, g1.SortPos);
                        _group2Group.Add(g1, g2);
                        GroupViewModel.Merge(g2);
                    }
                    else
                    {
                        System.Diagnostics.Debug.Assert(false);
                    }
                }
            }

            foreach (var cat1 in srcCategories)
            {
                if (!CategoryViewModel.ContainsSimilar(cat1))
                {
                    ParticipantCategory cat2 = null;
                    if (!_category2Category.TryGetValue(cat1, out cat2))
                    {
                        cat2 = new ParticipantCategory(cat1.Name, cat1.PrettyName, cat1.SortPos, cat1.Synonyms);
                        _category2Category.Add(cat1, cat2);
                        CategoryViewModel.Merge(cat2);
                    }
                    else
                    {
                        System.Diagnostics.Debug.Assert(false);
                    }
                }
            }

            foreach (var c1 in srcClasses)
            {
                if (!ClassViewModel.ContainsSimilar(c1))
                {
                    ParticipantClass c2 = null;
                    if (!_class2Class.TryGetValue(c1, out c2))
                    {
                        c2 = new ParticipantClass(
                            c1.Id,
                            c1.Group == null ? null : _group2Group[c1.Group],
                            c1.Name,
                            c1.Sex == null ? null : _category2Category[c1.Sex],
                            c1.Year,
                            c1.SortPos);
                        _class2Class.Add(c1, c2);
                        ClassViewModel.Merge(c2);
                    }
                    else
                    {
                        System.Diagnostics.Debug.Assert(false);
                    }
                }
            }
        }
コード例 #6
0
 public bool ContainsSimilar(ParticipantClass c)
 {
     return(Items.FirstOrDefault(i => (i.Name == c.Name && i.Year == c.Year && i.Sex == c.Sex)) != null);
 }
コード例 #7
0
        public List <ParticipantDivision> GetResults(string _competitionCode)
        {
            const string SQL = @"
                SELECT e.EnName         AS LastName, 
	                e.EnFirstName       AS FirstName,
	                c.ClDescription     AS Class,
                    c.ClId              AS ClassCode,
                    c.ClSex             AS ClassSex,
                    d.DivDescription	AS Division,
                    d.DivId             AS DivisionCode,
                    q.QuSession			AS SessionNumber,
                    q.QuTarget			AS BaleNumber,
                    q.QuLetter			AS TargetPosition,    
                    co.CoName			AS TeamName,
                    q.QuD1Score         AS Round1Score,
                    q.QuD1Hits          AS Round1Hits,
                    q.QuD1Rank			AS Round1Rank,
                    q.QuD2Score			AS Round2Score,
                    q.QuD2Hits			AS Round2Hits,
                    q.QuD2Rank			AS Round2Rank,
                    q.QuScore			AS TotalScore,
                    q.QuHits			AS TotalHits,
                    Q.QuGold			AS Total10,
                    Q.QuXnine			AS Total9,
                    Q.QuClRank			AS TotalRank
                FROM Entries e
                JOIN qualifications q on e.EnId = q.QuId
                JOIN classes c on e.EnTournament = c.ClTournament AND e.EnClass = c.ClId
                JOIN divisions d on e.EnTournament = d.DivTournament AND e.EnDivision = d.DivId
                JOIN countries co on e.EnTournament = co.CoTournament AND e.EnCountry = co.COId
                JOIN tournament t on e.EnTournament = t.ToId
                WHERE t.ToCode = @compCode
                AND e.EnIndClEvent = 1
                AND e.EnStatus = 0
                AND q.QuClRank != 0
                ORDER BY d.DivViewOrder, c.ClViewOrder, q.QuClRank ";

            var table = m_db.GetData(SQL, "compCode", _competitionCode);

            Dictionary <string, ParticipantDivision> dDict = new Dictionary <string, ParticipantDivision>();
            Dictionary <string, ParticipantClass>    cDict = new Dictionary <string, ParticipantClass>();

            List <ParticipantDivision> divisions = new List <ParticipantDivision>();

            foreach (DataRow row in table.Rows)
            {
                string className    = row.GetString("Class");
                string classCode    = row.GetString("ClassCode").ToLower();
                string divisionName = row.GetString("Division");
                string divisionCode = row.GetString("DivisionCode").ToLower();
                byte   classSex     = row.GetTinyInt("ClassSex");

                ParticipantDivision pDivision;
                ParticipantClass    pClass;

                if (!dDict.ContainsKey(divisionCode))
                {
                    pDivision = new ParticipantDivision
                    {
                        DivisionName = divisionName,
                        DivisionCode = divisionCode
                    };

                    divisions.Add(pDivision);
                    dDict.Add(divisionCode, pDivision);
                }
                else
                {
                    pDivision = dDict[divisionCode];
                }

                string tempName = divisionCode + "|" + classCode;
                if (!cDict.ContainsKey(tempName))
                {
                    pClass = new ParticipantClass
                    {
                        ClassName = className,
                        ClassCode = classCode,
                        ClassSex  = (classSex == 0) ? "m" : "f"
                    };

                    cDict.Add(tempName, pClass);
                    pDivision.ParticipantClasses.Add(pClass);
                }
                else
                {
                    pClass = cDict[tempName];
                }

                ParticipantResult p = new ParticipantResult
                {
                    FirstName      = row.GetString("FirstName"),
                    LastName       = row.GetString("LastName"),
                    Session        = Convert.ToInt32(row.GetByte("SessionNumber")),
                    BaleNumber     = row.GetInt("BaleNumber"),
                    TargetPosition = row.GetString("TargetPosition"),
                    Team           = row.GetString("TeamName"),
                    Round1Score    = row.GetShort("Round1Score"),
                    Round1Hits     = row.GetShort("Round1Hits"),
                    Round1Rank     = row.GetShort("Round1Rank"),
                    Round2Score    = row.GetShort("Round2Score"),
                    Round2Hits     = row.GetShort("Round2Hits"),
                    Round2Rank     = row.GetShort("Round2Rank"),
                    TotalScore     = row.GetInt("TotalScore"),
                    TotalHits      = row.GetInt("TotalHits"),
                    TotalRank      = row.GetShort("TotalRank"),
                    TotalTens      = row.GetInt("Total10"),
                    TotalNines     = row.GetInt("Total9")
                };

                pClass.Participants.Add(p);
            }

            return(divisions);
        }
コード例 #8
0
        public void BuildRace(Race race)
        {
            race.Name = "KjeringiOpen 2014";

            SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["kjeringi"].ConnectionString);
            conn.Open();

            // Read klasser
            SqlCommand cmd = new SqlCommand(@"SELECT id, name, official, sequence FROM kop_station", conn);
            SqlDataReader data = cmd.ExecuteReader();

            race.TimeStations.Add(new TimeStation()
            {
                Id = -1,
                Name = "Start",
                Official = true,
                Sequence = 1
            });

            while (data.Read())
            {

                race.TimeStations.Add(new TimeStation()
                {
                    Id = data.GetInt32(data.GetOrdinal("id")),
                    Name = data.GetString(data.GetOrdinal("name")),
                    Official = data.GetInt32(data.GetOrdinal("official")).Equals(1),
                    Sequence = data.GetInt32(data.GetOrdinal("sequence"))
                });
            }
            data.Close();

            // Read klasser
            cmd = new SqlCommand(@"SELECT code, name FROM kop_personClass union SELECT code, name FROM kop_teamClass", conn);
            data = cmd.ExecuteReader();

            while (data.Read())
            {
                race.Classes.Add(new ParticipantClass() {
                    Id = data.GetString(data.GetOrdinal("code")),
                    Name = data.GetString(data.GetOrdinal("name")),
                    Sequence = 1
                });
            }
            data.Close();

            // Add static classes
            var companyClass = new ParticipantClass { Id = "BED", Name = "Bedriftsklasse", Sequence = 100 };
            var testClass = new ParticipantClass { Id = "TEST", Name = "Testklasse", Sequence = 101 };

            race.Classes.Add(companyClass);
            race.Classes.Add(testClass);

            // Adding supers
            cmd = new SqlCommand(@"select startNumber, chipNumber, firstname, surname, personClassCode, phoneNumber from kop_person where superwife = 1 and deleted = 0 and startnumber is not null and chipnumber is not null", conn);
            data = cmd.ExecuteReader();

            while (data.Read())
            {
                race.AddParticipant(new Participant()
                {
                    Startnumber = data.GetInt32(data.GetOrdinal("startNumber")),
                    EmitID = int.Parse(data.GetString(data.GetOrdinal("chipNumber"))),
                    Name = data.GetString(data.GetOrdinal("firstname")) + " " + data.GetString(data.GetOrdinal("surname")),
                    Telephone = new List<String>() {data.GetString(data.GetOrdinal("phoneNumber"))},
                    Classes = new List<ParticipantClass>() {race.Classes.Find(x => x.Id.Equals(data.GetString(data.GetOrdinal("personClassCode"))))},
                    IsTeam = false,
                    IsSuper = true,
                    IsCompany = false
                });
            }

            data.Close();

            cmd = new SqlCommand(@"SELECT t.startNumber, t.chipNumber, t.name, t.teamClassCode, t.companyClass, p.firstname, p.surname, p.phoneNumber, p.sprintNumber FROM kop_team t inner join kop_person p on t.id = p.teamid where t.deleted = 0 and t.startNumber is not null and t.chipNumber is not null order by t.startNumber, p.sprintNumber", conn);
            data = cmd.ExecuteReader();

            data.Read();
            bool moreData = true;

            do
            {
                var p = new Participant()
                {
                    Startnumber = data.GetInt32(data.GetOrdinal("startNumber")),
                    EmitID = int.Parse(data.GetString(data.GetOrdinal("chipNumber"))),
                    Name = data.GetString(data.GetOrdinal("name")),
                    Telephone = new List<String>() {data.GetString(data.GetOrdinal("phoneNumber"))},
                    Classes = new List<ParticipantClass> {race.Classes.Find(x => x.Id.Equals(data.GetString(data.GetOrdinal("teamClassCode"))))},
                    IsTeam = true,
                    IsSuper = false,
                    IsCompany = data.GetInt32(data.GetOrdinal("companyClass")).Equals(1)
                };

                if (p.IsCompany)
                    p.Classes.Add(companyClass);

                // Add medlemmer
                while (moreData && data.GetInt32(data.GetOrdinal("startNumber")).Equals(p.Startnumber))
                {
                    p.TeamMembers.Add(data.GetString(data.GetOrdinal("firstName")) + " " + data.GetString(data.GetOrdinal("surname")));
                    if (!String.IsNullOrEmpty(data.GetString(data.GetOrdinal("phoneNumber"))))
                        p.Telephone.Add(data.GetString(data.GetOrdinal("phoneNumber")));
                    moreData = data.Read();
                }

                race.AddParticipant(p);

            } while (moreData);

            data.Close();
            conn.Close();

            foreach (Participant p in race.Participants)
                race.AddPass(new EmitData()
                {
                    BoxId = -1,
                    Id = p.EmitID,
                    Time = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 13, 14, 0)
                });
        }