public void SaveProject()
        {
            var project = ProjectFactory.Create();

            project.Should().NotBeNull();
            project.Sections.Should().NotBeNullOrEmpty();
            project.Factors.Should().NotBeNullOrEmpty();

            var estimate = project.Sections[0].Tasks[0];

            estimate.Simple = 1;
            estimate.Medium = 1;

            estimate        = project.Sections[0].Tasks[1];
            estimate.Simple = 1;

            ProjectCalculator.UpdateTotals(project);

            project.TotalTasks.Should().Be(3);
            project.TotalHours.Should().Be(16);
            project.TotalWeeks.Should().Be(0.53);


            var repo = new ProjectRepository();

            repo.Insert(project);
        }
        private void FillParentSections(DataSet ds, string id, ref StringBuilder sb, int indent)
        {
            DataRow[] dr1 = ds.Tables[1].Select(string.Format("[PARENT]='{0}'", id));
            if (dr1.Length > 0)
            {
                foreach (DataRow dr3 in dr1)
                {
                    sb.AppendFormat("<tr onclick=\"openSection({0})\" style=\"cursor:pointer;\">", dr3["ID"].ToString());
                    sb.AppendFormat("<td class=\"GridItemAltern\">{1}{0}</td>", dr3["TITLE"].ToString(), new String(' ', indent * 3).Replace(" ", "&nbsp;"));
                    string avquery = @"select progress,weight from project_timing right outer join project_section_members on (project_timing.idrif=project_section_members.id and project_timing.riftype=1)
where project_section_members.idsectionrif=" + dr3["ID"].ToString();

                    ProjectCalculator pc      = new ProjectCalculator();
                    string            average = pc.GetSectionProgress(DatabaseConnection.CreateDataset(avquery).Tables[0]).ToString();

                    sb.AppendFormat("<td class=\"GridItemAltern\">{0}</td>", string.Format("<span style=\"border:1px solid #000000;width:100%\"><span style=\"background-color:gold;width:{0}%;color:#000000;text-align:center\">{0}%</span></span>", average));
                    if (dr3["PLANNEDENDDATE"] != System.DBNull.Value)
                    {
                        sb.AppendFormat("<td class=\"GridItemAltern\">{0}</td>", UC.LTZ.ToLocalTime((DateTime)dr3["PLANNEDENDDATE"]).ToShortDateString());
                    }
                    else
                    {
                        sb.Append("<td class=\"GridItemAltern\">&nbsp;</td>");
                    }
                    sb.Append("</tr>");

                    FillParentSections(ds, dr3["ID"].ToString(), ref sb, ++indent);
                    indent--;
                }
            }
        }
        public void BindSections()
        {
            DataSet       ds = FillSectionList;
            StringBuilder sb = new StringBuilder();

            sb.Append("<table class=normal cellpadding=2 cellspacing=0 width=\"100%\"><tr>");
            sb.AppendFormat("<td class=\"GridTitle\" width=\"50%\">{0}</td>", "Titolo");
            sb.AppendFormat("<td class=\"GridTitle\" width=\"25%\">{0}</td>", "Avanzamento");
            sb.AppendFormat("<td class=\"GridTitle\" width=\"25%\">{0}</td>", "Data fine pianificata");
            sb.Append("</tr>");
            foreach (DataRow dr in ds.Tables[0].Rows)
            {
                sb.AppendFormat("<tr onclick=\"openSection({0})\" style=\"cursor:pointer;\">", dr["ID"].ToString());
                sb.AppendFormat("<td class=\"GridItem\">{0}</td>", dr["TITLE"].ToString());
                string avquery = @"select progress,weight from project_timing right outer join project_section_members on (project_timing.idrif=project_section_members.id and project_timing.riftype=1)
where project_section_members.idsectionrif=" + dr["ID"].ToString();

                ProjectCalculator pc      = new ProjectCalculator();
                string            average = pc.GetSectionProgress(DatabaseConnection.CreateDataset(avquery).Tables[0]).ToString();

                sb.AppendFormat("<td class=\"GridItem\">{0}</td>", string.Format("<span style=\"border:1px solid #000000;width:100%\"><span style=\"background-color:gold;width:{0}%;color:#000000;text-align:center\">{0}%</span></span>", average));
                if (dr["PLANNEDENDDATE"] != System.DBNull.Value)
                {
                    sb.AppendFormat("<td class=\"GridItem\">{0}</td>", UC.LTZ.ToLocalTime((DateTime)dr["PLANNEDENDDATE"]).ToShortDateString());
                }
                else
                {
                    sb.Append("<td class=\"GridItem\">&nbsp;</td>");
                }
                sb.Append("</tr>");
                FillParentSections(ds, dr["ID"].ToString(), ref sb, 1);
            }
            sb.Append("</table>");
            lblSection.Text = sb.ToString();

            MainTable.Visible    = true;
            SessionTable.Visible = false;
        }
Example #4
0
        public void UpdateTotals()
        {
            var project = ProjectFactory.Create();

            project.Should().NotBeNull();
            project.Sections.Should().NotBeNullOrEmpty();
            project.Factors.Should().NotBeNullOrEmpty();

            var estimate = project.Sections[0].Tasks[0];

            estimate.Simple = 1;
            estimate.Medium = 1;

            estimate        = project.Sections[0].Tasks[1];
            estimate.Simple = 1;

            ProjectCalculator.UpdateTotals(project);

            project.TotalTasks.Should().Be(3);
            project.TotalHours.Should().Be(16);
            project.TotalWeeks.Should().Be(0.53);

            project.ContingencyHours.Should().Be(18);
            project.ContingencyWeeks.Should().Be(0.6);

            var section = project.Sections.First();

            section.TotalTasks.Should().Be(3);
            section.TotalHours.Should().Be(16);
            section.TotalWeeks.Should().Be(0.53);


            var json = JsonConvert.SerializeObject(project, Formatting.Indented);

            Console.WriteLine(json);
        }
Example #5
0
        public Project GenerateProject(string organizationId)
        {
            if (organizationId == null)
            {
                throw new ArgumentNullException("organizationId");
            }

            var project = new Project
            {
                Id              = ObjectId.GenerateNewId().ToString(),
                Name            = "Sample Project",
                Description     = "Generated Sample Project",
                OrganizationId  = organizationId,
                HoursPerWeek    = 30,
                ContingencyRate = 10,
                Created         = DateTime.Now,
                Creator         = UserName.Current(),
                Updated         = DateTime.Now,
                Updater         = UserName.Current()
            };

            project.Assumptions.Add("Project Assumption");

            var presentationFactor = new Factor
            {
                Id          = ObjectId.GenerateNewId().ToString(),
                Name        = "Presentation Factor",
                VerySimple  = 2,
                Simple      = 4,
                Medium      = 8,
                Complex     = 16,
                VeryComplex = 32,
            };

            project.Factors.Add(presentationFactor);

            var backendFactor = new Factor
            {
                Id          = ObjectId.GenerateNewId().ToString(),
                Name        = "Back-End Logic Factor",
                VerySimple  = 2,
                Simple      = 4,
                Medium      = 8,
                Complex     = 16,
                VeryComplex = 32,
            };

            project.Factors.Add(backendFactor);

            var dataFactor = new Factor
            {
                Id          = ObjectId.GenerateNewId().ToString(),
                Name        = "Data Model Factor",
                VerySimple  = 1,
                Simple      = 2,
                Medium      = 4,
                Complex     = 8,
                VeryComplex = 16,
            };

            project.Factors.Add(dataFactor);

            var section = new Section
            {
                Id   = ObjectId.GenerateNewId().ToString(),
                Name = "Application Sample Section",
            };

            project.Sections.Add(section);

            var presentationEstimate = new Task
            {
                Id       = ObjectId.GenerateNewId().ToString(),
                Name     = "Presentation Task",
                FactorId = presentationFactor.Id,
                Medium   = 1,
                Simple   = 1
            };

            section.Tasks.Add(presentationEstimate);

            var backendEstimate = new Task
            {
                Id       = ObjectId.GenerateNewId().ToString(),
                Name     = "Back-End Logic Task",
                FactorId = backendFactor.Id,
                Complex  = 1,
                Simple   = 1
            };

            section.Tasks.Add(backendEstimate);

            ProjectCalculator.UpdateTotals(project);

            return(project);
        }
Example #6
0
        private int MakeGanttBar(ref DigiGantt.CoordsMaps rects, ref DigiGantt dg, int j, ref ArrayList arsections, ref ArrayList arsections2, ref ArrayList arsections3, ref ArrayList arsections4, ref ArrayList arsections5, DataRow dr, int padLeft, DataSet sections)
        {
            string avquery = @"SELECT PROGRESS,WEIGHT FROM PROJECT_TIMING RIGHT OUTER JOIN PROJECT_SECTION_MEMBERS ON (PROJECT_TIMING.IDRIF=PROJECT_SECTION_MEMBERS.ID AND PROJECT_TIMING.RIFTYPE=1)
WHERE PROJECT_SECTION_MEMBERS.IDSECTIONRIF=" + dr["ID"].ToString();

            ProjectCalculator pc = new ProjectCalculator();
            int average          = pc.GetSectionProgress(DatabaseConnection.CreateDataset(avquery).Tables[0]);

            arsections.Add("{S" + padLeft.ToString().PadLeft(2, '0') + "}" + dr["TITLE"].ToString());
            DateTime plannedstart = UC.LTZ.ToLocalTime((DateTime)dr["PLANNEDSTARTDATE"]);

            object variationstart = DatabaseConnection.SqlScalartoObj(String.Format(@"select top 1 newstartdate from PROJECT_TIMING_VARIATION
inner join PROJECT_TIMING on (PROJECT_TIMING_VARIATION.idtiming=PROJECT_TIMING.ID AND PROJECT_TIMING.RIFTYPE=0)
inner join PROJECT_SECTION on (PROJECT_TIMING.idrif = PROJECT_SECTION.id)
where PROJECT_SECTION.ID={0} AND PROJECT_TIMING_VARIATION.RIFTYPE=0
order by newstartdate desc", dr["ID"].ToString()));

            DateTime DrawStart = plannedstart;

            if (variationstart != null && variationstart != System.DBNull.Value)
            {
                arsections2.Add(UC.LTZ.ToLocalTime(Convert.ToDateTime(variationstart)).ToString(@"dd/MM/yy"));
                DrawStart = UC.LTZ.ToLocalTime(Convert.ToDateTime(variationstart));
            }
            else
            {
                arsections2.Add(plannedstart.ToString(@"dd/MM/yy"));
            }


            DateTime plannedend = UC.LTZ.ToLocalTime((DateTime)dr["PLANNEDENDDATE"]);

            object variationend  = DatabaseConnection.SqlScalartoObj(String.Format(@"select top 1 newplanneddate from PROJECT_TIMING_VARIATION
inner join PROJECT_TIMING on (PROJECT_TIMING_VARIATION.idtiming=PROJECT_TIMING.ID AND PROJECT_TIMING.RIFTYPE=1)
inner join PROJECT_SECTION_MEMBERS on PROJECT_TIMING.idrif=PROJECT_SECTION_MEMBERS.id
inner join PROJECT_SECTION on (PROJECT_SECTION_MEMBERS.IDSectionRif = PROJECT_SECTION.id)
where PROJECT_SECTION.ID={0} AND PROJECT_TIMING_VARIATION.RIFTYPE=1
order by newplanneddate desc", dr["ID"].ToString()));
            object variationend2 = DatabaseConnection.SqlScalartoObj(String.Format(@"select top 1 newplanneddate from PROJECT_TIMING_VARIATION
inner join PROJECT_TIMING on (PROJECT_TIMING_VARIATION.idtiming=PROJECT_TIMING.ID AND PROJECT_TIMING.RIFTYPE=0)
inner join PROJECT_SECTION on (PROJECT_TIMING.idrif = PROJECT_SECTION.id)
where PROJECT_SECTION.ID={0} AND PROJECT_TIMING_VARIATION.RIFTYPE=0
order by newplanneddate desc", dr["ID"].ToString()));



            DateTime DrawEnd = plannedend;

            if (variationend != null && variationend != System.DBNull.Value)
            {
                if ((variationend2 != null && variationend2 != System.DBNull.Value) && ((DateTime)variationend2) > ((DateTime)variationend))
                {
                    arsections3.Add(UC.LTZ.ToLocalTime(Convert.ToDateTime(variationend2)).ToString(@"dd/MM/yy"));
                    DrawEnd = UC.LTZ.ToLocalTime(Convert.ToDateTime(variationend2));
                }
                else
                {
                    arsections3.Add(UC.LTZ.ToLocalTime(Convert.ToDateTime(variationend)).ToString(@"dd/MM/yy"));
                    DrawEnd = UC.LTZ.ToLocalTime(Convert.ToDateTime(variationend));
                }
            }
            else
            if ((variationend2 != null && variationend2 != System.DBNull.Value))
            {
                arsections3.Add(UC.LTZ.ToLocalTime(Convert.ToDateTime(variationend2)).ToString(@"dd/MM/yy"));
                DrawEnd = UC.LTZ.ToLocalTime(Convert.ToDateTime(variationend2));
            }
            else
            {
                arsections3.Add(plannedend.ToString(@"dd/MM/yy"));
            }

            arsections4.Add(dr["PLANNEDMINUTEDURATION"].ToString());
            arsections5.Add(dr["OWNERNAME"].ToString());
            connectors.Add(dr["ID"].ToString() + '|' + j.ToString());

            if (dr["COLOR"] != System.DBNull.Value)
            {
                rects.Add(dg.DrawSection(DrawStart, DrawEnd, Color.FromName(dr["COLOR"].ToString()), j++, average, Convert.ToInt32(dr["ID"])));
            }
            else
            {
                rects.Add(dg.DrawSection(DrawStart, DrawEnd, Color.Gold, j++, average, Convert.ToInt32(dr["ID"])));
            }

            if (DrawEnd != plannedend || DrawStart != plannedstart)
            {
                rects.Add(dg.DrawGhost(plannedstart, plannedend, (j - 1), Color.FromName(dr["COLOR"].ToString()), 0));
            }

            if (DrawEnd != plannedend && (plannedend > DrawStart && plannedend < DrawEnd))
            {
                rects.Add(dg.DrawExpected(plannedend, Color.LightGreen, (j - 1), 0, "Variazione fine"));
            }

            if (DrawStart != plannedstart && (plannedstart > DrawStart && plannedstart < DrawEnd))
            {
                rects.Add(dg.DrawExpected(plannedstart.AddDays(-1), Color.LightSkyBlue, (j - 1), 0, "Variazione inizio"));
            }

            DataSet dsevents = DatabaseConnection.CreateDataset("SELECT * FROM PROJECT_EVENTS WHERE SECTIONID=" + dr["ID"].ToString());

            if (dsevents.Tables[0].Rows.Count > 0)
            {
                foreach (DataRow drevent in dsevents.Tables[0].Rows)
                {
                    arsections.Add("{E" + padLeft.ToString().PadLeft(2, '0') + "}" + drevent["DESCRIPTION"].ToString());
                    arsections2.Add((UC.LTZ.ToLocalTime((DateTime)drevent["EVENTDATE"])).ToString(@"dd/MM/yy"));
                    arsections3.Add(string.Empty);
                    arsections4.Add(string.Empty);
                    arsections5.Add(string.Empty);
                    rects.Add(dg.DrawPoint(UC.LTZ.ToLocalTime((DateTime)drevent["EVENTDATE"]), Color.Orange, j++, Convert.ToInt32(dr["ID"]), drevent["DESCRIPTION"].ToString()));
                }
            }

            SubSection(ref rects, ref dg, ref j, ref arsections, ref arsections2, ref arsections3, ref arsections4, ref arsections5, sections, ++padLeft, dr["ID"].ToString());
            return(j);
        }
Example #7
0
        private StringBuilder MakeForecast(StringBuilder sb, DataSet sections, DataRow dr, string sectiontitle)
        {
            string            avquery = @"SELECT PROGRESS,WEIGHT FROM PROJECT_TIMING RIGHT OUTER JOIN PROJECT_SECTION_MEMBERS ON (PROJECT_TIMING.IDRIF=PROJECT_SECTION_MEMBERS.ID AND PROJECT_TIMING.RIFTYPE=1)
WHERE PROJECT_SECTION_MEMBERS.IDSECTIONRIF=" + dr["ID"].ToString();
            ProjectCalculator pc      = new ProjectCalculator();
            string            average = pc.GetSectionProgress(DatabaseConnection.CreateDataset(avquery).Tables[0]).ToString();

            object variationstart = DatabaseConnection.SqlScalartoObj(String.Format(@"select top 1 newstartdate from PROJECT_TIMING_VARIATION
inner join PROJECT_TIMING on (PROJECT_TIMING_VARIATION.idtiming=PROJECT_TIMING.ID AND RIFTYPE=0)
inner join PROJECT_SECTION on (PROJECT_TIMING.idrif = PROJECT_SECTION.id)
where PROJECT_SECTION.ID={0}
order by newstartdate desc", dr["ID"].ToString()));

            DateTime DrawStart = (DateTime)dr["PLANNEDSTARTDATE"];

            if (variationstart != null && variationstart != System.DBNull.Value)
            {
                DrawStart = Convert.ToDateTime(variationstart);
            }


            object variationend  = DatabaseConnection.SqlScalartoObj(String.Format(@"select top 1 newplanneddate from PROJECT_TIMING_VARIATION
inner join PROJECT_TIMING on (PROJECT_TIMING_VARIATION.idtiming=PROJECT_TIMING.ID AND RIFTYPE=1)
inner join PROJECT_daylog on PROJECT_TIMING.idrif=PROJECT_daylog.id
inner join PROJECT_SECTION on (PROJECT_daylog.idrif = PROJECT_SECTION.id)
where PROJECT_SECTION.ID={0}
order by newplanneddate desc", dr["ID"].ToString()));
            object variationend2 = DatabaseConnection.SqlScalartoObj(String.Format(@"select top 1 newplanneddate from PROJECT_TIMING_VARIATION
inner join PROJECT_TIMING on (PROJECT_TIMING_VARIATION.idtiming=PROJECT_TIMING.ID AND RIFTYPE=0)
inner join PROJECT_SECTION on (PROJECT_TIMING.idrif = PROJECT_SECTION.id)
where PROJECT_SECTION.ID={0}
order by newplanneddate desc", dr["ID"].ToString()));

            DateTime DrawEnd = (DateTime)dr["PLANNEDENDDATE"];

            if (variationend != null && variationend != System.DBNull.Value)
            {
                if ((variationend2 != null && variationend2 != System.DBNull.Value) && ((DateTime)variationend2) > ((DateTime)variationend))
                {
                    DrawEnd = Convert.ToDateTime(variationend2);
                }
                else
                {
                    DrawEnd = Convert.ToDateTime(variationend);
                }
            }
            else
            if ((variationend2 != null && variationend2 != System.DBNull.Value))
            {
                DrawEnd = Convert.ToDateTime(variationend2);
            }



            string bgcolor = "gold";

            if (DrawEnd < DateTime.UtcNow && int.Parse(average) < 100)
            {
                bgcolor = "red";
            }
            if (DrawEnd > DateTime.UtcNow && int.Parse(average) < 100)
            {
                bgcolor = "#0df30d";
            }

            sb.AppendFormat("<tr><td width=\"40%\" style=\"border-bottom:1px solid black;\"><b>{1}{0}</b></td>", dr["TITLE"].ToString(), sectiontitle);
            if (dr["PLANNEDSTARTDATE"] != System.DBNull.Value)
            {
                sb.AppendFormat("<td width=\"10%\" style=\"border-bottom:1px solid black;\">{0}</td>", UC.LTZ.ToLocalTime(DrawStart).ToShortDateString());
            }
            else
            {
                sb.Append("<td width=\"10%\" style=\"border-bottom:1px solid black;\">Non definita</td>");
            }
            if (dr["PLANNEDENDDATE"] != System.DBNull.Value)
            {
                sb.AppendFormat("<td width=\"10%\" style=\"border-bottom:1px solid black;\">{0}</td>", UC.LTZ.ToLocalTime(DrawEnd).ToShortDateString());
            }
            else
            {
                sb.Append("<td width=\"10%\" style=\"border-bottom:1px solid black;\">Non definita</td>");
            }
            sb.AppendFormat("<td width=\"20%\" style=\"border-bottom:1px solid black;\">{0}</td>", DatabaseConnection.SqlScalar("SELECT ISNULL(ACCOUNT.NAME,'')+' '+ISNULL(ACCOUNT.SURNAME,'') FROM ACCOUNT WHERE UID=" + dr["MEMBERID"].ToString()));
            sb.AppendFormat("<td style=\"width:20%\" style=\"border-bottom:1px solid black;\"><div style=\"border:1px solid #000000;width:100%\"><div style=\"border-right:1px solid #000000;background-color:{1};width:{0}%;color:#000000;text-align:center\">{0}%</div></div></td>", average, bgcolor);

            DateTime fd = GetForecastDate(UC.LTZ.ToLocalTime(DrawStart), UC.LTZ.ToLocalTime(DrawEnd), int.Parse(average));

            if (average == "100")
            {
                fd = UC.LTZ.ToLocalTime(DrawEnd);
            }
            string fdstyle = "style=\"color:{0};border-bottom:1px solid black;\"";

            if (fd <= UC.LTZ.ToLocalTime(DrawEnd))
            {
                fdstyle = string.Format(fdstyle, "green");
            }
            else
            {
                fdstyle = string.Format(fdstyle, "red");
            }
            sb.AppendFormat("<td width=\"10%\" {1}>{0}</td></tr>", fd.ToShortDateString(), fdstyle);

            FillForecastSubSection(ref sb, sections, dr["ID"].ToString(), dr["TITLE"].ToString() + " --> ");
            return(sb);
        }
Example #8
0
        private StringBuilder MakeStructure(StringBuilder sb, DataSet sections, DataRow dr, string sectiontitle)
        {
            string            avquery = @"SELECT PROGRESS,WEIGHT FROM PROJECT_TIMING RIGHT OUTER JOIN PROJECT_SECTION_MEMBERS ON (PROJECT_TIMING.IDRIF=PROJECT_SECTION_MEMBERS.ID AND PROJECT_TIMING.RIFTYPE=1)
WHERE PROJECT_SECTION_MEMBERS.IDSECTIONRIF=" + dr["ID"].ToString();
            ProjectCalculator pc      = new ProjectCalculator();
            string            average = pc.GetSectionProgress(DatabaseConnection.CreateDataset(avquery).Tables[0]).ToString();


            sb.Append("<tr><td width=\"40%\" style=\"background-color:#ababab\"><b>Sezione</b></td><td style=\"background-color:#ababab\"><b>Inizio</b></td><td style=\"background-color:#ababab\"><b>Fine</b></td><td style=\"background-color:#ababab\"><b>Responsabile</b></td><td style=\"background-color:#ababab\"><b>Avanzamento</b></td></tr>");

            string bgcolor = "gold";

            if ((DateTime)dr["PLANNEDENDDATE"] < DateTime.UtcNow && int.Parse(average) < 100)
            {
                bgcolor = "red";
            }
            if ((DateTime)dr["PLANNEDENDDATE"] > DateTime.UtcNow && int.Parse(average) < 100)
            {
                bgcolor = "#0df30d";
            }

            sb.AppendFormat("<tr><td width=\"40%\"><b>{2}{0}</b><br>{1}</td>", dr["TITLE"].ToString(), dr["DESCRIPTION"].ToString().Replace("\n", "<br>"), sectiontitle);
            if (dr["PLANNEDSTARTDATE"] != System.DBNull.Value)
            {
                sb.AppendFormat("<td width=\"10%\">{0}</td>", UC.LTZ.ToLocalTime((DateTime)dr["PLANNEDSTARTDATE"]).ToShortDateString());
            }
            else
            {
                sb.Append("<td width=\"10%\">Non definita</td>");
            }
            if (dr["PLANNEDENDDATE"] != System.DBNull.Value)
            {
                sb.AppendFormat("<td width=\"10%\">{0}</td>", UC.LTZ.ToLocalTime((DateTime)dr["PLANNEDENDDATE"]).ToShortDateString());
            }
            else
            {
                sb.Append("<td width=\"10%\">Non definita</td>");
            }
            sb.AppendFormat("<td width=\"20%\">{0}</td>", DatabaseConnection.SqlScalar("SELECT ISNULL(ACCOUNT.NAME,'')+' '+ISNULL(ACCOUNT.SURNAME,'') FROM ACCOUNT WHERE UID=" + dr["MEMBERID"].ToString()));
            sb.AppendFormat("<td style=\"width:20%\"><div style=\"border:1px solid #000000;width:100%\"><div style=\"border-right:1px solid #000000;background-color:{1};width:{0}%;color:#000000;text-align:center\">{0}%</div></div></td></tr>", average, bgcolor);

            string  qtask  = string.Format(@"SELECT PROJECT_SECTION_MEMBERS.TODODESCRIPTION, PROJECT_SECTION_MEMBERS.MEMBERID, PROJECT_TIMING.PLANNEDSTARTDATE, PROJECT_TIMING.PLANNEDENDDATE, PROJECT_TIMING.PROGRESS
FROM PROJECT_SECTION_MEMBERS INNER JOIN PROJECT_TIMING ON (PROJECT_SECTION_MEMBERS.ID=PROJECT_TIMING.IDRIF AND RIFTYPE=1)
WHERE PROJECT_SECTION_MEMBERS.IDSECTIONRIF={0}", dr["ID"].ToString());
            DataSet dstask = DatabaseConnection.CreateDataset(qtask);

            if (dstask.Tables[0].Rows.Count > 0)
            {
                sb.AppendFormat("<tr><td colspan=5 align=left style=\"border-bottom:1px solid #000000;padding-bottom:5px;\">");
                sb.Append("<table width=\"100%\" border=\"0\" cellspacing=\"2\" cellpadding=\"0\" style=\"font-family : Verdana, Arial, Helvetica, sans-serif;font-size: 11px;\">");
                sb.Append("<tr><td width=\"40%\" style=\"background-color:#ababab\"><b>Task</b></td><td style=\"background-color:#ababab\"><b>Inizio</b></td><td style=\"background-color:#ababab\"><b>Fine</b></td><td style=\"background-color:#ababab\"><b>Responsabile</b></td><td style=\"background-color:#ababab\"><b>Avanzamento</b></td></tr>");

                foreach (DataRow drtask in dstask.Tables[0].Rows)
                {
                    bgcolor = "gold";
                    if ((DateTime)dr["PLANNEDENDDATE"] < DateTime.UtcNow && int.Parse(drtask["PROGRESS"].ToString()) < 100)
                    {
                        bgcolor = "red";
                    }
                    if ((DateTime)dr["PLANNEDENDDATE"] > DateTime.UtcNow && int.Parse(drtask["PROGRESS"].ToString()) < 100)
                    {
                        bgcolor = "#0df30d";
                    }

                    sb.AppendFormat("<tr><td width=\"40%\">{0}</td>", drtask["TODODESCRIPTION"].ToString().Replace("\r", "").Replace("\n", "<br>"));
                    if (drtask["PLANNEDSTARTDATE"] != System.DBNull.Value)
                    {
                        sb.AppendFormat("<td width=\"10%\">{0}</td>", UC.LTZ.ToLocalTime((DateTime)drtask["PLANNEDSTARTDATE"]).ToShortDateString());
                    }
                    else
                    {
                        sb.Append("<td width=\"10%\">Non definita</td>");
                    }
                    if (drtask["PLANNEDENDDATE"] != System.DBNull.Value)
                    {
                        sb.AppendFormat("<td width=\"10%\">{0}</td>", UC.LTZ.ToLocalTime((DateTime)drtask["PLANNEDENDDATE"]).ToShortDateString());
                    }
                    else
                    {
                        sb.Append("<td width=\"10%\">Non definita</td>");
                    }
                    sb.AppendFormat("<td width=\"20%\">{0}</td>", DatabaseConnection.SqlScalar("select isnull(account.name,'')+' '+isnull(account.surname,'') from account inner join project_members on (account.uid=project_members.userid and (project_members.type=0 or project_members.type=2)) where project_members.ID=" + drtask["MEMBERID"].ToString()));
                    sb.AppendFormat("<td style=\"border:1px solid #000000;width:20%\" align=left><div style=\"border-right:1px solid #000000;background-color:{1};width:{0}%;color:#000000;text-align:center\">{0}%</div></td>", drtask["PROGRESS"], bgcolor);
                }
                sb.Append("</table></td></tr>");
            }
            FillSubSection(ref sb, sections, dr["ID"].ToString(), dr["TITLE"].ToString() + " --> ");


            return(sb);
        }
        public void FillSection()
        {
            string  q  = @"SELECT     PROJECT_SECTION.TITLE, PROJECT_SECTION.DESCRIPTION, PROJECT_SECTION.PARENT, PROJECT_SECTION.MEMBERID, PROJECT_TIMING.STATUS,
                      PROJECT_TIMING.PLANNEDSTARTDATE, PROJECT_TIMING.REALSTARTDATE, PROJECT_TIMING.PLANNEDENDDATE, PROJECT_TIMING.REALENDDATE,
                      PROJECT_TIMING.PROGRESS, PROJECT_TIMING.PLANNEDMINUTEDURATION, PROJECT_TIMING.CURRENTMINUTEDURATION, PROJECT_TIMING.ID AS TIMINGID,
                      PROJECT_SECTION.ID,PROJECT_SECTION.COLOR, PROJECT_SECTION.COSTTYPE, PROJECT_SECTION.AMOUNT
                      FROM         PROJECT_SECTION LEFT OUTER JOIN
                      PROJECT_TIMING ON (PROJECT_SECTION.ID = PROJECT_TIMING.IDRIF AND PROJECT_TIMING.RIFTYPE = 0) WHERE PROJECT_SECTION.ID=" + SelectSession.Text;
            DataRow dr = DatabaseConnection.CreateDataset(q).Tables[0].Rows[0];

            SectionName.Text        = dr["TITLE"].ToString();
            SectionDescription.Text = dr["DESCRIPTION"].ToString();
            SectionOwnerID.Text     = dr["MEMBERID"].ToString();
            SectionOwner.Text       = DatabaseConnection.SqlScalar("SELECT ISNULL(NAME,'')+' '+ISNULL(SURNAME,'') FROM ACCOUNT WHERE UID=" + SectionOwnerID.Text);

            if (dr["PLANNEDSTARTDATE"] != System.DBNull.Value)
            {
                PlannedStartDate.Text = UC.LTZ.ToLocalTime((DateTime)dr["PLANNEDSTARTDATE"]).ToShortDateString();
            }
            if (dr["PLANNEDENDDATE"] != System.DBNull.Value)
            {
                PlannedEndDate.Text = UC.LTZ.ToLocalTime((DateTime)dr["PLANNEDENDDATE"]).ToShortDateString();
            }
            PlannedMinuteDuration.Text = dr["PLANNEDMINUTEDURATION"].ToString();

            if (dr["REALSTARTDATE"] != System.DBNull.Value)
            {
                RealStartDate.Text = UC.LTZ.ToLocalTime((DateTime)dr["REALSTARTDATE"]).ToShortDateString();
            }
            if (dr["REALENDDATE"] != System.DBNull.Value)
            {
                RealEndDate.Text = UC.LTZ.ToLocalTime((DateTime)dr["REALENDDATE"]).ToShortDateString();
            }

            FillSectionParent(SelectSession.Text);
            if (dr["PARENT"] != System.DBNull.Value)
            {
                foreach (ListItem li in SectionParent.Items)
                {
                    if (li.Value == dr["PARENT"].ToString())
                    {
                        li.Selected = true;
                        break;
                    }
                }
            }
            else
            {
                SectionParent.SelectedIndex = 0;
            }

            CostType.SelectedIndex = Convert.ToInt32((byte)dr["COSTTYPE"]);
            if (dr["Amount"] != System.DBNull.Value)
            {
                SectionAmount.Text = ((decimal)dr["Amount"]).ToString(UC.myDTFI);
            }

            LoadFilterColors();
            if (dr["COLOR"] != System.DBNull.Value)
            {
                for (int i = 0; i < FilterColor.Items.Count; i++)
                {
                    Trace.Warn(FilterColor.Items[i].Value, dr["COLOR"].ToString());
                    FilterColor.SelectedIndex = -1;
                    if (FilterColor.Items[i].Value == dr["COLOR"].ToString())
                    {
                        FilterColor.Items[i].Selected = true;
                        break;
                    }
                }
            }

            string avquery = @"SELECT PROGRESS,WEIGHT FROM PROJECT_TIMING RIGHT OUTER JOIN PROJECT_SECTION_MEMBERS ON (PROJECT_TIMING.IDRIF=PROJECT_SECTION_MEMBERS.ID AND PROJECT_TIMING.RIFTYPE=1)
WHERE PROJECT_SECTION_MEMBERS.IDSECTIONRIF=" + SelectSession.Text;

            ProjectCalculator pc      = new ProjectCalculator();
            string            average = pc.GetSectionProgress(DatabaseConnection.CreateDataset(avquery).Tables[0]).ToString();

            SectionProgress.Text = string.Format("<span style=\"border:1px solid #000000;width:100%\"><span style=\"background-color:gold;width:{0}%;color:#000000;text-align:center\">{0}%</span></span>", average);

            string  variation = string.Empty;
            DataRow drstart   = DatabaseConnection.CreateDataset(string.Format(@"SELECT (SELECT TOP 1 NEWSTARTDATE FROM PROJECT_TIMING_VARIATION
INNER JOIN PROJECT_TIMING ON (PROJECT_TIMING_VARIATION.IDTIMING=PROJECT_TIMING.ID AND PROJECT_TIMING.RIFTYPE=1)
inner join PROJECT_SECTION_MEMBERS on PROJECT_TIMING.idrif=PROJECT_SECTION_MEMBERS.id
inner join PROJECT_SECTION on (PROJECT_SECTION_MEMBERS.IDSectionRif = PROJECT_SECTION.id)
WHERE PROJECT_SECTION.ID={0} AND PROJECT_TIMING_VARIATION.RIFTYPE=1
ORDER BY NEWSTARTDATE ASC) AS VARIATION,
(SELECT TOP 1 NEWSTARTDATE FROM PROJECT_TIMING_VARIATION
INNER JOIN PROJECT_TIMING ON (PROJECT_TIMING_VARIATION.IDTIMING=PROJECT_TIMING.ID AND PROJECT_TIMING.RIFTYPE=0)
INNER JOIN PROJECT_SECTION ON (PROJECT_TIMING.IDRIF = PROJECT_SECTION.ID)
WHERE PROJECT_SECTION.ID={0} AND PROJECT_TIMING_VARIATION.RIFTYPE=0
ORDER BY NEWSTARTDATE ASC) AS GLOBALVARIATION
FROM PROJECT_SECTION
INNER JOIN PROJECT_TIMING ON (PROJECT_SECTION.ID=PROJECT_TIMING.IDRIF AND RIFTYPE=0)
WHERE PROJECT_SECTION.ID={0};", SelectSession.Text)).Tables[0].Rows[0];

            if (drstart[1] != System.DBNull.Value)
            {
                variation = "Data inizio: " + UC.LTZ.ToLocalTime((DateTime)drstart[1]).ToShortDateString() + "<br>";
            }
            else if (drstart[0] != System.DBNull.Value)
            {
                variation = "Data inizio: " + UC.LTZ.ToLocalTime((DateTime)drstart[0]).ToShortDateString() + "<br>";
            }

            DataRow drend = DatabaseConnection.CreateDataset(string.Format(@"SELECT (select top 1 newplanneddate from PROJECT_TIMING_VARIATION
inner join PROJECT_TIMING on (PROJECT_TIMING_VARIATION.idtiming=PROJECT_TIMING.ID AND PROJECT_TIMING.RIFTYPE=1)
inner join PROJECT_SECTION_MEMBERS on PROJECT_TIMING.idrif=PROJECT_SECTION_MEMBERS.id
inner join PROJECT_SECTION on (PROJECT_SECTION_MEMBERS.IDSectionRif = PROJECT_SECTION.id)
where PROJECT_SECTION.ID={0} AND PROJECT_TIMING_VARIATION.RIFTYPE=1
order by newplanneddate desc) as variation,
(select top 1 newplanneddate from PROJECT_TIMING_VARIATION
inner join PROJECT_TIMING on (PROJECT_TIMING_VARIATION.idtiming=PROJECT_TIMING.ID AND PROJECT_TIMING.RIFTYPE=0)
inner join PROJECT_SECTION on (PROJECT_Timing.idrif = PROJECT_SECTION.id)
where PROJECT_SECTION.ID={0} AND PROJECT_TIMING_VARIATION.RIFTYPE=0
order by newplanneddate desc) as globalvariation
FROM PROJECT_SECTION
 JOIN PROJECT_TIMING ON (PROJECT_SECTION.ID=PROJECT_TIMING.IDRIF AND RIFTYPE=0)
WHERE PROJECT_SECTION.ID={0};", SelectSession.Text)).Tables[0].Rows[0];

            if (drend[1] != System.DBNull.Value)
            {
                variation += "Data fine: " + UC.LTZ.ToLocalTime((DateTime)drend[1]).ToShortDateString() + "<br>";
            }
            else if (drend[0] != System.DBNull.Value)
            {
                variation += "Data fine: " + UC.LTZ.ToLocalTime((DateTime)drend[0]).ToShortDateString() + "<br>";
            }

            object varminute = DatabaseConnection.SqlScalartoObj(@"select sum(plannedminute) from PROJECT_TIMING_VARIATION
inner join PROJECT_TIMING on (PROJECT_TIMING_VARIATION.idtiming=PROJECT_TIMING.ID AND PROJECT_TIMING.RIFTYPE=1)
inner join PROJECT_SECTION_MEMBERS on PROJECT_TIMING.idrif=PROJECT_SECTION_MEMBERS.id
inner join PROJECT_SECTION on (PROJECT_SECTION_MEMBERS.IDSectionRif = PROJECT_SECTION.id)
where PROJECT_TIMING_VARIATION.RIFTYPE=1 AND PROJECT_SECTION.ID=" + SelectSession.Text);

            if (varminute != null && varminute != System.DBNull.Value)
            {
                variation += "Ore previste: " + (int.Parse(varminute.ToString()) + int.Parse(PlannedMinuteDuration.Text)).ToString();
            }

            if (variation.Length > 0)
            {
                LitVariation.Text    = variation;
                VariationRow.Visible = true;
            }

            MainTable.Visible      = false;
            SessionTable.Visible   = true;
            ProjectToDo1.prjID     = prjID;
            ProjectToDo1.sectionID = long.Parse(SelectSession.Text);
            ProjectToDo1.BindToDo();
            ProjectToDo1.FillToDo();
        }