void buildUserStoryCharts(int weeks)
        {
            ChartDatum[] opened  = new ChartDatum[weeks];
            ChartDatum[] started = new ChartDatum[weeks];
            ChartDatum[] closed  = new ChartDatum[weeks];
            for (int i = 0; i < weeks; ++i)
            {
                DateTime        ws      = start.AddDays(7 * i);
                DateTime        we      = ws.AddDays(6);
                string          st      = string.Format("Week of {0:MMM d} - {1:MMM d}", ws, we);
                string          color   = "Primary";
                SolidColorBrush fill    = App.Current.Resources[string.Format("Theme{0}ColorBrush", color)] as SolidColorBrush;
                SolidColorBrush stroke1 = App.Current.Resources[string.Format("Theme{0}LighterColorBrush", color)] as SolidColorBrush;
                ChartDatum      d       = new ChartDatum();
                d.title       = "Opened";
                d.subtitle    = st;
                d.week        = i;
                d.fill        = fill;
                d.stroke      = stroke1;
                d.strokeWidth = 1;
                opened[i]     = d;
                color         = "Secondary";
                fill          = App.Current.Resources[string.Format("Theme{0}ColorBrush", color)] as SolidColorBrush;
                stroke1       = App.Current.Resources[string.Format("Theme{0}LighterColorBrush", color)] as SolidColorBrush;
                d             = new ChartDatum();
                d.title       = "In Progress";
                d.subtitle    = st;
                d.week        = i;
                d.fill        = fill;
                d.stroke      = stroke1;
                d.strokeWidth = 1;
                started[i]    = d;
                color         = "Tertiary";
                fill          = App.Current.Resources[string.Format("Theme{0}ColorBrush", color)] as SolidColorBrush;
                stroke1       = App.Current.Resources[string.Format("Theme{0}LighterColorBrush", color)] as SolidColorBrush;
                d             = new ChartDatum();
                d.title       = "Closed";
                d.subtitle    = st;
                d.week        = i;
                d.fill        = fill;
                d.stroke      = stroke1;
                d.strokeWidth = 1;
                closed[i]     = d;
            }
            foreach (UserStory u in userStories)
            {
                ChartDatum      d       = opened[u.opened];
                string          color   = "Primary";
                SolidColorBrush stroke2 = App.Current.Resources[string.Format("Theme{0}DarkestColorBrush", color)] as SolidColorBrush;
                d.stroke      = stroke2;
                d.strokeWidth = 2;
                d.count       = d.count + 1;
                if (!string.IsNullOrWhiteSpace(d.details))
                {
                    d.details = d.details + "\r\n" + u.title;
                }
                else
                {
                    d.details = u.title;
                }
                if (u.started >= u.opened)
                {
                    d             = started[u.started];
                    color         = "Secondary";
                    stroke2       = App.Current.Resources[string.Format("Theme{0}DarkestColorBrush", color)] as SolidColorBrush;
                    d.stroke      = stroke2;
                    d.strokeWidth = 2;
                    d.count       = d.count + 1;
                    if (!string.IsNullOrWhiteSpace(d.details))
                    {
                        d.details = d.details + "\r\n" + u.title;
                    }
                    else
                    {
                        d.details = u.title;
                    }
                    if (u.closed >= u.started)
                    {
                        d             = closed[u.closed];
                        color         = "Tertiary";
                        stroke2       = App.Current.Resources[string.Format("Theme{0}DarkestColorBrush", color)] as SolidColorBrush;
                        d.stroke      = stroke2;
                        d.strokeWidth = 2;
                        d.count       = d.count + 1;
                        if (!string.IsNullOrWhiteSpace(d.details))
                        {
                            d.details = d.details + "\r\n" + u.title;
                        }
                        else
                        {
                            d.details = u.title;
                        }
                    }
                }
            }
            for (int i = 0; i < weeks; ++i)
            {
                ChartDatum d = opened[i];
                if (string.IsNullOrWhiteSpace(d.details))
                {
                    d.details = "No change this week";
                }
                d = started[i];
                if (string.IsNullOrWhiteSpace(d.details))
                {
                    d.details = "No change this week";
                }
                d = closed[i];
                if (string.IsNullOrWhiteSpace(d.details))
                {
                    d.details = "No change this week";
                }
            }
            for (int i = 1; i < weeks; ++i)
            {
                ChartDatum d = opened[i];
                ChartDatum c = opened[i - 1];
                ChartDatum b = started[i];
                d.count = d.count + c.count - b.count;
            }
            for (int i = 1; i < weeks; ++i)
            {
                ChartDatum d = started[i];
                ChartDatum c = started[i - 1];
                ChartDatum b = closed[i];
                d.count = d.count + c.count - b.count;
            }
            for (int i = 1; i < weeks; ++i)
            {
                ChartDatum d = closed[i];
                ChartDatum c = closed[i - 1];
                d.count = d.count + c.count;
            }
            LineSeries s = getLineSeries(formatLegend("Opened", opened[weeks - 1].count, opened[weeks - 2].count), App.Current.Resources[string.Format("Theme{0}ColorBrush", "Primary")] as SolidColorBrush);

            s.ItemsSource = opened;
            pipelineChart.Series.Add(s);
            s             = getLineSeries(formatLegend("In Progress", started[weeks - 1].count, started[weeks - 2].count), App.Current.Resources[string.Format("Theme{0}ColorBrush", "Secondary")] as SolidColorBrush);
            s.ItemsSource = started;
            pipelineChart.Series.Add(s);
            s             = getLineSeries(formatLegend("Closed", closed[weeks - 1].count, closed[weeks - 2].count), App.Current.Resources[string.Format("Theme{0}ColorBrush", "Tertiary")] as SolidColorBrush);
            s.ItemsSource = closed;
            pipelineChart.Series.Add(s);
        }
 void buildUserStoryCharts(int weeks)
 {
     ChartDatum[] opened = new ChartDatum[weeks];
     ChartDatum[] started = new ChartDatum[weeks];
     ChartDatum[] closed = new ChartDatum[weeks];
     for (int i = 0; i < weeks; ++i)
     {
         DateTime ws = start.AddDays(7 * i);
         DateTime we = ws.AddDays(6);
         string st = string.Format("Week of {0:MMM d} - {1:MMM d}", ws, we);
         string color = "Primary";
         SolidColorBrush fill = App.Current.Resources[string.Format("Theme{0}ColorBrush", color)] as SolidColorBrush;
         SolidColorBrush stroke1 = App.Current.Resources[string.Format("Theme{0}LighterColorBrush", color)] as SolidColorBrush;
         ChartDatum d = new ChartDatum();
         d.title = "Opened";
         d.subtitle = st;
         d.week = i;
         d.fill = fill;
         d.stroke = stroke1;
         d.strokeWidth = 1;
         opened[i] = d;
         color = "Secondary";
         fill = App.Current.Resources[string.Format("Theme{0}ColorBrush", color)] as SolidColorBrush;
         stroke1 = App.Current.Resources[string.Format("Theme{0}LighterColorBrush", color)] as SolidColorBrush;
         d = new ChartDatum();
         d.title = "In Progress";
         d.subtitle = st;
         d.week = i;
         d.fill = fill;
         d.stroke = stroke1;
         d.strokeWidth = 1;
         started[i] = d;
         color = "Tertiary";
         fill = App.Current.Resources[string.Format("Theme{0}ColorBrush", color)] as SolidColorBrush;
         stroke1 = App.Current.Resources[string.Format("Theme{0}LighterColorBrush", color)] as SolidColorBrush;
         d = new ChartDatum();
         d.title = "Closed";
         d.subtitle = st;
         d.week = i;
         d.fill = fill;
         d.stroke = stroke1;
         d.strokeWidth = 1;
         closed[i] = d;
     }
     foreach (UserStory u in userStories)
     {
         ChartDatum d = opened[u.opened];
         string color = "Primary";
         SolidColorBrush stroke2 = App.Current.Resources[string.Format("Theme{0}DarkestColorBrush", color)] as SolidColorBrush;
         d.stroke = stroke2;
         d.strokeWidth = 2;
         d.count = d.count + 1;
         if (!string.IsNullOrWhiteSpace(d.details)) { d.details = d.details + "\r\n" + u.title; } else { d.details = u.title; }
         if (u.started >= u.opened)
         {
             d = started[u.started];
             color = "Secondary";
             stroke2 = App.Current.Resources[string.Format("Theme{0}DarkestColorBrush", color)] as SolidColorBrush;
             d.stroke = stroke2;
             d.strokeWidth = 2;
             d.count = d.count + 1;
             if (!string.IsNullOrWhiteSpace(d.details)) { d.details = d.details + "\r\n" + u.title; } else { d.details = u.title; }
             if (u.closed >= u.started)
             {
                 d = closed[u.closed];
                 color = "Tertiary";
                 stroke2 = App.Current.Resources[string.Format("Theme{0}DarkestColorBrush", color)] as SolidColorBrush;
                 d.stroke = stroke2;
                 d.strokeWidth = 2;
                 d.count = d.count + 1;
                 if (!string.IsNullOrWhiteSpace(d.details)) { d.details = d.details + "\r\n" + u.title; } else { d.details = u.title; }
             }
         }
     }
     for (int i = 0; i < weeks; ++i)
     {
         ChartDatum d = opened[i];
         if (string.IsNullOrWhiteSpace(d.details)) { d.details = "No change this week"; }
         d = started[i];
         if (string.IsNullOrWhiteSpace(d.details)) { d.details = "No change this week"; }
         d = closed[i];
         if (string.IsNullOrWhiteSpace(d.details)) { d.details = "No change this week"; }
     }
     for (int i = 1; i < weeks; ++i)
     {
         ChartDatum d = opened[i];
         ChartDatum c = opened[i - 1];
         ChartDatum b = started[i];
         d.count = d.count + c.count - b.count;
     }
     for (int i = 1; i < weeks; ++i)
     {
         ChartDatum d = started[i];
         ChartDatum c = started[i - 1];
         ChartDatum b = closed[i];
         d.count = d.count + c.count - b.count;
     }
     for (int i = 1; i < weeks; ++i)
     {
         ChartDatum d = closed[i];
         ChartDatum c = closed[i - 1];
         d.count = d.count + c.count;
     }
     LineSeries s = getLineSeries(formatLegend("Opened", opened[weeks - 1].count, opened[weeks - 2].count),  App.Current.Resources[string.Format("Theme{0}ColorBrush", "Primary")] as SolidColorBrush);
     s.ItemsSource = opened;
     pipelineChart.Series.Add(s);
     s = getLineSeries(formatLegend("In Progress", started[weeks - 1].count, started[weeks - 2].count), App.Current.Resources[string.Format("Theme{0}ColorBrush", "Secondary")] as SolidColorBrush);
     s.ItemsSource = started;
     pipelineChart.Series.Add(s);
     s = getLineSeries(formatLegend("Closed", closed[weeks - 1].count, closed[weeks - 2].count), App.Current.Resources[string.Format("Theme{0}ColorBrush", "Tertiary")] as SolidColorBrush);
     s.ItemsSource = closed;
     pipelineChart.Series.Add(s);
 }
 public void summarize(DateTime start, int weeks, SolidColorBrush fill, SolidColorBrush stroke1, SolidColorBrush stroke2)
 {
     networkdata = new ChartDatum[weeks];
     idfdata     = new ChartDatum[weeks];
     for (int i = 0; i < weeks; ++i)
     {
         DateTime   ws = start.AddDays(7 * i);
         DateTime   we = ws.AddDays(6);
         string     st = string.Format("Week of {0:MMM d} - {1:MMM d}", ws, we);
         ChartDatum d  = new ChartDatum();
         d.title        = name;
         d.subtitle     = st;
         d.week         = i;
         d.fill         = fill;
         d.stroke       = stroke1;
         d.strokeWidth  = 1;
         networkdata[i] = d;
         d             = new ChartDatum();
         d.title       = name;
         d.subtitle    = st;
         d.week        = i;
         d.fill        = fill;
         d.stroke      = stroke1;
         d.strokeWidth = 1;
         idfdata[i]    = d;
     }
     foreach (Task t in networks)
     {
         ChartDatum d = networkdata[t.week];
         d.count = d.count + 1;
         if (!string.IsNullOrWhiteSpace(d.details))
         {
             d.details = d.details + "\r\n" + t.name;
         }
         else
         {
             d.details = t.name;
         }
         d.stroke      = stroke2;
         d.strokeWidth = 2;
     }
     foreach (Task t in idfs)
     {
         ChartDatum d = idfdata[t.week];
         d.count = d.count + 1;
         if (!string.IsNullOrWhiteSpace(d.details))
         {
             d.details = d.details + "\r\n" + t.name;
         }
         else
         {
             d.details = t.name;
         }
         d.stroke      = stroke2;
         d.strokeWidth = 2;
     }
     for (int i = 0; i < weeks; ++i)
     {
         ChartDatum d = networkdata[i];
         if (string.IsNullOrWhiteSpace(d.details))
         {
             d.details = "No change this week";
         }
         d = idfdata[i];
         if (string.IsNullOrWhiteSpace(d.details))
         {
             d.details = "No change this week";
         }
     }
     for (int i = 1; i < weeks; ++i)
     {
         ChartDatum d = networkdata[i];
         ChartDatum c = networkdata[i - 1];
         d.count = d.count + c.count;
         d       = idfdata[i];
         c       = idfdata[i - 1];
         d.count = d.count + c.count;
     }
 }
 public void summarize(DateTime start, int weeks, SolidColorBrush fill, SolidColorBrush stroke1, SolidColorBrush stroke2)
 {
     networkdata = new ChartDatum[weeks];
     idfdata = new ChartDatum[weeks];
     for (int i = 0; i < weeks; ++i)
     {
         DateTime ws = start.AddDays(7 * i);
         DateTime we = ws.AddDays(6);
         string st = string.Format("Week of {0:MMM d} - {1:MMM d}", ws, we);
         ChartDatum d = new ChartDatum();
         d.title = name;
         d.subtitle = st;
         d.week = i;
         d.fill = fill;
         d.stroke = stroke1;
         d.strokeWidth = 1;
         networkdata[i] = d;
         d = new ChartDatum();
         d.title = name;
         d.subtitle = st;
         d.week = i;
         d.fill = fill;
         d.stroke = stroke1;
         d.strokeWidth = 1;
         idfdata[i] = d;
     }
     foreach (Task t in networks)
     {
         ChartDatum d = networkdata[t.week];
         d.count = d.count + 1;
         if (!string.IsNullOrWhiteSpace(d.details)) { d.details = d.details + "\r\n" + t.name; } else { d.details = t.name; }
         d.stroke = stroke2;
         d.strokeWidth = 2;
     }
     foreach (Task t in idfs)
     {
         ChartDatum d = idfdata[t.week];
         d.count = d.count + 1;
         if (!string.IsNullOrWhiteSpace(d.details)) { d.details = d.details + "\r\n" + t.name; } else { d.details = t.name; }
         d.stroke = stroke2;
         d.strokeWidth = 2;
     }
     for (int i = 0; i < weeks; ++i)
     {
         ChartDatum d = networkdata[i];
         if (string.IsNullOrWhiteSpace(d.details)) { d.details = "No change this week"; }
         d = idfdata[i];
         if (string.IsNullOrWhiteSpace(d.details)) { d.details = "No change this week"; }
     }
     for (int i = 1; i < weeks; ++i)
     {
         ChartDatum d = networkdata[i];
         ChartDatum c = networkdata[i - 1];
         d.count = d.count + c.count;
         d = idfdata[i];
         c = idfdata[i - 1];
         d.count = d.count + c.count;
     }
 }