Beispiel #1
0
        public void Initialise(SortedDictionary <DateTime, List <Fixture> > fixtures)
        {
            m_fixtureDisplay = new List <FixtureDisplay>();

            DateTime lastDate          = DateTime.MinValue;
            DateTime roundDate         = DateTime.MinValue;
            List <FixtureDisplay> byes = new List <FixtureDisplay>();
            Dictionary <string, Dictionary <string, Dictionary <string, int> > >             fieldBreakdown = new Dictionary <string, Dictionary <string, Dictionary <string, int> > >();
            Dictionary <string, SortedDictionary <string, SortedDictionary <string, int> > > teamBreakdown  = new Dictionary <string, SortedDictionary <string, SortedDictionary <string, int> > >();
            Dictionary <string, Dictionary <string, SortedDictionary <GameTime, int> > >     slotBreakdown  = new Dictionary <string, Dictionary <string, SortedDictionary <GameTime, int> > >();

            foreach (DateTime fixtureTime in fixtures.Keys)
            {
                foreach (Fixture iFixture in fixtures[fixtureTime])
                {
                    if (iFixture.Round > 0)
                    {
                        if (iFixture is FixtureGame)
                        {
                            string   league       = iFixture.Grade;
                            string   homeTeam     = ((FixtureGame)iFixture).HomeTeam;
                            string   awayTeam     = ((FixtureGame)iFixture).AwayTeam;
                            string   umpiringTeam = ((FixtureGame)iFixture).UmpiringTeam;
                            string   field        = ((FixtureGame)iFixture).Field;
                            GameTime slot         = new GameTime()
                            {
                                DayOfWeek = (int)((FixtureGame)iFixture).GameTime.DayOfWeek, StartTime = ((FixtureGame)iFixture).GameTime
                            };

                            if (!fieldBreakdown.ContainsKey(league))
                            {
                                fieldBreakdown.Add(league, new Dictionary <string, Dictionary <string, int> >());
                            }

                            if (!fieldBreakdown[league].ContainsKey(homeTeam))
                            {
                                fieldBreakdown[league].Add(homeTeam, new Dictionary <string, int>());
                            }

                            if (!fieldBreakdown[league][homeTeam].ContainsKey(field))
                            {
                                fieldBreakdown[league][homeTeam].Add(field, 0);
                            }
                            fieldBreakdown[league][homeTeam][field]++;

                            if (umpiringTeam != null)
                            {
                                if (!fieldBreakdown[league].ContainsKey(umpiringTeam))
                                {
                                    fieldBreakdown[league].Add(umpiringTeam, new Dictionary <string, int>());
                                }
                                if (!fieldBreakdown[league][umpiringTeam].ContainsKey("Umpiring"))
                                {
                                    fieldBreakdown[league][umpiringTeam].Add("Umpiring", 0);
                                }
                                fieldBreakdown[league][umpiringTeam]["Umpiring"]++;
                            }

                            if (awayTeam != null)
                            {
                                if (!fieldBreakdown[league].ContainsKey(awayTeam))
                                {
                                    fieldBreakdown[league].Add(awayTeam, new Dictionary <string, int>());
                                }
                                if (!fieldBreakdown[league][awayTeam].ContainsKey(field))
                                {
                                    fieldBreakdown[league][awayTeam].Add(field, 0);
                                }
                                fieldBreakdown[league][awayTeam][field]++;
                            }

                            if (!teamBreakdown.ContainsKey(league))
                            {
                                teamBreakdown.Add(league, new SortedDictionary <string, SortedDictionary <string, int> >());
                            }
                            if (!teamBreakdown[league].ContainsKey(homeTeam))
                            {
                                teamBreakdown[league].Add(homeTeam, new SortedDictionary <string, int>());
                            }

                            if (awayTeam != null)
                            {
                                if (!teamBreakdown[league][homeTeam].ContainsKey(awayTeam))
                                {
                                    teamBreakdown[league][homeTeam].Add(awayTeam, 0);
                                }
                                teamBreakdown[league][homeTeam][awayTeam]++;
                            }
                            else
                            {
                                if (!teamBreakdown[league][homeTeam].ContainsKey("Bye"))
                                {
                                    teamBreakdown[league][homeTeam].Add("Bye", 0);
                                }
                                teamBreakdown[league][homeTeam]["Bye"]++;
                            }

                            if (!slotBreakdown.ContainsKey(league))
                            {
                                slotBreakdown.Add(league, new Dictionary <string, SortedDictionary <GameTime, int> >());
                            }

                            if (!slotBreakdown[league].ContainsKey(homeTeam))
                            {
                                slotBreakdown[league].Add(homeTeam, new SortedDictionary <GameTime, int>());
                            }
                            if (!slotBreakdown[league][homeTeam].ContainsKey(slot))
                            {
                                slotBreakdown[league][homeTeam].Add(slot, 0);
                            }
                            slotBreakdown[league][homeTeam][slot]++;

                            if (awayTeam != null)
                            {
                                if (!slotBreakdown[league].ContainsKey(awayTeam))
                                {
                                    slotBreakdown[league].Add(awayTeam, new SortedDictionary <GameTime, int>());
                                }
                                if (!slotBreakdown[league][awayTeam].ContainsKey(slot))
                                {
                                    slotBreakdown[league][awayTeam].Add(slot, 0);
                                }
                                slotBreakdown[league][awayTeam][slot]++;
                            }
                        }
                        else if (iFixture is FixtureTeamBye)
                        {
                            string league      = iFixture.Grade;
                            string teamWithBye = ((FixtureTeamBye)iFixture).TeamWithBye.TeamName;

                            if (!fieldBreakdown.ContainsKey(league))
                            {
                                fieldBreakdown.Add(league, new Dictionary <string, Dictionary <string, int> >());
                            }
                            if (!fieldBreakdown[league].ContainsKey(teamWithBye))
                            {
                                fieldBreakdown[league].Add(teamWithBye, new Dictionary <string, int>());
                            }
                            if (!fieldBreakdown[league][teamWithBye].ContainsKey("Bye"))
                            {
                                fieldBreakdown[league][teamWithBye].Add("Bye", 0);
                            }
                            fieldBreakdown[league][teamWithBye]["Bye"]++;
                        }
                    }

                    if (iFixture.GameTime.Date != lastDate.Date && lastDate != DateTime.MinValue)
                    {
                        foreach (FixtureDisplay byeRow in byes)
                        {
                            m_fixtureDisplay.Add(byeRow);
                        }
                        byes.Clear();
                        m_fixtureDisplay.Add(new FixtureDisplay());
                    }
                    lastDate = iFixture.GameTime;

                    FixtureDisplay row = new FixtureDisplay();

                    row.Day  = iFixture.GameTime.ToString("ddd");
                    row.Date = iFixture.GameTime.ToString("dd-MMM");
                    if (iFixture is FixtureGame)
                    {
                        row.Time  = iFixture.GameTime.ToString("hh:mm tt");
                        row.Grade = iFixture.Grade;
                        row.Round = iFixture.Round > 0 ? iFixture.Round.ToString() : "";
                        row.Field = ((FixtureGame)iFixture).Field;
                        row.Home  = ((FixtureGame)iFixture).HomeTeam;
                        row.Away  = ((FixtureGame)iFixture).AwayTeam;
                        if (((FixtureGame)iFixture).UmpiringTeam != null)
                        {
                            row.Umpiring = ((FixtureGame)iFixture).UmpiringTeam;
                        }
                        m_fixtureDisplay.Add(row);
                    }
                    else if (iFixture is FixtureGeneralBye)
                    {
                        if (iFixture.Grade != null)
                        {
                            row.Grade = iFixture.Grade;
                        }
                        row.Home     = "General";
                        row.Away     = "Bye";
                        row.Umpiring = ((FixtureGeneralBye)iFixture).Reason;;
                        byes.Add(row);                         //m_fixtureDisplay.Add(row);
                    }
                    else if (iFixture is FixtureTeamBye)
                    {
                        row.Grade = iFixture.Grade;
                        row.Round = iFixture.Round > 0 ? iFixture.Round.ToString() : "";
                        row.Home  = ((FixtureTeamBye)iFixture).TeamWithBye.TeamName;
                        row.Away  = "Bye";
                        byes.Add(row);
                    }
                }
            }
            foreach (FixtureDisplay byeRow in byes)
            {
                m_fixtureDisplay.Add(byeRow);
            }
            byes.Clear();

            BindingSource fixtureBindingSource = new BindingSource()
            {
                DataSource = m_fixtureDisplay
            };

            FixtureDataGridView.DataSource = fixtureBindingSource;

            foreach (string league in fieldBreakdown.Keys)
            {
                TabPage newTabPage = new TabPage(league);
                FixtureBreakdownUserControl fixtureBreakdownControl = new FixtureBreakdownUserControl();
                fixtureBreakdownControl.Dock = DockStyle.Fill;

                newTabPage.Controls.Add(fixtureBreakdownControl);

                BreakdownTabControl.TabPages.Add(newTabPage);

                fixtureBreakdownControl.Initialise(league, fieldBreakdown[league], teamBreakdown[league], slotBreakdown[league]);
            }
        }
        //private static Excel.Application m_excel = new Excel.Application();

        public DocumentGenerator(string grade, SortedDictionary <DateTime, List <Fixture> > fixtures)
        {
            List <float> columnWidths = new List <float>()
            {
                8, 6, 10, 10, 8, 17, 16, 16, 16, 16
            };
            ExcelExporter iExcelExporter = new ExcelExporter(grade + ".xlsx", "Fixtures", grade + " Fixtures", "", DateTime.Now.ToLongDateString(), true, columnWidths);

            iExcelExporter.AddRow();
            iExcelExporter.AddText("", 1, true, false, false, HorizontalAlignment.Center);
            iExcelExporter.AddText("Day", 1, true, false, false, HorizontalAlignment.Center);
            iExcelExporter.AddText("Date", 1, true, false, false, HorizontalAlignment.Center);
            iExcelExporter.AddText("Time", 1, true, false, false, HorizontalAlignment.Center);
            iExcelExporter.AddText("Field", 1, true, false, false, HorizontalAlignment.Center);
            iExcelExporter.AddText("Grade", 1, true, false, false, HorizontalAlignment.Center);
            iExcelExporter.AddText("Home", 1, true, false, false, HorizontalAlignment.Center);
            iExcelExporter.AddText("Away", 1, true, false, false, HorizontalAlignment.Center);
            iExcelExporter.AddText("Umpiring", 1, true, false, false, HorizontalAlignment.Center);
            iExcelExporter.AddText("Tech Bench", 1, true, false, false, HorizontalAlignment.Center);

            List <FixtureDisplay> m_fixtureDisplay = new List <FixtureDisplay>();

            DateTime lastDate          = DateTime.MinValue;
            DateTime roundDate         = DateTime.MinValue;
            List <FixtureDisplay> byes = new List <FixtureDisplay>();
            Dictionary <string, Dictionary <string, Dictionary <string, int> > >         fieldBreakdown = new Dictionary <string, Dictionary <string, Dictionary <string, int> > >();
            Dictionary <string, Dictionary <string, SortedDictionary <GameTime, int> > > slotBreakdown  = new Dictionary <string, Dictionary <string, SortedDictionary <GameTime, int> > >();

            foreach (DateTime fixtureTime in fixtures.Keys)
            {
                foreach (Fixture iFixture in fixtures[fixtureTime])
                {
                    if (iFixture.Round > 0)
                    {
                        if (iFixture is FixtureGame)
                        {
                            string   league       = iFixture.Grade;
                            string   homeTeam     = ((FixtureGame)iFixture).HomeTeam;
                            string   awayTeam     = ((FixtureGame)iFixture).AwayTeam;
                            string   umpiringTeam = ((FixtureGame)iFixture).UmpiringTeam;
                            string   field        = ((FixtureGame)iFixture).Field;
                            GameTime slot         = new GameTime()
                            {
                                DayOfWeek = (int)((FixtureGame)iFixture).GameTime.DayOfWeek, StartTime = ((FixtureGame)iFixture).GameTime
                            };

                            if (!fieldBreakdown.ContainsKey(league))
                            {
                                fieldBreakdown.Add(league, new Dictionary <string, Dictionary <string, int> >());
                            }

                            if (!fieldBreakdown[league].ContainsKey(homeTeam))
                            {
                                fieldBreakdown[league].Add(homeTeam, new Dictionary <string, int>());
                            }
                            if (!fieldBreakdown[league][homeTeam].ContainsKey(field))
                            {
                                fieldBreakdown[league][homeTeam].Add(field, 0);
                            }
                            fieldBreakdown[league][homeTeam][field]++;

                            if (umpiringTeam != null)
                            {
                                if (!fieldBreakdown[league].ContainsKey(umpiringTeam))
                                {
                                    fieldBreakdown[league].Add(umpiringTeam, new Dictionary <string, int>());
                                }
                                if (!fieldBreakdown[league][umpiringTeam].ContainsKey("Umpiring"))
                                {
                                    fieldBreakdown[league][umpiringTeam].Add("Umpiring", 0);
                                }
                                fieldBreakdown[league][umpiringTeam]["Umpiring"]++;
                            }

                            if (awayTeam != null)
                            {
                                if (!fieldBreakdown[league].ContainsKey(awayTeam))
                                {
                                    fieldBreakdown[league].Add(awayTeam, new Dictionary <string, int>());
                                }
                                if (!fieldBreakdown[league][awayTeam].ContainsKey(field))
                                {
                                    fieldBreakdown[league][awayTeam].Add(field, 0);
                                }
                                fieldBreakdown[league][awayTeam][field]++;
                            }

                            if (!slotBreakdown.ContainsKey(league))
                            {
                                slotBreakdown.Add(league, new Dictionary <string, SortedDictionary <GameTime, int> >());
                            }

                            if (!slotBreakdown[league].ContainsKey(homeTeam))
                            {
                                slotBreakdown[league].Add(homeTeam, new SortedDictionary <GameTime, int>());
                            }
                            if (!slotBreakdown[league][homeTeam].ContainsKey(slot))
                            {
                                slotBreakdown[league][homeTeam].Add(slot, 0);
                            }
                            slotBreakdown[league][homeTeam][slot]++;

                            if (awayTeam != null)
                            {
                                if (!slotBreakdown[league].ContainsKey(awayTeam))
                                {
                                    slotBreakdown[league].Add(awayTeam, new SortedDictionary <GameTime, int>());
                                }
                                if (!slotBreakdown[league][awayTeam].ContainsKey(slot))
                                {
                                    slotBreakdown[league][awayTeam].Add(slot, 0);
                                }
                                slotBreakdown[league][awayTeam][slot]++;
                            }
                        }
                        else if (iFixture is FixtureTeamBye)
                        {
                            string league      = iFixture.Grade;
                            string teamWithBye = ((FixtureTeamBye)iFixture).TeamWithBye.TeamName;

                            if (!fieldBreakdown.ContainsKey(league))
                            {
                                fieldBreakdown.Add(league, new Dictionary <string, Dictionary <string, int> >());
                            }
                            if (!fieldBreakdown[league].ContainsKey(teamWithBye))
                            {
                                fieldBreakdown[league].Add(teamWithBye, new Dictionary <string, int>());
                            }
                            if (!fieldBreakdown[league][teamWithBye].ContainsKey("Bye"))
                            {
                                fieldBreakdown[league][teamWithBye].Add("Bye", 0);
                            }
                            fieldBreakdown[league][teamWithBye]["Bye"]++;
                        }
                    }

                    if (iFixture.GameTime.Date != lastDate.Date && lastDate != DateTime.MinValue)
                    {
                        foreach (FixtureDisplay byeRow in byes)
                        {
                            m_fixtureDisplay.Add(byeRow);
                        }
                        byes.Clear();
                        m_fixtureDisplay.Add(new FixtureDisplay());
                    }
                    lastDate = iFixture.GameTime;

                    FixtureDisplay row = new FixtureDisplay();

                    row.Day  = iFixture.GameTime.ToString("ddd");
                    row.Date = iFixture.GameTime.ToString("dd-MMM");
                    if (iFixture is FixtureGame)
                    {
                        row.Time     = iFixture.GameTime.ToString("hh:mm tt");
                        row.Grade    = iFixture.Grade;
                        row.Round    = iFixture.Round > 0 ? iFixture.Round.ToString() : "";
                        row.Field    = ((FixtureGame)iFixture).Field;
                        row.Home     = ((FixtureGame)iFixture).HomeTeam;
                        row.Away     = ((FixtureGame)iFixture).AwayTeam;
                        row.Umpiring = ((FixtureGame)iFixture).UmpiringTeam;
                        m_fixtureDisplay.Add(row);
                    }
                    else if (iFixture is FixtureGeneralBye)
                    {
                        if (iFixture.Grade != null)
                        {
                            row.Grade = iFixture.Grade;
                        }
                        row.Home     = "General";
                        row.Away     = "Bye";
                        row.Umpiring = ((FixtureGeneralBye)iFixture).Reason;;
                        byes.Add(row);                         //m_fixtureDisplay.Add(row);
                    }
                    else if (iFixture is FixtureTeamBye)
                    {
                        row.Grade = iFixture.Grade;
                        row.Round = iFixture.Round > 0 ? iFixture.Round.ToString() : "";
                        row.Home  = ((FixtureTeamBye)iFixture).TeamWithBye.TeamName;
                        row.Away  = "Bye";
                        byes.Add(row);
                    }
                }
            }
            foreach (FixtureDisplay byeRow in byes)
            {
                m_fixtureDisplay.Add(byeRow);
            }
            byes.Clear();

            foreach (FixtureDisplay row in m_fixtureDisplay)
            {
                System.Drawing.Color backgroundColour = System.Drawing.Color.White;
                if (row.Grade != null)
                {
                    if (row.Grade.Contains("6-8 Boys"))
                    {
                        backgroundColour = System.Drawing.Color.LightGreen;
                    }
                    else if (row.Grade.Contains("6-8 Girls"))
                    {
                        backgroundColour = System.Drawing.Color.LightYellow;
                    }
                    if (row.Grade.Contains("9-12 Boys"))
                    {
                        backgroundColour = System.Drawing.Color.Violet;
                    }
                    else if (row.Grade.Contains("9-12 Girls"))
                    {
                        backgroundColour = System.Drawing.Color.Turquoise;
                    }
                    else if (row.Grade.Contains("Men"))
                    {
                        backgroundColour = System.Drawing.Color.LightBlue;
                    }
                    else if (row.Grade.Contains("Women"))
                    {
                        backgroundColour = System.Drawing.Color.LightPink;
                    }
                }

                iExcelExporter.AddRow();
                iExcelExporter.AddText("", 1, false, false, false, HorizontalAlignment.Center, backgroundColour);
                iExcelExporter.AddText(row.Day, 1, false, false, false, HorizontalAlignment.Center, backgroundColour);
                iExcelExporter.AddText(row.Date, 1, false, false, false, HorizontalAlignment.Center, backgroundColour);
                iExcelExporter.AddText(row.Time, 1, false, false, false, HorizontalAlignment.Center, backgroundColour);
                iExcelExporter.AddText(row.Field, 1, false, false, false, HorizontalAlignment.Center, backgroundColour);
                iExcelExporter.AddText(row.Grade, 1, false, false, false, HorizontalAlignment.Center, backgroundColour);
                iExcelExporter.AddText(row.Home, 1, false, false, false, HorizontalAlignment.Center, backgroundColour);
                iExcelExporter.AddText(row.Away, 1, false, false, false, HorizontalAlignment.Center, backgroundColour);
                iExcelExporter.AddText(row.Umpiring, 1, false, false, false, HorizontalAlignment.Center, backgroundColour);
                iExcelExporter.AddText(row.TechBench, 1, false, false, false, HorizontalAlignment.Center, backgroundColour);
            }

            List <float> breakdownColumnWidths = new List <float>()
            {
                20, 12, 12, 12, 12, 12, 12, 12
            };

            iExcelExporter.AddWorkSheet("Breakdown", grade + " Breakdown", "", DateTime.Now.ToLongDateString(), true, breakdownColumnWidths);

            iExcelExporter.AddRow();

            foreach (string league in fieldBreakdown.Keys)
            {
                iExcelExporter.AddText(league, 1, true, false, false, HorizontalAlignment.Center);

                int column = 1;
                Dictionary <string, int> fields = new Dictionary <string, int>();
                foreach (string team in fieldBreakdown[league].Keys)
                {
                    foreach (string field in fieldBreakdown[league][team].Keys)
                    {
                        if (!fields.ContainsKey(field))
                        {
                            fields.Add(field, column);
                            column++;
                        }
                    }
                }

                foreach (string field in fields.Keys)
                {
                    iExcelExporter.AddText(field, 1, true, false, false, HorizontalAlignment.Center);
                }

                int row = 0;
                string[,] fieldGrid = new string[fieldBreakdown[league].Keys.Count, fields.Count + 1];

                foreach (string team in fieldBreakdown[league].Keys)
                {
                    fieldGrid[row, 0] = team;

                    foreach (string field in fieldBreakdown[league][team].Keys)
                    {
                        fieldGrid[row, fields[field]] = fieldBreakdown[league][team][field].ToString();
                    }
                    row++;
                }

                for (row = 0; row < fieldBreakdown[league].Keys.Count; row++)
                {
                    iExcelExporter.AddRow();
                    for (column = 0; column < fields.Count + 1; column++)
                    {
                        if (column == 0)
                        {
                            iExcelExporter.AddText(fieldGrid[row, column], 1, true, false, false, HorizontalAlignment.Right);
                        }
                        else
                        {
                            iExcelExporter.AddText(fieldGrid[row, column], 1, false, false, false, HorizontalAlignment.Center);
                        }
                    }
                }

                iExcelExporter.AddRow();
                iExcelExporter.AddRow();
            }

            iExcelExporter.AddRow();

            foreach (string league in fieldBreakdown.Keys)
            {
                iExcelExporter.AddText(league, 1, true, false, false, HorizontalAlignment.Center);

                List <GameTime> timeSlots = new List <GameTime>();

                foreach (string team in slotBreakdown[league].Keys)
                {
                    foreach (GameTime slot in slotBreakdown[league][team].Keys)
                    {
                        if (!timeSlots.Contains(slot))
                        {
                            timeSlots.Add(slot);
                        }
                    }
                }
                timeSlots.Sort();

                int column = 1;
                Dictionary <string, int> slots = new Dictionary <string, int>();

                //foreach (string team in slotBreakdown[league].Keys)
                {
                    foreach (GameTime slot in timeSlots)
                    {
                        string slotText = slot.ToString();
                        if (!slots.ContainsKey(slotText))
                        {
                            slots.Add(slotText, column);
                            column++;
                        }
                    }
                }

                foreach (string slot in slots.Keys)
                {
                    iExcelExporter.AddText(slot, 1, true, false, false, HorizontalAlignment.Center);
                }

                int row = 0;
                string[,] slotGrid = new string[slotBreakdown[league].Keys.Count, slots.Count + 1];

                foreach (string team in slotBreakdown[league].Keys)
                {
                    slotGrid[row, 0] = team;

                    foreach (GameTime slot in slotBreakdown[league][team].Keys)
                    {
                        string slotText = slot.ToString();
                        slotGrid[row, slots[slotText]] = slotBreakdown[league][team][slot].ToString();
                    }
                    row++;
                }

                for (row = 0; row < slotBreakdown[league].Keys.Count; row++)
                {
                    iExcelExporter.AddRow();
                    for (column = 0; column < slots.Count + 1; column++)
                    {
                        if (column == 0)
                        {
                            iExcelExporter.AddText(slotGrid[row, column], 1, true, false, false, HorizontalAlignment.Right);
                        }
                        else
                        {
                            iExcelExporter.AddText(slotGrid[row, column], 1, false, false, false, HorizontalAlignment.Center);
                        }
                    }
                }

                iExcelExporter.AddRow();
                iExcelExporter.AddRow();
            }

            iExcelExporter.Finish();
        }